]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Fix MinGW build
authorMika Lindqvist <postmaster@raasu.org>
Fri, 20 Jan 2023 21:37:36 +0000 (23:37 +0200)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Thu, 2 Feb 2023 16:34:12 +0000 (17:34 +0100)
* Add detection of XSAVE intrinsics

CMakeLists.txt
arch/x86/Makefile.in
cmake/detect-intrinsics.cmake
configure

index 4400fea584d8a67b2376caee57038a3555b1cac6..059017e16c4937554ec812d6b2c3b362f923afd8 100644 (file)
@@ -883,6 +883,11 @@ if(WITH_OPTIM)
             set(WITH_PCLMULQDQ OFF)
             set(WITH_VPCLMULQDQ OFF)
         endif()
+        check_xsave_intrinsics()
+        if(HAVE_XSAVE_INTRIN)
+            add_feature_info(XSAVE 1 "Support XSAVE intrinsics using \"${XSAVEFLAG}\"")
+            set_property(SOURCE ${ARCHDIR}/x86_features.c PROPERTY COMPILE_FLAGS "${XSAVEFLAG}")
+        endif()
     endif()
 endif()
 
index f9aedf82ba679c90f2c0dc395539b300cbf2214f..a3d5283b91b1b603d6d863420fe9695ea2dccaa8 100644 (file)
@@ -17,6 +17,7 @@ SSE41FLAG=-msse4.1
 SSE42FLAG=-msse4.2
 PCLMULFLAG=-mpclmul
 VPCLMULFLAG=-mvpclmulqdq
+XSAVEFLAG=-mxsave
 NOLTOFLAG=
 
 SRCDIR=.
@@ -42,10 +43,10 @@ all: \
        slide_hash_sse2.o slide_hash_sse2.lo
 
 x86_features.o:
-       $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c
+       $(CC) $(CFLAGS) $(XSAVEFLAG) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c
 
 x86_features.lo:
-       $(CC) $(SFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c
+       $(CC) $(SFLAGS) $(XSAVEFLAG) $(INCLUDES) -c -o $@ $(SRCDIR)/x86_features.c
 
 chunkset_avx.o:
        $(CC) $(CFLAGS) $(AVX2FLAG) $(NOLTOFLAG) $(INCLUDES) -c -o $@ $(SRCDIR)/chunkset_avx.c
index 92caf7abaf604aec1bde5d73b28f472b41263d19..3e932d83b2117904b44fde54a048667adfbed3a2 100644 (file)
@@ -536,3 +536,21 @@ macro(check_vgfma_intrinsics)
         HAVE_VGFMA_INTRIN FAIL_REGEX "not supported")
     set(CMAKE_REQUIRED_FLAGS)
 endmacro()
+
+macro(check_xsave_intrinsics)
+    if(NOT NATIVEFLAG AND NOT MSVC)
+        set(XSAVEFLAG "-mxsave")
+    endif()
+    set(CMAKE_REQUIRED_FLAGS "${XSAVEFLAG} ${NATIVEFLAG}")
+    check_c_source_compiles(
+        "#ifdef _WIN32
+         #  include <intrin.h>
+         #else
+         #  include <x86gprintrin.h>
+         #endif
+         int main(void) {
+             return _xgetbv(0);
+         }"
+        HAVE_XSAVE_INTRIN FAIL_REGEX "not supported")
+    set(CMAKE_REQUIRED_FLAGS)
+endmacro()
index 8dae722a697564ea29981cb0a9c6c1d4ebbc1f5d..53a3a08efc118bcbf95863c6d1285cb7b65c4c38 100755 (executable)
--- a/configure
+++ b/configure
@@ -115,6 +115,7 @@ sse41flag="-msse4.1"
 sse42flag="-msse4.2"
 pclmulflag="-mpclmul"
 vpclmulflag="-mvpclmulqdq -mavx512f"
+xsaveflag="-mxsave"
 acleflag=
 neonflag=
 noltoflag="-fno-lto"
@@ -268,6 +269,7 @@ if test $native -eq 1; then
   sse42flag=""
   pclmulflag=""
   vpclmulflag=""
+  xsaveflag=""
   noltoflag=""
 fi
 
@@ -1224,6 +1226,27 @@ EOF
     fi
 }
 
+check_xsave_intrinsics() {
+   # Check whether compiler supports XSAVE intrinsics
+   cat > $test.c << EOF
+#ifdef _WIN32
+#  include <intrin.h>
+#else
+#  include <x86gprintrin.h>
+#endif
+int main(void) {
+    return _xgetbv(0);
+}
+EOF
+    if try ${CC} ${CFLAGS} ${xsaveflag} $test.c; then
+        echo "Checking for XSAVE intrinsics ... Yes." | tee -a configure.log
+        HAVE_XSAVE_INTRIN=1
+    else
+        echo "Checking for XSAVE intrinsics ... No." | tee -a configure.log
+        HAVE_XSAVE_INTRIN=0
+    fi
+}
+
 check_ppc_intrinsics() {
         cat > $test.c << EOF
 #include <altivec.h>
@@ -1605,6 +1628,12 @@ case "${ARCH}" in
                 fi
             fi
 
+            check_xsave_intrinsics
+
+            if test ${HAVE_XSAVE_INTRIN} -eq 0; then
+                xsaveflag=""
+            fi
+
             if test $forcetzcnt -eq 1; then
                 CFLAGS="${CFLAGS} -DX86_NOCHECK_TZCNT"
                 SFLAGS="${SFLAGS} -DX86_NOCHECK_TZCNT"
@@ -2044,6 +2073,7 @@ echo sse41flag = $sse41flag >> configure.log
 echo sse42flag = $sse42flag >> configure.log
 echo pclmulflag = $pclmulflag >> configure.log
 echo vpclmulflag = $vpclmulflag >> configure.log
+echo xsaveflag = $xsaveflag >> configure.log
 echo acleflag = $acleflag >> configure.log
 echo neonflag = $neonflag >> configure.log
 echo ARCHDIR = ${ARCHDIR} >> configure.log
@@ -2181,6 +2211,7 @@ sed < $SRCDIR/$ARCHDIR/Makefile.in "
 /^SSE42FLAG *=/s#=.*#=$sse42flag#
 /^PCLMULFLAG *=/s#=.*#=$pclmulflag#
 /^VPCLMULFLAG *=/s#=.*#=$vpclmulflag#
+/^XSAVEFLAG *=/s#=.*#=$xsaveflag#
 /^ACLEFLAG *=/s#=.*#=$acleflag#
 /^NEONFLAG *=/s#=.*#=$neonflag#
 /^NOLTOFLAG *=/s#=.*#=$noltoflag#