47 uint32_t morton_code(uint32_t x, uint32_t y, uint32_t z) {
48 x = (
x | (
x << 16)) & 0x030000FF;
49 x = (
x | (
x << 8)) & 0x0300F00F;
50 x = (
x | (
x << 4)) & 0x030C30C3;
51 x = (
x | (
x << 2)) & 0x09249249;
53 y = (
y | (
y << 16)) & 0x030000FF;
54 y = (
y | (
y << 8)) & 0x0300F00F;
55 y = (
y | (
y << 4)) & 0x030C30C3;
56 y = (
y | (
y << 2)) & 0x09249249;
58 z = (z | (z << 16)) & 0x030000FF;
59 z = (z | (z << 8)) & 0x0300F00F;
60 z = (z | (z << 4)) & 0x030C30C3;
61 z = (z | (z << 2)) & 0x09249249;
63 return x | (
y << 1) | (z << 2);
67 uint64_t morton_code60(uint32_t x, uint32_t y, uint32_t z) {
75 return (
uint64_t(morton_code(hi_x, hi_y, hi_z)) << 30) |
76 uint64_t(morton_code(lo_x, lo_y, lo_z));