private uint xy2d(uint x, uint y)
{
x &= 0x0000ffff;
y &= 0x0000ffff;
x |= (x << 8);
y |= (y << 8);
x &= 0x00ff00ff;
y &= 0x00ff00ff;
x |= (x << 4);
y |= (y << 4);
x &= 0x0f0f0f0f;
y &= 0x0f0f0f0f;
x |= (x << 2);
y |= (y << 2);
x &= 0x33333333;
y &= 0x33333333;
x |= (x << 1);
y |= (y << 1);
x &= 0x55555555;
y &= 0x55555555;
return x | (y << 1);
}