]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Move Visual C++ workaround for CTZL to arch/x86. 84/head
authorMika Lindqvist <postmaster@raasu.org>
Sun, 30 Oct 2016 12:12:42 +0000 (14:12 +0200)
committerMika Lindqvist <postmaster@raasu.org>
Mon, 13 Feb 2017 11:18:47 +0000 (13:18 +0200)
arch/x86/ctzl.h [new file with mode: 0644]
match.c

diff --git a/arch/x86/ctzl.h b/arch/x86/ctzl.h
new file mode 100644 (file)
index 0000000..bc9e9bd
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef X86_CTZL_H
+#define X86_CTZL_H
+
+#include <intrin.h>
+#ifdef X86_CPUID
+# include "x86.h"
+#endif
+
+#if defined(_MSC_VER) && !defined(__clang__)
+/* This is not a general purpose replacement for __builtin_ctzl. The function expects that value is != 0
+ * Because of that assumption trailing_zero is not initialized and the return value of _BitScanForward is not checked
+ */
+static __forceinline unsigned long __builtin_ctzl(unsigned long value)
+{
+#ifdef X86_CPUID
+       if (x86_cpu_has_tzcnt)
+               return _tzcnt_u32(value);
+#endif
+       unsigned long trailing_zero;
+       _BitScanForward(&trailing_zero, value);
+       return trailing_zero;
+}
+#endif
+
+#endif
diff --git a/match.c b/match.c
index ce93132be5121d418b50916db263999aec9837e5..98310a329b5af6eebe6a15c332910142d5be4984 100644 (file)
--- a/match.c
+++ b/match.c
@@ -29,9 +29,8 @@
 
 
 #if defined(_MSC_VER) && !defined(__clang__)
-#include <intrin.h>
-# ifdef X86_CPUID
-#  include "arch/x86/x86.h"
+# if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
+#  include "arch/x86/ctzl.h"
 # endif
 #endif
 
@@ -277,23 +276,6 @@ ZLIB_INTERNAL unsigned longest_match(deflate_state *const s, IPos cur_match) {
 #endif
 
 #ifdef std3_longest_match
-
-#if defined(_MSC_VER) && !defined(__clang__)
-/* This is not a general purpose replacement for __builtin_ctzl. The function expects that value is != 0
- * Because of that assumption trailing_zero is not initialized and the return value of _BitScanForward is not checked
- */
-static __forceinline unsigned long __builtin_ctzl(unsigned long value)
-{
-#ifdef X86_CPUID
-       if (x86_cpu_has_tzcnt)
-               return _tzcnt_u32(value);
-#endif
-       unsigned long trailing_zero;
-       _BitScanForward(&trailing_zero, value);
-       return trailing_zero;
-}
-#endif
-
 /* longest_match() with minor change to improve performance (in terms of
  * execution time).
  *