Merge pull request #4265 from pps83/static-bmi2-check

Check `STATIC_BMI2` instead of `STATIC_BMI2 == 1`
This commit is contained in:
Yann Collet
2025-01-31 14:39:20 -08:00
committed by GitHub
2 changed files with 93 additions and 96 deletions
+10 -13
View File
@@ -29,7 +29,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val)
{ {
assert(val != 0); assert(val != 0);
#if defined(_MSC_VER) #if defined(_MSC_VER)
# if STATIC_BMI2 == 1 # if STATIC_BMI2
return (unsigned)_tzcnt_u32(val); return (unsigned)_tzcnt_u32(val);
# else # else
if (val != 0) { if (val != 0) {
@@ -37,8 +37,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val)
_BitScanForward(&r, val); _BitScanForward(&r, val);
return (unsigned)r; return (unsigned)r;
} else { } else {
/* Should not reach this code path */ __assume(0); /* Should not reach this code path */
__assume(0);
} }
# endif # endif
#elif defined(__GNUC__) && (__GNUC__ >= 4) #elif defined(__GNUC__) && (__GNUC__ >= 4)
@@ -50,7 +49,8 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val)
#endif #endif
} }
MEM_STATIC unsigned ZSTD_countLeadingZeros32_fallback(U32 val) { MEM_STATIC unsigned ZSTD_countLeadingZeros32_fallback(U32 val)
{
assert(val != 0); assert(val != 0);
{ {
static const U32 DeBruijnClz[32] = {0, 9, 1, 10, 13, 21, 2, 29, static const U32 DeBruijnClz[32] = {0, 9, 1, 10, 13, 21, 2, 29,
@@ -70,7 +70,7 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros32(U32 val)
{ {
assert(val != 0); assert(val != 0);
#if defined(_MSC_VER) #if defined(_MSC_VER)
# if STATIC_BMI2 == 1 # if STATIC_BMI2
return (unsigned)_lzcnt_u32(val); return (unsigned)_lzcnt_u32(val);
# else # else
if (val != 0) { if (val != 0) {
@@ -78,8 +78,7 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros32(U32 val)
_BitScanReverse(&r, val); _BitScanReverse(&r, val);
return (unsigned)(31 - r); return (unsigned)(31 - r);
} else { } else {
/* Should not reach this code path */ __assume(0); /* Should not reach this code path */
__assume(0);
} }
# endif # endif
#elif defined(__GNUC__) && (__GNUC__ >= 4) #elif defined(__GNUC__) && (__GNUC__ >= 4)
@@ -95,7 +94,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros64(U64 val)
{ {
assert(val != 0); assert(val != 0);
#if defined(_MSC_VER) && defined(_WIN64) #if defined(_MSC_VER) && defined(_WIN64)
# if STATIC_BMI2 == 1 # if STATIC_BMI2
return (unsigned)_tzcnt_u64(val); return (unsigned)_tzcnt_u64(val);
# else # else
if (val != 0) { if (val != 0) {
@@ -103,8 +102,7 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros64(U64 val)
_BitScanForward64(&r, val); _BitScanForward64(&r, val);
return (unsigned)r; return (unsigned)r;
} else { } else {
/* Should not reach this code path */ __assume(0); /* Should not reach this code path */
__assume(0);
} }
# endif # endif
#elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(__LP64__) #elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(__LP64__)
@@ -128,7 +126,7 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros64(U64 val)
{ {
assert(val != 0); assert(val != 0);
#if defined(_MSC_VER) && defined(_WIN64) #if defined(_MSC_VER) && defined(_WIN64)
# if STATIC_BMI2 == 1 # if STATIC_BMI2
return (unsigned)_lzcnt_u64(val); return (unsigned)_lzcnt_u64(val);
# else # else
if (val != 0) { if (val != 0) {
@@ -136,8 +134,7 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros64(U64 val)
_BitScanReverse64(&r, val); _BitScanReverse64(&r, val);
return (unsigned)(63 - r); return (unsigned)(63 - r);
} else { } else {
/* Should not reach this code path */ __assume(0); /* Should not reach this code path */
__assume(0);
} }
# endif # endif
#elif defined(__GNUC__) && (__GNUC__ >= 4) #elif defined(__GNUC__) && (__GNUC__ >= 4)
+1 -1
View File
@@ -161,7 +161,7 @@ MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC,
FORCE_INLINE_TEMPLATE BitContainerType BIT_getLowerBits(BitContainerType bitContainer, U32 const nbBits) FORCE_INLINE_TEMPLATE BitContainerType BIT_getLowerBits(BitContainerType bitContainer, U32 const nbBits)
{ {
#if defined(STATIC_BMI2) && STATIC_BMI2 == 1 && !defined(ZSTD_NO_INTRINSICS) #if STATIC_BMI2 && !defined(ZSTD_NO_INTRINSICS)
# if (defined(__x86_64__) || defined(_M_X64)) && !defined(__ILP32__) # if (defined(__x86_64__) || defined(_M_X64)) && !defined(__ILP32__)
return _bzhi_u64(bitContainer, nbBits); return _bzhi_u64(bitContainer, nbBits);
# else # else