17 #ifndef CS_LLVM_SUPPORT_MATHEXTRAS_H
18 #define CS_LLVM_SUPPORT_MATHEXTRAS_H
20 #if defined(_WIN32_WCE) && (_WIN32_WCE < 0x800)
22 #elif defined(_MSC_VER)
27 #if defined (WIN32) || defined (WIN64) || defined (_WIN32) || defined (_WIN64)
49 return x == (
x & (~0
ULL >> (64 -
N)));
99 #if !defined(__ppc__) && !defined(__ppc64__)
100 if (!
Value)
return 32;
105 if (!
Value)
return 32;
108 for (Shift = 32 >> 1; Shift; Shift >>= 1) {
136 #if !defined(__ppc__) && !defined(__ppc64__)
137 if (!
Value)
return 64;
143 if (
sizeof(
long) ==
sizeof(
int64_t))
145 if (!
Value)
return 64;
148 for (Shift = 64 >> 1; Shift; Shift >>= 1) {
194 static const unsigned Mod37BitPosition[] = {
195 32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13,
196 4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9,
202 return Mod37BitPosition[((1 + ~
Value) &
Value) % 37];
222 static const unsigned Mod67Position[] = {
223 64, 0, 1, 39, 2, 15, 40, 23, 3, 12, 16, 59, 41, 19, 24, 54,
224 4, 64, 13, 10, 17, 62, 60, 28, 42, 30, 20, 51, 25, 44, 55,
225 47, 5, 32, 65, 38, 14, 22, 11, 58, 18, 53, 63, 9, 61, 27,
226 29, 50, 43, 46, 31, 37, 21, 57, 52, 8, 26, 49, 45, 36, 56,
227 7, 48, 35, 6, 34, 33, 0
232 return Mod67Position[((1 + ~
Value) &
Value) % 67];
249 return __builtin_popcount(
Value);
252 v = (
v & 0x33333333) + ((
v >> 2) & 0x33333333);
253 return (((
v + (
v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
261 return __builtin_popcountll(
Value);
264 v = (
v & 0x3333333333333333
ULL) + ((
v >> 2) & 0x3333333333333333
ULL);
265 v = (
v + (
v >> 4)) & 0x0F0F0F0F0F0F0F0F
ULL;
363 return (
A | B) & (1 + ~(
A | B));
402 return (
x < 0) ? -
x :
x;
408 return (
int32_t)(
X << (32 - B)) >> (32 - B);
414 return (
int64_t)(
X << (64 - B)) >> (64 - B);
427 const unsigned bits =
sizeof(
x) * 8;