24 #ifndef COMMON_INTRINSICS_H 25 #define COMMON_INTRINSICS_H 27 #include "common/scummsys.h" 43 #ifndef FORBIDDEN_SYMBOL_EXCEPTION_setjmp 45 #define setjmp(a) FORBIDDEN_SYMBOL_REPLACEMENT 48 #ifndef FORBIDDEN_SYMBOL_EXCEPTION_longjmp 50 #define longjmp(a,b) FORBIDDEN_SYMBOL_REPLACEMENT 57 inline int intLog2(uint32 v) {
67 return (
sizeof(
unsigned int) * 8 - 1) - __builtin_clz(v);
69 #elif defined(_MSC_VER) 70 inline int intLog2(uint32 v) {
71 unsigned long result = 0;
72 unsigned char nonZero = _BitScanReverse(&result, v);
75 return nonZero ? result : -1;
79 static const char LogTable256[256] = {
80 #define LT(n) n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n 81 -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
82 LT(4), LT(5), LT(5), LT(6), LT(6), LT(6), LT(6),
83 LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7), LT(7)
87 inline int intLog2(uint32 v) {
91 return (t = tt >> 8) ? 24 + LogTable256[t] : 16 + LogTable256[tt];
93 return (t = v >> 8) ? 8 + LogTable256[t] : LogTable256[v];
99 #endif // COMMON_INTRINSICS_H Definition: algorithm.h:29