]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Use _bzhi_u32 for 32-bit builds when building with STATIC_BMI2
authorPavel P <pavlov.pavel@gmail.com>
Sat, 18 Jan 2025 19:32:30 +0000 (21:32 +0200)
committerPavel P <pavlov.pavel@gmail.com>
Sat, 18 Jan 2025 19:33:04 +0000 (21:33 +0200)
`_bzhi_u64` is available only for 64-bit builds, while `BIT_getLowerBits` expects `nbBits` to be less than `BIT_MASK_SIZE` (`BIT_MASK_SIZE` is 32)

lib/common/bitstream.h

index a1dac889d3a227b6a86e80c5e2035af57136b8ad..c9c645416f31080f0dc20bdd83d0386fdbf62caa 100644 (file)
@@ -162,7 +162,11 @@ MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC,
 FORCE_INLINE_TEMPLATE size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
 {
 #if defined(STATIC_BMI2) && STATIC_BMI2 == 1 && !defined(ZSTD_NO_INTRINSICS)
-    return  _bzhi_u64(bitContainer, nbBits);
+#if defined(__x86_64__) || defined(_M_X64)
+    return _bzhi_u64(bitContainer, nbBits);
+#else
+    return _bzhi_u32(bitContainer, nbBits);
+#endif
 #else
     assert(nbBits < BIT_MASK_SIZE);
     return bitContainer & BIT_mask[nbBits];