]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Cleanup and rename bitreverse16 after ctz builtin refactoring
authorNathan Moinvaziri <nathan@nathanm.com>
Mon, 26 Jan 2026 08:35:21 +0000 (00:35 -0800)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 6 Feb 2026 13:52:54 +0000 (14:52 +0100)
deflate_p.h
fallback_builtins.h
inftrees.c

index 7b5d56019de8073a85d3af250fab2fe796c98905..f7aea7eec2c12dfc0933ce6872b746695b1f1520 100644 (file)
@@ -132,7 +132,7 @@ Z_FORCEINLINE static uint16_t bi_reverse(uint16_t code, int len) {
     /* code: the value to invert */
     /* len: its bit length */
     Assert(len >= 1 && len <= 15, "code length must be 1-15");
-    return __builtin_bitreverse16(code) >> (16 - len);
+    return zng_bitreverse16(code) >> (16 - len);
 }
 
 /* ===========================================================================
index 8ccd04e04684e73ee11c5bd8ef10c51af4a4d7d2..e83b9752a57d475c572804bc337ee0d6940ceaa9 100644 (file)
@@ -67,11 +67,11 @@ Z_FORCEINLINE static uint32_t zng_ctz64(uint64_t value) {
 #endif
 }
 
-#if !__has_builtin(__builtin_bitreverse16)
-
-#  if defined(ARCH_ARM) && defined(ARCH_64BIT) && !defined(_MSC_VER)
-/* ARM bit reversal for 16-bit values using rbit instruction */
-Z_FORCEINLINE static uint16_t __builtin_bitreverse16(uint16_t value) {
+Z_FORCEINLINE static uint16_t zng_bitreverse16(uint16_t value) {
+#if __has_builtin(__builtin_bitreverse16)
+    return (uint16_t)__builtin_bitreverse16(value);
+#elif defined(ARCH_ARM) && defined(ARCH_64BIT) && !defined(_MSC_VER)
+    /* ARM bit reversal for 16-bit values using rbit instruction */
     uint32_t res;
 #    if __has_builtin(__builtin_rbit)
     res = __builtin_rbit((uint32_t)value);
@@ -79,26 +79,19 @@ Z_FORCEINLINE static uint16_t __builtin_bitreverse16(uint16_t value) {
     __asm__ volatile("rbit %w0, %w1" : "=r"(res) : "r"((uint32_t)value));
 #    endif
     return (uint16_t)(res >> 16);
-}
-#  elif defined(ARCH_LOONGARCH)
-/* LoongArch bit reversal for 16-bit values */
-Z_FORCEINLINE static uint16_t __builtin_bitreverse16(uint16_t value) {
+#elif defined(ARCH_LOONGARCH)
+    /* LoongArch bit reversal for 16-bit values */
     uint32_t res;
     __asm__ volatile("bitrev.w %0, %1" : "=r"(res) : "r"(value));
     return (uint16_t)(res >> 16);
-}
-#  else
-/* Bit reversal for 8-bit values using multiplication method */
-#    define bitrev8(value) \
+#else
+    /* Bit reversal for 8-bit values using multiplication method */
+#  define bitrev8(value) \
     (uint8_t)((((uint8_t)(value) * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL >> 32)
-
-/* General purpose bit reversal for 16-bit values */
-Z_FORCEINLINE static uint16_t __builtin_bitreverse16(uint16_t value) {
+    /* General purpose bit reversal for 16-bit values */
     return ((bitrev8(value >> 8) | (uint16_t)bitrev8(value) << 8));
+#  undef bitrev8
+#endif
 }
-#    undef bitrev8
-#  endif
-
-#endif // __builtin_bitreverse16
 
 #endif // include guard FALLBACK_BUILTINS_H
index 5151ff45926f77ea35779434c781c1cb8cc9fca6..00f1421571ead278c545a94bf0d521ed42a743ca 100644 (file)
@@ -315,7 +315,7 @@ int Z_INTERNAL zng_inflate_table(codetype type, uint16_t *lens, unsigned codes,
 
         /* backwards increment the len-bit code huff */
         rhuff += (0x8000u >> (len - 1));
-        huff = __builtin_bitreverse16(rhuff);
+        huff = zng_bitreverse16(rhuff);
 
         /* go to next symbol, update count, len */
         sym++;