]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
For x86, add CPUID check.
authorJim Kukunas <james.t.kukunas@linux.intel.com>
Mon, 16 Sep 2013 18:40:18 +0000 (11:40 -0700)
committerJim Kukunas <james.t.kukunas@linux.intel.com>
Fri, 17 Jan 2014 21:12:46 +0000 (13:12 -0800)
Adds check for SSE2, SSE4.2, and the PCLMULQDQ instructions.

configure
x86.c [new file with mode: 0644]
x86.h [new file with mode: 0644]

index dfdde3ee2e1eec3c825c468b1bb8d52e8f96ec9d..8924d5dbcf54d0fd363141226d3b969ff951cd21 100755 (executable)
--- a/configure
+++ b/configure
@@ -763,15 +763,15 @@ fi
 # Set ARCH specific FLAGS
 case "${ARCH}" in
     x86_64)
-        OBJC="${OBJC}"
-        PIC_OBJC="${PIC_OBJC}"
+        OBJC="${OBJC} x86.o"
+        PIC_OBJC="${PIC_OBJC} x86.lo"
 
         CFLAGS="${CFLAGS} -DX86_64"
         SFLAGS="${SFLAGS} -DX86_64"
     ;;
     i386 | i486 | i586 | i686)
-        OBJC="${OBJC}"
-        PIC_OBJC="${PIC_OBJC}"
+        OBJC="${OBJC} x86.o"
+        PIC_OBJC="${PIC_OBJC} x86.lo"
 
         CFLAGS="${CFLAGS} -DX86"
         SFLAGS="${SFLAGS} -DX86"
diff --git a/x86.c b/x86.c
new file mode 100644 (file)
index 0000000..097d279
--- /dev/null
+++ b/x86.c
@@ -0,0 +1,38 @@
+/*
+ * x86 feature check
+ *
+ * Copyright (C) 2013 Intel Corporation. All rights reserved.
+ * Author:
+ *  Jim Kukunas
+ * 
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "x86.h"
+
+int x86_cpu_has_sse2;
+int x86_cpu_has_sse42;
+int x86_cpu_has_pclmulqdq;
+
+void x86_check_features(void)
+{
+    unsigned eax, ebx, ecx, edx;
+
+    eax = 1;
+    __asm__ __volatile__ (
+#ifdef X86
+        "xchg %%ebx, %1\n\t"
+#endif
+        "cpuid\n\t"
+#ifdef X86
+        "xchg %1, %%ebx\n\t"
+    : "+a" (eax), "=S" (ebx), "=c" (ecx), "=d" (edx)
+#else
+    : "+a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
+#endif
+    );
+
+    x86_cpu_has_sse2 = edx & 0x4000000;
+    x86_cpu_has_sse42= ecx & 0x100000;
+    x86_cpu_has_pclmulqdq = ecx & 0x2;
+}
diff --git a/x86.h b/x86.h
new file mode 100644 (file)
index 0000000..99f4499
--- /dev/null
+++ b/x86.h
@@ -0,0 +1,15 @@
+ /* cpu.h -- check for CPU features
+ * Copyright (C) 2013 Intel Corporation Jim Kukunas
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifndef CPU_H
+#define CPU_H
+
+extern int x86_cpu_has_sse2;
+extern int x86_cpu_has_sse42;
+extern int x86_cpu_has_pclmulqdq;
+
+void x86_check_features(void);
+
+#endif