__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);
If anybody else want to know how this works:
https://stackoverflow.com/questions/30539347/2d-morton-code-...
https://en.wikipedia.org/wiki/Carry-less_product