core: add support for compiling bitops on 32-bit platforms

This commit is contained in:
2024-12-06 15:10:41 +00:00
parent b07b7a86c4
commit 87b42f299d

View File

@@ -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