Merge pull request #4265 from pps83/static-bmi2-check
Check `STATIC_BMI2` instead of `STATIC_BMI2 == 1`
diff --git a/lib/common/bits.h b/lib/common/bits.h
index 992cc69..f452f08 100644
--- a/lib/common/bits.h
+++ b/lib/common/bits.h
@@ -28,29 +28,29 @@
MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val)
{
assert(val != 0);
-# if defined(_MSC_VER)
-# if STATIC_BMI2 == 1
- return (unsigned)_tzcnt_u32(val);
-# else
- if (val != 0) {
- unsigned long r;
- _BitScanForward(&r, val);
- return (unsigned)r;
- } else {
- /* Should not reach this code path */
- __assume(0);
- }
-# endif
-# elif defined(__GNUC__) && (__GNUC__ >= 4)
- return (unsigned)__builtin_ctz(val);
-# elif defined(__ICCARM__)
- return (unsigned)__builtin_ctz(val);
-# else
- return ZSTD_countTrailingZeros32_fallback(val);
-# endif
+#if defined(_MSC_VER)
+# if STATIC_BMI2
+ return (unsigned)_tzcnt_u32(val);
+# else
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward(&r, val);
+ return (unsigned)r;
+ } else {
+ __assume(0); /* Should not reach this code path */
+ }
+# endif
+#elif defined(__GNUC__) && (__GNUC__ >= 4)
+ return (unsigned)__builtin_ctz(val);
+#elif defined(__ICCARM__)
+ return (unsigned)__builtin_ctz(val);
+#else
+ return ZSTD_countTrailingZeros32_fallback(val);
+#endif
}
-MEM_STATIC unsigned ZSTD_countLeadingZeros32_fallback(U32 val) {
+MEM_STATIC unsigned ZSTD_countLeadingZeros32_fallback(U32 val)
+{
assert(val != 0);
{
static const U32 DeBruijnClz[32] = {0, 9, 1, 10, 13, 21, 2, 29,
@@ -69,92 +69,89 @@
MEM_STATIC unsigned ZSTD_countLeadingZeros32(U32 val)
{
assert(val != 0);
-# if defined(_MSC_VER)
-# if STATIC_BMI2 == 1
- return (unsigned)_lzcnt_u32(val);
-# else
- if (val != 0) {
- unsigned long r;
- _BitScanReverse(&r, val);
- return (unsigned)(31 - r);
- } else {
- /* Should not reach this code path */
- __assume(0);
- }
-# endif
-# elif defined(__GNUC__) && (__GNUC__ >= 4)
- return (unsigned)__builtin_clz(val);
-# elif defined(__ICCARM__)
- return (unsigned)__builtin_clz(val);
-# else
- return ZSTD_countLeadingZeros32_fallback(val);
-# endif
+#if defined(_MSC_VER)
+# if STATIC_BMI2
+ return (unsigned)_lzcnt_u32(val);
+# else
+ if (val != 0) {
+ unsigned long r;
+ _BitScanReverse(&r, val);
+ return (unsigned)(31 - r);
+ } else {
+ __assume(0); /* Should not reach this code path */
+ }
+# endif
+#elif defined(__GNUC__) && (__GNUC__ >= 4)
+ return (unsigned)__builtin_clz(val);
+#elif defined(__ICCARM__)
+ return (unsigned)__builtin_clz(val);
+#else
+ return ZSTD_countLeadingZeros32_fallback(val);
+#endif
}
MEM_STATIC unsigned ZSTD_countTrailingZeros64(U64 val)
{
assert(val != 0);
-# if defined(_MSC_VER) && defined(_WIN64)
-# if STATIC_BMI2 == 1
- return (unsigned)_tzcnt_u64(val);
-# else
- if (val != 0) {
- unsigned long r;
- _BitScanForward64(&r, val);
- return (unsigned)r;
- } else {
- /* Should not reach this code path */
- __assume(0);
- }
-# endif
-# elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(__LP64__)
- return (unsigned)__builtin_ctzll(val);
-# elif defined(__ICCARM__)
- return (unsigned)__builtin_ctzll(val);
-# else
- {
- U32 mostSignificantWord = (U32)(val >> 32);
- U32 leastSignificantWord = (U32)val;
- if (leastSignificantWord == 0) {
- return 32 + ZSTD_countTrailingZeros32(mostSignificantWord);
- } else {
- return ZSTD_countTrailingZeros32(leastSignificantWord);
- }
+#if defined(_MSC_VER) && defined(_WIN64)
+# if STATIC_BMI2
+ return (unsigned)_tzcnt_u64(val);
+# else
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward64(&r, val);
+ return (unsigned)r;
+ } else {
+ __assume(0); /* Should not reach this code path */
+ }
+# endif
+#elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(__LP64__)
+ return (unsigned)__builtin_ctzll(val);
+#elif defined(__ICCARM__)
+ return (unsigned)__builtin_ctzll(val);
+#else
+ {
+ U32 mostSignificantWord = (U32)(val >> 32);
+ U32 leastSignificantWord = (U32)val;
+ if (leastSignificantWord == 0) {
+ return 32 + ZSTD_countTrailingZeros32(mostSignificantWord);
+ } else {
+ return ZSTD_countTrailingZeros32(leastSignificantWord);
}
-# endif
+ }
+#endif
}
MEM_STATIC unsigned ZSTD_countLeadingZeros64(U64 val)
{
assert(val != 0);
-# if defined(_MSC_VER) && defined(_WIN64)
-# if STATIC_BMI2 == 1
- return (unsigned)_lzcnt_u64(val);
-# else
- if (val != 0) {
- unsigned long r;
- _BitScanReverse64(&r, val);
- return (unsigned)(63 - r);
- } else {
- /* Should not reach this code path */
- __assume(0);
- }
-# endif
-# elif defined(__GNUC__) && (__GNUC__ >= 4)
- return (unsigned)(__builtin_clzll(val));
-# elif defined(__ICCARM__)
- return (unsigned)(__builtin_clzll(val));
-# else
- {
- U32 mostSignificantWord = (U32)(val >> 32);
- U32 leastSignificantWord = (U32)val;
- if (mostSignificantWord == 0) {
- return 32 + ZSTD_countLeadingZeros32(leastSignificantWord);
- } else {
- return ZSTD_countLeadingZeros32(mostSignificantWord);
- }
+#if defined(_MSC_VER) && defined(_WIN64)
+# if STATIC_BMI2
+ return (unsigned)_lzcnt_u64(val);
+# else
+ if (val != 0) {
+ unsigned long r;
+ _BitScanReverse64(&r, val);
+ return (unsigned)(63 - r);
+ } else {
+ __assume(0); /* Should not reach this code path */
+ }
+# endif
+#elif defined(__GNUC__) && (__GNUC__ >= 4)
+ return (unsigned)(__builtin_clzll(val));
+#elif defined(__ICCARM__)
+ return (unsigned)(__builtin_clzll(val));
+#else
+ {
+ U32 mostSignificantWord = (U32)(val >> 32);
+ U32 leastSignificantWord = (U32)val;
+ if (mostSignificantWord == 0) {
+ return 32 + ZSTD_countLeadingZeros32(leastSignificantWord);
+ } else {
+ return ZSTD_countLeadingZeros32(mostSignificantWord);
}
-# endif
+ }
+#endif
}
MEM_STATIC unsigned ZSTD_NbCommonBytes(size_t val)
diff --git a/lib/common/bitstream.h b/lib/common/bitstream.h
index 2c42456..3b7ad48 100644
--- a/lib/common/bitstream.h
+++ b/lib/common/bitstream.h
@@ -161,7 +161,7 @@
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__)
return _bzhi_u64(bitContainer, nbBits);
# else