2 ms·
CPUs can do this quickly: __m128i src = _mm_set_epi32(0, 0, x, y); __m128i res = _mm_clmulepi64_si128(src, src, 0); uint64_t zeorder = _mm_extract_epi
by formerly_proven 5y ago
CPUs can do this quickly:
__m128i src = _mm_set_epi32(0, 0, x, y);
__m128i res = _mm_clmulepi64_si128(src, src, 0);
uint64_t zeorder = _mm_extract_epi32(res, 0) | (_mm_extract_epi32(res, 2) << 1);
Though a blocked iteration order should perform better due to better locality.
- j-pb 5y agoThanks for the pointer! If anybody else want to know how this works: https://stackoverflow.com/questions/30539347/2d-morton-code-encode-decode-64bits https://stackoverflow.com/questions/30539347/2d-morton-code-... https://en.wikipedia.org/wiki/Carry-less_product https://en.wikipedia.org/wiki/Carry-less_product