|
|
|
@ -986,17 +986,18 @@ static int ilog(int32 n) |
|
|
|
|
{ |
|
|
|
|
static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 }; |
|
|
|
|
|
|
|
|
|
if (n < 0) return 0; // signed n returns 0
|
|
|
|
|
|
|
|
|
|
// 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29)
|
|
|
|
|
if (n < (1 << 14)) |
|
|
|
|
if (n < (1 << 4)) return 0 + log2_4[n ]; |
|
|
|
|
else if (n < (1 << 9)) return 5 + log2_4[n >> 5]; |
|
|
|
|
if (n < (1 << 4)) return 0 + log2_4[n ]; |
|
|
|
|
else if (n < (1 << 9)) return 5 + log2_4[n >> 5]; |
|
|
|
|
else return 10 + log2_4[n >> 10]; |
|
|
|
|
else if (n < (1 << 24)) |
|
|
|
|
if (n < (1 << 19)) return 15 + log2_4[n >> 15]; |
|
|
|
|
if (n < (1 << 19)) return 15 + log2_4[n >> 15]; |
|
|
|
|
else return 20 + log2_4[n >> 20]; |
|
|
|
|
else if (n < (1 << 29)) return 25 + log2_4[n >> 25]; |
|
|
|
|
else if (n < (1 << 31)) return 30 + log2_4[n >> 30]; |
|
|
|
|
else return 0; // signed n returns 0
|
|
|
|
|
else if (n < (1 << 29)) return 25 + log2_4[n >> 25]; |
|
|
|
|
else return 30 + log2_4[n >> 30]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifndef M_PI |
|
|
|
|