]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Added SSE4.2 inline assembly check for configure script.
authorNathan Moinvaziri <nathan@nathanm.com>
Thu, 9 Jul 2020 01:46:11 +0000 (18:46 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 10 Jul 2020 13:50:16 +0000 (15:50 +0200)
configure

index 5665e5d4b619f65266e5196763d410a80db5be33..61637e51685afb0256bb413f768bf89e7fc90b12 100755 (executable)
--- a/configure
+++ b/configure
@@ -940,6 +940,26 @@ else
     HAVE_SSSE3_INTRIN=0
 fi
 
+# Check for SSE4.2 CRC inline assembly
+case "${ARCH}" in
+    i386 | i486 | i586 | i686 | x86_64)
+        cat > $test.c << EOF
+int main(void) {
+    unsigned val = 0, h = 0;
+    __asm__ __volatile__ ( "crc32 %1,%0" : "+r" (h) : "r" (val) );
+    return (int) h;
+}
+EOF
+        if try ${CC} ${CFLAGS} ${sse42flag} $test.c; then
+            echo "Checking for SSE4.2 CRC inline assembly ... Yes." | tee -a configure.log
+            HAVE_SSE42CRC_INLINE_ASM=1
+        else
+            echo "Checking for SSE4.2 CRC inline assembly ... No." | tee -a configure.log
+            HAVE_SSE42CRC_INLINE_ASM=0
+        fi
+        ;;
+esac
+
 # Check for SSE4.2 CRC intrinsics
 case "${ARCH}" in
     i386 | i486 | i586 | i686 | x86_64)
@@ -1104,7 +1124,7 @@ case "${ARCH}" in
         CFLAGS="${CFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
         SFLAGS="${SFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
 
-        # Enable arch-specific optimizations?
+        # Enable arch-specific optimizations
         if test $without_optimizations -eq 0; then
             CFLAGS="${CFLAGS} -DX86_CPUID"
             SFLAGS="${SFLAGS} -DX86_CPUID"
@@ -1131,11 +1151,6 @@ case "${ARCH}" in
                 ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} adler32_ssse3.lo"
             fi
 
-            if test ${HAVE_SSE42CRC_INTRIN} -eq 1; then
-                CFLAGS="${CFLAGS} -DX86_SSE42_CRC_INTRIN"
-                SFLAGS="${SFLAGS} -DX86_SSE42_CRC_INTRIN"
-            fi
-
             if test ${HAVE_SSE42CMPSTR_INTRIN} -eq 1; then
                 CFLAGS="${CFLAGS} -DX86_SSE42_CMP_STR"
                 SFLAGS="${SFLAGS} -DX86_SSE42_CMP_STR"
@@ -1144,6 +1159,19 @@ case "${ARCH}" in
                 ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_sse.lo"
             fi
 
+            if test ${HAVE_SSE42CRC_INTRIN} -eq 1 || test ${HAVE_SSE42CRC_INLINE_ASM} -eq 1; then
+                CFLAGS="${CFLAGS} -DX86_SSE42_CRC_HASH"
+                SFLAGS="${SFLAGS} -DX86_SSE42_CRC_HASH"
+
+                if test ${HAVE_SSE42CRC_INTRIN} -eq 1; then
+                  CFLAGS="${CFLAGS} -DX86_SSE42_CRC_INTRIN"
+                  SFLAGS="${SFLAGS} -DX86_SSE42_CRC_INTRIN"
+                fi
+
+                ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} insert_string_sse.o"
+                ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} insert_string_sse.lo"
+            fi
+
             if test ${HAVE_AVX2_INTRIN} -eq 1; then
                 CFLAGS="${CFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
                 SFLAGS="${SFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
@@ -1151,11 +1179,6 @@ case "${ARCH}" in
                 ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_avx.lo slide_avx.lo adler32_avx.lo"
             fi
 
-            CFLAGS="${CFLAGS} -DX86_SSE42_CRC_HASH"
-            SFLAGS="${SFLAGS} -DX86_SSE42_CRC_HASH"
-            ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} insert_string_sse.o"
-            ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} insert_string_sse.lo"
-
             if test ${HAVE_PCLMULQDQ_INTRIN} -eq 1; then
                 CFLAGS="${CFLAGS} -DX86_PCLMULQDQ_CRC"
                 SFLAGS="${SFLAGS} -DX86_PCLMULQDQ_CRC"
@@ -1173,13 +1196,13 @@ case "${ARCH}" in
         CFLAGS="${CFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
         SFLAGS="${SFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
 
-        # Enable arch-specific optimizations?
+        # Enable arch-specific optimizations
         if test $without_optimizations -eq 0; then
-            CFLAGS="${CFLAGS} -DX86_CPUID -DX86_SSE2 -DX86_SSE2_CHUNKSET -DX86_SSE42_CRC_HASH"
-            SFLAGS="${SFLAGS} -DX86_CPUID -DX86_SSE2 -DX86_SSE2_CHUNKSET -DX86_SSE42_CRC_HASH"
+            CFLAGS="${CFLAGS} -DX86_CPUID -DX86_SSE2 -DX86_SSE2_CHUNKSET"
+            SFLAGS="${SFLAGS} -DX86_CPUID -DX86_SSE2 -DX86_SSE2_CHUNKSET"
 
-            ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} x86.o chunkset_sse.o insert_string_sse.o slide_sse.o"
-            ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} x86.lo chunkset_sse.lo insert_string_sse.lo slide_sse.lo"
+            ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} x86.o chunkset_sse.o slide_sse.o"
+            ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} x86.lo chunkset_sse.lo slide_sse.lo"
 
             if test ${HAVE_SSSE3_INTRIN} -eq 1; then
                 CFLAGS="${CFLAGS} -DX86_SSSE3 -DX86_SSSE3_ADLER32"
@@ -1214,6 +1237,20 @@ case "${ARCH}" in
                 ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} compare258_sse.o"
                 ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_sse.lo"
             fi
+
+            if test ${HAVE_SSE42CRC_INTRIN} -eq 1 || test ${HAVE_SSE42CRC_INLINE_ASM} -eq 1; then
+                CFLAGS="${CFLAGS} -DX86_SSE42_CRC_HASH"
+                SFLAGS="${SFLAGS} -DX86_SSE42_CRC_HASH"
+
+                if test ${HAVE_SSE42CRC_INTRIN} -eq 1; then
+                  CFLAGS="${CFLAGS} -DX86_SSE42_CRC_INTRIN"
+                  SFLAGS="${SFLAGS} -DX86_SSE42_CRC_INTRIN"
+                fi
+
+                ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} insert_string_sse.o"
+                ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} insert_string_sse.lo"
+            fi
+
         fi
     ;;