|
|
|
@ -171,31 +171,31 @@ namespace _detail |
|
|
|
|
// Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt |
|
|
|
|
GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) |
|
|
|
|
{ |
|
|
|
|
int y, m, n; |
|
|
|
|
int y, m, n; |
|
|
|
|
|
|
|
|
|
y = -int(x >> 16); // If left half of x is 0, |
|
|
|
|
m = (y >> 16) & 16; // set n = 16. If left half |
|
|
|
|
n = 16 - m; // is nonzero, set n = 0 and |
|
|
|
|
x = x >> m; // shift x right 16. |
|
|
|
|
y = -int(x >> 16); // If left half of x is 0, |
|
|
|
|
m = (y >> 16) & 16; // set n = 16. If left half |
|
|
|
|
n = 16 - m; // is nonzero, set n = 0 and |
|
|
|
|
x = x >> m; // shift x right 16. |
|
|
|
|
// Now x is of the form 0000xxxx. |
|
|
|
|
y = x - 0x100; // If positions 8-15 are 0, |
|
|
|
|
m = (y >> 16) & 8; // add 8 to n and shift x left 8. |
|
|
|
|
n = n + m; |
|
|
|
|
x = x << m; |
|
|
|
|
|
|
|
|
|
y = x - 0x1000; // If positions 12-15 are 0, |
|
|
|
|
m = (y >> 16) & 4; // add 4 to n and shift x left 4. |
|
|
|
|
n = n + m; |
|
|
|
|
x = x << m; |
|
|
|
|
|
|
|
|
|
y = x - 0x4000; // If positions 14-15 are 0, |
|
|
|
|
m = (y >> 16) & 2; // add 2 to n and shift x left 2. |
|
|
|
|
n = n + m; |
|
|
|
|
x = x << m; |
|
|
|
|
|
|
|
|
|
y = x >> 14; // Set y = 0, 1, 2, or 3. |
|
|
|
|
m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. |
|
|
|
|
return unsigned(n + 2 - m); |
|
|
|
|
y = x - 0x100; // If positions 8-15 are 0, |
|
|
|
|
m = (y >> 16) & 8; // add 8 to n and shift x left 8. |
|
|
|
|
n = n + m; |
|
|
|
|
x = x << m; |
|
|
|
|
|
|
|
|
|
y = x - 0x1000; // If positions 12-15 are 0, |
|
|
|
|
m = (y >> 16) & 4; // add 4 to n and shift x left 4. |
|
|
|
|
n = n + m; |
|
|
|
|
x = x << m; |
|
|
|
|
|
|
|
|
|
y = x - 0x4000; // If positions 14-15 are 0, |
|
|
|
|
m = (y >> 16) & 2; // add 2 to n and shift x left 2. |
|
|
|
|
n = n + m; |
|
|
|
|
x = x << m; |
|
|
|
|
|
|
|
|
|
y = x >> 14; // Set y = 0, 1, 2, or 3. |
|
|
|
|
m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. |
|
|
|
|
return unsigned(n + 2 - m); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif//(GLM_COMPILER) |
|
|
|
|