diff --git a/deps/zlib/BUILD.gn b/deps/zlib/BUILD.gn index eff72b22a29..61b3eb38c8a 100644 --- a/deps/zlib/BUILD.gn +++ b/deps/zlib/BUILD.gn @@ -98,10 +98,6 @@ source_set("zlib_adler32_simd") { "adler32_simd.c", "adler32_simd.h", ] - - if (!is_win || is_clang) { - cflags = [ "-mssse3" ] - } } if (use_arm_neon_optimizations) { @@ -234,13 +230,6 @@ source_set("zlib_crc32_simd") { "crc32_simd.h", "crc_folding.c", ] - - if (!is_win || is_clang) { - cflags = [ - "-msse4.2", - "-mpclmul", - ] - } } configs += [ ":zlib_internal_config" ] diff --git a/deps/zlib/CMakeLists.txt b/deps/zlib/CMakeLists.txt index b569804ace0..e87d982f725 100644 --- a/deps/zlib/CMakeLists.txt +++ b/deps/zlib/CMakeLists.txt @@ -101,9 +101,6 @@ if (ENABLE_SIMD_OPTIMIZATIONS) add_definitions(-DCRC32_SIMD_SSE42_PCLMUL) if (ENABLE_SIMD_AVX512) add_definitions(-DCRC32_SIMD_AVX512_PCLMUL) - add_compile_options(-mvpclmulqdq -msse2 -mavx512f -mpclmul) - else() - add_compile_options(-msse4.2 -mpclmul) endif() add_definitions(-DDEFLATE_SLIDE_HASH_SSE2) # Required by CPU features detection code. diff --git a/deps/zlib/adler32_simd.c b/deps/zlib/adler32_simd.c index 08c21d3e953..ce4ce7c5755 100644 --- a/deps/zlib/adler32_simd.c +++ b/deps/zlib/adler32_simd.c @@ -53,7 +53,7 @@ #include -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) __attribute__((__target__("ssse3"))) #endif uint32_t ZLIB_INTERNAL adler32_simd_( /* SSSE3 */ diff --git a/deps/zlib/cpu_features.c b/deps/zlib/cpu_features.c index 34ae7b913af..6613a65e335 100644 --- a/deps/zlib/cpu_features.c +++ b/deps/zlib/cpu_features.c @@ -160,6 +160,11 @@ static void _cpu_check_features(void) #include #include #endif +/* _xgetbv() below needs the xsave ISA. Annotate it here so the build does not + * need -mxsave. */ +#if defined(CRC32_SIMD_AVX512_PCLMUL) && (defined(__GNUC__) || defined(__clang__)) +__attribute__((__target__("xsave"))) +#endif static void _cpu_check_features(void) { int x86_cpu_has_sse2; diff --git a/deps/zlib/crc32_simd.c b/deps/zlib/crc32_simd.c index 1c60ae9bd3c..20204e322eb 100644 --- a/deps/zlib/crc32_simd.c +++ b/deps/zlib/crc32_simd.c @@ -21,6 +21,9 @@ #include #include +#if defined(__GNUC__) || defined(__clang__) +__attribute__((__target__("avx512f,avx512vl,vpclmulqdq"))) +#endif uint32_t ZLIB_INTERNAL crc32_avx512_simd_( /* AVX512+PCLMUL */ const unsigned char *buf, z_size_t len, @@ -212,6 +215,9 @@ uint32_t ZLIB_INTERNAL crc32_avx512_simd_( /* AVX512+PCLMUL */ #include #include +#if defined(__GNUC__) || defined(__clang__) +__attribute__((__target__("sse4.2,pclmul"))) +#endif uint32_t ZLIB_INTERNAL crc32_sse42_simd_( /* SSE4.2+PCLMUL */ const unsigned char *buf, z_size_t len, diff --git a/deps/zlib/crc_folding.c b/deps/zlib/crc_folding.c index 1d54ee8d48c..3e31ae4a7e4 100644 --- a/deps/zlib/crc_folding.c +++ b/deps/zlib/crc_folding.c @@ -25,6 +25,12 @@ #include #include +#if defined(__GNUC__) || defined(__clang__) +#define TARGET_SSE42_PCLMUL __attribute__((__target__("sse4.2,pclmul"))) +#else +#define TARGET_SSE42_PCLMUL +#endif + #define CRC_LOAD(s) \ do { \ __m128i xmm_crc0 = _mm_loadu_si128((__m128i *)s->crc0 + 0);\ @@ -41,6 +47,7 @@ _mm_storeu_si128((__m128i *)s->crc0 + 4, xmm_crc_part);\ } while (0); +TARGET_SSE42_PCLMUL ZLIB_INTERNAL void crc_fold_init(deflate_state *const s) { CRC_LOAD(s) @@ -55,6 +62,7 @@ ZLIB_INTERNAL void crc_fold_init(deflate_state *const s) s->strm->adler = 0; } +TARGET_SSE42_PCLMUL local void fold_1(deflate_state *const s, __m128i *xmm_crc0, __m128i *xmm_crc1, __m128i *xmm_crc2, __m128i *xmm_crc3) @@ -81,6 +89,7 @@ local void fold_1(deflate_state *const s, *xmm_crc3 = _mm_castps_si128(ps_res); } +TARGET_SSE42_PCLMUL local void fold_2(deflate_state *const s, __m128i *xmm_crc0, __m128i *xmm_crc1, __m128i *xmm_crc2, __m128i *xmm_crc3) @@ -115,6 +124,7 @@ local void fold_2(deflate_state *const s, *xmm_crc3 = _mm_castps_si128(ps_res31); } +TARGET_SSE42_PCLMUL local void fold_3(deflate_state *const s, __m128i *xmm_crc0, __m128i *xmm_crc1, __m128i *xmm_crc2, __m128i *xmm_crc3) @@ -155,6 +165,7 @@ local void fold_3(deflate_state *const s, *xmm_crc3 = _mm_castps_si128(ps_res32); } +TARGET_SSE42_PCLMUL local void fold_4(deflate_state *const s, __m128i *xmm_crc0, __m128i *xmm_crc1, __m128i *xmm_crc2, __m128i *xmm_crc3) @@ -221,6 +232,7 @@ local const unsigned zalign(32) pshufb_shf_table[60] = { 0x0201008f,0x06050403,0x0a090807,0x0e0d0c0b /* shl 1 (16 -15)/shr15*/ }; +TARGET_SSE42_PCLMUL local void partial_fold(deflate_state *const s, const size_t len, __m128i *xmm_crc0, __m128i *xmm_crc1, __m128i *xmm_crc2, __m128i *xmm_crc3, @@ -271,6 +283,7 @@ local void partial_fold(deflate_state *const s, const size_t len, *xmm_crc3 = _mm_castps_si128(ps_res); } +TARGET_SSE42_PCLMUL ZLIB_INTERNAL void crc_fold_copy(deflate_state *const s, unsigned char *dst, const unsigned char *src, long len) { @@ -427,6 +440,7 @@ local const unsigned zalign(16) crc_mask2[4] = { 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; +TARGET_SSE42_PCLMUL unsigned ZLIB_INTERNAL crc_fold_512to32(deflate_state *const s) { const __m128i xmm_mask = _mm_load_si128((__m128i *)crc_mask); diff --git a/src/zlib_version.h b/src/zlib_version.h index 861b339e2bf..cf2bfa50016 100644 --- a/src/zlib_version.h +++ b/src/zlib_version.h @@ -2,5 +2,5 @@ // Refer to tools/dep_updaters/update-zlib.sh #ifndef SRC_ZLIB_VERSION_H_ #define SRC_ZLIB_VERSION_H_ -#define ZLIB_VERSION "1.3.2.1-motley-8002e91" +#define ZLIB_VERSION "1.3.2.1-motley-0165316" #endif // SRC_ZLIB_VERSION_H_