core: add support for compiling bitops on 32-bit platforms
This commit is contained in:
@@ -23,7 +23,11 @@ int b_popcountl(long v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cpu_supports_popcnt == CPU_FEATURE_YES) {
|
if (cpu_supports_popcnt == CPU_FEATURE_YES) {
|
||||||
|
#if _M_AMD64 == 100
|
||||||
return __popcnt64(v);
|
return __popcnt64(v);
|
||||||
|
#else
|
||||||
|
return __popcnt(v);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(0 && "CPU does not support popcount!");
|
assert(0 && "CPU does not support popcount!");
|
||||||
@@ -34,7 +38,13 @@ int b_ctzl(long v)
|
|||||||
{
|
{
|
||||||
unsigned long trailing_zero = 0;
|
unsigned long trailing_zero = 0;
|
||||||
|
|
||||||
if (_BitScanForward64(&trailing_zero, v)) {
|
#if _M_AMD64 == 100
|
||||||
|
int x = _BitScanForward64(&trailing_zero, v);
|
||||||
|
#else
|
||||||
|
int x = _BitScanForward(&trailing_zero, v);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (x) {
|
||||||
return trailing_zero;
|
return trailing_zero;
|
||||||
} else {
|
} else {
|
||||||
return 64;
|
return 64;
|
||||||
@@ -45,7 +55,13 @@ int b_clzl(long v)
|
|||||||
{
|
{
|
||||||
unsigned long leading_zero = 0;
|
unsigned long leading_zero = 0;
|
||||||
|
|
||||||
if (_BitScanReverse64(&leading_zero, v)) {
|
#if _M_AMD64 == 100
|
||||||
|
int x = _BitScanReverse64(&leading_zero, v);
|
||||||
|
#else
|
||||||
|
int x = _BitScanReverse(&leading_zero, v);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (x) {
|
||||||
return 64 - leading_zero;
|
return 64 - leading_zero;
|
||||||
} else {
|
} else {
|
||||||
// Same remarks as above
|
// Same remarks as above
|
||||||
|
|||||||
Reference in New Issue
Block a user