Changeset View
Changeset View
Standalone View
Standalone View
contrib/zstd/lib/dictBuilder/zdict.c
Show First 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | |||||
# endif | # endif | ||||
} | } | ||||
} else { /* Big Endian CPU */ | } else { /* Big Endian CPU */ | ||||
if (MEM_64bits()) { | if (MEM_64bits()) { | ||||
# if defined(_MSC_VER) && defined(_WIN64) | # if defined(_MSC_VER) && defined(_WIN64) | ||||
unsigned long r = 0; | unsigned long r = 0; | ||||
_BitScanReverse64( &r, val ); | _BitScanReverse64( &r, val ); | ||||
return (unsigned)(r>>3); | return (unsigned)(r>>3); | ||||
# elif defined(__GNUC__) && (__GNUC__ >= 3) | # elif defined(__GNUC__) && (__GNUC__ >= 3) && __has_builtin(__builtin_clzll) | ||||
return (__builtin_clzll(val) >> 3); | return (__builtin_clzll(val) >> 3); | ||||
# else | # else | ||||
unsigned r; | unsigned r; | ||||
const unsigned n32 = sizeof(size_t)*4; /* calculate this way due to compiler complaining in 32-bits mode */ | const unsigned n32 = sizeof(size_t)*4; /* calculate this way due to compiler complaining in 32-bits mode */ | ||||
if (!(val>>n32)) { r=4; } else { r=0; val>>=n32; } | if (!(val>>n32)) { r=4; } else { r=0; val>>=n32; } | ||||
if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } | if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } | ||||
r += (!val); | r += (!val); | ||||
return r; | return r; | ||||
# endif | # endif | ||||
} else { /* 32 bits */ | } else { /* 32 bits */ | ||||
# if defined(_MSC_VER) | # if defined(_MSC_VER) | ||||
unsigned long r = 0; | unsigned long r = 0; | ||||
_BitScanReverse( &r, (unsigned long)val ); | _BitScanReverse( &r, (unsigned long)val ); | ||||
return (unsigned)(r>>3); | return (unsigned)(r>>3); | ||||
# elif defined(__GNUC__) && (__GNUC__ >= 3) | # elif defined(__GNUC__) && (__GNUC__ >= 3) && __has_builtin(__builtin_clz) | ||||
return (__builtin_clz((U32)val) >> 3); | return (__builtin_clz((U32)val) >> 3); | ||||
# else | # else | ||||
unsigned r; | unsigned r; | ||||
if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; } | if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; } | ||||
r += (!val); | r += (!val); | ||||
return r; | return r; | ||||
# endif | # endif | ||||
} } | } } | ||||
▲ Show 20 Lines • Show All 912 Lines • Show Last 20 Lines |