From cd56fb32c207b39b9470d66d7c61f68d9f0c7e78 Mon Sep 17 00:00:00 2001 From: lax1dude Date: Fri, 9 Aug 2024 19:07:38 +1000 Subject: [PATCH] #3722: Disable GZIP in native compress library (no longer requires PCLMUL) --- native/compile-native.sh | 2 +- native/src/main/c/cpuid_helper.h | 9 +++------ native/src/main/resources/native-compress.so | Bin 117408 -> 113312 bytes 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/native/compile-native.sh b/native/compile-native.sh index b5c011d8..a47bc812 100755 --- a/native/compile-native.sh +++ b/native/compile-native.sh @@ -8,7 +8,7 @@ echo "Compiling mbedtls" (cd mbedtls && CFLAGS="-fPIC -I$CWD/src/main/c -DMBEDTLS_USER_CONFIG_FILE=''" make no_test) echo "Compiling zlib" -(cd zlib && CFLAGS=-fPIC ./configure --static && make) +(cd zlib && CFLAGS="-fPIC -DNO_GZIP" ./configure --static && make) CC="gcc" CFLAGS="-c -fPIC -O3 -Wall -Werror -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/" diff --git a/native/src/main/c/cpuid_helper.h b/native/src/main/c/cpuid_helper.h index 2394ecd6..f44c8c72 100644 --- a/native/src/main/c/cpuid_helper.h +++ b/native/src/main/c/cpuid_helper.h @@ -1,4 +1,4 @@ -// Header to check for SSE 4.2 support in compression natives +// Header to check for SSE 2, SSSE 3, and SSE 4.2 support in compression natives // GCC only! #ifndef _INCLUDE_CPUID_HELPER_H @@ -8,12 +8,9 @@ #include static inline bool checkCompressionNativesSupport() { - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; + unsigned int eax, ebx, ecx, edx; if(__get_cpuid(1, &eax, &ebx, &ecx, &edx)) { - return (ecx & bit_PCLMUL) != 0 && (ecx & bit_SSE4_2) != 0; + return (edx & bit_SSE2) != 0 && (ecx & bit_SSSE3) != 0 && (ecx & bit_SSE4_2) != 0; }else { return false; } diff --git a/native/src/main/resources/native-compress.so b/native/src/main/resources/native-compress.so index 181396f1d8460a48af05e7a3605811b5633e5f60..968bb06d6f0a62f97b5938dffe12f19b30e27b73 100755 GIT binary patch delta 19594 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