From 990b00a57ce1c7e39f67bf1915eecd0aff3e9d1f Mon Sep 17 00:00:00 2001 From: Zhao Hang Date: Tue, 4 Jul 2023 21:46:55 +0800 Subject: [PATCH] update to zlib-1.2.11-21.el8_7.src.rpm Signed-off-by: Zhao Hang --- ...lis-Neon-Optimized-hash-chain-rebase.patch | 170 -- ...olis-Porting-optimized-longest_match.patch | 218 -- ...ib-anolis-arm64-specific-build-patch.patch | 115 - ...c32-using-armv8-specific-instruction.patch | 240 -- ...b-anolis-ARM-optimized-insert_string.patch | 152 -- 1006-zlib-anolis-Optimize-slide_hash.patch | 169 -- 1007-zlib-anolis-Neon-Optimized-adler32.patch | 244 -- ...zlib-anolis-Optimized-crc32-pmul-mix.patch | 580 ----- ...anolis-Neon-Optimized-chunkcopy_neon.patch | 615 ----- dist | 1 + download | 1 + zlib-1.2.11-CVE-2018-25032.patch | 346 +++ ...C-compression-level-switching-issues.patch | 206 ++ ...accelrated-deflate-compressBound-fix.patch | 93 + ...2.11-IBM-Z-hw-accelrated-deflate-fix.patch | 516 ++++ ...11-IBM-Z-hw-accelrated-deflate-s390x.patch | 1709 +++++++++++++ ...hw-accelrated-deflate-strm-adler-fix.patch | 11 + zlib-1.2.11-covscan-issues.patch | 74 + zlib-1.2.11-cve-2022-37434.patch | 35 + zlib-1.2.11-cve-2022-37434_2.patch | 32 + zlib-1.2.11-firefox-crash-fix.patch | 365 +++ ...11-inflateSyncPoint-return-value-fix.patch | 45 + zlib-1.2.11-optimized-CRC32-framework.patch | 2258 +++++++++++++++++ zlib-1.2.11-optimized-s390.patch | 41 + zlib-1.2.11-permit-deflateParams-change.patch | 30 +- zlib-1.2.11.tar.xz | Bin 467960 -> 0 bytes zlib.spec | 108 +- 27 files changed, 5809 insertions(+), 2565 deletions(-) delete mode 100644 1001-zlib-anolis-Neon-Optimized-hash-chain-rebase.patch delete mode 100644 1002-zlib-anolis-Porting-optimized-longest_match.patch delete mode 100644 1003-zlib-anolis-arm64-specific-build-patch.patch delete mode 100644 1004-zlib-anolis-compute-crc32-using-armv8-specific-instruction.patch delete mode 100644 1005-zlib-anolis-ARM-optimized-insert_string.patch delete mode 100644 1006-zlib-anolis-Optimize-slide_hash.patch delete mode 100644 1007-zlib-anolis-Neon-Optimized-adler32.patch delete mode 100644 1008-zlib-anolis-Optimized-crc32-pmul-mix.patch delete mode 100644 1009-zlib-anolis-Neon-Optimized-chunkcopy_neon.patch create mode 100644 dist create mode 100644 download create mode 100644 zlib-1.2.11-CVE-2018-25032.patch create mode 100644 zlib-1.2.11-IBM-DFLTCC-compression-level-switching-issues.patch create mode 100644 zlib-1.2.11-IBM-Z-hw-accelrated-deflate-compressBound-fix.patch create mode 100644 zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch create mode 100644 zlib-1.2.11-IBM-Z-hw-accelrated-deflate-s390x.patch create mode 100644 zlib-1.2.11-IBM-Z-hw-accelrated-deflate-strm-adler-fix.patch create mode 100644 zlib-1.2.11-covscan-issues.patch create mode 100644 zlib-1.2.11-cve-2022-37434.patch create mode 100644 zlib-1.2.11-cve-2022-37434_2.patch create mode 100644 zlib-1.2.11-firefox-crash-fix.patch create mode 100644 zlib-1.2.11-inflateSyncPoint-return-value-fix.patch create mode 100644 zlib-1.2.11-optimized-CRC32-framework.patch create mode 100644 zlib-1.2.11-optimized-s390.patch delete mode 100644 zlib-1.2.11.tar.xz diff --git a/1001-zlib-anolis-Neon-Optimized-hash-chain-rebase.patch b/1001-zlib-anolis-Neon-Optimized-hash-chain-rebase.patch deleted file mode 100644 index e6f909f..0000000 --- a/1001-zlib-anolis-Neon-Optimized-hash-chain-rebase.patch +++ /dev/null @@ -1,170 +0,0 @@ -From f0fd8c553fa024c599f4aff65d7c603ceeaa6a58 Mon Sep 17 00:00:00 2001 -From: Adenilson Cavalcanti -Date: Mon, 9 Apr 2018 13:52:17 -0700 -Subject: [PATCH 1/3] Neon-Optimized hash chain rebase - -This should help with compression of data, using NEON instructions -(therefore useful for ARMv7/ARMv8). - -Original patch by Jun He. ---- - CMakeLists.txt | 18 ++++++++ - contrib/arm/neon_slide_hash.h | 84 +++++++++++++++++++++++++++++++++++ - deflate.c | 7 +++ - 3 files changed, 109 insertions(+) - create mode 100644 contrib/arm/neon_slide_hash.h - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0fe939d..e9a74e9 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -136,6 +136,24 @@ if(CMAKE_COMPILER_IS_GNUCC) - set(ZLIB_ASMS contrib/amd64/amd64-match.S) - endif () - -+ if(ARM_NEON) -+ list(REMOVE_ITEM ZLIB_SRCS inflate.c) -+ set(ZLIB_ARM_NEON_HDRS -+ contrib/arm/chunkcopy.h -+ contrib/arm/inffast_chunk.h -+ contrib/arm/neon_slide_hash.h) -+ set(ZLIB_ARM_NEON contrib/arm/inflate.c contrib/arm/inffast_chunk.c) -+ add_definitions(-DARM_NEON) -+ set(COMPILER ${CMAKE_C_COMPILER}) -+ # NEON is mandatory in ARMv8. -+ if(${COMPILER} MATCHES "aarch64") -+ set_source_files_properties(${ZLIB_ARM_NEON} PROPERTIES LANGUAGE C COMPILE_FLAGS -march=armv8-a) -+ # But it was optional for ARMv7. -+ elseif(${COMPILER} MATCHES "arm") -+ set_source_files_properties(${ZLIB_ARM_NEON} PROPERTIES LANGUAGE C COMPILE_FLAGS -mfpu=neon) -+ endif() -+ endif() -+ - if(ZLIB_ASMS) - add_definitions(-DASMV) - set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE) -diff --git a/contrib/arm/neon_slide_hash.h b/contrib/arm/neon_slide_hash.h -new file mode 100644 -index 0000000..0daffa1 ---- /dev/null -+++ b/contrib/arm/neon_slide_hash.h -@@ -0,0 +1,84 @@ -+/* Copyright (C) 1995-2011, 2016 Mark Adler -+ * Copyright (C) 2017 ARM Holdings Inc. -+ * Authors: Adenilson Cavalcanti -+ * Jun He -+ * This software is provided 'as-is', without any express or implied -+ * warranty. In no event will the authors be held liable for any damages -+ * arising from the use of this software. -+ * Permission is granted to anyone to use this software for any purpose, -+ * including commercial applications, and to alter it and redistribute it -+ * freely, subject to the following restrictions: -+ * 1. The origin of this software must not be misrepresented; you must not -+ * claim that you wrote the original software. If you use this software -+ * in a product, an acknowledgment in the product documentation would be -+ * appreciated but is not required. -+ * 2. Altered source versions must be plainly marked as such, and must not be -+ * misrepresented as being the original software. -+ * 3. This notice may not be removed or altered from any source distribution. -+ */ -+#ifndef __NEON_SLIDE_HASH__ -+#define __NEON_SLIDE_HASH__ -+ -+#if (defined(__ARM_NEON__) || defined(__ARM_NEON)) -+#include "deflate.h" -+#include -+ -+inline static void neon_slide_hash(deflate_state *s) -+{ -+ /* -+ * This is ASIMD implementation for hash table rebase -+ * it assumes: -+ * 1. hash chain offset (Pos) is 2 bytes -+ * 2. hash table size is multiple*128 bytes -+ * #1 should be true as Pos is defined as "ush" -+ * #2 should be true as hash_bits are greater that 7 -+ */ -+ unsigned n, m; -+ unsigned short wsize = s->w_size; -+ uint16x8_t v, *p; -+ size_t size; -+ -+ size = s->hash_size*sizeof(s->head[0]); -+ Assert((size % sizeof(uint16x8_t) * 8 == 0), "hash table size err"); -+ -+ Assert(sizeof(Pos) == 2, "Wrong Pos size"); -+ -+ /* slide s->head */ -+ v = vdupq_n_u16(wsize); -+ p = (uint16x8_t *)(s->head); -+ n = size / (sizeof(uint16x8_t) * 8); -+ do { -+ p[0] = vqsubq_u16(p[0], v); -+ p[1] = vqsubq_u16(p[1], v); -+ p[2] = vqsubq_u16(p[2], v); -+ p[3] = vqsubq_u16(p[3], v); -+ p[4] = vqsubq_u16(p[4], v); -+ p[5] = vqsubq_u16(p[5], v); -+ p[6] = vqsubq_u16(p[6], v); -+ p[7] = vqsubq_u16(p[7], v); -+ p += 8; -+ } while (--n); -+#ifndef FASTEST -+ /* slide s->prev */ -+ size = wsize*sizeof(s->prev[0]); -+ -+ Assert((size % sizeof(uint16x8_t) * 8 == 0), "hash table size err"); -+ -+ p = (uint16x8_t *)(s->prev); -+ n = size / (sizeof(uint16x8_t) * 8); -+ do { -+ p[0] = vqsubq_u16(p[0], v); -+ p[1] = vqsubq_u16(p[1], v); -+ p[2] = vqsubq_u16(p[2], v); -+ p[3] = vqsubq_u16(p[3], v); -+ p[4] = vqsubq_u16(p[4], v); -+ p[5] = vqsubq_u16(p[5], v); -+ p[6] = vqsubq_u16(p[6], v); -+ p[7] = vqsubq_u16(p[7], v); -+ p += 8; -+ } while (--n); -+#endif -+} -+ -+#endif -+#endif -diff --git a/deflate.c b/deflate.c -index 1ec7614..36f99ac 100644 ---- a/deflate.c -+++ b/deflate.c -@@ -50,6 +50,9 @@ - /* @(#) $Id$ */ - - #include "deflate.h" -+#if __ARM_NEON -+#include "contrib/arm/neon_slide_hash.h" -+#endif - - const char deflate_copyright[] = - " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; -@@ -201,6 +204,9 @@ local const config configuration_table[10] = { - local void slide_hash(s) - deflate_state *s; - { -+#if ARM_NEON -+ return neon_slide_hash(s); -+#else - unsigned n, m; - Posf *p; - uInt wsize = s->w_size; -@@ -222,6 +228,7 @@ local void slide_hash(s) - */ - } while (--n); - #endif -+#endif - } - - /* ========================================================================= */ --- -2.19.0 - diff --git a/1002-zlib-anolis-Porting-optimized-longest_match.patch b/1002-zlib-anolis-Porting-optimized-longest_match.patch deleted file mode 100644 index 7fda12e..0000000 --- a/1002-zlib-anolis-Porting-optimized-longest_match.patch +++ /dev/null @@ -1,218 +0,0 @@ -From 17a154db6774a4acf347cfc5189eaf2cd675e696 Mon Sep 17 00:00:00 2001 -From: Adenilson Cavalcanti -Date: Mon, 9 Apr 2018 15:14:19 -0700 -Subject: [PATCH 2/3] Porting optimized longest_match - -This patch was contributed to zlib-ng and features an improved longest_match -function using the most distant hash code to reduce number of checks -(see: http://www.gildor.org/en/projects/zlib). - -Original patch by Jun He. ---- - CMakeLists.txt | 3 +- - contrib/arm/arm_longest_match.h | 142 ++++++++++++++++++++++++++++++++ - deflate.c | 11 ++- - 3 files changed, 152 insertions(+), 4 deletions(-) - create mode 100644 contrib/arm/arm_longest_match.h - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index e9a74e9..3826eba 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -141,7 +141,8 @@ if(CMAKE_COMPILER_IS_GNUCC) - set(ZLIB_ARM_NEON_HDRS - contrib/arm/chunkcopy.h - contrib/arm/inffast_chunk.h -- contrib/arm/neon_slide_hash.h) -+ contrib/arm/neon_slide_hash.h -+ contrib/arm/arm_longest_match.h) - set(ZLIB_ARM_NEON contrib/arm/inflate.c contrib/arm/inffast_chunk.c) - add_definitions(-DARM_NEON) - set(COMPILER ${CMAKE_C_COMPILER}) -diff --git a/contrib/arm/arm_longest_match.h b/contrib/arm/arm_longest_match.h -new file mode 100644 -index 0000000..9e7083f ---- /dev/null -+++ b/contrib/arm/arm_longest_match.h -@@ -0,0 +1,142 @@ -+/* Copyright (C) 1995-2011, 2016 Mark Adler -+ * Copyright (C) 2017 ARM Holdings Inc. -+ * Authors: Adenilson Cavalcanti -+ * Jun He -+ * This software is provided 'as-is', without any express or implied -+ * warranty. In no event will the authors be held liable for any damages -+ * arising from the use of this software. -+ * Permission is granted to anyone to use this software for any purpose, -+ * including commercial applications, and to alter it and redistribute it -+ * freely, subject to the following restrictions: -+ * 1. The origin of this software must not be misrepresented; you must not -+ * claim that you wrote the original software. If you use this software -+ * in a product, an acknowledgment in the product documentation would be -+ * appreciated but is not required. -+ * 2. Altered source versions must be plainly marked as such, and must not be -+ * misrepresented as being the original software. -+ * 3. This notice may not be removed or altered from any source distribution. -+ */ -+#ifndef __ARM_LONGEST__MATCH__ -+#define __ARM_LONGEST__MATCH__ -+ -+#if defined(ARM_NEON) -+#include "deflate.h" -+#include -+static inline long get_match_len(const unsigned char *a, const unsigned char *b, long max) -+{ -+ register int len = 0; -+ register unsigned long xor = 0; -+ register int check_loops = max/sizeof(unsigned long); -+ while(check_loops-- > 0) { -+ xor = (*(unsigned long *)(a+len)) ^ (*(unsigned long *)(b+len)); -+ if (xor) break; -+ len += sizeof(unsigned long); -+ } -+ if (0 == xor) { -+ while (len < max) { -+ if (a[len] != b[len]) break; -+ len++; -+ } -+ return len; -+ } -+ xor = __builtin_ctzl(xor)>>3; -+ return len + xor; -+} -+ -+/* -+ * This implementation is based on algorithm described at: -+ * http://www.gildor.org/en/projects/zlib -+ * It uses the hash chain indexed by the most distant hash code to -+ * reduce number of checks. -+ * This also eliminates the those unnecessary check loops in legacy -+ * longest_match's do..while loop if the "most distant code" is out -+ * of search buffer -+ * -+ */ -+static inline unsigned arm_longest_match(deflate_state *const s, IPos cur_match) { -+ unsigned chain_length = s->max_chain_length;/* max hash chain length */ -+ unsigned char *scan = s->window + s->strstart; /* current string */ -+ unsigned char *match; /* matched string */ -+ unsigned int len; /* length of current match */ -+ unsigned int best_len = s->prev_length; /* best match length so far */ -+ unsigned int nice_match = s->nice_match; /* stop if match long enough */ -+ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? -+ s->strstart - (IPos)MAX_DIST(s) : 0; -+ /* Stop when cur_match becomes <= limit. To simplify the code, -+ * we prevent matches with the string of window index 0. -+ */ -+ int offset = 0; /* offset of the head[most_distant_hash] from IN cur_match */ -+ Pos *prev = s->prev; -+ unsigned int wmask = s->w_mask; -+ unsigned char *scan_buf_base = s->window; -+ -+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. -+ * It is easy to get rid of this optimization if necessary. -+ */ -+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); -+ -+ /* Do not look for matches beyond the end of the input. This is necessary -+ * to make deflate deterministic. -+ */ -+ if ((unsigned int)nice_match > s->lookahead) nice_match = s->lookahead; -+ -+ Assert((unsigned long)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); -+ -+ /* find most distant hash code for lazy_match */ -+ if (best_len > MIN_MATCH) { -+ /* search for most distant hash code */ -+ int i; -+ uint16_t hash = 0; -+ IPos pos; -+ -+ UPDATE_HASH(s, hash, scan[1]); -+ UPDATE_HASH(s, hash, scan[2]); -+ for (i = 3; i <= best_len; i++) { -+ UPDATE_HASH(s, hash, scan[i]); -+ /* get head IPos of hash calced by scan[i-2..i] */ -+ pos = s->head[hash]; -+ /* compare it to current "farthest hash" IPos */ -+ if (pos <= cur_match) { -+ /* we have a new "farthest hash" now */ -+ offset = i - 2; -+ cur_match = pos; -+ } -+ } -+ -+ /* update variables to correspond offset */ -+ limit += offset; -+ /* -+ * check if the most distant code's offset is out of search buffer -+ * if it is true, then this means scan[offset..offset+2] are not -+ * presented in the search buffer. So we just return best_len -+ * we've found. -+ */ -+ if (cur_match < limit) return best_len; -+ -+ scan_buf_base -= offset; -+ /* reduce hash search depth based on best_len */ -+ chain_length /= best_len - MIN_MATCH; -+ } -+ -+ do { -+ Assert(cur_match < s->strstart, "no future"); -+ -+ /* Determine matched length at current pos */ -+ match = scan_buf_base + cur_match; -+ len = get_match_len(match, scan, MAX_MATCH); -+ -+ if (len > best_len) { -+ /* found longer string */ -+ s->match_start = cur_match - offset; -+ best_len = len; -+ /* good enough? */ -+ if (len >= nice_match) break; -+ } -+ /* move to prev pos in this hash chain */ -+ } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length != 0); -+ -+ return (best_len <= s->lookahead)? best_len : s->lookahead; -+} -+ -+#endif -+#endif -diff --git a/deflate.c b/deflate.c -index 36f99ac..4c42259 100644 ---- a/deflate.c -+++ b/deflate.c -@@ -50,9 +50,6 @@ - /* @(#) $Id$ */ - - #include "deflate.h" --#if __ARM_NEON --#include "contrib/arm/neon_slide_hash.h" --#endif - - const char deflate_copyright[] = - " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; -@@ -196,6 +193,11 @@ local const config configuration_table[10] = { - s->head[s->hash_size-1] = NIL; \ - zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); - -+#if defined(ARM_NEON) -+#include "contrib/arm/arm_longest_match.h" -+#include "contrib/arm/neon_slide_hash.h" -+#endif -+ - /* =========================================================================== - * Slide the hash table when sliding the window down (could be avoided with 32 - * bit values at the expense of memory usage). We slide even when level == 0 to -@@ -1244,6 +1246,9 @@ local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ - { -+#if defined(ARM_NEON) -+ return arm_longest_match(s, cur_match); -+#endif - unsigned chain_length = s->max_chain_length;/* max hash chain length */ - register Bytef *scan = s->window + s->strstart; /* current string */ - register Bytef *match; /* matched string */ --- -2.19.0 - diff --git a/1003-zlib-anolis-arm64-specific-build-patch.patch b/1003-zlib-anolis-arm64-specific-build-patch.patch deleted file mode 100644 index b8b6b55..0000000 --- a/1003-zlib-anolis-arm64-specific-build-patch.patch +++ /dev/null @@ -1,115 +0,0 @@ -From e0be75f8dce27a4e32196529df2a08dca791a286 Mon Sep 17 00:00:00 2001 -From: Jeremy Linton -Date: Fri, 6 Apr 2018 11:46:42 -0500 -Subject: [PATCH 3/3] arm64 specific build patch - ---- - Makefile.in | 19 ++++++++++++------- - configure | 2 +- - contrib/minizip/zip.c | 6 ++++-- - 3 files changed, 17 insertions(+), 10 deletions(-) - -diff --git a/Makefile.in b/Makefile.in -index 5a77949..9f088e5 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -57,7 +57,7 @@ SRCDIR= - ZINC= - ZINCOUT=-I. - --OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o -+OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o - OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o - OBJC = $(OBJZ) $(OBJG) - -@@ -163,16 +163,16 @@ crc32.o: $(SRCDIR)crc32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c - - deflate.o: $(SRCDIR)deflate.c -- $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -c -o $@ $(SRCDIR)deflate.c - - infback.o: $(SRCDIR)infback.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c - - inffast.o: $(SRCDIR)inffast.c -- $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -c -o $@ $(SRCDIR)inffast.c - - inflate.o: $(SRCDIR)inflate.c -- $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -c -o $@ $(SRCDIR)inflate.c - - inftrees.o: $(SRCDIR)inftrees.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c -@@ -214,7 +214,7 @@ crc32.lo: $(SRCDIR)crc32.c - - deflate.lo: $(SRCDIR)deflate.c - -@mkdir objs 2>/dev/null || test -d objs -- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c - -@mv objs/deflate.o $@ - - infback.lo: $(SRCDIR)infback.c -@@ -222,14 +222,19 @@ infback.lo: $(SRCDIR)infback.c - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c - -@mv objs/infback.o $@ - -+arminffast.lo: $(SRCDIR)contrib/arm/inffast_chunk.c $(SRCDIR)inffast.c -+ -@mkdir objs 2>/dev/null || test -d objs -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -DPIC -c -o objs/arminffast.o $(SRCDIR)contrib/arm/inffast_chunk.c -+ -@mv objs/arminffast.o $@ -+ - inffast.lo: $(SRCDIR)inffast.c - -@mkdir objs 2>/dev/null || test -d objs -- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c - -@mv objs/inffast.o $@ - - inflate.lo: $(SRCDIR)inflate.c - -@mkdir objs 2>/dev/null || test -d objs -- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/arm -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c - -@mv objs/inflate.o $@ - - inftrees.lo: $(SRCDIR)inftrees.c -diff --git a/configure b/configure -index e974d1f..0c5f837 100755 ---- a/configure -+++ b/configure -@@ -23,7 +23,7 @@ SRCDIR=`dirname $0` - if test $SRCDIR = "."; then - ZINC="" - ZINCOUT="-I." -- SRCDIR="" -+ SRCDIR="./" - else - ZINC='-include zconf.h' - ZINCOUT='-I. -I$(SRCDIR)' -diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c -index 44e88a9..0517930 100644 ---- a/contrib/minizip/zip.c -+++ b/contrib/minizip/zip.c -@@ -519,15 +519,17 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f - break; - - for (i=(int)uReadSize-3; (i--)>0;) -+ { - if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && - ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) - { - uPosFound = uReadPos+i; - break; - } -+ } - -- if (uPosFound!=0) -- break; -+ if (uPosFound!=0) -+ break; - } - TRYFREE(buf); - return uPosFound; --- -2.19.0 - diff --git a/1004-zlib-anolis-compute-crc32-using-armv8-specific-instruction.patch b/1004-zlib-anolis-compute-crc32-using-armv8-specific-instruction.patch deleted file mode 100644 index 78fb032..0000000 --- a/1004-zlib-anolis-compute-crc32-using-armv8-specific-instruction.patch +++ /dev/null @@ -1,240 +0,0 @@ -From 23e2623f8b9e64872fa1f512bd296d96e122fd88 Mon Sep 17 00:00:00 2001 -From: Chunmei Xu -Date: Sat, 29 Feb 2020 17:12:31 +0800 -Subject: [PATCH] compute crc32 using armv8 specific instruction - -backport crc32_acle.c from zlib-ng project -https://github.com/zlib-ng/zlib-ng/blob/develop/arch/arm/crc32_acle.c - -Signed-off-by: Chunmei Xu ---- - Makefile.in | 16 +++++-- - contrib/arm/crc32_acle.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++ - crc32.c | 12 +++++ - 3 files changed, 135 insertions(+), 4 deletions(-) - create mode 100644 contrib/arm/crc32_acle.c - -diff --git a/Makefile.in b/Makefile.in -index 9f088e5..0ae9acc 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -57,11 +57,11 @@ SRCDIR= - ZINC= - ZINCOUT=-I. - --OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o -+OBJZ = adler32.o crc32_acle.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o - OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o - OBJC = $(OBJZ) $(OBJG) - --PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo -+PIC_OBJZ = adler32.lo crc32_acle.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo - PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo - PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) - -@@ -155,10 +155,12 @@ example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h - minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h - $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c - -- - adler32.o: $(SRCDIR)adler32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c - -+crc32_acle.o: $(SRCDIR)contrib/arm/crc32_acle.c -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -c -o $@ $(SRCDIR)contrib/arm/crc32_acle.c -+ - crc32.o: $(SRCDIR)crc32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c - -@@ -201,12 +203,16 @@ gzread.o: $(SRCDIR)gzread.c - gzwrite.o: $(SRCDIR)gzwrite.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c - -- - adler32.lo: $(SRCDIR)adler32.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c - -@mv objs/adler32.o $@ - -+crc32_acle.lo: $(SRCDIR)contrib/arm/crc32_acle.c -+ -@mkdir objs 2>/dev/null || test -d objs -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -DPIC -c -o objs/crc32_acle.o $(SRCDIR)contrib/arm/crc32_acle.c -+ -@mv objs/crc32_acle.o $@ -+ - crc32.lo: $(SRCDIR)crc32.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c -@@ -397,6 +403,7 @@ tags: - adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h - gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h - compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h -+crc32_acle.o: zconf.h - crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h - deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h - infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h -@@ -407,6 +414,7 @@ trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)tr - adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h - gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h - compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h -+crc32_acle.lo: zconf.h - crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h - deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h - infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h -diff --git a/contrib/arm/crc32_acle.c b/contrib/arm/crc32_acle.c -new file mode 100644 -index 0000000..2da1808 ---- /dev/null -+++ b/contrib/arm/crc32_acle.c -@@ -0,0 +1,111 @@ -+/* crc32_acle.c -- compute the CRC-32 of a data stream -+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler -+ * Copyright (C) 2016 Yang Zhang -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ * -+*/ -+ -+#ifdef __ARM_FEATURE_CRC32 -+# include -+# include -+# ifdef __linux__ -+# include -+# endif -+ -+uint32_t crc32_acle(uint32_t crc, const unsigned char *buf, uint64_t len) { -+ register uint32_t c; -+ register const uint16_t *buf2; -+ register const uint32_t *buf4; -+ -+ c = ~crc; -+ if (len && ((ptrdiff_t)buf & 1)) { -+ c = __crc32b(c, *buf++); -+ len--; -+ } -+ -+ if ((len > sizeof(uint16_t)) && ((ptrdiff_t)buf & sizeof(uint16_t))) { -+ buf2 = (const uint16_t *) buf; -+ c = __crc32h(c, *buf2++); -+ len -= sizeof(uint16_t); -+ buf4 = (const uint32_t *) buf2; -+ } else { -+ buf4 = (const uint32_t *) buf; -+ } -+ -+# if defined(__aarch64__) -+ if ((len > sizeof(uint32_t)) && ((ptrdiff_t)buf & sizeof(uint32_t))) { -+ c = __crc32w(c, *buf4++); -+ len -= sizeof(uint32_t); -+ } -+ -+ const uint64_t *buf8 = (const uint64_t *) buf4; -+ -+# ifdef UNROLL_MORE -+ while (len >= 4 * sizeof(uint64_t)) { -+ c = __crc32d(c, *buf8++); -+ c = __crc32d(c, *buf8++); -+ c = __crc32d(c, *buf8++); -+ c = __crc32d(c, *buf8++); -+ len -= 4 * sizeof(uint64_t); -+ } -+# endif -+ -+ while (len >= sizeof(uint64_t)) { -+ c = __crc32d(c, *buf8++); -+ len -= sizeof(uint64_t); -+ } -+ -+ if (len >= sizeof(uint32_t)) { -+ buf4 = (const uint32_t *) buf8; -+ c = __crc32w(c, *buf4++); -+ len -= sizeof(uint32_t); -+ buf2 = (const uint16_t *) buf4; -+ } else { -+ buf2 = (const uint16_t *) buf8; -+ } -+ -+ if (len >= sizeof(uint16_t)) { -+ c = __crc32h(c, *buf2++); -+ len -= sizeof(uint16_t); -+ } -+ -+ buf = (const unsigned char *) buf2; -+# else /* __aarch64__ */ -+ -+# ifdef UNROLL_MORE -+ while (len >= 8 * sizeof(uint32_t)) { -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ c = __crc32w(c, *buf4++); -+ len -= 8 * sizeof(uint32_t); -+ } -+# endif -+ -+ while (len >= sizeof(uint32_t)) { -+ c = __crc32w(c, *buf4++); -+ len -= sizeof(uint32_t); -+ } -+ -+ if (len >= sizeof(uint16_t)) { -+ buf2 = (const uint16_t *) buf4; -+ c = __crc32h(c, *buf2++); -+ len -= sizeof(uint16_t); -+ buf = (const unsigned char *) buf2; -+ } else { -+ buf = (const unsigned char *) buf4; -+ } -+# endif /* __aarch64__ */ -+ -+ if (len) { -+ c = __crc32b(c, *buf); -+ } -+ -+ c = ~c; -+ return c; -+} -+#endif /* __ARM_FEATURE_CRC32 */ -diff --git a/crc32.c b/crc32.c -index 9580440..8338dbc 100644 ---- a/crc32.c -+++ b/crc32.c -@@ -30,6 +30,10 @@ - - #include "zutil.h" /* for STDC and FAR definitions */ - -+#if defined(__ARM_FEATURE_CRC32) -+#include -+#endif -+ - /* Definitions for doing the crc four data bytes at a time. */ - #if !defined(NOBYFOUR) && defined(Z_U4) - # define BYFOUR -@@ -198,6 +202,10 @@ const z_crc_t FAR * ZEXPORT get_crc_table() - #define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) - #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 - -+#if defined(__ARM_FEATURE_CRC32) -+extern uint32_t crc32_acle(uint32_t, const unsigned char *, uint64_t); -+#endif -+ - /* ========================================================================= */ - unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; -@@ -217,7 +225,11 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) - - endian = 1; - if (*((unsigned char *)(&endian))) -+#if defined(__ARM_FEATURE_CRC32) -+ return crc32_acle(crc, buf, len); -+#else - return crc32_little(crc, buf, len); -+#endif - else - return crc32_big(crc, buf, len); - } --- -1.8.3.1 - diff --git a/1005-zlib-anolis-ARM-optimized-insert_string.patch b/1005-zlib-anolis-ARM-optimized-insert_string.patch deleted file mode 100644 index 54e0d99..0000000 --- a/1005-zlib-anolis-ARM-optimized-insert_string.patch +++ /dev/null @@ -1,152 +0,0 @@ -From a036b584c292e7b67336d3abee65e2415cb68be9 Mon Sep 17 00:00:00 2001 -From: Chunmei Xu -Date: Thu, 5 Mar 2020 11:22:11 +0800 -Subject: [PATCH] ARM optimized insert_string - -refer to -https://chromium-review.googlesource.com/c/chromium/src/+/1173262 - -Signed-off-by: Chunmei Xu ---- - contrib/arm/insert_string_acle.h | 37 +++++++++++++++++++++++++++++++++++ - deflate.c | 42 ++++++++++++++++++++++++---------------- - 2 files changed, 62 insertions(+), 17 deletions(-) - create mode 100644 contrib/arm/insert_string_acle.h - -diff --git a/contrib/arm/insert_string_acle.h b/contrib/arm/insert_string_acle.h -new file mode 100644 -index 0000000..5f3c5e1 ---- /dev/null -+++ b/contrib/arm/insert_string_acle.h -@@ -0,0 +1,37 @@ -+/* insert_string_acle.h -- insert_string variant using ACLE's CRC instructions -+ * -+ * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ * -+ */ -+ -+#if defined(__ARM_FEATURE_CRC32) -+#include -+ -+/* =========================================================================== -+ * Insert string str in the dictionary and set match_head to the previous head -+ * of the hash chain (the most recent string with same hash key). Return -+ * the previous length of the hash chain. -+ * IN assertion: all calls to to INSERT_STRING are made with consecutive -+ * input characters and the first MIN_MATCH bytes of str are valid -+ * (except for the last MIN_MATCH-1 bytes of the input file). -+ */ -+local inline Pos insert_string_acle(deflate_state *const s, const Pos str) { -+ Pos ret; -+ unsigned *ip, val, h = 0; -+ -+ ip = (unsigned *)&s->window[str]; -+ val = *ip; -+ -+ if (s->level >= 6) -+ val &= 0xFFFFFF; -+ -+ h = __crc32w(h, val); -+ -+ ret = s->head[h & s->hash_mask]; -+ s->head[h & s->hash_mask] = str; -+ s->prev[str & s->w_mask] = ret; -+ return ret; -+} -+#endif -+ -diff --git a/deflate.c b/deflate.c -index 4c42259..397f8c6 100644 ---- a/deflate.c -+++ b/deflate.c -@@ -173,17 +173,29 @@ local const config configuration_table[10] = { - * characters and the first MIN_MATCH bytes of str are valid (except for - * the last MIN_MATCH-1 bytes of the input file). - */ -+static inline Pos insert_string_c(deflate_state *s, Pos str) { -+ Pos match_head; -+ -+ UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]); - #ifdef FASTEST --#define INSERT_STRING(s, str, match_head) \ -- (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ -- match_head = s->head[s->ins_h], \ -- s->head[s->ins_h] = (Pos)(str)) -+ match_head = s->head[s->ins_h]; - #else --#define INSERT_STRING(s, str, match_head) \ -- (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ -- match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ -- s->head[s->ins_h] = (Pos)(str)) -+ match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h]; - #endif -+ s->head[s->ins_h] = (Pos)str; -+ return match_head; -+} -+ -+#if defined(__ARM_FEATURE_CRC32) -+#include "contrib/arm/insert_string_acle.h" -+#endif -+static inline Pos insert_string(deflate_state *s, Pos str) { -+#if defined(__ARM_FEATURE_CRC32) -+ return insert_string_acle(s, str); -+#else -+ return insert_string_c(s, str); -+#endif -+} - - /* =========================================================================== - * Initialize the hash table (avoiding 64K overflow for 16 bit systems). -@@ -427,11 +439,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) - str = s->strstart; - n = s->lookahead - (MIN_MATCH-1); - do { -- UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); --#ifndef FASTEST -- s->prev[str & s->w_mask] = s->head[s->ins_h]; --#endif -- s->head[s->ins_h] = (Pos)str; -+ insert_string(s, str); - str++; - } while (--n); - s->strstart = str; -@@ -1859,7 +1867,7 @@ local block_state deflate_fast(s, flush) - */ - hash_head = NIL; - if (s->lookahead >= MIN_MATCH) { -- INSERT_STRING(s, s->strstart, hash_head); -+ hash_head = insert_string(s, s->strstart); - } - - /* Find the longest match, discarding those <= prev_length. -@@ -1890,7 +1898,7 @@ local block_state deflate_fast(s, flush) - s->match_length--; /* string at strstart already in table */ - do { - s->strstart++; -- INSERT_STRING(s, s->strstart, hash_head); -+ hash_head = insert_string(s, s->strstart); - /* strstart never exceeds WSIZE-MAX_MATCH, so there are - * always MIN_MATCH bytes ahead. - */ -@@ -1962,7 +1970,7 @@ local block_state deflate_slow(s, flush) - */ - hash_head = NIL; - if (s->lookahead >= MIN_MATCH) { -- INSERT_STRING(s, s->strstart, hash_head); -+ hash_head = insert_string(s, s->strstart); - } - - /* Find the longest match, discarding those <= prev_length. -@@ -2013,7 +2021,7 @@ local block_state deflate_slow(s, flush) - s->prev_length -= 2; - do { - if (++s->strstart <= max_insert) { -- INSERT_STRING(s, s->strstart, hash_head); -+ hash_head = insert_string(s, s->strstart); - } - } while (--s->prev_length != 0); - s->match_available = 0; --- -1.8.3.1 - diff --git a/1006-zlib-anolis-Optimize-slide_hash.patch b/1006-zlib-anolis-Optimize-slide_hash.patch deleted file mode 100644 index 6342123..0000000 --- a/1006-zlib-anolis-Optimize-slide_hash.patch +++ /dev/null @@ -1,169 +0,0 @@ -diff -aurN zlib-1.2.11.orig/configure zlib-1.2.11/configure ---- zlib-1.2.11.orig/configure 2017-01-01 02:06:40.000000000 +0800 -+++ zlib-1.2.11/configure 2021-11-12 17:47:26.111812826 +0800 -@@ -23,7 +23,7 @@ - if test $SRCDIR = "."; then - ZINC="" - ZINCOUT="-I." -- SRCDIR="" -+ SRCDIR="./" - else - ZINC='-include zconf.h' - ZINCOUT='-I. -I$(SRCDIR)' -diff -aurN zlib-1.2.11.orig/contrib/amd64/sse2_slide_hash.c zlib-1.2.11/contrib/amd64/sse2_slide_hash.c ---- zlib-1.2.11.orig/contrib/amd64/sse2_slide_hash.c 1970-01-01 08:00:00.000000000 +0800 -+++ zlib-1.2.11/contrib/amd64/sse2_slide_hash.c 2021-11-12 17:56:19.373389046 +0800 -@@ -0,0 +1,51 @@ -+/* -+ * SSE optimized hash slide -+ * -+ * Copyright (C) 2017 Intel Corporation -+ * Authors: -+ * Arjan van de Ven -+ * Jim Kukunas -+ * -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ */ -+ -+#if __SSE2__ == 1 -+ -+#include "sse2_slide_hash.h" -+ -+void sse2_slide_hash(deflate_state *s) -+{ -+ unsigned n; -+ Posf *p; -+ uInt wsize = s->w_size; -+ z_const __m128i xmm_wsize = _mm_set1_epi16(s->w_size); -+ -+ n = s->hash_size; -+ p = &s->head[n] - 8; -+ do { -+ __m128i value, result; -+ -+ value = _mm_loadu_si128((__m128i *)p); -+ result= _mm_subs_epu16(value, xmm_wsize); -+ _mm_storeu_si128((__m128i *)p, result); -+ p -= 8; -+ n -= 8; -+ } while (n > 0); -+ -+#ifndef FASTEST -+ n = wsize; -+ p = &s->prev[n] - 8; -+ do { -+ __m128i value, result; -+ -+ value = _mm_loadu_si128((__m128i *)p); -+ result= _mm_subs_epu16(value, xmm_wsize); -+ _mm_storeu_si128((__m128i *)p, result); -+ -+ p -= 8; -+ n -= 8; -+ } while (n > 0); -+#endif -+} -+ -+#endif -diff -aurN zlib-1.2.11.orig/contrib/amd64/sse2_slide_hash.h zlib-1.2.11/contrib/amd64/sse2_slide_hash.h ---- zlib-1.2.11.orig/contrib/amd64/sse2_slide_hash.h 1970-01-01 08:00:00.000000000 +0800 -+++ zlib-1.2.11/contrib/amd64/sse2_slide_hash.h 2021-11-12 17:56:13.131183305 +0800 -@@ -0,0 +1,23 @@ -+/* -+ * SSE optimized hash slide -+ * -+ * Copyright (C) 2017 Intel Corporation -+ * Authors: -+ * Arjan van de Ven -+ * Jim Kukunas -+ * -+ * For conditions of distribution and use, see copyright notice in zlib.h -+ */ -+ -+#ifndef __SSE_SLIDE_HASH__ -+#define __SSE_SLIDE_HASH__ -+ -+#if __SSE2__ == 1 -+#include "deflate.h" -+#include -+ -+extern void sse2_slide_hash(deflate_state *s); -+ -+#endif -+ -+#endif -diff -aurN zlib-1.2.11.orig/deflate.c zlib-1.2.11/deflate.c ---- zlib-1.2.11.orig/deflate.c 2017-01-16 01:29:40.000000000 +0800 -+++ zlib-1.2.11/deflate.c 2021-11-12 17:56:03.458864512 +0800 -@@ -50,6 +50,9 @@ - /* @(#) $Id$ */ - - #include "deflate.h" -+#if __SSE2__ == 1 -+#include "contrib/amd64/sse2_slide_hash.h" -+#endif - - const char deflate_copyright[] = - " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; -@@ -201,6 +204,9 @@ - local void slide_hash(s) - deflate_state *s; - { -+#if __SSE2__ == 1 -+ return sse2_slide_hash(s); -+#endif - unsigned n, m; - Posf *p; - uInt wsize = s->w_size; -@@ -224,6 +230,7 @@ - #endif - } - -+ - /* ========================================================================= */ - int ZEXPORT deflateInit_(strm, level, version, stream_size) - z_streamp strm; -diff -aurN zlib-1.2.11.orig/Makefile.in zlib-1.2.11/Makefile.in ---- zlib-1.2.11.orig/Makefile.in 2017-01-16 01:29:40.000000000 +0800 -+++ zlib-1.2.11/Makefile.in 2021-11-12 20:42:51.610668805 +0800 -@@ -57,11 +57,11 @@ - ZINC= - ZINCOUT=-I. - --OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o -+OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o sse2_slide_hash.o - OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o - OBJC = $(OBJZ) $(OBJG) - --PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo -+PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo sse2_slide_hash.lo - PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo - PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) - -@@ -163,7 +163,10 @@ - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c - - deflate.o: $(SRCDIR)deflate.c -- $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/amd64 -c -o $@ $(SRCDIR)deflate.c -+ -+sse2_slide_hash.o: $(SRCDIR)/contrib/amd64/sse2_slide_hash.c -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/amd64 -c -o $@ $(SRCDIR)contrib/amd64/sse2_slide_hash.c - - infback.o: $(SRCDIR)infback.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c -@@ -214,8 +217,13 @@ - - deflate.lo: $(SRCDIR)deflate.c - -@mkdir objs 2>/dev/null || test -d objs -- $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/amd64 -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c - -@mv objs/deflate.o $@ -+ -+sse2_slide_hash.lo: $(SRCDIR)/contrib/amd64/sse2_slide_hash.c -+ -@mkdir objs 2>/dev/null || test -d objs -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -I$(SRCDIR)contrib/amd64 -DPIC -c -o objs/sse2_slide_hash.o $(SRCDIR)contrib/amd64/sse2_slide_hash.c -+ -@mv objs/sse2_slide_hash.o $@ - - infback.lo: $(SRCDIR)infback.c - -@mkdir objs 2>/dev/null || test -d objs diff --git a/1007-zlib-anolis-Neon-Optimized-adler32.patch b/1007-zlib-anolis-Neon-Optimized-adler32.patch deleted file mode 100644 index c2f5307..0000000 --- a/1007-zlib-anolis-Neon-Optimized-adler32.patch +++ /dev/null @@ -1,244 +0,0 @@ -diff -uNr zlib-1.2.11/adler32.c ../zlib-1.2.11/adler32.c ---- zlib-1.2.11/adler32.c 2017-01-01 15:37:10.000000000 +0800 -+++ ../zlib-1.2.11/adler32.c 2022-08-24 11:39:57.877129854 +0800 -@@ -59,6 +59,9 @@ - # define MOD63(a) a %= BASE - #endif - -+#if defined(__ARM_NEON__) || defined(__ARM_NEON) -+extern uLong adler32_neon(uLong adler, const Bytef *buf, z_size_t len); -+#endif - /* ========================================================================= */ - uLong ZEXPORT adler32_z(adler, buf, len) - uLong adler; -@@ -68,6 +71,9 @@ - unsigned long sum2; - unsigned n; - -+#if defined(__ARM_NEON__) || defined(__ARM_NEON) -+ return adler32_neon(adler, buf, len); -+#endif - /* split Adler-32 into component sums */ - sum2 = (adler >> 16) & 0xffff; - adler &= 0xffff; -diff -uNr zlib-1.2.11/contrib/arm/adler32_neon.S ../zlib-1.2.11/contrib/arm/adler32_neon.S ---- zlib-1.2.11/contrib/arm/adler32_neon.S 1970-01-01 08:00:00.000000000 +0800 -+++ ../zlib-1.2.11/contrib/arm/adler32_neon.S 2022-08-23 18:10:10.682185859 +0800 -@@ -0,0 +1,178 @@ -+/********************************************************************** -+ Copyright(c) 2019 Arm Corporation All rights reserved. -+ -+ Redistribution and use in source and binary forms, with or without -+ modification, are permitted provided that the following conditions -+ are met: -+ * Redistributions of source code must retain the above copyright -+ notice, this list of conditions and the following disclaimer. -+ * Redistributions in binary form must reproduce the above copyright -+ notice, this list of conditions and the following disclaimer in -+ the documentation and/or other materials provided with the -+ distribution. -+ * Neither the name of Arm Corporation nor the names of its -+ contributors may be used to endorse or promote products derived -+ from this software without specific prior written permission. -+ -+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+**********************************************************************/ -+ .arch armv8-a+crypto -+ .text -+ .align 3 -+ -+/* -+Macros -+*/ -+ -+.macro declare_var_vector_reg name:req,reg:req -+ \name\()_q .req q\reg -+ \name\()_v .req v\reg -+ \name\()_s .req s\reg -+ \name\()_d .req d\reg -+.endm -+ -+.macro mod_adler dest:req,tmp:req -+ umull \tmp\()_x,\dest,const_div1 -+ lsr \tmp\()_x,\tmp\()_x,47 -+ msub \dest,\tmp,const_div2,\dest -+.endm -+ -+/* -+ uint32_t adler32_neon(uint32_t adler32, uint8_t * start, uint32_t length); -+*/ -+/* -+Arguements list -+*/ -+ adler32 .req w0 -+ start .req x1 -+ length .req x2 -+ .global adler32_neon -+ .type adler32_neon, %function -+adler32_neon: -+/* -+local variables -+*/ -+ declare_var_vector_reg factor0 , 6 -+ declare_var_vector_reg factor1 , 7 -+ declare_var_vector_reg d0 , 4 -+ declare_var_vector_reg d1 , 5 -+ declare_var_vector_reg adacc , 2 -+ declare_var_vector_reg s2acc , 3 -+ declare_var_vector_reg zero , 16 -+ declare_var_vector_reg adler , 17 -+ declare_var_vector_reg back_d0 , 18 -+ declare_var_vector_reg back_d1 , 19 -+ declare_var_vector_reg sum2 , 20 -+ declare_var_vector_reg tmp2 , 20 -+ -+ adler0 .req w4 -+ adler1 .req w5 -+ adler0_x .req x4 -+ adler1_x .req x5 -+ end .req x0 -+ tmp .req w8 -+ tmp_x .req x8 -+ tmp1_x .req x9 -+ loop_cnt .req x10 -+ loop_const .req x11 -+ const_div1 .req w6 -+ const_div2 .req w7 -+ mov const_div1, 32881 -+ movk const_div1, 0x8007, lsl 16 -+ mov const_div2, 65521 -+ and adler0, adler32, 0xffff -+ lsr adler1, adler32, 16 -+ -+ lsr loop_cnt,length,5 -+ adrp x3,factors -+ add x3,x3,:lo12:factors -+ ld1 {factor0_v.16b-factor1_v.16b},[x3] -+ -+ add end,start,length -+ cbz loop_cnt,final_accum32 -+ ld1 {back_d0_v.16b-back_d1_v.16b},[start] -+ mov loop_const,173 -+ -+ movi v16.4s,0 -+ -+ -+ -+ -+great_than_32: -+ cmp loop_cnt,173 -+ csel loop_const,loop_cnt,loop_const,le -+ mov adacc_v.16b,zero_v.16b -+ mov s2acc_v.16b,zero_v.16b -+ ins adacc_v.s[0],adler0 -+ ins s2acc_v.s[0],adler1 -+ add tmp_x,start,loop_const,lsl 5 -+ -+accum32_neon: -+ add start,start,32 -+ mov d0_v.16b,back_d0_v.16b -+ mov d1_v.16b,back_d1_v.16b -+ ld1 {back_d0_v.16b-back_d1_v.16b},[start] -+ -+ shl tmp2_v.4s,adacc_v.4s,5 -+ add s2acc_v.4s,s2acc_v.4s,tmp2_v.4s -+ -+ uaddlp adler_v.8h,d0_v.16b -+ uadalp adler_v.8h,d1_v.16b -+ uadalp adacc_v.4s,adler_v.8h -+ -+ umull sum2_v.8h,factor0_v.8b ,d0_v.8b -+ umlal2 sum2_v.8h,factor0_v.16b,d0_v.16b -+ umlal sum2_v.8h,factor1_v.8b ,d1_v.8b -+ umlal2 sum2_v.8h,factor1_v.16b,d1_v.16b -+ uadalp s2acc_v.4s,sum2_v.8h -+ -+ cmp start,tmp_x -+ bne accum32_neon -+ -+ uaddlv adacc_d,adacc_v.4s -+ uaddlv s2acc_d,s2acc_v.4s -+ fmov adler0_x,adacc_d -+ fmov adler1_x,s2acc_d -+ -+ mod_adler adler0,tmp -+ mod_adler adler1,tmp -+ sub loop_cnt,loop_cnt,loop_const -+ cbnz loop_cnt,great_than_32 -+ -+final_accum32: -+ and length,length,31 -+ cbz length,end_func -+ -+accum32_body: -+ cmp start,end -+ beq end_func -+ ldrb tmp,[start],1 -+ add adler0,adler0,tmp -+ add adler1,adler1,adler0 -+ b accum32_body -+ -+end_func: -+ mod_adler adler0,tmp -+ mod_adler adler1,tmp -+ orr w0,adler0,adler1,lsl 16 -+ ret -+ -+ .size adler32_neon, .-adler32_neon -+ .section .rodata.cst16,"aM",@progbits,16 -+ .align 4 -+factors: -+ .quad 0x191a1b1c1d1e1f20 -+ .quad 0x1112131415161718 -+ .quad 0x090a0b0c0d0e0f10 -+ .quad 0x0102030405060708 -+ -diff -uNr zlib-1.2.11/Makefile.in ../zlib-1.2.11/Makefile.in ---- zlib-1.2.11/Makefile.in 2022-08-24 11:42:41.123603868 +0800 -+++ ../zlib-1.2.11/Makefile.in 2022-08-24 11:50:51.087023722 +0800 -@@ -57,11 +57,11 @@ - ZINC= - ZINCOUT=-I. - --OBJZ = adler32.o crc32_acle.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o -+OBJZ = adler32.o adler32_neon.o crc32_acle.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o - OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o - OBJC = $(OBJZ) $(OBJG) - --PIC_OBJZ = adler32.lo crc32_acle.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo -+PIC_OBJZ = adler32.lo adler32_neon.lo crc32_acle.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo - PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo - PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) - -@@ -158,6 +158,9 @@ - adler32.o: $(SRCDIR)adler32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c - -+adler32_neon.o: $(SRCDIR)contrib/arm/adler32_neon.S -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -c -o $@ $(SRCDIR)contrib/arm/adler32_neon.S -+ - crc32_acle.o: $(SRCDIR)contrib/arm/crc32_acle.c - $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -c -o $@ $(SRCDIR)contrib/arm/crc32_acle.c - -@@ -208,6 +211,11 @@ - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c - -@mv objs/adler32.o $@ - -+adler32_neon.lo: $(SRCDIR)contrib/arm/adler32_neon.S -+ -@mkdir objs 2>/dev/null || test -d objs -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -DPIC -c -o objs/adler32_neon.o $(SRCDIR)contrib/arm/adler32_neon.S -+ -@mv objs/adler32_neon.o $@ -+ - crc32_acle.lo: $(SRCDIR)contrib/arm/crc32_acle.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -DPIC -c -o objs/crc32_acle.o $(SRCDIR)contrib/arm/crc32_acle.c diff --git a/1008-zlib-anolis-Optimized-crc32-pmul-mix.patch b/1008-zlib-anolis-Optimized-crc32-pmul-mix.patch deleted file mode 100644 index dbfecf5..0000000 --- a/1008-zlib-anolis-Optimized-crc32-pmul-mix.patch +++ /dev/null @@ -1,580 +0,0 @@ -diff -uNr zlib-1.2.11/contrib/arm/crc32_common_mix.S ../zlib-1.2.11/contrib/arm/crc32_common_mix.S ---- zlib-1.2.11/contrib/arm/crc32_common_mix.S 1970-01-01 08:00:00.000000000 +0800 -+++ ../zlib-1.2.11/contrib/arm/crc32_common_mix.S 2022-08-25 19:26:40.154179151 +0800 -@@ -0,0 +1,437 @@ -+/********************************************************************** -+ Copyright(c) 2020 Arm Corporation All rights reserved. -+ -+ Redistribution and use in source and binary forms, with or without -+ modification, are permitted provided that the following conditions -+ are met: -+ * Redistributions of source code must retain the above copyright -+ notice, this list of conditions and the following disclaimer. -+ * Redistributions in binary form must reproduce the above copyright -+ notice, this list of conditions and the following disclaimer in -+ the documentation and/or other materials provided with the -+ distribution. -+ * Neither the name of Arm Corporation nor the names of its -+ contributors may be used to endorse or promote products derived -+ from this software without specific prior written permission. -+ -+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+**********************************************************************/ -+ -+ -+.macro declare_var_vector_reg name:req,reg:req -+ \name\()_q .req q\reg -+ \name\()_v .req v\reg -+ \name\()_s .req s\reg -+ \name\()_d .req d\reg -+.endm -+ declare_var_vector_reg k1k2,20 -+ declare_var_vector_reg k3k4,21 -+ declare_var_vector_reg poly,22 -+ declare_var_vector_reg k5k0,23 -+ declare_var_vector_reg mask,24 -+ declare_var_vector_reg fold_poly,25 -+ -+ declare_var_vector_reg tmp0,0 -+ declare_var_vector_reg tmp1,1 -+ declare_var_vector_reg tmp2,2 -+ declare_var_vector_reg tmp3,3 -+ declare_var_vector_reg tmp4,4 -+ declare_var_vector_reg tmp5,5 -+ declare_var_vector_reg tmp6,6 -+ declare_var_vector_reg tmp7,7 -+ declare_var_vector_reg pmull_data0,16 -+ declare_var_vector_reg pmull_data1,17 -+ declare_var_vector_reg pmull_data2,18 -+ declare_var_vector_reg pmull_data3,19 -+ -+ vzr .req v26 -+ -+ const_addr .req x3 -+ crc_blk_ptr .req x4 -+ pmull_blk_ptr .req x5 -+ crc_data0 .req x6 -+ crc_data1 .req x7 -+ crc_data2 .req x9 -+ crc_data3 .req x10 -+ wPmull .req w11 -+ xPmull .req x11 -+ -+ data0 .req x4 -+ data1 .req x5 -+ data2 .req x6 -+ data3 .req x7 -+ wdata .req w4 -+ -+.macro pmull_fold -+ -+ pmull2 tmp4_v.1q, tmp0_v.2d, k1k2_v.2d -+ pmull2 tmp5_v.1q, tmp1_v.2d, k1k2_v.2d -+ pmull2 tmp6_v.1q, tmp2_v.2d, k1k2_v.2d -+ pmull2 tmp7_v.1q, tmp3_v.2d, k1k2_v.2d -+ -+ pmull tmp0_v.1q, tmp0_v.1d, k1k2_v.1d -+ pmull tmp1_v.1q, tmp1_v.1d, k1k2_v.1d -+ pmull tmp2_v.1q, tmp2_v.1d, k1k2_v.1d -+ pmull tmp3_v.1q, tmp3_v.1d, k1k2_v.1d -+ ld1 {pmull_data0_v.16b-pmull_data3_v.16b},[pmull_blk_ptr],#64 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ -+ eor tmp0_v.16b, tmp0_v.16b, tmp4_v.16b -+ eor tmp1_v.16b, tmp1_v.16b, tmp5_v.16b -+ eor tmp2_v.16b, tmp2_v.16b, tmp6_v.16b -+ eor tmp3_v.16b, tmp3_v.16b, tmp7_v.16b -+ -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, v16.16b -+ eor tmp1_v.16b, tmp1_v.16b, v17.16b -+ eor tmp2_v.16b, tmp2_v.16b, v18.16b -+ eor tmp3_v.16b, tmp3_v.16b, v19.16b -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+.endm -+ -+ -+ -+.macro crc32_common_mix poly_type -+ .set MIX_BLK_SIZE,2048 -+ -+.ifc \poly_type,crc32 -+ mvn wCRC,wCRC -+.endif -+ cmp LEN,MIX_BLK_SIZE-1 -+ adr const_addr, .Lconstants -+ bls start_final -+ ld1 {k1k2_v.16b,k3k4_v.16b,poly_v.16b},[const_addr],#48 -+ movi vzr.16b, #0 -+ ld1 {k5k0_v.8b,mask_v.8b,fold_poly_v.8b},[const_addr] -+ -+loop_2048: -+ ld1 {tmp0_v.16b-tmp3_v.16b}, [BUF] -+ add pmull_blk_ptr,BUF,0x40 -+ add crc_blk_ptr, BUF,512 -+ mov tmp4_v.16b,vzr.16b -+ fmov tmp4_s, wCRC -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ eor tmp0_v.16b,tmp0_v.16b,tmp4_v.16b -+ mov wCRC, 0 -+ sub LEN,LEN,MIX_BLK_SIZE -+ cmp LEN,MIX_BLK_SIZE -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ -+ pmull_fold -+ pmull_fold -+ pmull_fold -+ pmull_fold -+ pmull_fold -+ pmull_fold -+ pmull_fold -+ -+ /* Folding cache line into 128bit */ -+ pmull2 tmp4_v.1q, tmp0_v.2d, k3k4_v.2d -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ pmull tmp0_v.1q, tmp0_v.1d, k3k4_v.1d -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp4_v.16b -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp1_v.16b -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ pmull2 tmp4_v.1q, tmp0_v.2d, k3k4_v.2d -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ pmull tmp0_v.1q, tmp0_v.1d, k3k4_v.1d -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp4_v.16b -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp2_v.16b -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ pmull2 tmp4_v.1q, tmp0_v.2d, k3k4_v.2d -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ pmull tmp0_v.1q, tmp0_v.1d, k3k4_v.1d -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp4_v.16b -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp3_v.16b -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ -+ -+ /** -+ * perform the last 64 bit fold, also -+ * adds 32 zeroes to the input stream -+ */ -+ ext tmp1_v.16b, tmp0_v.16b, tmp0_v.16b, #8 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ pmull2 tmp1_v.1q, tmp1_v.2d, k3k4_v.2d -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ ext tmp0_v.16b, tmp0_v.16b, vzr.16b, #8 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp1_v.16b -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ -+ /* final 32-bit fold */ -+ ext tmp1_v.16b, tmp0_v.16b, vzr.16b, #4 -+ and tmp0_v.16b, tmp0_v.16b, mask_v.16b -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ pmull tmp0_v.1q, tmp0_v.1d, k5k0_v.1d -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp1_v.16b -+ -+ /** -+ * Finish up with the bit-reversed barrett -+ * reduction 64 ==> 32 bits -+ */ -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ and tmp1_v.16b, tmp0_v.16b, mask_v.16b -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ ext tmp1_v.16b, vzr.16b, tmp1_v.16b, #8 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ pmull2 tmp1_v.1q, tmp1_v.2d, poly_v.2d -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ and tmp1_v.16b, tmp1_v.16b, mask_v.16b -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ pmull tmp1_v.1q, tmp1_v.1d, poly_v.1d -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ eor tmp0_v.16b, tmp0_v.16b, tmp1_v.16b -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ mov tmp4_v.16b,vzr.16b -+ mov tmp4_v.s[0], tmp0_v.s[1] -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ ldp crc_data0,crc_data1,[crc_blk_ptr],16 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ ldp crc_data2,crc_data3,[crc_blk_ptr],16 -+ -+ crc32_u64 wCRC,wCRC,crc_data0 -+ crc32_u64 wCRC,wCRC,crc_data1 -+ crc32_u64 wCRC,wCRC,crc_data2 -+ crc32_u64 wCRC,wCRC,crc_data3 -+ -+ pmull tmp4_v.1q, tmp4_v.1d, fold_poly_v.1d -+ add BUF,BUF,MIX_BLK_SIZE -+ fmov xPmull, tmp4_d -+ crc32_u64 wPmull, wzr, xPmull -+ eor wCRC, wPmull, wCRC -+ bge loop_2048 -+start_final: -+ cmp LEN, 63 -+ bls .loop_16B -+.p2align 6 -+.loop_64B: -+ ldp data0, data1, [BUF],#16 -+ sub LEN,LEN,#64 -+ ldp data2, data3, [BUF],#16 -+ crc32_u64 wCRC, wCRC, data0 -+ crc32_u64 wCRC, wCRC, data1 -+ ldp data0, data1, [BUF],#16 -+ crc32_u64 wCRC, wCRC, data2 -+ crc32_u64 wCRC, wCRC, data3 -+ ldp data2, data3, [BUF],#16 -+ crc32_u64 wCRC, wCRC, data0 -+ crc32_u64 wCRC, wCRC, data1 -+ crc32_u64 wCRC, wCRC, data2 -+ crc32_u64 wCRC, wCRC, data3 -+ cmp LEN,#64 -+ bge .loop_64B -+ cbz LEN, .finish_exit -+ -+.p2align 6 -+.loop_16B: -+ cmp LEN, 15 -+ bls .less_16B -+ ldp data0, data1, [BUF],#16 -+ sub LEN,LEN,#16 -+ crc32_u64 wCRC, wCRC, data0 -+ crc32_u64 wCRC, wCRC, data1 -+ cmp LEN,15 -+ bls .less_16B -+ ldp data0, data1, [BUF],#16 -+ sub LEN,LEN,#16 -+ crc32_u64 wCRC, wCRC, data0 -+ crc32_u64 wCRC, wCRC, data1 -+ cmp LEN,15 -+ bls .less_16B -+ ldp data0, data1, [BUF],#16 -+ sub LEN,LEN,#16 //MUST less than 16B -+ crc32_u64 wCRC, wCRC, data0 -+ crc32_u64 wCRC, wCRC, data1 -+.less_16B: -+ cbz LEN, .finish_exit -+ cmp LEN, 7 -+ bls .less_8B -+ ldr data0, [BUF], 8 -+ sub LEN, LEN, #8 -+ crc32_u64 wCRC, wCRC, data0 -+.less_8B: -+ cbz LEN, .finish_exit -+ cmp LEN, 3 -+ bls .less_4B -+ ldr wdata, [BUF], 4 -+ sub LEN, LEN, #4 -+ crc32_u32 wCRC, wCRC, wdata -+.less_4B: -+ cbz LEN, .finish_exit -+ cmp LEN, 1 -+ bls .less_2B -+ ldrh wdata, [BUF], 2 -+ sub LEN, LEN, #2 -+ crc32_u16 wCRC, wCRC, wdata -+.less_2B: -+ cbz LEN, .finish_exit -+ ldrb wdata, [BUF] -+ crc32_u8 wCRC, wCRC, wdata -+.finish_exit: -+.ifc \poly_type,crc32 -+ mvn w0, wCRC -+.else -+ mov w0, wCRC -+.endif -+ ret -+.endm -diff -uNr zlib-1.2.11/contrib/arm/crc32_mix.S ../zlib-1.2.11/contrib/arm/crc32_mix.S ---- zlib-1.2.11/contrib/arm/crc32_mix.S 1970-01-01 08:00:00.000000000 +0800 -+++ ../zlib-1.2.11/contrib/arm/crc32_mix.S 2022-08-25 19:44:42.946181615 +0800 -@@ -0,0 +1,71 @@ -+/********************************************************************** -+ Copyright(c) 2020 Arm Corporation All rights reserved. -+ -+ Redistribution and use in source and binary forms, with or without -+ modification, are permitted provided that the following conditions -+ are met: -+ * Redistributions of source code must retain the above copyright -+ notice, this list of conditions and the following disclaimer. -+ * Redistributions in binary form must reproduce the above copyright -+ notice, this list of conditions and the following disclaimer in -+ the documentation and/or other materials provided with the -+ distribution. -+ * Neither the name of Arm Corporation nor the names of its -+ contributors may be used to endorse or promote products derived -+ from this software without specific prior written permission. -+ -+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+**********************************************************************/ -+#if defined(__ARM_FEATURE_CRC32) && defined(ARM_NEON) -+ -+ .text -+ .align 6 -+ .arch armv8-a+crypto+crc -+ -+#include "crc32_common_mix.S" -+.Lconstants: -+ .octa 0x00000001c6e415960000000154442bd4 -+ .octa 0x00000000ccaa009e00000001751997d0 -+ .octa 0x00000001F701164100000001DB710641 -+ .quad 0x0000000163cd6124 -+ .quad 0x00000000FFFFFFFF -+ .quad 0x000000001753ab84 -+.macro crc32_u64 dst,src,data -+ crc32x \dst,\src,\data -+.endm -+.macro crc32_u32 dst,src,data -+ crc32w \dst,\src,\data -+.endm -+.macro crc32_u16 dst,src,data -+ crc32h \dst,\src,\data -+.endm -+.macro crc32_u8 dst,src,data -+ crc32b \dst,\src,\data -+.endm -+ -+ -+/** -+ * uint32_t ptg_crc32(uint32_t crc, const unsigned char *data, size_t len); -+ * -+ */ -+ BUF .req x1 -+ LEN .req x2 -+ CRC .req x0 -+ wCRC .req w0 -+ .align 6 -+ .global ptg_crc32 -+ .type ptg_crc32, %function -+ptg_crc32: -+ crc32_common_mix crc32 -+ .size ptg_crc32, .-ptg_crc32 -+#endif -diff -uNr zlib-1.2.11/crc32.c ../zlib-1.2.11/crc32.c ---- zlib-1.2.11/crc32.c 2022-08-25 19:18:06.943264265 +0800 -+++ ../zlib-1.2.11/crc32.c 2022-08-25 19:30:51.765812383 +0800 -@@ -206,6 +206,10 @@ - extern uint32_t crc32_acle(uint32_t, const unsigned char *, uint64_t); - #endif - -+#if defined(__ARM_FEATURE_CRC32) && defined(ARM_NEON) -+extern uint32_t ptg_crc32(uint32_t, const unsigned char *, uint64_t); -+#endif -+ - /* ========================================================================= */ - unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; -@@ -225,7 +229,9 @@ - - endian = 1; - if (*((unsigned char *)(&endian))) --#if defined(__ARM_FEATURE_CRC32) -+#if defined(__ARM_FEATURE_CRC32) && defined(ARM_NEON) -+ return ptg_crc32(crc, buf, len); -+#elif defined(__ARM_FEATURE_CRC32) - return crc32_acle(crc, buf, len); - #else - return crc32_little(crc, buf, len); -diff -uNr zlib-1.2.11/Makefile.in ../zlib-1.2.11/Makefile.in ---- zlib-1.2.11/Makefile.in 2022-08-25 19:18:23.206722650 +0800 -+++ ../zlib-1.2.11/Makefile.in 2022-08-25 19:35:00.657538475 +0800 -@@ -57,11 +57,11 @@ - ZINC= - ZINCOUT=-I. - --OBJZ = adler32.o adler32_neon.o crc32_acle.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o -+OBJZ = adler32.o adler32_neon.o crc32_acle.o crc32_mix.o crc32.o deflate.o infback.o inffast.o inffast.o inflate.o inftrees.o trees.o zutil.o - OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o - OBJC = $(OBJZ) $(OBJG) - --PIC_OBJZ = adler32.lo adler32_neon.lo crc32_acle.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo -+PIC_OBJZ = adler32.lo adler32_neon.lo crc32_acle.lo crc32_mix.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo - PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo - PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) - -@@ -164,6 +164,9 @@ - crc32_acle.o: $(SRCDIR)contrib/arm/crc32_acle.c - $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -c -o $@ $(SRCDIR)contrib/arm/crc32_acle.c - -+crc32_mix.o: $(SRCDIR)contrib/arm/crc32_mix.S -+ $(CC) $(CFLAGS) $(ZINC) -I$(SRCDIR) -c -o $@ $(SRCDIR)contrib/arm/crc32_mix.S -+ - crc32.o: $(SRCDIR)crc32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c - -@@ -221,6 +224,11 @@ - $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -DPIC -c -o objs/crc32_acle.o $(SRCDIR)contrib/arm/crc32_acle.c - -@mv objs/crc32_acle.o $@ - -+crc32_mix.lo: $(SRCDIR)contrib/arm/crc32_mix.S -+ -@mkdir objs 2>/dev/null || test -d objs -+ $(CC) $(SFLAGS) $(ZINC) -I$(SRCDIR) -DPIC -c -o objs/crc32_mix.o $(SRCDIR)contrib/arm/crc32_mix.S -+ -@mv objs/crc32_mix.o $@ -+ - crc32.lo: $(SRCDIR)crc32.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c diff --git a/1009-zlib-anolis-Neon-Optimized-chunkcopy_neon.patch b/1009-zlib-anolis-Neon-Optimized-chunkcopy_neon.patch deleted file mode 100644 index fd4051e..0000000 --- a/1009-zlib-anolis-Neon-Optimized-chunkcopy_neon.patch +++ /dev/null @@ -1,615 +0,0 @@ -diff -Nru zlib-1.2.11/contrib/arm/arm_chunk_copy_neon.h ../zlib-1.2.11/contrib/arm/arm_chunk_copy_neon.h ---- zlib-1.2.11/contrib/arm/arm_chunk_copy_neon.h 1970-01-01 08:00:00.000000000 +0800 -+++ ../zlib-1.2.11/contrib/arm/arm_chunk_copy_neon.h 2022-08-30 17:29:33.032693593 +0800 -@@ -0,0 +1,311 @@ -+#if (defined(__ARM_NEON__) || defined(__ARM_NEON)) -+ -+#define ENABLE_ARM_CHUNK_NEON -+#define INFLATE_FAST_MIN_HAVE 6 -+#define INFLATE_FAST_MIN_LEFT 258 -+ -+#include -+#include -+ -+typedef uint8x16_t chunk_t; -+ -+#define CHUNK_SIZE 16 -+ -+#define HAVE_CHUNKMEMSET_1 -+#define HAVE_CHUNKMEMSET_2 -+#define HAVE_CHUNKMEMSET_4 -+#define HAVE_CHUNKMEMSET_8 -+ -+#define zmemcpy_2(dest, src) memcpy(dest, src, 2) -+#define zmemcmp_2(str1, str2) memcmp(str1, str2, 2) -+#define zmemcpy_4(dest, src) memcpy(dest, src, 4) -+#define zmemcmp_4(str1, str2) memcmp(str1, str2, 4) -+#define zmemcpy_8(dest, src) memcpy(dest, src, 8) -+#define zmemcmp_8(str1, str2) memcmp(str1, str2, 8) -+#define MIN(a, b) ((a) > (b) ? (b) : (a)) -+#define Z_INTERNAL -+ -+static inline void chunkmemset_1(uint8_t *from, chunk_t *chunk) { -+ *chunk = vld1q_dup_u8(from); -+} -+ -+static inline void chunkmemset_2(uint8_t *from, chunk_t *chunk) { -+ uint16_t tmp; -+ zmemcpy_2(&tmp, from); -+ *chunk = vreinterpretq_u8_u16(vdupq_n_u16(tmp)); -+} -+ -+static inline void chunkmemset_4(uint8_t *from, chunk_t *chunk) { -+ uint32_t tmp; -+ zmemcpy_4(&tmp, from); -+ *chunk = vreinterpretq_u8_u32(vdupq_n_u32(tmp)); -+} -+ -+static inline void chunkmemset_8(uint8_t *from, chunk_t *chunk) { -+ uint64_t tmp; -+ zmemcpy_8(&tmp, from); -+ *chunk = vreinterpretq_u8_u64(vdupq_n_u64(tmp)); -+} -+ -+#define CHUNKSIZE chunksize_neon -+#define CHUNKCOPY chunkcopy_neon -+#define CHUNKCOPY_SAFE chunkcopy_safe_neon -+#define CHUNKUNROLL chunkunroll_neon -+#define CHUNKMEMSET chunkmemset_neon -+#define CHUNKMEMSET_SAFE chunkmemset_safe_neon -+ -+static inline void loadchunk(uint8_t const *s, chunk_t *chunk) { -+ *chunk = vld1q_u8(s); -+} -+ -+static inline void storechunk(uint8_t *out, chunk_t *chunk) { -+ vst1q_u8(out, *chunk); -+} -+ -+/* Behave like chunkcopy, but avoid writing beyond of legal output. */ -+static inline uint8_t* chunkcopy_safe(uint8_t *out, uint8_t *from, size_t len, uint8_t *safe) { -+ uint32_t safelen = (uint32_t)((safe - out) + 1); -+ len = MIN(len, safelen); -+ int32_t olap_src = from >= out && from < out + len; -+ int32_t olap_dst = out >= from && out < from + len; -+ size_t tocopy; -+ -+ /* For all cases without overlap, memcpy is ideal */ -+ if (!(olap_src || olap_dst)) { -+ memcpy(out, from, len); -+ return out + len; -+ } -+ -+ /* We are emulating a self-modifying copy loop here. To do this in a way that doesn't produce undefined behavior, -+ * we have to get a bit clever. First if the overlap is such that src falls between dst and dst+len, we can do the -+ * initial bulk memcpy of the nonoverlapping region. Then, we can leverage the size of this to determine the safest -+ * atomic memcpy size we can pick such that we have non-overlapping regions. This effectively becomes a safe look -+ * behind or lookahead distance */ -+ size_t non_olap_size = ((from > out) ? from - out : out - from); -+ -+ memcpy(out, from, non_olap_size); -+ out += non_olap_size; -+ from += non_olap_size; -+ len -= non_olap_size; -+ -+ /* So this doesn't give use a worst case scenario of function calls in a loop, -+ * we want to instead break this down into copy blocks of fixed lengths */ -+ while (len) { -+ tocopy = MIN(non_olap_size, len); -+ len -= tocopy; -+ -+ while (tocopy >= 32) { -+ memcpy(out, from, 32); -+ out += 32; -+ from += 32; -+ tocopy -= 32; -+ } -+ -+ if (tocopy >= 16) { -+ memcpy(out, from, 16); -+ out += 16; -+ from += 16; -+ tocopy -= 16; -+ } -+ -+ if (tocopy >= 8) { -+ zmemcpy_8(out, from); -+ out += 8; -+ from += 8; -+ tocopy -= 8; -+ } -+ -+ if (tocopy >= 4) { -+ zmemcpy_4(out, from); -+ out += 4; -+ from += 4; -+ tocopy -= 4; -+ } -+ -+ if (tocopy >= 2) { -+ zmemcpy_2(out, from); -+ out += 2; -+ from += 2; -+ tocopy -= 2; -+ } -+ -+ if (tocopy) { -+ *out++ = *from++; -+ } -+ } -+ -+ return out; -+} -+ -+/* Returns the chunk size */ -+ZLIB_INTERNAL uint32_t CHUNKSIZE(void) { -+ return sizeof(chunk_t); -+} -+ -+/* Behave like memcpy, but assume that it's OK to overwrite at least -+ chunk_t bytes of output even if the length is shorter than this, -+ that the length is non-zero, and that `from` lags `out` by at least -+ sizeof chunk_t bytes (or that they don't overlap at all or simply that -+ the distance is less than the length of the copy). -+ -+ Aside from better memory bus utilisation, this means that short copies -+ (chunk_t bytes or fewer) will fall straight through the loop -+ without iteration, which will hopefully make the branch prediction more -+ reliable. */ -+ZLIB_INTERNAL uint8_t* CHUNKCOPY(uint8_t *out, uint8_t const *from, unsigned len) { -+ Assert(len > 0, "chunkcopy should never have a length 0"); -+ chunk_t chunk; -+ int32_t align = ((len - 1) % sizeof(chunk_t)) + 1; -+ loadchunk(from, &chunk); -+ storechunk(out, &chunk); -+ out += align; -+ from += align; -+ len -= align; -+ while (len > 0) { -+ loadchunk(from, &chunk); -+ storechunk(out, &chunk); -+ out += sizeof(chunk_t); -+ from += sizeof(chunk_t); -+ len -= sizeof(chunk_t); -+ } -+ return out; -+} -+ -+/* Perform short copies until distance can be rewritten as being at least -+ sizeof chunk_t. -+ -+ This assumes that it's OK to overwrite at least the first -+ 2*sizeof(chunk_t) bytes of output even if the copy is shorter than this. -+ This assumption holds because inflate_fast() starts every iteration with at -+ least 258 bytes of output space available (258 being the maximum length -+ output from a single token; see inflate_fast()'s assumptions below). */ -+ZLIB_INTERNAL uint8_t* CHUNKUNROLL(uint8_t *out, unsigned *dist, unsigned *len) { -+ unsigned char const *from = out - *dist; -+ chunk_t chunk; -+ while (*dist < *len && *dist < sizeof(chunk_t)) { -+ loadchunk(from, &chunk); -+ storechunk(out, &chunk); -+ out += *dist; -+ *len -= *dist; -+ *dist += *dist; -+ } -+ return out; -+} -+ -+/* Copy DIST bytes from OUT - DIST into OUT + DIST * k, for 0 <= k < LEN/DIST. -+ Return OUT + LEN. */ -+ZLIB_INTERNAL uint8_t* CHUNKMEMSET(uint8_t *out, unsigned dist, unsigned len) { -+ /* Debug performance related issues when len < sizeof(uint64_t): -+ Assert(len >= sizeof(uint64_t), "chunkmemset should be called on larger chunks"); */ -+ Assert(dist > 0, "chunkmemset cannot have a distance 0"); -+ -+ uint8_t *from = out - dist; -+ -+ if (dist == 1) { -+ memset(out, *from, len); -+ return out + len; -+ } else if (dist > sizeof(chunk_t)) { -+ return CHUNKCOPY(out, out - dist, len); -+ } -+ -+ chunk_t chunk_load; -+ uint32_t chunk_mod = 0; -+ /* TODO: possibly build up a permutation table for this if not an even modulus */ -+#ifdef HAVE_CHUNKMEMSET_2 -+ if (dist == 2) { -+ chunkmemset_2(from, &chunk_load); -+ } else -+#endif -+#ifdef HAVE_CHUNKMEMSET_4 -+ if (dist == 4) { -+ chunkmemset_4(from, &chunk_load); -+ } else -+#endif -+#ifdef HAVE_CHUNKMEMSET_8 -+ if (dist == 8) { -+ chunkmemset_8(from, &chunk_load); -+ } else if (dist == sizeof(chunk_t)) { -+ loadchunk(from, &chunk_load); -+ } else -+#endif -+ { -+ /* This code takes string of length dist from "from" and repeats -+ * it for as many times as can fit in a chunk_t (vector register) */ -+ uint32_t cpy_dist; -+ uint32_t bytes_remaining = sizeof(chunk_t); -+ uint8_t *cur_chunk = (uint8_t *)&chunk_load; -+ while (bytes_remaining) { -+ cpy_dist = MIN(dist, bytes_remaining); -+ memcpy(cur_chunk, from, cpy_dist); -+ bytes_remaining -= cpy_dist; -+ cur_chunk += cpy_dist; -+ /* This allows us to bypass an expensive integer division since we're effectively -+ * counting in this loop, anyway. However, we may have to derive a similarly -+ * sensible solution for if we use a permutation table that allows us to construct -+ * this vector in one load and one permute instruction */ -+ chunk_mod = cpy_dist; -+ } -+ } -+ -+ /* If we're lucky enough and dist happens to be an even modulus of our vector length, -+ * we can do two stores per loop iteration, which for most ISAs, especially x86, is beneficial */ -+ if (chunk_mod == 0) { -+ while (len >= (2 * sizeof(chunk_t))) { -+ storechunk(out, &chunk_load); -+ storechunk(out + sizeof(chunk_t), &chunk_load); -+ out += 2 * sizeof(chunk_t); -+ len -= 2 * sizeof(chunk_t); -+ } -+ } -+ -+ /* If we don't have a "dist" length that divides evenly into a vector -+ * register, we can write the whole vector register but we need only -+ * advance by the amount of the whole string that fits in our chunk_t. -+ * If we do divide evenly into the vector length, adv_amount = chunk_t size*/ -+ uint32_t adv_amount = sizeof(chunk_t) - chunk_mod; -+ while (len >= sizeof(chunk_t)) { -+ storechunk(out, &chunk_load); -+ len -= adv_amount; -+ out += adv_amount; -+ } -+ -+ if (len) { -+ memcpy(out, &chunk_load, len); -+ out += len; -+ } -+ -+ return out; -+} -+ -+ZLIB_INTERNAL uint8_t* CHUNKMEMSET_SAFE(uint8_t *out, unsigned dist, unsigned len, unsigned left) { -+#if !defined(UNALIGNED64_OK) -+#if !defined(UNALIGNED_OK) -+ static const uint32_t align_mask = 7; -+#else -+ static const uint32_t align_mask = 3; -+#endif -+#endif -+ -+ len = MIN(len, left); -+ uint8_t *from = out - dist; -+#if !defined(UNALIGNED64_OK) -+ while (((uintptr_t)out & align_mask) && (len > 0)) { -+ *out++ = *from++; -+ --len; -+ --left; -+ } -+#endif -+ if (left < (unsigned)(3 * sizeof(chunk_t))) { -+ while (len > 0) { -+ *out++ = *from++; -+ --len; -+ } -+ return out; -+ } -+ if (len) -+ return CHUNKMEMSET(out, dist, len); -+ -+ return out; -+} -+ -+#endif -diff -Nru zlib-1.2.11/inffast.c ../zlib-1.2.11/inffast.c ---- zlib-1.2.11/inffast.c 2017-01-16 01:29:40.000000000 +0800 -+++ ../zlib-1.2.11/inffast.c 2022-08-30 17:46:16.887320481 +0800 -@@ -7,7 +7,7 @@ - #include "inftrees.h" - #include "inflate.h" - #include "inffast.h" -- -+#include "contrib/arm/arm_chunk_copy_neon.h" - #ifdef ASMINF - # pragma message("Assembler code may have bugs -- use at your own risk") - #else -@@ -47,10 +47,268 @@ - requires strm->avail_out >= 258 for each loop to avoid checking for - output space. - */ -+#ifdef ENABLE_ARM_CHUNK_NEON -+void ZLIB_INTERNAL arm_inflate_fast(strm, start) -+z_streamp strm; -+unsigned start; /* inflate()'s starting value for strm->avail_out */ -+{ -+ struct inflate_state FAR *state; -+ z_const unsigned char FAR *in; /* local strm->next_in */ -+ z_const unsigned char FAR *last; /* have enough input while in < last */ -+ unsigned char FAR *out; /* local strm->next_out */ -+ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ -+ unsigned char FAR *end; /* while out < end, enough space available */ -+ unsigned char *safe; /* can use chunkcopy provided out < safe */ -+#ifdef INFLATE_STRICT -+ unsigned dmax; /* maximum distance from zlib header */ -+#endif -+ unsigned wsize; /* window size or zero if not using window */ -+ unsigned whave; /* valid bytes in the window */ -+ unsigned wnext; /* window write index */ -+ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ -+ unsigned long hold; /* local strm->hold */ -+ unsigned bits; /* local strm->bits */ -+ code const FAR *lcode; /* local strm->lencode */ -+ code const FAR *dcode; /* local strm->distcode */ -+ unsigned lmask; /* mask for first level of length codes */ -+ unsigned dmask; /* mask for first level of distance codes */ -+ code here; /* retrieved table entry */ -+ unsigned op; /* code bits, operation, extra bits, or */ -+ /* window position, window bytes to copy */ -+ unsigned len; /* match length, unused bytes */ -+ unsigned dist; /* match distance */ -+ unsigned char FAR *from; /* where to copy match from */ -+ unsigned extra_safe; /* copy chunks safely in all cases */ -+ uint32_t chunksize = chunksize_neon(); -+ /* copy state to local variables */ -+ state = (struct inflate_state FAR *)strm->state; -+ in = strm->next_in; -+ last = in + (strm->avail_in - 5); -+ out = strm->next_out; -+ beg = out - (start - strm->avail_out); -+ end = out + (strm->avail_out - 257); -+ safe = out + strm->avail_out; -+#ifdef INFLATE_STRICT -+ dmax = state->dmax; -+#endif -+ wsize = state->wsize; -+ whave = state->whave; -+ wnext = state->wnext; -+ window = state->window; -+ hold = state->hold; -+ bits = state->bits; -+ lcode = state->lencode; -+ dcode = state->distcode; -+ lmask = (1U << state->lenbits) - 1; -+ dmask = (1U << state->distbits) - 1; -+ extra_safe = (wsize != 0 && out >= window && out + INFLATE_FAST_MIN_LEFT <= window + wsize); -+ /* decode literals and length/distances until end-of-block or not enough -+ input data or output space */ -+ do { -+ if (bits < 15) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ here = lcode[hold & lmask]; -+ dolen: -+ op = (unsigned)(here.bits); -+ hold >>= op; -+ bits -= op; -+ op = (unsigned)(here.op); -+ if (op == 0) { /* literal */ -+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? -+ "inflate: literal '%c'\n" : -+ "inflate: literal 0x%02x\n", here.val)); -+ *out++ = (unsigned char)(here.val); -+ } -+ else if (op & 16) { /* length base */ -+ len = (unsigned)(here.val); -+ op &= 15; /* number of extra bits */ -+ if (op) { -+ if (bits < op) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ len += (unsigned)hold & ((1U << op) - 1); -+ hold >>= op; -+ bits -= op; -+ } -+ Tracevv((stderr, "inflate: length %u\n", len)); -+ if (bits < 15) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ here = dcode[hold & dmask]; -+ dodist: -+ op = (unsigned)(here.bits); -+ hold >>= op; -+ bits -= op; -+ op = (unsigned)(here.op); -+ if (op & 16) { /* distance base */ -+ dist = (unsigned)(here.val); -+ op &= 15; /* number of extra bits */ -+ if (bits < op) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ if (bits < op) { -+ hold += (unsigned long)(*in++) << bits; -+ bits += 8; -+ } -+ } -+ dist += (unsigned)hold & ((1U << op) - 1); -+#ifdef INFLATE_STRICT -+ if (dist > dmax) { -+ strm->msg = (char *)"invalid distance too far back"; -+ state->mode = BAD; -+ break; -+ } -+#endif -+ hold >>= op; -+ bits -= op; -+ Tracevv((stderr, "inflate: distance %u\n", dist)); -+ op = (unsigned)(out - beg); /* max distance in output */ -+ if (dist > op) { /* see if copy from window */ -+ op = dist - op; /* distance back in window */ -+ if (op > whave) { -+ if (state->sane) { -+ strm->msg = -+ (char *)"invalid distance too far back"; -+ state->mode = BAD; -+ break; -+ } -+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR -+ if (len <= op - whave) { -+ do { -+ *out++ = 0; -+ } while (--len); -+ continue; -+ } -+ len -= op - whave; -+ do { -+ *out++ = 0; -+ } while (--op > whave); -+ if (op == 0) { -+ from = out - dist; -+ do { -+ *out++ = *from++; -+ } while (--len); -+ continue; -+ } -+#endif -+ } -+ from = window; -+ if (wnext == 0) { /* very common case */ -+ from += wsize - op; -+ } else if (wnext >= op) { /* contiguous in window */ -+ from += wnext - op; -+ } else { /* wrap around window */ -+ op -= wnext; -+ from += wsize - op; -+ if (op < len) { /* some from end of window */ -+ len -= op; -+ out = chunkcopy_safe(out, from, op, safe); -+ from = window; /* more from start of window */ -+ op = wnext; -+ /* This (rare) case can create a situation where -+ the first chunkcopy below must be checked. -+ */ -+ } -+ } -+ if (op < len) { /* still need some from output */ -+ len -= op; -+ out = chunkcopy_safe(out, from, op, safe); -+ out = chunkunroll_neon(out, &dist, &len); -+ out = chunkcopy_safe(out, out - dist, len, safe); -+ } else { -+ out = chunkcopy_safe(out, from, len, safe); -+ } -+ } else if (extra_safe) { -+ /* Whole reference is in range of current output. */ -+ if (dist >= len || dist >= chunksize) -+ out = chunkcopy_safe(out, out - dist, len, safe); -+ else -+ out = chunkmemset_safe_neon(out, dist, len, (unsigned)((safe - out) + 1)); -+ } else { -+ /* Whole reference is in range of current output. No range checks are -+ necessary because we start with room for at least 258 bytes of output, -+ so unroll and roundoff operations can write beyond `out+len` so long -+ as they stay within 258 bytes of `out`. -+ */ -+ if (dist >= len || dist >= chunksize) -+ out = chunkcopy_neon(out, out - dist, len); -+ else -+ out = chunkmemset_neon(out, dist, len); -+ } -+ } else if ((op & 64) == 0) { /* 2nd level distance code */ -+ here = dcode[here.val + (hold & ((1U << op) - 1))]; -+ goto dodist; -+ } -+ else { -+ strm->msg = (char *)"invalid distance code"; -+ state->mode = BAD; -+ break; -+ } -+ } -+ else if ((op & 64) == 0) { /* 2nd level length code */ -+ here = lcode[here.val + (hold & ((1U << op) - 1))]; -+ goto dolen; -+ } -+ else if (op & 32) { /* end-of-block */ -+ Tracevv((stderr, "inflate: end of block\n")); -+ state->mode = TYPE; -+ break; -+ } -+ else { -+ strm->msg = (char *)"invalid literal/length code"; -+ state->mode = BAD; -+ break; -+ } -+ } while (in < last && out < end); -+ -+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ -+ len = bits >> 3; -+ in -= len; -+ bits -= len << 3; -+ hold &= (1U << bits) - 1; -+ -+ /* update state and return */ -+ strm->next_in = in; -+ strm->next_out = out; -+ strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); -+ strm->avail_out = (unsigned)(out < end ? -+ 257 + (end - out) : 257 - (out - end)); -+ state->hold = hold; -+ state->bits = bits; -+ return; -+} -+ -+/* -+ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): -+ - Using bit fields for code structure -+ - Different op definition to avoid & for extra bits (do & for table bits) -+ - Three separate decoding do-loops for direct, window, and wnext == 0 -+ - Special case for distance > 1 copies to do overlapped load and store copy -+ - Explicit branch predictions (based on measured branch probabilities) -+ - Deferring match copy and interspersed it with decoding subsequent codes -+ - Swapping literal/length else -+ - Swapping window/direct else -+ - Larger unrolled copy loops (three is about right) -+ - Moving len -= 3 statement into middle of loop -+ */ -+#endif -+ - void ZLIB_INTERNAL inflate_fast(strm, start) - z_streamp strm; - unsigned start; /* inflate()'s starting value for strm->avail_out */ - { -+#ifdef ENABLE_ARM_CHUNK_NEON -+ return arm_inflate_fast(strm, start); -+#endif -+ - struct inflate_state FAR *state; - z_const unsigned char FAR *in; /* local strm->next_in */ - z_const unsigned char FAR *last; /* have enough input while in < last */ -@@ -306,18 +564,4 @@ - return; - } - --/* -- inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): -- - Using bit fields for code structure -- - Different op definition to avoid & for extra bits (do & for table bits) -- - Three separate decoding do-loops for direct, window, and wnext == 0 -- - Special case for distance > 1 copies to do overlapped load and store copy -- - Explicit branch predictions (based on measured branch probabilities) -- - Deferring match copy and interspersed it with decoding subsequent codes -- - Swapping literal/length else -- - Swapping window/direct else -- - Larger unrolled copy loops (three is about right) -- - Moving len -= 3 statement into middle of loop -- */ -- - #endif /* !ASMINF */ diff --git a/dist b/dist new file mode 100644 index 0000000..535c690 --- /dev/null +++ b/dist @@ -0,0 +1 @@ +an8_7 diff --git a/download b/download new file mode 100644 index 0000000..3215315 --- /dev/null +++ b/download @@ -0,0 +1 @@ +85adef240c5f370b308da8c938951a68 zlib-1.2.11.tar.xz diff --git a/zlib-1.2.11-CVE-2018-25032.patch b/zlib-1.2.11-CVE-2018-25032.patch new file mode 100644 index 0000000..800692f --- /dev/null +++ b/zlib-1.2.11-CVE-2018-25032.patch @@ -0,0 +1,346 @@ +From 5c44459c3b28a9bd3283aaceab7c615f8020c531 Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Tue, 17 Apr 2018 22:09:22 -0700 +Subject: [PATCH] Fix a bug that can crash deflate on some input when using + Z_FIXED. + +This bug was reported by Danilo Ramos of Eideticom, Inc. It has +lain in wait 13 years before being found! The bug was introduced +in zlib 1.2.2.2, with the addition of the Z_FIXED option. That +option forces the use of fixed Huffman codes. For rare inputs with +a large number of distant matches, the pending buffer into which +the compressed data is written can overwrite the distance symbol +table which it overlays. That results in corrupted output due to +invalid distances, and can result in out-of-bound accesses, +crashing the application. + +The fix here combines the distance buffer and literal/length +buffers into a single symbol buffer. Now three bytes of pending +buffer space are opened up for each literal or length/distance +pair consumed, instead of the previous two bytes. This assures +that the pending buffer cannot overwrite the symbol table, since +the maximum fixed code compressed length/distance is 31 bits, and +since there are four bytes of pending space for every three bytes +of symbol space. +--- + deflate.c | 74 ++++++++++++++++++++++++++++++++++++++++--------------- + deflate.h | 25 +++++++++---------- + trees.c | 50 +++++++++++-------------------------- + 3 files changed, 79 insertions(+), 70 deletions(-) + +diff --git a/deflate.c b/deflate.c +index 425babc..19cba87 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -255,11 +255,6 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + +- ushf *overlay; +- /* We overlay pending_buf and d_buf+l_buf. This works since the average +- * output size for (length,distance) codes is <= 24 bits. +- */ +- + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; +@@ -329,9 +324,47 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + +- overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); +- s->pending_buf = (uchf *) overlay; +- s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); ++ /* We overlay pending_buf and sym_buf. This works since the average size ++ * for length/distance pairs over any compressed block is assured to be 31 ++ * bits or less. ++ * ++ * Analysis: The longest fixed codes are a length code of 8 bits plus 5 ++ * extra bits, for lengths 131 to 257. The longest fixed distance codes are ++ * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest ++ * possible fixed-codes length/distance pair is then 31 bits total. ++ * ++ * sym_buf starts one-fourth of the way into pending_buf. So there are ++ * three bytes in sym_buf for every four bytes in pending_buf. Each symbol ++ * in sym_buf is three bytes -- two for the distance and one for the ++ * literal/length. As each symbol is consumed, the pointer to the next ++ * sym_buf value to read moves forward three bytes. From that symbol, up to ++ * 31 bits are written to pending_buf. The closest the written pending_buf ++ * bits gets to the next sym_buf symbol to read is just before the last ++ * code is written. At that time, 31*(n-2) bits have been written, just ++ * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at ++ * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 ++ * symbols are written.) The closest the writing gets to what is unread is ++ * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and ++ * can range from 128 to 32768. ++ * ++ * Therefore, at a minimum, there are 142 bits of space between what is ++ * written and what is read in the overlain buffers, so the symbols cannot ++ * be overwritten by the compressed data. That space is actually 139 bits, ++ * due to the three-bit fixed-code block header. ++ * ++ * That covers the case where either Z_FIXED is specified, forcing fixed ++ * codes, or when the use of fixed codes is chosen, because that choice ++ * results in a smaller compressed block than dynamic codes. That latter ++ * condition then assures that the above analysis also covers all dynamic ++ * blocks. A dynamic-code block will only be chosen to be emitted if it has ++ * fewer bits than a fixed-code block would for the same set of symbols. ++ * Therefore its average symbol length is assured to be less than 31. So ++ * the compressed data for a dynamic block also cannot overwrite the ++ * symbols from which it is being constructed. ++ */ ++ ++ s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); ++ s->pending_buf_size = (ulg)s->lit_bufsize * 4; + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { +@@ -340,8 +373,12 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + deflateEnd (strm); + return Z_MEM_ERROR; + } +- s->d_buf = overlay + s->lit_bufsize/sizeof(ush); +- s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; ++ s->sym_buf = s->pending_buf + s->lit_bufsize; ++ s->sym_end = (s->lit_bufsize - 1) * 3; ++ /* We avoid equality with lit_bufsize*3 because of wraparound at 64K ++ * on 16 bit machines and because stored blocks are restricted to ++ * 64K-1 bytes. ++ */ + + s->level = level; + s->strategy = strategy; +@@ -552,7 +589,7 @@ int ZEXPORT deflatePrime (strm, bits, value) + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; +- if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) ++ if (s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; + do { + put = Buf_size - s->bi_valid; +@@ -1113,7 +1150,6 @@ int ZEXPORT deflateCopy (dest, source) + #else + deflate_state *ds; + deflate_state *ss; +- ushf *overlay; + + + if (deflateStateCheck(source) || dest == Z_NULL) { +@@ -1133,8 +1169,7 @@ int ZEXPORT deflateCopy (dest, source) + ds->window = (Bytef *) ZALLOC_WINDOW(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); +- overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); +- ds->pending_buf = (uchf *) overlay; ++ ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { +@@ -1148,8 +1183,7 @@ int ZEXPORT deflateCopy (dest, source) + zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +- ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); +- ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; ++ ds->sym_buf = ds->pending_buf + ds->lit_bufsize; + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; +@@ -1925,7 +1959,7 @@ local block_state deflate_fast(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +@@ -2056,7 +2090,7 @@ local block_state deflate_slow(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +@@ -2131,7 +2165,7 @@ local block_state deflate_rle(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +@@ -2170,7 +2204,7 @@ local block_state deflate_huff(s, flush) + FLUSH_BLOCK(s, 1); + return finish_done; + } +- if (s->last_lit) ++ if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; + } +diff --git a/deflate.h b/deflate.h +index 23ecdd3..d4cf1a9 100644 +--- a/deflate.h ++++ b/deflate.h +@@ -217,7 +217,7 @@ typedef struct internal_state { + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + +- uchf *l_buf; /* buffer for literals or lengths */ ++ uchf *sym_buf; /* buffer for distances and literals/lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for +@@ -239,13 +239,8 @@ typedef struct internal_state { + * - I can't count above 4 + */ + +- uInt last_lit; /* running index in l_buf */ +- +- ushf *d_buf; +- /* Buffer for distances. To simplify the code, d_buf and l_buf have +- * the same number of elements. To use different lengths, an extra flag +- * array would be necessary. +- */ ++ uInt sym_next; /* running index in sym_buf */ ++ uInt sym_end; /* symbol table full when sym_next reaches this */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ +@@ -325,20 +320,22 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + + # define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ +- s->d_buf[s->last_lit] = 0; \ +- s->l_buf[s->last_lit++] = cc; \ ++ s->sym_buf[s->sym_next++] = 0; \ ++ s->sym_buf[s->sym_next++] = 0; \ ++ s->sym_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ +- flush = (s->last_lit == s->lit_bufsize-1); \ ++ flush = (s->sym_next == s->sym_end); \ + } + # define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ +- s->d_buf[s->last_lit] = dist; \ +- s->l_buf[s->last_lit++] = len; \ ++ s->sym_buf[s->sym_next++] = dist; \ ++ s->sym_buf[s->sym_next++] = dist >> 8; \ ++ s->sym_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ +- flush = (s->last_lit == s->lit_bufsize-1); \ ++ flush = (s->sym_next == s->sym_end); \ + } + #else + # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +diff --git a/trees.c b/trees.c +index 4f4a650..decaeb7 100644 +--- a/trees.c ++++ b/trees.c +@@ -416,7 +416,7 @@ local void init_block(s) + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; +- s->last_lit = s->matches = 0; ++ s->sym_next = s->matches = 0; + } + + #define SMALLEST 1 +@@ -948,7 +948,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, +- s->last_lit)); ++ s->sym_next / 3)); + + if (static_lenb <= opt_lenb) opt_lenb = static_lenb; + +@@ -1017,8 +1017,9 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) + unsigned dist; /* distance of matched string */ + unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ + { +- s->d_buf[s->last_lit] = (ush)dist; +- s->l_buf[s->last_lit++] = (uch)lc; ++ s->sym_buf[s->sym_next++] = dist; ++ s->sym_buf[s->sym_next++] = dist >> 8; ++ s->sym_buf[s->sym_next++] = lc; + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; +@@ -1033,30 +1034,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) + s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } +- +-#ifdef TRUNCATE_BLOCK +- /* Try to guess if it is profitable to stop the current block here */ +- if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { +- /* Compute an upper bound for the compressed length */ +- ulg out_length = (ulg)s->last_lit*8L; +- ulg in_length = (ulg)((long)s->strstart - s->block_start); +- int dcode; +- for (dcode = 0; dcode < D_CODES; dcode++) { +- out_length += (ulg)s->dyn_dtree[dcode].Freq * +- (5L+extra_dbits[dcode]); +- } +- out_length >>= 3; +- Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +- s->last_lit, in_length, out_length, +- 100L - out_length*100L/in_length)); +- if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; +- } +-#endif +- return (s->last_lit == s->lit_bufsize-1); +- /* We avoid equality with lit_bufsize because of wraparound at 64K +- * on 16 bit machines and because stored blocks are restricted to +- * 64K-1 bytes. +- */ ++ return (s->sym_next == s->sym_end); + } + + /* =========================================================================== +@@ -1069,13 +1047,14 @@ local void compress_block(s, ltree, dtree) + { + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ +- unsigned lx = 0; /* running index in l_buf */ ++ unsigned sx = 0; /* running index in sym_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + +- if (s->last_lit != 0) do { +- dist = s->d_buf[lx]; +- lc = s->l_buf[lx++]; ++ if (s->sym_next != 0) do { ++ dist = s->sym_buf[sx++] & 0xff; ++ dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; ++ lc = s->sym_buf[sx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); +@@ -1100,11 +1079,10 @@ local void compress_block(s, ltree, dtree) + } + } /* literal or match pair ? */ + +- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ +- Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, +- "pendingBuf overflow"); ++ /* Check that the overlay between pending_buf and sym_buf is ok: */ ++ Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); + +- } while (lx < s->last_lit); ++ } while (sx < s->sym_next); + + send_code(s, END_BLOCK, ltree); + } +-- +2.34.1 + diff --git a/zlib-1.2.11-IBM-DFLTCC-compression-level-switching-issues.patch b/zlib-1.2.11-IBM-DFLTCC-compression-level-switching-issues.patch new file mode 100644 index 0000000..c69d9bc --- /dev/null +++ b/zlib-1.2.11-IBM-DFLTCC-compression-level-switching-issues.patch @@ -0,0 +1,206 @@ +Subject: [PATCH] Fixed DFLTCC compression level switching issues + +--- + configure | 4 +-- + contrib/s390/dfltcc.c | 52 ++++++++++++++++++++++++++++++----- + contrib/s390/dfltcc_deflate.h | 2 ++ + deflate.c | 12 ++++---- + test/infcover.c | 2 +- + 5 files changed, 57 insertions(+), 15 deletions(-) + +diff --git a/configure b/configure +index bfe4386..70ed86b 100755 +--- a/configure ++++ b/configure +@@ -139,7 +139,7 @@ case "$1" in + -w* | --warn) warn=1; shift ;; + -d* | --debug) debug=1; shift ;; + --dfltcc) +- CFLAGS="$CFLAGS -DDFLTCC" ++ CFLAGS="$CFLAGS -DDFLTCC -DDFLTCC_LEVEL_MASK=0x7e" + OBJC="$OBJC dfltcc.o" + PIC_OBJC="$PIC_OBJC dfltcc.lo" + shift +@@ -838,7 +838,7 @@ cat > $test.c << EOF + #include + int main() { return 0; } + EOF +-if try ${CC} ${CFLAGS} $test.c; then ++ if try $CC -c $CFLAGS $test.c; then + echo "Checking for sys/sdt.h ... Yes." | tee -a configure.log + CFLAGS="$CFLAGS -DHAVE_SYS_SDT_H" + SFLAGS="$SFLAGS -DHAVE_SYS_SDT_H" +diff --git a/contrib/s390/dfltcc.c b/contrib/s390/dfltcc.c +index d88a0d6..94a196f 100644 +--- a/contrib/s390/dfltcc.c ++++ b/contrib/s390/dfltcc.c +@@ -350,8 +350,12 @@ int ZLIB_INTERNAL dfltcc_deflate(strm, flush, result) + int soft_bcc; + int no_flush; + +- if (!dfltcc_can_deflate(strm)) ++ if (!dfltcc_can_deflate(strm)) { ++ /* Clear history. */ ++ if (flush == Z_FULL_FLUSH) ++ param->hl = 0; + return 0; ++ } + + again: + masked_avail_in = 0; +@@ -376,7 +380,8 @@ again: + /* Clear history. */ + if (flush == Z_FULL_FLUSH) + param->hl = 0; +- *result = need_more; ++ /* Trigger block post-processing if necessary. */ ++ *result = no_flush ? need_more : block_done; + return 1; + } + +@@ -403,13 +408,18 @@ again: + param->bcf = 0; + dfltcc_state->block_threshold = + strm->total_in + dfltcc_state->block_size; +- if (strm->avail_out == 0) { +- *result = need_more; +- return 1; +- } + } + } + ++ /* No space for compressed data. If we proceed, dfltcc_cmpr() will return ++ * DFLTCC_CC_OP1_TOO_SHORT without buffering header bits, but we will still ++ * set BCF=1, which is wrong. Avoid complications and return early. ++ */ ++ if (strm->avail_out == 0) { ++ *result = need_more; ++ return 1; ++ } ++ + /* The caller gave us too much data. Pass only one block worth of + * uncompressed data to DFLTCC and mask the rest, so that on the next + * iteration we start a new block. +@@ -737,10 +747,15 @@ __attribute__((constructor)) local void init_globals(void) + * compiling with -m31, gcc defaults to ESA mode, however, since the kernel + * is 64-bit, it's always z/Architecture mode at runtime. + */ +- __asm__ volatile(".machinemode push\n" ++ __asm__ volatile( ++#ifndef __clang__ ++ ".machinemode push\n" + ".machinemode zarch\n" ++#endif + "stfle %[facilities]\n" ++#ifndef __clang__ + ".machinemode pop\n" ++#endif + : [facilities] "=Q" (cpu_facilities) + , [r0] "+r" (r0) + : +@@ -872,6 +887,28 @@ int ZLIB_INTERNAL dfltcc_deflate_params(strm, level, strategy, flush) + return Z_OK; + } + ++int ZLIB_INTERNAL dfltcc_deflate_done(strm, flush) ++ z_streamp strm; ++ int flush; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; ++ ++ /* When deflate(Z_FULL_FLUSH) is called with small avail_out, it might ++ * close the block without resetting the compression state. Detect this ++ * situation and return that deflation is not done. ++ */ ++ if (flush == Z_FULL_FLUSH && strm->avail_out == 0) ++ return 0; ++ ++ /* Return that deflation is not done if DFLTCC is used and either it ++ * buffered some data (Continuation Flag is set), or has not written EOBS ++ * yet (Block-Continuation Flag is set). ++ */ ++ return !dfltcc_can_deflate(strm) || (!param->cf && !param->bcf); ++} ++ + /* + Preloading history. + */ +@@ -925,6 +962,7 @@ int ZLIB_INTERNAL dfltcc_deflate_set_dictionary(strm, dictionary, dict_length) + + append_history(param, state->window, dictionary, dict_length); + state->strstart = 1; /* Add FDICT to zlib header */ ++ state->block_start = state->strstart; /* Make deflate_stored happy */ + return Z_OK; + } + +diff --git a/contrib/s390/dfltcc_deflate.h b/contrib/s390/dfltcc_deflate.h +index de36784..914daa4 100644 +--- a/contrib/s390/dfltcc_deflate.h ++++ b/contrib/s390/dfltcc_deflate.h +@@ -11,6 +11,7 @@ int ZLIB_INTERNAL dfltcc_deflate_params OF((z_streamp strm, + int level, + int strategy, + int *flush)); ++int ZLIB_INTERNAL dfltcc_deflate_done OF((z_streamp strm, int flush)); + int ZLIB_INTERNAL dfltcc_deflate_set_dictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dict_length)); +@@ -41,6 +42,7 @@ int ZLIB_INTERNAL dfltcc_deflate_get_dictionary OF((z_streamp strm, + if (err == Z_STREAM_ERROR) \ + return err; \ + } while (0) ++#define DEFLATE_DONE dfltcc_deflate_done + #define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, source_len) \ + do { \ + if (dfltcc_can_deflate((strm))) \ +diff --git a/deflate.c b/deflate.c +index d907a1b..085abbe 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -75,6 +75,7 @@ const char deflate_copyright[] = + #define DEFLATE_GET_DICTIONARY_HOOK(strm, dict, dict_len) do {} while (0) + #define DEFLATE_RESET_KEEP_HOOK(strm) do {} while (0) + #define DEFLATE_PARAMS_HOOK(strm, level, strategy, hook_flush) do {} while (0) ++#define DEFLATE_DONE(strm, flush) 1 + #define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, sourceLen) do {} while (0) + #define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) 0 + #define DEFLATE_HOOK(strm, flush, bstate) 0 +@@ -605,14 +606,15 @@ int ZEXPORT deflateParams(strm, level, strategy) + DEFLATE_PARAMS_HOOK(strm, level, strategy, &hook_flush); + func = configuration_table[s->level].func; + +- if ((strategy != s->strategy || func != configuration_table[level].func || +- hook_flush != Z_NO_FLUSH) && s->last_flush != -2) { ++ if (((strategy != s->strategy || func != configuration_table[level].func) && ++ s->last_flush != -2) || hook_flush != Z_NO_FLUSH) { + /* Flush the last buffer: */ +- int err = deflate(strm, RANK(hook_flush) > RANK(Z_BLOCK) ? +- hook_flush : Z_BLOCK); ++ int flush = RANK(hook_flush) > RANK(Z_BLOCK) ? hook_flush : Z_BLOCK; ++ int err = deflate(strm, flush); + if (err == Z_STREAM_ERROR) + return err; +- if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead) ++ if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead || ++ !DEFLATE_DONE(strm, flush)) + return Z_BUF_ERROR; + } + if (s->level != level) { +diff --git a/test/infcover.c b/test/infcover.c +index a34cd17..a208219 100644 +--- a/test/infcover.c ++++ b/test/infcover.c +@@ -373,7 +373,7 @@ local void cover_support(void) + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; +- ret = inflateInit_(&strm, ZLIB_VERSION - 1, (int)sizeof(z_stream)); ++ ret = inflateInit_(&strm, &ZLIB_VERSION[1], (int)sizeof(z_stream)); + assert(ret == Z_VERSION_ERROR); + mem_done(&strm, "wrong version"); + +-- +2.26.0 + diff --git a/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-compressBound-fix.patch b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-compressBound-fix.patch new file mode 100644 index 0000000..27454ab --- /dev/null +++ b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-compressBound-fix.patch @@ -0,0 +1,93 @@ +Source from https://gitlab.com/redhat/centos-stream/rpms/zlib/-/merge_requests/9 +Author: Ilya Leoshkevich + +--- a/compress.c ++++ b/compress.c +@@ -5,9 +5,15 @@ + + /* @(#) $Id$ */ + +-#define ZLIB_INTERNAL ++#include "zutil.h" + #include "zlib.h" + ++#ifdef DFLTCC ++# include "contrib/s390/dfltcc.h" ++#else ++#define DEFLATE_BOUND_COMPLEN(source_len) 0 ++#endif ++ + /* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte +@@ -81,6 +87,12 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) + uLong ZEXPORT compressBound (sourceLen) + uLong sourceLen; + { ++ uLong complen = DEFLATE_BOUND_COMPLEN(sourceLen); ++ ++ if (complen > 0) ++ /* Architecture-specific code provided an upper bound. */ ++ return complen + ZLIB_WRAPLEN; ++ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; + } +--- a/contrib/s390/dfltcc.h ++++ b/contrib/s390/dfltcc.h +@@ -12,6 +12,28 @@ void ZLIB_INTERNAL dfltcc_reset OF((z_streamp strm, uInt size)); + voidpf ZLIB_INTERNAL dfltcc_alloc_window OF((z_streamp strm, uInt items, + uInt size)); + void ZLIB_INTERNAL dfltcc_free_window OF((z_streamp strm, voidpf w)); ++#define DFLTCC_BLOCK_HEADER_BITS 3 ++#define DFLTCC_HLITS_COUNT_BITS 5 ++#define DFLTCC_HDISTS_COUNT_BITS 5 ++#define DFLTCC_HCLENS_COUNT_BITS 4 ++#define DFLTCC_MAX_HCLENS 19 ++#define DFLTCC_HCLEN_BITS 3 ++#define DFLTCC_MAX_HLITS 286 ++#define DFLTCC_MAX_HDISTS 30 ++#define DFLTCC_MAX_HLIT_HDIST_BITS 7 ++#define DFLTCC_MAX_SYMBOL_BITS 16 ++#define DFLTCC_MAX_EOBS_BITS 15 ++#define DFLTCC_MAX_PADDING_BITS 7 ++#define DEFLATE_BOUND_COMPLEN(source_len) \ ++ ((DFLTCC_BLOCK_HEADER_BITS + \ ++ DFLTCC_HLITS_COUNT_BITS + \ ++ DFLTCC_HDISTS_COUNT_BITS + \ ++ DFLTCC_HCLENS_COUNT_BITS + \ ++ DFLTCC_MAX_HCLENS * DFLTCC_HCLEN_BITS + \ ++ (DFLTCC_MAX_HLITS + DFLTCC_MAX_HDISTS) * DFLTCC_MAX_HLIT_HDIST_BITS + \ ++ (source_len) * DFLTCC_MAX_SYMBOL_BITS + \ ++ DFLTCC_MAX_EOBS_BITS + \ ++ DFLTCC_MAX_PADDING_BITS) >> 3) + int ZLIB_INTERNAL dfltcc_can_inflate OF((z_streamp strm)); + typedef enum { + DFLTCC_INFLATE_CONTINUE, +diff --git a/contrib/s390/dfltcc_deflate.h b/contrib/s390/dfltcc_deflate.h +index 03f7f53..46acfc5 100644 +--- a/contrib/s390/dfltcc_deflate.h ++++ b/contrib/s390/dfltcc_deflate.h +@@ -46,8 +46,7 @@ int ZLIB_INTERNAL dfltcc_deflate_get_dictionary OF((z_streamp strm, + #define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, source_len) \ + do { \ + if (dfltcc_can_deflate((strm))) \ +- (complen) = (3 + 5 + 5 + 4 + 19 * 3 + (286 + 30) * 7 + \ +- (source_len) * 16 + 15 + 7) >> 3; \ ++ (complen) = DEFLATE_BOUND_COMPLEN(source_len); \ + } while (0) + #define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) (dfltcc_can_deflate((strm))) + #define DEFLATE_HOOK dfltcc_deflate +diff --git a/zutil.h b/zutil.h +index 14277bc..cf90e49 100644 +--- a/zutil.h ++++ b/zutil.h +@@ -87,6 +87,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + + #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + ++#define ZLIB_WRAPLEN 6 /* zlib format overhead */ ++ + /* target dependencies */ + + #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) diff --git a/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch new file mode 100644 index 0000000..a9e5e29 --- /dev/null +++ b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch @@ -0,0 +1,516 @@ +From 608b71008c16ce6fbf2305145c5ffb69cd88ef59 Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Fri, 7 Aug 2020 07:12:50 +0200 +Subject: [PATCH] Fix for Z hardware-accelerated deflate for s390x + +--- + configure | 7 + + contrib/s390/dfltcc.c | 244 +++++++++++++++++++++------------- + contrib/s390/dfltcc_deflate.h | 10 +- + deflate.c | 21 +-- + 4 files changed, 177 insertions(+), 105 deletions(-) + +diff --git a/configure b/configure +index 66caece..bfe4386 100755 +--- a/configure ++++ b/configure +@@ -114,6 +114,7 @@ case "$1" in + echo ' configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]' | tee -a configure.log + echo ' [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log + echo ' [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log ++ echo ' [--dfltcc]' | tee -a configure.log + exit 0 ;; + -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;; +@@ -137,6 +138,12 @@ case "$1" in + -c* | --const) zconst=1; shift ;; + -w* | --warn) warn=1; shift ;; + -d* | --debug) debug=1; shift ;; ++ --dfltcc) ++ CFLAGS="$CFLAGS -DDFLTCC" ++ OBJC="$OBJC dfltcc.o" ++ PIC_OBJC="$PIC_OBJC dfltcc.lo" ++ shift ++ ;; + *) + echo "unknown option: $1" | tee -a configure.log + echo "$0 --help for help" | tee -a configure.log +diff --git a/contrib/s390/dfltcc.c b/contrib/s390/dfltcc.c +index d187796..d88a0d6 100644 +--- a/contrib/s390/dfltcc.c ++++ b/contrib/s390/dfltcc.c +@@ -2,12 +2,13 @@ + + /* + Use the following commands to build zlib with DFLTCC support: +- $ CFLAGS=-DDFLTCC ./configure +- $ make OBJA=dfltcc.o PIC_OBJA=dfltcc.lo ++ $ ./configure --dfltcc ++ $ make + */ + + #define _GNU_SOURCE + #include ++#include + #include + #include + #include +@@ -230,31 +231,28 @@ struct dfltcc_state { + /* + Compress. + */ +-local inline int dfltcc_are_params_ok(int level, +- uInt window_bits, +- int strategy, +- uLong level_mask); +-local inline int dfltcc_are_params_ok(level, window_bits, strategy, level_mask) ++local inline int dfltcc_can_deflate_with_params(z_streamp strm, ++ int level, ++ uInt window_bits, ++ int strategy); ++local inline int dfltcc_can_deflate_with_params(strm, ++ level, ++ window_bits, ++ strategy) ++ z_streamp strm; + int level; + uInt window_bits; + int strategy; +- uLong level_mask; +-{ +- return (level_mask & (1 << level)) != 0 && +- (window_bits == HB_BITS) && +- (strategy == Z_FIXED || strategy == Z_DEFAULT_STRATEGY); +-} +- +- +-int ZLIB_INTERNAL dfltcc_can_deflate(strm) +- z_streamp strm; + { + deflate_state FAR *state = (deflate_state FAR *)strm->state; + struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); + + /* Unsupported compression settings */ +- if (!dfltcc_are_params_ok(state->level, state->w_bits, state->strategy, +- dfltcc_state->level_mask)) ++ if ((dfltcc_state->level_mask & (1 << level)) == 0) ++ return 0; ++ if (window_bits != HB_BITS) ++ return 0; ++ if (strategy != Z_FIXED && strategy != Z_DEFAULT_STRATEGY) + return 0; + + /* Unsupported hardware */ +@@ -266,6 +264,17 @@ int ZLIB_INTERNAL dfltcc_can_deflate(strm) + return 1; + } + ++int ZLIB_INTERNAL dfltcc_can_deflate(strm) ++ z_streamp strm; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ ++ return dfltcc_can_deflate_with_params(strm, ++ state->level, ++ state->w_bits, ++ state->strategy); ++} ++ + local void dfltcc_gdht OF((z_streamp strm)); + local void dfltcc_gdht(strm) + z_streamp strm; +@@ -349,22 +358,24 @@ again: + soft_bcc = 0; + no_flush = flush == Z_NO_FLUSH; + +- /* Trailing empty block. Switch to software, except when Continuation Flag +- * is set, which means that DFLTCC has buffered some output in the +- * parameter block and needs to be called again in order to flush it. ++ /* No input data. Return, except when Continuation Flag is set, which means ++ * that DFLTCC has buffered some output in the parameter block and needs to ++ * be called again in order to flush it. + */ +- if (flush == Z_FINISH && strm->avail_in == 0 && !param->cf) { +- if (param->bcf) { +- /* A block is still open, and the hardware does not support closing +- * blocks without adding data. Thus, close it manually. +- */ ++ if (strm->avail_in == 0 && !param->cf) { ++ /* A block is still open, and the hardware does not support closing ++ * blocks without adding data. Thus, close it manually. ++ */ ++ if (!no_flush && param->bcf) { + send_eobs(strm, param); + param->bcf = 0; + } +- return 0; +- } +- +- if (strm->avail_in == 0 && !param->cf) { ++ /* Let one of deflate_* functions write a trailing empty block. */ ++ if (flush == Z_FINISH) ++ return 0; ++ /* Clear history. */ ++ if (flush == Z_FULL_FLUSH) ++ param->hl = 0; + *result = need_more; + return 1; + } +@@ -418,7 +429,7 @@ again: + param->cvt = state->wrap == 2 ? CVT_CRC32 : CVT_ADLER32; + if (!no_flush) + /* We need to close a block. Always do this in software - when there is +- * no input data, the hardware will not nohor BCC. */ ++ * no input data, the hardware will not honor BCC. */ + soft_bcc = 1; + if (flush == Z_FINISH && !param->bcf) + /* We are about to open a BFINAL block, set Block Header Final bit +@@ -433,8 +444,8 @@ again: + param->sbb = (unsigned int)state->bi_valid; + if (param->sbb > 0) + *strm->next_out = (Bytef)state->bi_buf; +- if (param->hl) +- param->nt = 0; /* Honor history */ ++ /* Honor history and check value */ ++ param->nt = 0; + param->cv = state->wrap == 2 ? ZSWAP32(strm->adler) : strm->adler; + + /* When opening a block, choose a Huffman-Table Type */ +@@ -642,27 +653,86 @@ int ZLIB_INTERNAL dfltcc_inflate_disable(strm) + return 0; + } + +-/* +- Memory management. +- DFLTCC requires parameter blocks and window to be aligned. zlib allows +- users to specify their own allocation functions, so using e.g. +- `posix_memalign' is not an option. Thus, we overallocate and take the +- aligned portion of the buffer. +-*/ ++local int env_dfltcc_disabled; ++local int env_source_date_epoch; ++local unsigned long env_level_mask; ++local unsigned long env_block_size; ++local unsigned long env_block_threshold; ++local unsigned long env_dht_threshold; ++local unsigned long env_ribm; ++local uint64_t cpu_facilities[(DFLTCC_FACILITY / 64) + 1]; ++local struct dfltcc_qaf_param cpu_af __attribute__((aligned(8))); ++ + local inline int is_dfltcc_enabled OF((void)); + local inline int is_dfltcc_enabled(void) ++{ ++ if (env_dfltcc_disabled) ++ /* User has explicitly disabled DFLTCC. */ ++ return 0; ++ ++ return is_bit_set((const char *)cpu_facilities, DFLTCC_FACILITY); ++} ++ ++local unsigned long xstrtoul OF((const char *s, unsigned long _default)); ++local unsigned long xstrtoul(s, _default) ++ const char *s; ++ unsigned long _default; ++{ ++ char *endptr; ++ unsigned long result; ++ ++ if (!(s && *s)) ++ return _default; ++ errno = 0; ++ result = strtoul(s, &endptr, 0); ++ return (errno || *endptr) ? _default : result; ++} ++ ++__attribute__((constructor)) local void init_globals OF((void)); ++__attribute__((constructor)) local void init_globals(void) + { + const char *env; +- uint64_t facilities[(DFLTCC_FACILITY / 64) + 1]; + register char r0 __asm__("r0"); + + env = secure_getenv("DFLTCC"); +- if (env && !strcmp(env, "0")) +- /* User has explicitly disabled DFLTCC. */ +- return 0; ++ ++ ++ env_dfltcc_disabled = env && !strcmp(env, "0"); ++ ++ env = secure_getenv("SOURCE_DATE_EPOCH"); ++ env_source_date_epoch = !!env; ++ ++#ifndef DFLTCC_LEVEL_MASK ++#define DFLTCC_LEVEL_MASK 0x2 ++#endif ++ env_level_mask = xstrtoul(secure_getenv("DFLTCC_LEVEL_MASK"), ++ DFLTCC_LEVEL_MASK); ++ ++#ifndef DFLTCC_BLOCK_SIZE ++#define DFLTCC_BLOCK_SIZE 1048576 ++#endif ++ env_block_size = xstrtoul(secure_getenv("DFLTCC_BLOCK_SIZE"), ++ DFLTCC_BLOCK_SIZE); + +- memset(facilities, 0, sizeof(facilities)); +- r0 = sizeof(facilities) / sizeof(facilities[0]) - 1; ++#ifndef DFLTCC_FIRST_FHT_BLOCK_SIZE ++#define DFLTCC_FIRST_FHT_BLOCK_SIZE 4096 ++#endif ++ env_block_threshold = xstrtoul(secure_getenv("DFLTCC_FIRST_FHT_BLOCK_SIZE"), ++ DFLTCC_FIRST_FHT_BLOCK_SIZE); ++ ++#ifndef DFLTCC_DHT_MIN_SAMPLE_SIZE ++#define DFLTCC_DHT_MIN_SAMPLE_SIZE 4096 ++#endif ++ env_dht_threshold = xstrtoul(secure_getenv("DFLTCC_DHT_MIN_SAMPLE_SIZE"), ++ DFLTCC_DHT_MIN_SAMPLE_SIZE); ++ ++#ifndef DFLTCC_RIBM ++#define DFLTCC_RIBM 0 ++#endif ++ env_ribm = xstrtoul(secure_getenv("DFLTCC_RIBM"), DFLTCC_RIBM); ++ ++ memset(cpu_facilities, 0, sizeof(cpu_facilities)); ++ r0 = sizeof(cpu_facilities) / sizeof(cpu_facilities[0]) - 1; + /* STFLE is supported since z9-109 and only in z/Architecture mode. When + * compiling with -m31, gcc defaults to ESA mode, however, since the kernel + * is 64-bit, it's always z/Architecture mode at runtime. +@@ -671,31 +741,35 @@ local inline int is_dfltcc_enabled(void) + ".machinemode zarch\n" + "stfle %[facilities]\n" + ".machinemode pop\n" +- : [facilities] "=Q" (facilities) ++ : [facilities] "=Q" (cpu_facilities) + , [r0] "+r" (r0) + : + : "cc"); +- return is_bit_set((const char *)facilities, DFLTCC_FACILITY); ++ /* Initialize available functions */ ++ if (is_dfltcc_enabled()) ++ dfltcc(DFLTCC_QAF, &cpu_af, NULL, NULL, NULL, NULL, NULL); ++ else ++ memset(&cpu_af, 0, sizeof(cpu_af)); + } + ++/* ++ Memory management. ++ ++ DFLTCC requires parameter blocks and window to be aligned. zlib allows ++ users to specify their own allocation functions, so using e.g. ++ `posix_memalign' is not an option. Thus, we overallocate and take the ++ aligned portion of the buffer. ++*/ + void ZLIB_INTERNAL dfltcc_reset(strm, size) + z_streamp strm; + uInt size; + { + struct dfltcc_state *dfltcc_state = + (struct dfltcc_state *)((char FAR *)strm->state + ALIGN_UP(size, 8)); +- struct dfltcc_qaf_param *param = +- (struct dfltcc_qaf_param *)&dfltcc_state->param; +- const char *s; + +- /* Initialize available functions */ +- if (is_dfltcc_enabled()) { +- dfltcc(DFLTCC_QAF, param, NULL, NULL, NULL, NULL, NULL); +- memmove(&dfltcc_state->af, param, sizeof(dfltcc_state->af)); +- } else +- memset(&dfltcc_state->af, 0, sizeof(dfltcc_state->af)); ++ memcpy(&dfltcc_state->af, &cpu_af, sizeof(dfltcc_state->af)); + +- if (secure_getenv("SOURCE_DATE_EPOCH")) ++ if (env_source_date_epoch) + /* User needs reproducible results, but the output of DFLTCC_CMPR + * depends on buffers' page offsets. + */ +@@ -706,36 +780,11 @@ void ZLIB_INTERNAL dfltcc_reset(strm, size) + dfltcc_state->param.nt = 1; + + /* Initialize tuning parameters */ +-#ifndef DFLTCC_LEVEL_MASK +-#define DFLTCC_LEVEL_MASK 0x2 +-#endif +- s = secure_getenv("DFLTCC_LEVEL_MASK"); +- dfltcc_state->level_mask = (s && *s) ? strtoul(s, NULL, 0) : +- DFLTCC_LEVEL_MASK; +-#ifndef DFLTCC_BLOCK_SIZE +-#define DFLTCC_BLOCK_SIZE 1048576 +-#endif +- s = secure_getenv("DFLTCC_BLOCK_SIZE"); +- dfltcc_state->block_size = (s && *s) ? strtoul(s, NULL, 0) : +- DFLTCC_BLOCK_SIZE; +-#ifndef DFLTCC_FIRST_FHT_BLOCK_SIZE +-#define DFLTCC_FIRST_FHT_BLOCK_SIZE 4096 +-#endif +- s = secure_getenv("DFLTCC_FIRST_FHT_BLOCK_SIZE"); +- dfltcc_state->block_threshold = (s && *s) ? strtoul(s, NULL, 0) : +- DFLTCC_FIRST_FHT_BLOCK_SIZE; +-#ifndef DFLTCC_DHT_MIN_SAMPLE_SIZE +-#define DFLTCC_DHT_MIN_SAMPLE_SIZE 4096 +-#endif +- s = secure_getenv("DFLTCC_DHT_MIN_SAMPLE_SIZE"); +- dfltcc_state->dht_threshold = (s && *s) ? strtoul(s, NULL, 0) : +- DFLTCC_DHT_MIN_SAMPLE_SIZE; +-#ifndef DFLTCC_RIBM +-#define DFLTCC_RIBM 0 +-#endif +- s = secure_getenv("DFLTCC_RIBM"); +- dfltcc_state->param.ribm = (s && *s) ? strtoul(s, NULL, 0) : +- DFLTCC_RIBM; ++ dfltcc_state->level_mask = env_level_mask; ++ dfltcc_state->block_size = env_block_size; ++ dfltcc_state->block_threshold = env_block_threshold; ++ dfltcc_state->dht_threshold = env_dht_threshold; ++ dfltcc_state->param.ribm = env_ribm; + } + + voidpf ZLIB_INTERNAL dfltcc_alloc_state(strm, items, size) +@@ -787,22 +836,26 @@ void ZLIB_INTERNAL dfltcc_free_window(strm, w) + + /* + Switching between hardware and software compression. ++ + DFLTCC does not support all zlib settings, e.g. generation of non-compressed + blocks or alternative window sizes. When such settings are applied on the + fly with deflateParams, we need to convert between hardware and software + window formats. + */ +-int ZLIB_INTERNAL dfltcc_deflate_params(strm, level, strategy) ++int ZLIB_INTERNAL dfltcc_deflate_params(strm, level, strategy, flush) + z_streamp strm; + int level; + int strategy; ++ int *flush; + { + deflate_state FAR *state = (deflate_state FAR *)strm->state; + struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); + struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; + int could_deflate = dfltcc_can_deflate(strm); +- int can_deflate = dfltcc_are_params_ok(level, state->w_bits, strategy, +- dfltcc_state->level_mask); ++ int can_deflate = dfltcc_can_deflate_with_params(strm, ++ level, ++ state->w_bits, ++ strategy); + + if (can_deflate == could_deflate) + /* We continue to work in the same mode - no changes needed */ +@@ -812,8 +865,11 @@ int ZLIB_INTERNAL dfltcc_deflate_params(strm, level, strategy) + /* DFLTCC was not used yet - no changes needed */ + return Z_OK; + +- /* Switching between hardware and software is not implemented */ +- return Z_STREAM_ERROR; ++ /* For now, do not convert between window formats - simply get rid of the ++ * old data instead. ++ */ ++ *flush = Z_FULL_FLUSH; ++ return Z_OK; + } + + /* +diff --git a/contrib/s390/dfltcc_deflate.h b/contrib/s390/dfltcc_deflate.h +index a129a91..de36784 100644 +--- a/contrib/s390/dfltcc_deflate.h ++++ b/contrib/s390/dfltcc_deflate.h +@@ -9,7 +9,8 @@ int ZLIB_INTERNAL dfltcc_deflate OF((z_streamp strm, + block_state *result)); + int ZLIB_INTERNAL dfltcc_deflate_params OF((z_streamp strm, + int level, +- int strategy)); ++ int strategy, ++ int *flush)); + int ZLIB_INTERNAL dfltcc_deflate_set_dictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dict_length)); +@@ -29,11 +30,14 @@ int ZLIB_INTERNAL dfltcc_deflate_get_dictionary OF((z_streamp strm, + } while (0) + #define DEFLATE_RESET_KEEP_HOOK(strm) \ + dfltcc_reset((strm), sizeof(deflate_state)) +-#define DEFLATE_PARAMS_HOOK(strm, level, strategy) \ ++#define DEFLATE_PARAMS_HOOK(strm, level, strategy, hook_flush) \ + do { \ + int err; \ + \ +- err = dfltcc_deflate_params((strm), (level), (strategy)); \ ++ err = dfltcc_deflate_params((strm), \ ++ (level), \ ++ (strategy), \ ++ (hook_flush)); \ + if (err == Z_STREAM_ERROR) \ + return err; \ + } while (0) +diff --git a/deflate.c b/deflate.c +index b17a7dd..a80bd3e 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -74,7 +74,7 @@ const char deflate_copyright[] = + #define DEFLATE_SET_DICTIONARY_HOOK(strm, dict, dict_len) do {} while (0) + #define DEFLATE_GET_DICTIONARY_HOOK(strm, dict, dict_len) do {} while (0) + #define DEFLATE_RESET_KEEP_HOOK(strm) do {} while (0) +-#define DEFLATE_PARAMS_HOOK(strm, level, strategy) do {} while (0) ++#define DEFLATE_PARAMS_HOOK(strm, level, strategy, hook_flush) do {} while (0) + #define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, sourceLen) do {} while (0) + #define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) 0 + #define DEFLATE_HOOK(strm, flush, bstate) 0 +@@ -589,6 +589,7 @@ int ZEXPORT deflateParams(strm, level, strategy) + { + deflate_state *s; + compress_func func; ++ int hook_flush = Z_NO_FLUSH; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; +@@ -601,13 +602,14 @@ int ZEXPORT deflateParams(strm, level, strategy) + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } +- DEFLATE_PARAMS_HOOK(strm, level, strategy); ++ DEFLATE_PARAMS_HOOK(strm, level, strategy, &hook_flush); + func = configuration_table[s->level].func; + +- if ((strategy != s->strategy || func != configuration_table[level].func) && +- s->high_water) { ++ if ((strategy != s->strategy || func != configuration_table[level].func || ++ hook_flush != Z_NO_FLUSH) && s->high_water) { + /* Flush the last buffer: */ +- int err = deflate(strm, Z_BLOCK); ++ int err = deflate(strm, RANK(hook_flush) > RANK(Z_BLOCK) ? ++ hook_flush : Z_BLOCK); + if (err == Z_STREAM_ERROR) + return err; + if (strm->avail_out == 0) +@@ -1065,7 +1067,6 @@ int ZEXPORT deflate (strm, flush) + } + + if (flush != Z_FINISH) return Z_OK; +- if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ + #ifdef GZIP +@@ -1081,7 +1082,7 @@ int ZEXPORT deflate (strm, flush) + } + else + #endif +- { ++ if (s->wrap == 1) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } +@@ -1090,7 +1091,11 @@ int ZEXPORT deflate (strm, flush) + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ +- return s->pending != 0 ? Z_OK : Z_STREAM_END; ++ if (s->pending == 0) { ++ Assert(s->bi_valid == 0, "bi_buf not flushed"); ++ return Z_STREAM_END; ++ } ++ return Z_OK; + } + + /* ========================================================================= */ +-- +2.26.0 + diff --git a/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-s390x.patch b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-s390x.patch new file mode 100644 index 0000000..002a0d5 --- /dev/null +++ b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-s390x.patch @@ -0,0 +1,1709 @@ +From 4e65ca20fc242e4a03471558a357d7809adeb9c4 Mon Sep 17 00:00:00 2001 +From: IBM developers +Date: Thu, 1 Aug 2019 09:02:01 +0200 +Subject: [PATCH] Add support for IBM Z hardware-accelerated deflate + +Future versions of IBM Z mainframes will provide DFLTCC instruction, +which implements deflate algorithm in hardware with estimated +compression and decompression performance orders of magnitude faster +than the current zlib and ratio comparable with that of level 1. + +This patch adds DFLTCC support to zlib. In order to enable it, the +following build commands should be used: + + $ CFLAGS=-DDFLTCC ./configure + $ make OBJA=dfltcc.o PIC_OBJA=dfltcc.lo + +When built like this, zlib would compress in hardware on level 1, and in +software on all other levels. Decompression will always happen in +hardware. In order to enable DFLTCC compression for levels 1-6 (i.e. to +make it used by default) one could either add -DDFLTCC_LEVEL_MASK=0x7e +at compile time, or set the environment variable DFLTCC_LEVEL_MASK to +0x7e at run time. + +Two DFLTCC compression calls produce the same results only when they +both are made on machines of the same generation, and when the +respective buffers have the same offset relative to the start of the +page. Therefore care should be taken when using hardware compression +when reproducible results are desired. One such use case - reproducible +software builds - is handled explicitly: when SOURCE_DATE_EPOCH +environment variable is set, the hardware compression is disabled. + +DFLTCC does not support every single zlib feature, in particular: + + * inflate(Z_BLOCK) and inflate(Z_TREES) + * inflateMark() + * inflatePrime() + * deflateParams() after the first deflate() call + +When used, these functions will either switch to software, or, in case +this is not possible, gracefully fail. + +This patch tries to add DFLTCC support in a least intrusive way. +All SystemZ-specific code was placed into a separate file, but +unfortunately there is still a noticeable amount of changes in the +main zlib code. Below is the summary of those changes. + +DFLTCC takes as arguments a parameter block, an input buffer, an output +buffer and a window. Since DFLTCC requires parameter block to be +doubleword-aligned, and it's reasonable to allocate it alongside +deflate and inflate states, ZALLOC_STATE, ZFREE_STATE and ZCOPY_STATE +macros were introduced in order to encapsulate the allocation details. +The same is true for window, for which ZALLOC_WINDOW and +TRY_FREE_WINDOW macros were introduced. + +While for inflate software and hardware window formats match, this is +not the case for deflate. Therefore, deflateSetDictionary and +deflateGetDictionary need special handling, which is triggered using the +new DEFLATE_SET_DICTIONARY_HOOK and DEFLATE_GET_DICTIONARY_HOOK macros. + +deflateResetKeep() and inflateResetKeep() now update the DFLTCC +parameter block, which is allocated alongside zlib state, using +the new DEFLATE_RESET_KEEP_HOOK and INFLATE_RESET_KEEP_HOOK macros. + +In order to make unsupported deflateParams(), inflatePrime() and +inflateMark() calls to fail gracefully, the new DEFLATE_PARAMS_HOOK, +INFLATE_PRIME_HOOK and INFLATE_MARK_HOOK macros were introduced. + +The algorithm implemented in hardware has different compression ratio +than the one implemented in software. In order for deflateBound() to +return the correct results for the hardware implementation, the new +DEFLATE_BOUND_ADJUST_COMPLEN and DEFLATE_NEED_CONSERVATIVE_BOUND macros +were introduced. + +Actual compression and decompression are handled by the new DEFLATE_HOOK +and INFLATE_TYPEDO_HOOK macros. Since inflation with DFLTCC manages the +window on its own, calling updatewindow() is suppressed using the new +INFLATE_NEED_UPDATEWINDOW() macro. + +In addition to compression, DFLTCC computes CRC-32 and Adler-32 +checksums, therefore, whenever it's used, software checksumming needs to +be suppressed using the new DEFLATE_NEED_CHECKSUM and +INFLATE_NEED_CHECKSUM macros. + +DFLTCC will refuse to write an End-of-block Symbol if there is no input +data, thus in some cases it is necessary to do this manually. In order +to achieve this, send_bits, bi_reverse, bi_windup and flush_pending +were promoted from local to ZLIB_INTERNAL. Furthermore, since block and +stream termination must be handled in software as well, block_state enum +was moved to deflate.h. + +Since the first call to dfltcc_inflate already needs the window, and it +might be not allocated yet, inflate_ensure_window was factored out of +updatewindow and made ZLIB_INTERNAL. +--- + Makefile.in | 8 + + configure | 13 + + contrib/README.contrib | 4 + + contrib/s390/dfltcc.c | 901 ++++++++++++++++++++++++++++++++++ + contrib/s390/dfltcc.h | 55 +++ + contrib/s390/dfltcc_deflate.h | 50 ++ + deflate.c | 60 ++- + deflate.h | 12 + + gzguts.h | 4 + + inflate.c | 84 +++- + inflate.h | 2 + + test/infcover.c | 2 +- + test/minigzip.c | 4 + + trees.c | 13 +- + 14 files changed, 1161 insertions(+), 51 deletions(-) + create mode 100644 contrib/s390/dfltcc.c + create mode 100644 contrib/s390/dfltcc.h + create mode 100644 contrib/s390/dfltcc_deflate.h + +diff --git a/Makefile.in b/Makefile.in +index 5a77949..e756e2f 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -143,6 +143,14 @@ match.lo: match.S + mv _match.o match.lo + rm -f _match.s + ++dfltcc.o: $(SRCDIR)contrib/s390/dfltcc.c $(SRCDIR)zlib.h zconf.h ++ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)contrib/s390/dfltcc.c ++ ++dfltcc.lo: $(SRCDIR)contrib/s390/dfltcc.c $(SRCDIR)zlib.h zconf.h ++ -@mkdir objs 2>/dev/null || test -d objs ++ $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/dfltcc.o $(SRCDIR)contrib/s390/dfltcc.c ++ -@mv objs/dfltcc.o $@ ++ + example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c + +diff --git a/configure b/configure +index e974d1f..8fab355 100755 +--- a/configure ++++ b/configure +@@ -826,6 +826,19 @@ EOF + fi + fi + ++# Check whether sys/sdt.h is available ++cat > $test.c << EOF ++#include ++int main() { return 0; } ++EOF ++if try ${CC} ${CFLAGS} $test.c; then ++ echo "Checking for sys/sdt.h ... Yes." | tee -a configure.log ++ CFLAGS="$CFLAGS -DHAVE_SYS_SDT_H" ++ SFLAGS="$SFLAGS -DHAVE_SYS_SDT_H" ++else ++ echo "Checking for sys/sdt.h ... No." | tee -a configure.log ++fi ++ + # show the results in the log + echo >> configure.log + echo ALL = $ALL >> configure.log +diff --git a/contrib/README.contrib b/contrib/README.contrib +index a411d5c..b4d3b18 100644 +--- a/contrib/README.contrib ++++ b/contrib/README.contrib +@@ -67,6 +67,10 @@ puff/ by Mark Adler + Small, low memory usage inflate. Also serves to provide an + unambiguous description of the deflate format. + ++s390/ by Ilya Leoshkevich ++ Hardware-accelerated deflate on IBM Z with DEFLATE CONVERSION CALL ++ instruction. ++ + testzlib/ by Gilles Vollant + Example of the use of zlib + +diff --git a/contrib/s390/dfltcc.c b/contrib/s390/dfltcc.c +new file mode 100644 +index 0000000..d187796 +--- /dev/null ++++ b/contrib/s390/dfltcc.c +@@ -0,0 +1,901 @@ ++/* dfltcc.c - SystemZ DEFLATE CONVERSION CALL support. */ ++ ++/* ++ Use the following commands to build zlib with DFLTCC support: ++ $ CFLAGS=-DDFLTCC ./configure ++ $ make OBJA=dfltcc.o PIC_OBJA=dfltcc.lo ++*/ ++ ++#define _GNU_SOURCE ++#include ++#include ++#include ++#include ++#include ++#include ++#include "../../zutil.h" ++#include "../../deflate.h" ++#include "../../inftrees.h" ++#include "../../inflate.h" ++#include "dfltcc.h" ++#include "dfltcc_deflate.h" ++#ifdef HAVE_SYS_SDT_H ++#include ++#endif ++ ++/* ++ C wrapper for the DEFLATE CONVERSION CALL instruction. ++ */ ++typedef enum { ++ DFLTCC_CC_OK = 0, ++ DFLTCC_CC_OP1_TOO_SHORT = 1, ++ DFLTCC_CC_OP2_TOO_SHORT = 2, ++ DFLTCC_CC_OP2_CORRUPT = 2, ++ DFLTCC_CC_AGAIN = 3, ++} dfltcc_cc; ++ ++#define DFLTCC_QAF 0 ++#define DFLTCC_GDHT 1 ++#define DFLTCC_CMPR 2 ++#define DFLTCC_XPND 4 ++#define HBT_CIRCULAR (1 << 7) ++#define HB_BITS 15 ++#define HB_SIZE (1 << HB_BITS) ++#define DFLTCC_FACILITY 151 ++ ++local inline dfltcc_cc dfltcc OF((int fn, void *param, ++ Bytef **op1, size_t *len1, ++ z_const Bytef **op2, size_t *len2, ++ void *hist)); ++local inline dfltcc_cc dfltcc(fn, param, op1, len1, op2, len2, hist) ++ int fn; ++ void *param; ++ Bytef **op1; ++ size_t *len1; ++ z_const Bytef **op2; ++ size_t *len2; ++ void *hist; ++{ ++ Bytef *t2 = op1 ? *op1 : NULL; ++ size_t t3 = len1 ? *len1 : 0; ++ z_const Bytef *t4 = op2 ? *op2 : NULL; ++ size_t t5 = len2 ? *len2 : 0; ++ register int r0 __asm__("r0") = fn; ++ register void *r1 __asm__("r1") = param; ++ register Bytef *r2 __asm__("r2") = t2; ++ register size_t r3 __asm__("r3") = t3; ++ register z_const Bytef *r4 __asm__("r4") = t4; ++ register size_t r5 __asm__("r5") = t5; ++ int cc; ++ ++ __asm__ volatile( ++#ifdef HAVE_SYS_SDT_H ++ STAP_PROBE_ASM(zlib, dfltcc_entry, ++ STAP_PROBE_ASM_TEMPLATE(5)) ++#endif ++ ".insn rrf,0xb9390000,%[r2],%[r4],%[hist],0\n" ++#ifdef HAVE_SYS_SDT_H ++ STAP_PROBE_ASM(zlib, dfltcc_exit, ++ STAP_PROBE_ASM_TEMPLATE(5)) ++#endif ++ "ipm %[cc]\n" ++ : [r2] "+r" (r2) ++ , [r3] "+r" (r3) ++ , [r4] "+r" (r4) ++ , [r5] "+r" (r5) ++ , [cc] "=r" (cc) ++ : [r0] "r" (r0) ++ , [r1] "r" (r1) ++ , [hist] "r" (hist) ++#ifdef HAVE_SYS_SDT_H ++ , STAP_PROBE_ASM_OPERANDS(5, r2, r3, r4, r5, hist) ++#endif ++ : "cc", "memory"); ++ t2 = r2; t3 = r3; t4 = r4; t5 = r5; ++ ++ if (op1) ++ *op1 = t2; ++ if (len1) ++ *len1 = t3; ++ if (op2) ++ *op2 = t4; ++ if (len2) ++ *len2 = t5; ++ return (cc >> 28) & 3; ++} ++ ++/* ++ Parameter Block for Query Available Functions. ++ */ ++#define static_assert(c, msg) \ ++ __attribute__((unused)) \ ++ static char static_assert_failed_ ## msg[c ? 1 : -1] ++ ++struct dfltcc_qaf_param { ++ char fns[16]; ++ char reserved1[8]; ++ char fmts[2]; ++ char reserved2[6]; ++}; ++ ++static_assert(sizeof(struct dfltcc_qaf_param) == 32, ++ sizeof_struct_dfltcc_qaf_param_is_32); ++ ++local inline int is_bit_set OF((const char *bits, int n)); ++local inline int is_bit_set(bits, n) ++ const char *bits; ++ int n; ++{ ++ return bits[n / 8] & (1 << (7 - (n % 8))); ++} ++ ++local inline void clear_bit OF((char *bits, int n)); ++local inline void clear_bit(bits, n) ++ char *bits; ++ int n; ++{ ++ bits[n / 8] &= ~(1 << (7 - (n % 8))); ++} ++ ++#define DFLTCC_FMT0 0 ++ ++/* ++ Parameter Block for Generate Dynamic-Huffman Table, Compress and Expand. ++ */ ++#define CVT_CRC32 0 ++#define CVT_ADLER32 1 ++#define HTT_FIXED 0 ++#define HTT_DYNAMIC 1 ++ ++struct dfltcc_param_v0 { ++ uint16_t pbvn; /* Parameter-Block-Version Number */ ++ uint8_t mvn; /* Model-Version Number */ ++ uint8_t ribm; /* Reserved for IBM use */ ++ unsigned reserved32 : 31; ++ unsigned cf : 1; /* Continuation Flag */ ++ uint8_t reserved64[8]; ++ unsigned nt : 1; /* New Task */ ++ unsigned reserved129 : 1; ++ unsigned cvt : 1; /* Check Value Type */ ++ unsigned reserved131 : 1; ++ unsigned htt : 1; /* Huffman-Table Type */ ++ unsigned bcf : 1; /* Block-Continuation Flag */ ++ unsigned bcc : 1; /* Block Closing Control */ ++ unsigned bhf : 1; /* Block Header Final */ ++ unsigned reserved136 : 1; ++ unsigned reserved137 : 1; ++ unsigned dhtgc : 1; /* DHT Generation Control */ ++ unsigned reserved139 : 5; ++ unsigned reserved144 : 5; ++ unsigned sbb : 3; /* Sub-Byte Boundary */ ++ uint8_t oesc; /* Operation-Ending-Supplemental Code */ ++ unsigned reserved160 : 12; ++ unsigned ifs : 4; /* Incomplete-Function Status */ ++ uint16_t ifl; /* Incomplete-Function Length */ ++ uint8_t reserved192[8]; ++ uint8_t reserved256[8]; ++ uint8_t reserved320[4]; ++ uint16_t hl; /* History Length */ ++ unsigned reserved368 : 1; ++ uint16_t ho : 15; /* History Offset */ ++ uint32_t cv; /* Check Value */ ++ unsigned eobs : 15; /* End-of-block Symbol */ ++ unsigned reserved431: 1; ++ uint8_t eobl : 4; /* End-of-block Length */ ++ unsigned reserved436 : 12; ++ unsigned reserved448 : 4; ++ uint16_t cdhtl : 12; /* Compressed-Dynamic-Huffman Table ++ Length */ ++ uint8_t reserved464[6]; ++ uint8_t cdht[288]; ++ uint8_t reserved[32]; ++ uint8_t csb[1152]; ++}; ++ ++static_assert(sizeof(struct dfltcc_param_v0) == 1536, ++ sizeof_struct_dfltcc_param_v0_is_1536); ++ ++local z_const char *oesc_msg OF((char *buf, int oesc)); ++local z_const char *oesc_msg(buf, oesc) ++ char *buf; ++ int oesc; ++{ ++ if (oesc == 0x00) ++ return NULL; /* Successful completion */ ++ else { ++ sprintf(buf, "Operation-Ending-Supplemental Code is 0x%.2X", oesc); ++ return buf; ++ } ++} ++ ++/* ++ Extension of inflate_state and deflate_state. Must be doubleword-aligned. ++*/ ++struct dfltcc_state { ++ struct dfltcc_param_v0 param; /* Parameter block. */ ++ struct dfltcc_qaf_param af; /* Available functions. */ ++ uLong level_mask; /* Levels on which to use DFLTCC */ ++ uLong block_size; /* New block each X bytes */ ++ uLong block_threshold; /* New block after total_in > X */ ++ uLong dht_threshold; /* New block only if avail_in >= X */ ++ char msg[64]; /* Buffer for strm->msg */ ++}; ++ ++#define ALIGN_UP(p, size) \ ++ (__typeof__(p))(((uintptr_t)(p) + ((size) - 1)) & ~((size) - 1)) ++ ++#define GET_DFLTCC_STATE(state) ((struct dfltcc_state FAR *)( \ ++ (char FAR *)(state) + ALIGN_UP(sizeof(*state), 8))) ++ ++/* ++ Compress. ++ */ ++local inline int dfltcc_are_params_ok(int level, ++ uInt window_bits, ++ int strategy, ++ uLong level_mask); ++local inline int dfltcc_are_params_ok(level, window_bits, strategy, level_mask) ++ int level; ++ uInt window_bits; ++ int strategy; ++ uLong level_mask; ++{ ++ return (level_mask & (1 << level)) != 0 && ++ (window_bits == HB_BITS) && ++ (strategy == Z_FIXED || strategy == Z_DEFAULT_STRATEGY); ++} ++ ++ ++int ZLIB_INTERNAL dfltcc_can_deflate(strm) ++ z_streamp strm; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ ++ /* Unsupported compression settings */ ++ if (!dfltcc_are_params_ok(state->level, state->w_bits, state->strategy, ++ dfltcc_state->level_mask)) ++ return 0; ++ ++ /* Unsupported hardware */ ++ if (!is_bit_set(dfltcc_state->af.fns, DFLTCC_GDHT) || ++ !is_bit_set(dfltcc_state->af.fns, DFLTCC_CMPR) || ++ !is_bit_set(dfltcc_state->af.fmts, DFLTCC_FMT0)) ++ return 0; ++ ++ return 1; ++} ++ ++local void dfltcc_gdht OF((z_streamp strm)); ++local void dfltcc_gdht(strm) ++ z_streamp strm; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_param_v0 FAR *param = &GET_DFLTCC_STATE(state)->param; ++ size_t avail_in = avail_in = strm->avail_in; ++ ++ dfltcc(DFLTCC_GDHT, ++ param, NULL, NULL, ++ &strm->next_in, &avail_in, NULL); ++} ++ ++local dfltcc_cc dfltcc_cmpr OF((z_streamp strm)); ++local dfltcc_cc dfltcc_cmpr(strm) ++ z_streamp strm; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_param_v0 FAR *param = &GET_DFLTCC_STATE(state)->param; ++ size_t avail_in = strm->avail_in; ++ size_t avail_out = strm->avail_out; ++ dfltcc_cc cc; ++ ++ cc = dfltcc(DFLTCC_CMPR | HBT_CIRCULAR, ++ param, &strm->next_out, &avail_out, ++ &strm->next_in, &avail_in, state->window); ++ strm->total_in += (strm->avail_in - avail_in); ++ strm->total_out += (strm->avail_out - avail_out); ++ strm->avail_in = avail_in; ++ strm->avail_out = avail_out; ++ return cc; ++} ++ ++local void send_eobs OF((z_streamp strm, ++ z_const struct dfltcc_param_v0 FAR *param)); ++local void send_eobs(strm, param) ++ z_streamp strm; ++ z_const struct dfltcc_param_v0 FAR *param; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ ++ _tr_send_bits( ++ state, ++ bi_reverse(param->eobs >> (15 - param->eobl), param->eobl), ++ param->eobl); ++ flush_pending(strm); ++ if (state->pending != 0) { ++ /* The remaining data is located in pending_out[0:pending]. If someone ++ * calls put_byte() - this might happen in deflate() - the byte will be ++ * placed into pending_buf[pending], which is incorrect. Move the ++ * remaining data to the beginning of pending_buf so that put_byte() is ++ * usable again. ++ */ ++ memmove(state->pending_buf, state->pending_out, state->pending); ++ state->pending_out = state->pending_buf; ++ } ++#ifdef ZLIB_DEBUG ++ state->compressed_len += param->eobl; ++#endif ++} ++ ++int ZLIB_INTERNAL dfltcc_deflate(strm, flush, result) ++ z_streamp strm; ++ int flush; ++ block_state *result; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; ++ uInt masked_avail_in; ++ dfltcc_cc cc; ++ int need_empty_block; ++ int soft_bcc; ++ int no_flush; ++ ++ if (!dfltcc_can_deflate(strm)) ++ return 0; ++ ++again: ++ masked_avail_in = 0; ++ soft_bcc = 0; ++ no_flush = flush == Z_NO_FLUSH; ++ ++ /* Trailing empty block. Switch to software, except when Continuation Flag ++ * is set, which means that DFLTCC has buffered some output in the ++ * parameter block and needs to be called again in order to flush it. ++ */ ++ if (flush == Z_FINISH && strm->avail_in == 0 && !param->cf) { ++ if (param->bcf) { ++ /* A block is still open, and the hardware does not support closing ++ * blocks without adding data. Thus, close it manually. ++ */ ++ send_eobs(strm, param); ++ param->bcf = 0; ++ } ++ return 0; ++ } ++ ++ if (strm->avail_in == 0 && !param->cf) { ++ *result = need_more; ++ return 1; ++ } ++ ++ /* There is an open non-BFINAL block, we are not going to close it just ++ * yet, we have compressed more than DFLTCC_BLOCK_SIZE bytes and we see ++ * more than DFLTCC_DHT_MIN_SAMPLE_SIZE bytes. Open a new block with a new ++ * DHT in order to adapt to a possibly changed input data distribution. ++ */ ++ if (param->bcf && no_flush && ++ strm->total_in > dfltcc_state->block_threshold && ++ strm->avail_in >= dfltcc_state->dht_threshold) { ++ if (param->cf) { ++ /* We need to flush the DFLTCC buffer before writing the ++ * End-of-block Symbol. Mask the input data and proceed as usual. ++ */ ++ masked_avail_in += strm->avail_in; ++ strm->avail_in = 0; ++ no_flush = 0; ++ } else { ++ /* DFLTCC buffer is empty, so we can manually write the ++ * End-of-block Symbol right away. ++ */ ++ send_eobs(strm, param); ++ param->bcf = 0; ++ dfltcc_state->block_threshold = ++ strm->total_in + dfltcc_state->block_size; ++ if (strm->avail_out == 0) { ++ *result = need_more; ++ return 1; ++ } ++ } ++ } ++ ++ /* The caller gave us too much data. Pass only one block worth of ++ * uncompressed data to DFLTCC and mask the rest, so that on the next ++ * iteration we start a new block. ++ */ ++ if (no_flush && strm->avail_in > dfltcc_state->block_size) { ++ masked_avail_in += (strm->avail_in - dfltcc_state->block_size); ++ strm->avail_in = dfltcc_state->block_size; ++ } ++ ++ /* When we have an open non-BFINAL deflate block and caller indicates that ++ * the stream is ending, we need to close an open deflate block and open a ++ * BFINAL one. ++ */ ++ need_empty_block = flush == Z_FINISH && param->bcf && !param->bhf; ++ ++ /* Translate stream to parameter block */ ++ param->cvt = state->wrap == 2 ? CVT_CRC32 : CVT_ADLER32; ++ if (!no_flush) ++ /* We need to close a block. Always do this in software - when there is ++ * no input data, the hardware will not nohor BCC. */ ++ soft_bcc = 1; ++ if (flush == Z_FINISH && !param->bcf) ++ /* We are about to open a BFINAL block, set Block Header Final bit ++ * until the stream ends. ++ */ ++ param->bhf = 1; ++ /* DFLTCC-CMPR will write to next_out, so make sure that buffers with ++ * higher precedence are empty. ++ */ ++ Assert(state->pending == 0, "There must be no pending bytes"); ++ Assert(state->bi_valid < 8, "There must be less than 8 pending bits"); ++ param->sbb = (unsigned int)state->bi_valid; ++ if (param->sbb > 0) ++ *strm->next_out = (Bytef)state->bi_buf; ++ if (param->hl) ++ param->nt = 0; /* Honor history */ ++ param->cv = state->wrap == 2 ? ZSWAP32(strm->adler) : strm->adler; ++ ++ /* When opening a block, choose a Huffman-Table Type */ ++ if (!param->bcf) { ++ if (state->strategy == Z_FIXED || ++ (strm->total_in == 0 && dfltcc_state->block_threshold > 0)) ++ param->htt = HTT_FIXED; ++ else { ++ param->htt = HTT_DYNAMIC; ++ dfltcc_gdht(strm); ++ } ++ } ++ ++ /* Deflate */ ++ do { ++ cc = dfltcc_cmpr(strm); ++ if (strm->avail_in < 4096 && masked_avail_in > 0) ++ /* We are about to call DFLTCC with a small input buffer, which is ++ * inefficient. Since there is masked data, there will be at least ++ * one more DFLTCC call, so skip the current one and make the next ++ * one handle more data. ++ */ ++ break; ++ } while (cc == DFLTCC_CC_AGAIN); ++ ++ /* Translate parameter block to stream */ ++ strm->msg = oesc_msg(dfltcc_state->msg, param->oesc); ++ state->bi_valid = param->sbb; ++ if (state->bi_valid == 0) ++ state->bi_buf = 0; /* Avoid accessing next_out */ ++ else ++ state->bi_buf = *strm->next_out & ((1 << state->bi_valid) - 1); ++ strm->adler = state->wrap == 2 ? ZSWAP32(param->cv) : param->cv; ++ ++ /* Unmask the input data */ ++ strm->avail_in += masked_avail_in; ++ masked_avail_in = 0; ++ ++ /* If we encounter an error, it means there is a bug in DFLTCC call */ ++ Assert(cc != DFLTCC_CC_OP2_CORRUPT || param->oesc == 0, "BUG"); ++ ++ /* Update Block-Continuation Flag. It will be used to check whether to call ++ * GDHT the next time. ++ */ ++ if (cc == DFLTCC_CC_OK) { ++ if (soft_bcc) { ++ send_eobs(strm, param); ++ param->bcf = 0; ++ dfltcc_state->block_threshold = ++ strm->total_in + dfltcc_state->block_size; ++ } else ++ param->bcf = 1; ++ if (flush == Z_FINISH) { ++ if (need_empty_block) ++ /* Make the current deflate() call also close the stream */ ++ return 0; ++ else { ++ bi_windup(state); ++ *result = finish_done; ++ } ++ } else { ++ if (flush == Z_FULL_FLUSH) ++ param->hl = 0; /* Clear history */ ++ *result = flush == Z_NO_FLUSH ? need_more : block_done; ++ } ++ } else { ++ param->bcf = 1; ++ *result = need_more; ++ } ++ if (strm->avail_in != 0 && strm->avail_out != 0) ++ goto again; /* deflate() must use all input or all output */ ++ return 1; ++} ++ ++/* ++ Expand. ++ */ ++int ZLIB_INTERNAL dfltcc_can_inflate(strm) ++ z_streamp strm; ++{ ++ struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ ++ /* Unsupported compression settings */ ++ if (state->wbits != HB_BITS) ++ return 0; ++ ++ /* Unsupported hardware */ ++ return is_bit_set(dfltcc_state->af.fns, DFLTCC_XPND) && ++ is_bit_set(dfltcc_state->af.fmts, DFLTCC_FMT0); ++} ++ ++local dfltcc_cc dfltcc_xpnd OF((z_streamp strm)); ++local dfltcc_cc dfltcc_xpnd(strm) ++ z_streamp strm; ++{ ++ struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state; ++ struct dfltcc_param_v0 FAR *param = &GET_DFLTCC_STATE(state)->param; ++ size_t avail_in = strm->avail_in; ++ size_t avail_out = strm->avail_out; ++ dfltcc_cc cc; ++ ++ cc = dfltcc(DFLTCC_XPND | HBT_CIRCULAR, ++ param, &strm->next_out, &avail_out, ++ &strm->next_in, &avail_in, state->window); ++ strm->avail_in = avail_in; ++ strm->avail_out = avail_out; ++ return cc; ++} ++ ++dfltcc_inflate_action ZLIB_INTERNAL dfltcc_inflate(strm, flush, ret) ++ z_streamp strm; ++ int flush; ++ int *ret; ++{ ++ struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; ++ dfltcc_cc cc; ++ ++ if (flush == Z_BLOCK || flush == Z_TREES) { ++ /* DFLTCC does not support stopping on block boundaries */ ++ if (dfltcc_inflate_disable(strm)) { ++ *ret = Z_STREAM_ERROR; ++ return DFLTCC_INFLATE_BREAK; ++ } else ++ return DFLTCC_INFLATE_SOFTWARE; ++ } ++ ++ if (state->last) { ++ if (state->bits != 0) { ++ strm->next_in++; ++ strm->avail_in--; ++ state->bits = 0; ++ } ++ state->mode = CHECK; ++ return DFLTCC_INFLATE_CONTINUE; ++ } ++ ++ if (strm->avail_in == 0 && !param->cf) ++ return DFLTCC_INFLATE_BREAK; ++ ++ if (inflate_ensure_window(state)) { ++ state->mode = MEM; ++ return DFLTCC_INFLATE_CONTINUE; ++ } ++ ++ /* Translate stream to parameter block */ ++ param->cvt = state->flags ? CVT_CRC32 : CVT_ADLER32; ++ param->sbb = state->bits; ++ param->hl = state->whave; /* Software and hardware history formats match */ ++ param->ho = (state->wnext - state->whave) & ((1 << HB_BITS) - 1); ++ if (param->hl) ++ param->nt = 0; /* Honor history for the first block */ ++ param->cv = state->flags ? ZSWAP32(state->check) : state->check; ++ ++ /* Inflate */ ++ do { ++ cc = dfltcc_xpnd(strm); ++ } while (cc == DFLTCC_CC_AGAIN); ++ ++ /* Translate parameter block to stream */ ++ strm->msg = oesc_msg(dfltcc_state->msg, param->oesc); ++ state->last = cc == DFLTCC_CC_OK; ++ state->bits = param->sbb; ++ state->whave = param->hl; ++ state->wnext = (param->ho + param->hl) & ((1 << HB_BITS) - 1); ++ state->check = state->flags ? ZSWAP32(param->cv) : param->cv; ++ if (cc == DFLTCC_CC_OP2_CORRUPT && param->oesc != 0) { ++ /* Report an error if stream is corrupted */ ++ state->mode = BAD; ++ return DFLTCC_INFLATE_CONTINUE; ++ } ++ state->mode = TYPEDO; ++ /* Break if operands are exhausted, otherwise continue looping */ ++ return (cc == DFLTCC_CC_OP1_TOO_SHORT || cc == DFLTCC_CC_OP2_TOO_SHORT) ? ++ DFLTCC_INFLATE_BREAK : DFLTCC_INFLATE_CONTINUE; ++} ++ ++int ZLIB_INTERNAL dfltcc_was_inflate_used(strm) ++ z_streamp strm; ++{ ++ struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state; ++ struct dfltcc_param_v0 FAR *param = &GET_DFLTCC_STATE(state)->param; ++ ++ return !param->nt; ++} ++ ++int ZLIB_INTERNAL dfltcc_inflate_disable(strm) ++ z_streamp strm; ++{ ++ struct inflate_state FAR *state = (struct inflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ ++ if (!dfltcc_can_inflate(strm)) ++ return 0; ++ if (dfltcc_was_inflate_used(strm)) ++ /* DFLTCC has already decompressed some data. Since there is not ++ * enough information to resume decompression in software, the call ++ * must fail. ++ */ ++ return 1; ++ /* DFLTCC was not used yet - decompress in software */ ++ memset(&dfltcc_state->af, 0, sizeof(dfltcc_state->af)); ++ return 0; ++} ++ ++/* ++ Memory management. ++ DFLTCC requires parameter blocks and window to be aligned. zlib allows ++ users to specify their own allocation functions, so using e.g. ++ `posix_memalign' is not an option. Thus, we overallocate and take the ++ aligned portion of the buffer. ++*/ ++local inline int is_dfltcc_enabled OF((void)); ++local inline int is_dfltcc_enabled(void) ++{ ++ const char *env; ++ uint64_t facilities[(DFLTCC_FACILITY / 64) + 1]; ++ register char r0 __asm__("r0"); ++ ++ env = secure_getenv("DFLTCC"); ++ if (env && !strcmp(env, "0")) ++ /* User has explicitly disabled DFLTCC. */ ++ return 0; ++ ++ memset(facilities, 0, sizeof(facilities)); ++ r0 = sizeof(facilities) / sizeof(facilities[0]) - 1; ++ /* STFLE is supported since z9-109 and only in z/Architecture mode. When ++ * compiling with -m31, gcc defaults to ESA mode, however, since the kernel ++ * is 64-bit, it's always z/Architecture mode at runtime. ++ */ ++ __asm__ volatile(".machinemode push\n" ++ ".machinemode zarch\n" ++ "stfle %[facilities]\n" ++ ".machinemode pop\n" ++ : [facilities] "=Q" (facilities) ++ , [r0] "+r" (r0) ++ : ++ : "cc"); ++ return is_bit_set((const char *)facilities, DFLTCC_FACILITY); ++} ++ ++void ZLIB_INTERNAL dfltcc_reset(strm, size) ++ z_streamp strm; ++ uInt size; ++{ ++ struct dfltcc_state *dfltcc_state = ++ (struct dfltcc_state *)((char FAR *)strm->state + ALIGN_UP(size, 8)); ++ struct dfltcc_qaf_param *param = ++ (struct dfltcc_qaf_param *)&dfltcc_state->param; ++ const char *s; ++ ++ /* Initialize available functions */ ++ if (is_dfltcc_enabled()) { ++ dfltcc(DFLTCC_QAF, param, NULL, NULL, NULL, NULL, NULL); ++ memmove(&dfltcc_state->af, param, sizeof(dfltcc_state->af)); ++ } else ++ memset(&dfltcc_state->af, 0, sizeof(dfltcc_state->af)); ++ ++ if (secure_getenv("SOURCE_DATE_EPOCH")) ++ /* User needs reproducible results, but the output of DFLTCC_CMPR ++ * depends on buffers' page offsets. ++ */ ++ clear_bit(dfltcc_state->af.fns, DFLTCC_CMPR); ++ ++ /* Initialize parameter block */ ++ memset(&dfltcc_state->param, 0, sizeof(dfltcc_state->param)); ++ dfltcc_state->param.nt = 1; ++ ++ /* Initialize tuning parameters */ ++#ifndef DFLTCC_LEVEL_MASK ++#define DFLTCC_LEVEL_MASK 0x2 ++#endif ++ s = secure_getenv("DFLTCC_LEVEL_MASK"); ++ dfltcc_state->level_mask = (s && *s) ? strtoul(s, NULL, 0) : ++ DFLTCC_LEVEL_MASK; ++#ifndef DFLTCC_BLOCK_SIZE ++#define DFLTCC_BLOCK_SIZE 1048576 ++#endif ++ s = secure_getenv("DFLTCC_BLOCK_SIZE"); ++ dfltcc_state->block_size = (s && *s) ? strtoul(s, NULL, 0) : ++ DFLTCC_BLOCK_SIZE; ++#ifndef DFLTCC_FIRST_FHT_BLOCK_SIZE ++#define DFLTCC_FIRST_FHT_BLOCK_SIZE 4096 ++#endif ++ s = secure_getenv("DFLTCC_FIRST_FHT_BLOCK_SIZE"); ++ dfltcc_state->block_threshold = (s && *s) ? strtoul(s, NULL, 0) : ++ DFLTCC_FIRST_FHT_BLOCK_SIZE; ++#ifndef DFLTCC_DHT_MIN_SAMPLE_SIZE ++#define DFLTCC_DHT_MIN_SAMPLE_SIZE 4096 ++#endif ++ s = secure_getenv("DFLTCC_DHT_MIN_SAMPLE_SIZE"); ++ dfltcc_state->dht_threshold = (s && *s) ? strtoul(s, NULL, 0) : ++ DFLTCC_DHT_MIN_SAMPLE_SIZE; ++#ifndef DFLTCC_RIBM ++#define DFLTCC_RIBM 0 ++#endif ++ s = secure_getenv("DFLTCC_RIBM"); ++ dfltcc_state->param.ribm = (s && *s) ? strtoul(s, NULL, 0) : ++ DFLTCC_RIBM; ++} ++ ++voidpf ZLIB_INTERNAL dfltcc_alloc_state(strm, items, size) ++ z_streamp strm; ++ uInt items; ++ uInt size; ++{ ++ return ZALLOC(strm, ++ ALIGN_UP(items * size, 8) + sizeof(struct dfltcc_state), ++ sizeof(unsigned char)); ++} ++ ++void ZLIB_INTERNAL dfltcc_copy_state(dst, src, size) ++ voidpf dst; ++ const voidpf src; ++ uInt size; ++{ ++ zmemcpy(dst, src, ALIGN_UP(size, 8) + sizeof(struct dfltcc_state)); ++} ++ ++static const int PAGE_ALIGN = 0x1000; ++ ++voidpf ZLIB_INTERNAL dfltcc_alloc_window(strm, items, size) ++ z_streamp strm; ++ uInt items; ++ uInt size; ++{ ++ voidpf p, w; ++ ++ /* To simplify freeing, we store the pointer to the allocated buffer right ++ * before the window. ++ */ ++ p = ZALLOC(strm, sizeof(voidpf) + items * size + PAGE_ALIGN, ++ sizeof(unsigned char)); ++ if (p == NULL) ++ return NULL; ++ w = ALIGN_UP((char FAR *)p + sizeof(voidpf), PAGE_ALIGN); ++ *(voidpf *)((char FAR *)w - sizeof(voidpf)) = p; ++ return w; ++} ++ ++void ZLIB_INTERNAL dfltcc_free_window(strm, w) ++ z_streamp strm; ++ voidpf w; ++{ ++ if (w) ++ ZFREE(strm, *(voidpf *)((unsigned char FAR *)w - sizeof(voidpf))); ++} ++ ++/* ++ Switching between hardware and software compression. ++ DFLTCC does not support all zlib settings, e.g. generation of non-compressed ++ blocks or alternative window sizes. When such settings are applied on the ++ fly with deflateParams, we need to convert between hardware and software ++ window formats. ++*/ ++int ZLIB_INTERNAL dfltcc_deflate_params(strm, level, strategy) ++ z_streamp strm; ++ int level; ++ int strategy; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; ++ int could_deflate = dfltcc_can_deflate(strm); ++ int can_deflate = dfltcc_are_params_ok(level, state->w_bits, strategy, ++ dfltcc_state->level_mask); ++ ++ if (can_deflate == could_deflate) ++ /* We continue to work in the same mode - no changes needed */ ++ return Z_OK; ++ ++ if (strm->total_in == 0 && param->nt == 1 && param->hl == 0) ++ /* DFLTCC was not used yet - no changes needed */ ++ return Z_OK; ++ ++ /* Switching between hardware and software is not implemented */ ++ return Z_STREAM_ERROR; ++} ++ ++/* ++ Preloading history. ++*/ ++local void append_history OF((struct dfltcc_param_v0 FAR *param, ++ Bytef *history, ++ const Bytef *buf, ++ uInt count)); ++local void append_history(param, history, buf, count) ++ struct dfltcc_param_v0 FAR *param; ++ Bytef *history; ++ const Bytef *buf; ++ uInt count; ++{ ++ size_t offset; ++ size_t n; ++ ++ /* Do not use more than 32K */ ++ if (count > HB_SIZE) { ++ buf += count - HB_SIZE; ++ count = HB_SIZE; ++ } ++ offset = (param->ho + param->hl) % HB_SIZE; ++ if (offset + count <= HB_SIZE) ++ /* Circular history buffer does not wrap - copy one chunk */ ++ zmemcpy(history + offset, buf, count); ++ else { ++ /* Circular history buffer wraps - copy two chunks */ ++ n = HB_SIZE - offset; ++ zmemcpy(history + offset, buf, n); ++ zmemcpy(history, buf + n, count - n); ++ } ++ n = param->hl + count; ++ if (n <= HB_SIZE) ++ /* All history fits into buffer - no need to discard anything */ ++ param->hl = n; ++ else { ++ /* History does not fit into buffer - discard extra bytes */ ++ param->ho = (param->ho + (n - HB_SIZE)) % HB_SIZE; ++ param->hl = HB_SIZE; ++ } ++} ++ ++int ZLIB_INTERNAL dfltcc_deflate_set_dictionary(strm, dictionary, dict_length) ++ z_streamp strm; ++ const Bytef *dictionary; ++ uInt dict_length; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; ++ ++ append_history(param, state->window, dictionary, dict_length); ++ state->strstart = 1; /* Add FDICT to zlib header */ ++ return Z_OK; ++} ++ ++int ZLIB_INTERNAL dfltcc_deflate_get_dictionary(strm, dictionary, dict_length) ++ z_streamp strm; ++ Bytef *dictionary; ++ uInt *dict_length; ++{ ++ deflate_state FAR *state = (deflate_state FAR *)strm->state; ++ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state); ++ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param; ++ ++ if (dictionary) { ++ if (param->ho + param->hl <= HB_SIZE) ++ /* Circular history buffer does not wrap - copy one chunk */ ++ zmemcpy(dictionary, state->window + param->ho, param->hl); ++ else { ++ /* Circular history buffer wraps - copy two chunks */ ++ zmemcpy(dictionary, ++ state->window + param->ho, ++ HB_SIZE - param->ho); ++ zmemcpy(dictionary + HB_SIZE - param->ho, ++ state->window, ++ param->ho + param->hl - HB_SIZE); ++ } ++ } ++ if (dict_length) ++ *dict_length = param->hl; ++ return Z_OK; ++} +\ No newline at end of file +diff --git a/contrib/s390/dfltcc.h b/contrib/s390/dfltcc.h +new file mode 100644 +index 0000000..574e84c +--- /dev/null ++++ b/contrib/s390/dfltcc.h +@@ -0,0 +1,55 @@ ++#ifndef DFLTCC_H ++#define DFLTCC_H ++ ++#include "../../zlib.h" ++#include "../../zutil.h" ++ ++voidpf ZLIB_INTERNAL dfltcc_alloc_state OF((z_streamp strm, uInt items, ++ uInt size)); ++void ZLIB_INTERNAL dfltcc_copy_state OF((voidpf dst, const voidpf src, ++ uInt size)); ++void ZLIB_INTERNAL dfltcc_reset OF((z_streamp strm, uInt size)); ++voidpf ZLIB_INTERNAL dfltcc_alloc_window OF((z_streamp strm, uInt items, ++ uInt size)); ++void ZLIB_INTERNAL dfltcc_free_window OF((z_streamp strm, voidpf w)); ++int ZLIB_INTERNAL dfltcc_can_inflate OF((z_streamp strm)); ++typedef enum { ++ DFLTCC_INFLATE_CONTINUE, ++ DFLTCC_INFLATE_BREAK, ++ DFLTCC_INFLATE_SOFTWARE, ++} dfltcc_inflate_action; ++dfltcc_inflate_action ZLIB_INTERNAL dfltcc_inflate OF((z_streamp strm, ++ int flush, int *ret)); ++int ZLIB_INTERNAL dfltcc_was_inflate_used OF((z_streamp strm)); ++int ZLIB_INTERNAL dfltcc_inflate_disable OF((z_streamp strm)); ++ ++#define ZALLOC_STATE dfltcc_alloc_state ++#define ZFREE_STATE ZFREE ++#define ZCOPY_STATE dfltcc_copy_state ++#define ZALLOC_WINDOW dfltcc_alloc_window ++#define ZFREE_WINDOW dfltcc_free_window ++#define TRY_FREE_WINDOW dfltcc_free_window ++#define INFLATE_RESET_KEEP_HOOK(strm) \ ++ dfltcc_reset((strm), sizeof(struct inflate_state)) ++#define INFLATE_PRIME_HOOK(strm, bits, value) \ ++ do { if (dfltcc_inflate_disable((strm))) return Z_STREAM_ERROR; } while (0) ++#define INFLATE_TYPEDO_HOOK(strm, flush) \ ++ if (dfltcc_can_inflate((strm))) { \ ++ dfltcc_inflate_action action; \ ++\ ++ RESTORE(); \ ++ action = dfltcc_inflate((strm), (flush), &ret); \ ++ LOAD(); \ ++ if (action == DFLTCC_INFLATE_CONTINUE) \ ++ break; \ ++ else if (action == DFLTCC_INFLATE_BREAK) \ ++ goto inf_leave; \ ++ } ++#define INFLATE_NEED_CHECKSUM(strm) (!dfltcc_can_inflate((strm))) ++#define INFLATE_NEED_UPDATEWINDOW(strm) (!dfltcc_can_inflate((strm))) ++#define INFLATE_MARK_HOOK(strm) \ ++ do { \ ++ if (dfltcc_was_inflate_used((strm))) return -(1L << 16); \ ++ } while (0) ++ ++#endif +\ No newline at end of file +diff --git a/contrib/s390/dfltcc_deflate.h b/contrib/s390/dfltcc_deflate.h +new file mode 100644 +index 0000000..a129a91 +--- /dev/null ++++ b/contrib/s390/dfltcc_deflate.h +@@ -0,0 +1,50 @@ ++#ifndef DFLTCC_DEFLATE_H ++#define DFLTCC_DEFLATE_H ++ ++#include "dfltcc.h" ++ ++int ZLIB_INTERNAL dfltcc_can_deflate OF((z_streamp strm)); ++int ZLIB_INTERNAL dfltcc_deflate OF((z_streamp strm, ++ int flush, ++ block_state *result)); ++int ZLIB_INTERNAL dfltcc_deflate_params OF((z_streamp strm, ++ int level, ++ int strategy)); ++int ZLIB_INTERNAL dfltcc_deflate_set_dictionary OF((z_streamp strm, ++ const Bytef *dictionary, ++ uInt dict_length)); ++int ZLIB_INTERNAL dfltcc_deflate_get_dictionary OF((z_streamp strm, ++ Bytef *dictionary, ++ uInt* dict_length)); ++ ++#define DEFLATE_SET_DICTIONARY_HOOK(strm, dict, dict_len) \ ++ do { \ ++ if (dfltcc_can_deflate((strm))) \ ++ return dfltcc_deflate_set_dictionary((strm), (dict), (dict_len)); \ ++ } while (0) ++#define DEFLATE_GET_DICTIONARY_HOOK(strm, dict, dict_len) \ ++ do { \ ++ if (dfltcc_can_deflate((strm))) \ ++ return dfltcc_deflate_get_dictionary((strm), (dict), (dict_len)); \ ++ } while (0) ++#define DEFLATE_RESET_KEEP_HOOK(strm) \ ++ dfltcc_reset((strm), sizeof(deflate_state)) ++#define DEFLATE_PARAMS_HOOK(strm, level, strategy) \ ++ do { \ ++ int err; \ ++\ ++ err = dfltcc_deflate_params((strm), (level), (strategy)); \ ++ if (err == Z_STREAM_ERROR) \ ++ return err; \ ++ } while (0) ++#define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, source_len) \ ++ do { \ ++ if (dfltcc_can_deflate((strm))) \ ++ (complen) = (3 + 5 + 5 + 4 + 19 * 3 + (286 + 30) * 7 + \ ++ (source_len) * 16 + 15 + 7) >> 3; \ ++ } while (0) ++#define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) (dfltcc_can_deflate((strm))) ++#define DEFLATE_HOOK dfltcc_deflate ++#define DEFLATE_NEED_CHECKSUM(strm) (!dfltcc_can_deflate((strm))) ++ ++#endif +\ No newline at end of file +diff --git a/deflate.c b/deflate.c +index 1ec7614..089285a 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -61,15 +61,29 @@ const char deflate_copyright[] = + */ + + /* =========================================================================== +- * Function prototypes. ++ * Architecture-specific bits. + */ +-typedef enum { +- need_more, /* block not completed, need more input or more output */ +- block_done, /* block flush performed */ +- finish_started, /* finish started, need only more output at next deflate */ +- finish_done /* finish done, accept no more input or output */ +-} block_state; ++#ifdef DFLTCC ++# include "contrib/s390/dfltcc_deflate.h" ++#else ++#define ZALLOC_STATE ZALLOC ++#define ZFREE_STATE ZFREE ++#define ZCOPY_STATE zmemcpy ++#define ZALLOC_WINDOW ZALLOC ++#define TRY_FREE_WINDOW TRY_FREE ++#define DEFLATE_SET_DICTIONARY_HOOK(strm, dict, dict_len) do {} while (0) ++#define DEFLATE_GET_DICTIONARY_HOOK(strm, dict, dict_len) do {} while (0) ++#define DEFLATE_RESET_KEEP_HOOK(strm) do {} while (0) ++#define DEFLATE_PARAMS_HOOK(strm, level, strategy) do {} while (0) ++#define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, sourceLen) do {} while (0) ++#define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) 0 ++#define DEFLATE_HOOK(strm, flush, bstate) 0 ++#define DEFLATE_NEED_CHECKSUM(strm) 1 ++#endif + ++/* =========================================================================== ++ * Function prototypes. ++ */ + typedef block_state (*compress_func) OF((deflate_state *s, int flush)); + /* Compression function. Returns the block state after the call. */ + +@@ -85,7 +99,6 @@ local block_state deflate_rle OF((deflate_state *s, int flush)); + local block_state deflate_huff OF((deflate_state *s, int flush)); + local void lm_init OF((deflate_state *s)); + local void putShortMSB OF((deflate_state *s, uInt b)); +-local void flush_pending OF((z_streamp strm)); + local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); + #ifdef ASMV + # pragma message("Assembler code may have bugs -- use at your own risk") +@@ -301,7 +314,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ +- s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); ++ s = (deflate_state *) ZALLOC_STATE(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; +@@ -318,7 +331,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + +- s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); ++ s->window = (Bytef *) ZALLOC_WINDOW(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + +@@ -394,6 +407,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap == 1) + strm->adler = adler32(strm->adler, dictionary, dictLength); ++ DEFLATE_SET_DICTIONARY_HOOK(strm, dictionary, dictLength); + s->wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ +@@ -452,6 +466,7 @@ int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) + + if (deflateStateCheck(strm)) + return Z_STREAM_ERROR; ++ DEFLATE_GET_DICTIONARY_HOOK(strm, dictionary, dictLength); + s = strm->state; + len = s->strstart + s->lookahead; + if (len > s->w_size) +@@ -498,6 +513,8 @@ int ZEXPORT deflateResetKeep (strm) + + _tr_init(s); + ++ DEFLATE_RESET_KEEP_HOOK(strm); ++ + return Z_OK; + } + +@@ -584,6 +601,7 @@ int ZEXPORT deflateParams(strm, level, strategy) + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } ++ DEFLATE_PARAMS_HOOK(strm, level, strategy); + func = configuration_table[s->level].func; + + if ((strategy != s->strategy || func != configuration_table[level].func) && +@@ -659,6 +677,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) + /* conservative upper bound for compressed data */ + complen = sourceLen + + ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; ++ DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, sourceLen); + + /* if can't get parameters, return conservative bound plus zlib wrapper */ + if (deflateStateCheck(strm)) +@@ -700,7 +719,8 @@ uLong ZEXPORT deflateBound(strm, sourceLen) + } + + /* if not default parameters, return conservative bound */ +- if (s->w_bits != 15 || s->hash_bits != 8 + 7) ++ if (DEFLATE_NEED_CONSERVATIVE_BOUND(strm) || ++ s->w_bits != 15 || s->hash_bits != 8 + 7) + return complen + wraplen; + + /* default settings: return tight bound for that case */ +@@ -727,7 +747,7 @@ local void putShortMSB (s, b) + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). + */ +-local void flush_pending(strm) ++void ZLIB_INTERNAL flush_pending(strm) + z_streamp strm; + { + unsigned len; +@@ -997,7 +1017,8 @@ int ZEXPORT deflate (strm, flush) + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + +- bstate = s->level == 0 ? deflate_stored(s, flush) : ++ bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate : ++ s->level == 0 ? deflate_stored(s, flush) : + s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush); +@@ -1086,9 +1107,9 @@ int ZEXPORT deflateEnd (strm) + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); +- TRY_FREE(strm, strm->state->window); ++ TRY_FREE_WINDOW(strm, strm->state->window); + +- ZFREE(strm, strm->state); ++ ZFREE_STATE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +@@ -1119,13 +1140,13 @@ int ZEXPORT deflateCopy (dest, source) + + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + +- ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); ++ ds = (deflate_state *) ZALLOC_STATE(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; +- zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); ++ ZCOPY_STATE((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); + ds->strm = dest; + +- ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ++ ds->window = (Bytef *) ZALLOC_WINDOW(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); +@@ -1174,7 +1195,8 @@ local unsigned read_buf(strm, buf, size) + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); +- if (strm->state->wrap == 1) { ++ if (!DEFLATE_NEED_CHECKSUM(strm)) {} ++ else if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } + #ifdef GZIP +diff --git a/deflate.h b/deflate.h +index 23ecdd3..821a4b9 100644 +--- a/deflate.h ++++ b/deflate.h +@@ -304,6 +304,7 @@ void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); + void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); + void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); ++void ZLIB_INTERNAL _tr_send_bits OF((deflate_state *s, int value, int length)); + + #define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +@@ -346,4 +347,15 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + flush = _tr_tally(s, distance, length) + #endif + ++typedef enum { ++ need_more, /* block not completed, need more input or more output */ ++ block_done, /* block flush performed */ ++ finish_started, /* finish started, need only more output at next deflate */ ++ finish_done /* finish done, accept no more input or output */ ++} block_state; ++ ++unsigned ZLIB_INTERNAL bi_reverse OF((unsigned code, int len)); ++void ZLIB_INTERNAL bi_windup OF((deflate_state *s)); ++void ZLIB_INTERNAL flush_pending OF((z_streamp strm)); ++ + #endif /* DEFLATE_H */ +diff --git a/gzguts.h b/gzguts.h +index 990a4d2..3218395 100644 +--- a/gzguts.h ++++ b/gzguts.h +@@ -153,7 +153,11 @@ + + /* default i/o buffer size -- double this for output when reading (this and + twice this must be able to fit in an unsigned type) */ ++#ifdef DFLTCC ++#define GZBUFSIZE 131072 ++#else + #define GZBUFSIZE 8192 ++#endif + + /* gzip modes, also provide a little integrity check on the passed structure */ + #define GZ_NONE 0 +diff --git a/inflate.c b/inflate.c +index ac333e8..f77c2ae 100644 +--- a/inflate.c ++++ b/inflate.c +@@ -85,6 +85,23 @@ + #include "inflate.h" + #include "inffast.h" + ++/* architecture-specific bits */ ++#ifdef DFLTCC ++# include "contrib/s390/dfltcc.h" ++#else ++#define ZALLOC_STATE ZALLOC ++#define ZFREE_STATE ZFREE ++#define ZCOPY_STATE zmemcpy ++#define ZALLOC_WINDOW ZALLOC ++#define ZFREE_WINDOW ZFREE ++#define INFLATE_RESET_KEEP_HOOK(strm) do {} while (0) ++#define INFLATE_PRIME_HOOK(strm, bits, value) do {} while (0) ++#define INFLATE_TYPEDO_HOOK(strm, flush) do {} while (0) ++#define INFLATE_NEED_CHECKSUM(strm) 1 ++#define INFLATE_NEED_UPDATEWINDOW(strm) 1 ++#define INFLATE_MARK_HOOK(strm) do {} while (0) ++#endif ++ + #ifdef MAKEFIXED + # ifndef BUILDFIXED + # define BUILDFIXED +@@ -137,6 +154,7 @@ z_streamp strm; + state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; ++ INFLATE_RESET_KEEP_HOOK(strm); + Tracev((stderr, "inflate: reset\n")); + return Z_OK; + } +@@ -182,7 +200,7 @@ int windowBits; + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { +- ZFREE(strm, state->window); ++ ZFREE_WINDOW(strm, state->window); + state->window = Z_NULL; + } + +@@ -221,7 +239,7 @@ int stream_size; + strm->zfree = zcfree; + #endif + state = (struct inflate_state FAR *) +- ZALLOC(strm, 1, sizeof(struct inflate_state)); ++ ZALLOC_STATE(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; +@@ -230,7 +248,7 @@ int stream_size; + state->mode = HEAD; /* to pass state test in inflateReset2() */ + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { +- ZFREE(strm, state); ++ ZFREE_STATE(strm, state); + strm->state = Z_NULL; + } + return ret; +@@ -252,6 +270,7 @@ int value; + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; ++ INFLATE_PRIME_HOOK(strm, bits, value); + state = (struct inflate_state FAR *)strm->state; + if (bits < 0) { + state->hold = 0; +@@ -379,6 +398,27 @@ void makefixed() + } + #endif /* MAKEFIXED */ + ++int ZLIB_INTERNAL inflate_ensure_window(state) ++ struct inflate_state *state; ++{ ++ /* if it hasn't been done already, allocate space for the window */ ++ if (state->window == Z_NULL) { ++ state->window = (unsigned char FAR *) ++ ZALLOC_WINDOW(state->strm, 1U << state->wbits, ++ sizeof(unsigned char)); ++ if (state->window == Z_NULL) return 1; ++ } ++ ++ /* if window not in use yet, initialize */ ++ if (state->wsize == 0) { ++ state->wsize = 1U << state->wbits; ++ state->wnext = 0; ++ state->whave = 0; ++ } ++ ++ return 0; ++} ++ + /* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called +@@ -403,20 +443,7 @@ unsigned copy; + + state = (struct inflate_state FAR *)strm->state; + +- /* if it hasn't been done already, allocate space for the window */ +- if (state->window == Z_NULL) { +- state->window = (unsigned char FAR *) +- ZALLOC(strm, 1U << state->wbits, +- sizeof(unsigned char)); +- if (state->window == Z_NULL) return 1; +- } +- +- /* if window not in use yet, initialize */ +- if (state->wsize == 0) { +- state->wsize = 1U << state->wbits; +- state->wnext = 0; +- state->whave = 0; +- } ++ if (inflate_ensure_window(state)) return 1; + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state->wsize) { +@@ -849,6 +876,7 @@ int flush; + case TYPE: + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + case TYPEDO: ++ INFLATE_TYPEDO_HOOK(strm, flush); + if (state->last) { + BYTEBITS(); + state->mode = CHECK; +@@ -1200,7 +1228,7 @@ int flush; + out -= left; + strm->total_out += out; + state->total += out; +- if ((state->wrap & 4) && out) ++ if (INFLATE_NEED_CHECKSUM(strm) && (state->wrap & 4) && out) + strm->adler = state->check = + UPDATE(state->check, put - out, out); + out = left; +@@ -1252,8 +1280,9 @@ int flush; + */ + inf_leave: + RESTORE(); +- if (state->wsize || (out != strm->avail_out && state->mode < BAD && +- (state->mode < CHECK || flush != Z_FINISH))) ++ if (INFLATE_NEED_UPDATEWINDOW(strm) && ++ (state->wsize || (out != strm->avail_out && state->mode < BAD && ++ (state->mode < CHECK || flush != Z_FINISH)))) + if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; +@@ -1263,7 +1292,7 @@ int flush; + strm->total_in += in; + strm->total_out += out; + state->total += out; +- if ((state->wrap & 4) && out) ++ if (INFLATE_NEED_CHECKSUM(strm) && (state->wrap & 4) && out) + strm->adler = state->check = + UPDATE(state->check, strm->next_out - out, out); + strm->data_type = (int)state->bits + (state->last ? 64 : 0) + +@@ -1281,8 +1310,8 @@ z_streamp strm; + if (inflateStateCheck(strm)) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; +- if (state->window != Z_NULL) ZFREE(strm, state->window); +- ZFREE(strm, strm->state); ++ if (state->window != Z_NULL) ZFREE_WINDOW(strm, state->window); ++ ZFREE_STATE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +@@ -1474,21 +1503,21 @@ z_streamp source; + + /* allocate space */ + copy = (struct inflate_state FAR *) +- ZALLOC(source, 1, sizeof(struct inflate_state)); ++ ZALLOC_STATE(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) +- ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); ++ ZALLOC_WINDOW(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { +- ZFREE(source, copy); ++ ZFREE_STATE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); +- zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); ++ ZCOPY_STATE((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + copy->strm = dest; + if (state->lencode >= state->codes && + state->lencode <= state->codes + ENOUGH - 1) { +@@ -1545,6 +1574,7 @@ z_streamp strm; + + if (inflateStateCheck(strm)) + return -(1L << 16); ++ INFLATE_MARK_HOOK(strm); + state = (struct inflate_state FAR *)strm->state; + return (long)(((unsigned long)((long)state->back)) << 16) + + (state->mode == COPY ? state->length : +diff --git a/inflate.h b/inflate.h +index a46cce6..7b19617 100644 +--- a/inflate.h ++++ b/inflate.h +@@ -123,3 +123,5 @@ struct inflate_state { + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ + }; ++ ++int ZLIB_INTERNAL inflate_ensure_window OF((struct inflate_state *state)); +diff --git a/test/infcover.c b/test/infcover.c +index 2be0164..a34cd17 100644 +--- a/test/infcover.c ++++ b/test/infcover.c +@@ -444,7 +444,7 @@ local void cover_wrap(void) + } + + /* input and output functions for inflateBack() */ +-local unsigned pull(void *desc, unsigned char **buf) ++local unsigned pull(void *desc, z_const unsigned char **buf) + { + static unsigned int next = 0; + static unsigned char dat[] = {0x63, 0, 2, 0}; +diff --git a/test/minigzip.c b/test/minigzip.c +index e22fb08..4b5f4ef 100644 +--- a/test/minigzip.c ++++ b/test/minigzip.c +@@ -132,7 +132,11 @@ static void pwinerror (s) + #endif + #define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) + ++#ifdef DFLTCC ++#define BUFLEN 262144 ++#else + #define BUFLEN 16384 ++#endif + #define MAX_NAME_LEN 1024 + + #ifdef MAXSEG_64K +diff --git a/trees.c b/trees.c +index 50cf4b4..ad51207 100644 +--- a/trees.c ++++ b/trees.c +@@ -149,8 +149,6 @@ local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, + local void compress_block OF((deflate_state *s, const ct_data *ltree, + const ct_data *dtree)); + local int detect_data_type OF((deflate_state *s)); +-local unsigned bi_reverse OF((unsigned value, int length)); +-local void bi_windup OF((deflate_state *s)); + local void bi_flush OF((deflate_state *s)); + + #ifdef GEN_TREES_H +@@ -223,6 +221,13 @@ local void send_bits(s, value, length) + } + #endif /* ZLIB_DEBUG */ + ++void ZLIB_INTERNAL _tr_send_bits(s, value, length) ++ deflate_state *s; ++ int value; ++ int length; ++{ ++ send_bits(s, value, length); ++} + + /* the arguments must not have side effects */ + +@@ -1155,7 +1160,7 @@ local int detect_data_type(s) + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +-local unsigned bi_reverse(code, len) ++unsigned ZLIB_INTERNAL bi_reverse(code, len) + unsigned code; /* the value to invert */ + int len; /* its bit length */ + { +@@ -1187,7 +1192,7 @@ local void bi_flush(s) + /* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +-local void bi_windup(s) ++void ZLIB_INTERNAL bi_windup(s) + deflate_state *s; + { + if (s->bi_valid > 8) { +-- +2.19.1 + diff --git a/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-strm-adler-fix.patch b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-strm-adler-fix.patch new file mode 100644 index 0000000..8f70f9b --- /dev/null +++ b/zlib-1.2.11-IBM-Z-hw-accelrated-deflate-strm-adler-fix.patch @@ -0,0 +1,11 @@ +--- a/contrib/s390/dfltcc.c ++++ b/contrib/s390/dfltcc.c +@@ -623,7 +623,7 @@ + state->bits = param->sbb; + state->whave = param->hl; + state->wnext = (param->ho + param->hl) & ((1 << HB_BITS) - 1); +- state->check = state->flags ? ZSWAP32(param->cv) : param->cv; ++ strm->adler = state->check = state->flags ? ZSWAP32(param->cv) : param->cv; + if (cc == DFLTCC_CC_OP2_CORRUPT && param->oesc != 0) { + /* Report an error if stream is corrupted */ + state->mode = BAD; diff --git a/zlib-1.2.11-covscan-issues.patch b/zlib-1.2.11-covscan-issues.patch new file mode 100644 index 0000000..28e8604 --- /dev/null +++ b/zlib-1.2.11-covscan-issues.patch @@ -0,0 +1,74 @@ +From f776e1609cc63bf486634ee9bc6226dac2c0d2f3 Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Tue, 15 Oct 2019 11:27:15 +0200 +Subject: [PATCH] fixed covscan issues + +--- + crc32.c | 2 +- + deflate.c | 2 +- + test/crc32_test.c | 8 ++++---- + 3 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/crc32.c b/crc32.c +index 406d350..34132ea 100644 +--- a/crc32.c ++++ b/crc32.c +@@ -302,7 +302,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + + if (!crc32_func) + crc32_func = crc32_z_ifunc(); +- return (*crc32_func)(crc, buf, len); ++ return (*crc32_func)(crc, buf, len); + } + + #endif /* defined(Z_IFUNC_ASM) || defined(Z_IFUNC_NATIVE) */ +diff --git a/deflate.c b/deflate.c +index 089285a..9b09718 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -1015,7 +1015,7 @@ int ZEXPORT deflate (strm, flush) + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { +- block_state bstate; ++ block_state bstate = 0; + + bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate : + s->level == 0 ? deflate_stored(s, flush) : +diff --git a/test/crc32_test.c b/test/crc32_test.c +index 5d73128..2d2a6c7 100644 +--- a/test/crc32_test.c ++++ b/test/crc32_test.c +@@ -11,25 +11,25 @@ + # include + #endif + +-void test_crc32 OF((uLong crc, Byte* buf, z_size_t len, uLong chk, int line)); ++void test_crc32 OF((uLong crc, char* buf, z_size_t len, uLong chk, int line)); + int main OF((void)); + + typedef struct { + int line; + uLong crc; +- Byte* buf; ++ char* buf; + int len; + uLong expect; + } crc32_test; + + void test_crc32(crc, buf, len, chk, line) + uLong crc; +- Byte *buf; ++ char *buf; + z_size_t len; + uLong chk; + int line; + { +- uLong res = crc32(crc, buf, len); ++ uLong res = crc32(crc, (Bytef *) buf, len); + if (res != chk) { + fprintf(stderr, "FAIL [%d]: crc32 returned 0x%08X expected 0x%08X\n", + line, (unsigned int)res, (unsigned int)chk); +-- +2.19.1 + diff --git a/zlib-1.2.11-cve-2022-37434.patch b/zlib-1.2.11-cve-2022-37434.patch new file mode 100644 index 0000000..1f3aa8d --- /dev/null +++ b/zlib-1.2.11-cve-2022-37434.patch @@ -0,0 +1,35 @@ +From eff308af425b67093bab25f80f1ae950166bece1 Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Sat, 30 Jul 2022 15:51:11 -0700 +Subject: [PATCH] Fix a bug when getting a gzip header extra field with + inflate(). + +If the extra field was larger than the space the user provided with +inflateGetHeader(), and if multiple calls of inflate() delivered +the extra header data, then there could be a buffer overflow of the +provided space. This commit assures that provided space is not +exceeded. +--- + inflate.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/inflate.c b/inflate.c +index 7be8c63..7a72897 100644 +--- a/inflate.c ++++ b/inflate.c +@@ -763,9 +763,10 @@ int flush; + copy = state->length; + if (copy > have) copy = have; + if (copy) { ++ len = state->head->extra_len - state->length; + if (state->head != Z_NULL && +- state->head->extra != Z_NULL) { +- len = state->head->extra_len - state->length; ++ state->head->extra != Z_NULL && ++ len < state->head->extra_max) { + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); +-- +2.35.3 + diff --git a/zlib-1.2.11-cve-2022-37434_2.patch b/zlib-1.2.11-cve-2022-37434_2.patch new file mode 100644 index 0000000..d0e9d1b --- /dev/null +++ b/zlib-1.2.11-cve-2022-37434_2.patch @@ -0,0 +1,32 @@ +From 1eb7682f845ac9e9bf9ae35bbfb3bad5dacbd91d Mon Sep 17 00:00:00 2001 +From: Mark Adler +Date: Mon, 8 Aug 2022 10:50:09 -0700 +Subject: [PATCH] Fix extra field processing bug that dereferences NULL + state->head. + +The recent commit to fix a gzip header extra field processing bug +introduced the new bug fixed here. +--- + inflate.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/inflate.c b/inflate.c +index 7a72897..2a3c4fe 100644 +--- a/inflate.c ++++ b/inflate.c +@@ -763,10 +763,10 @@ int flush; + copy = state->length; + if (copy > have) copy = have; + if (copy) { +- len = state->head->extra_len - state->length; + if (state->head != Z_NULL && + state->head->extra != Z_NULL && +- len < state->head->extra_max) { ++ (len = state->head->extra_len - state->length) < ++ state->head->extra_max) { + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); +-- +2.35.3 + diff --git a/zlib-1.2.11-firefox-crash-fix.patch b/zlib-1.2.11-firefox-crash-fix.patch new file mode 100644 index 0000000..27068bb --- /dev/null +++ b/zlib-1.2.11-firefox-crash-fix.patch @@ -0,0 +1,365 @@ +From 27a84de4a30cd35f8565937397f6d1205b912818 Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Thu, 5 Sep 2019 09:16:35 +0200 +Subject: [PATCH 1/2] fix: power8 crc32 - return 0 with 0 ptr passed + +--- + contrib/power8-crc/vec_crc32.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/contrib/power8-crc/vec_crc32.c b/contrib/power8-crc/vec_crc32.c +index bb2204b..5ce9cd2 100644 +--- a/contrib/power8-crc/vec_crc32.c ++++ b/contrib/power8-crc/vec_crc32.c +@@ -74,6 +74,7 @@ unsigned int CRC32_FUNCTION(unsigned int crc, const unsigned char *p, + unsigned int prealign; + unsigned int tail; + ++ if (p == (const unsigned char *) 0x0) return 0; + #ifdef CRC_XOR + crc ^= 0xffffffff; + #endif +-- +2.19.1 + + +From c066ac92982a2ffe5b1e9bd36000058927437bd5 Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Thu, 5 Sep 2019 09:36:47 +0200 +Subject: [PATCH 2/2] Add CRC32 tests (crc32_test) + +This commit includes a CRC32 test (crc32_test). This tests are important +since some architectures may want include CPU dependent optimizations for +CRC32 algorithm like using vector instructions and we may want to +validate those. +--- + Makefile.in | 35 +++++--- + test/crc32_test.c | 205 ++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 230 insertions(+), 10 deletions(-) + create mode 100644 test/crc32_test.c + +diff --git a/Makefile.in b/Makefile.in +index 40b5cfb..6070dcc 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -75,11 +75,11 @@ PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) + + all: static shared + +-static: example$(EXE) minigzip$(EXE) ++static: crc32_test$(EXE) example$(EXE) minigzip$(EXE) + +-shared: examplesh$(EXE) minigzipsh$(EXE) ++shared: crc32_testsh$(EXE) examplesh$(EXE) minigzipsh$(EXE) + +-all64: example64$(EXE) minigzip64$(EXE) ++all64: crc32_test64$(EXE) example64$(EXE) minigzip64$(EXE) + + check: test + +@@ -87,7 +87,7 @@ test: all teststatic testshared + + teststatic: static + @TMPST=tmpst_$$; \ +- if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ ++ if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST && ./crc32_test; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; false; \ +@@ -100,7 +100,7 @@ testshared: shared + DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ + SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ + TMPSH=tmpsh_$$; \ +- if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ ++ if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH && ./crc32_testsh; then \ + echo ' *** zlib shared test OK ***'; \ + else \ + echo ' *** zlib shared test FAILED ***'; false; \ +@@ -109,7 +109,7 @@ testshared: shared + + test64: all64 + @TMP64=tmp64_$$; \ +- if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ ++ if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64 && ./crc32_test64; then \ + echo ' *** zlib 64-bit test OK ***'; \ + else \ + echo ' *** zlib 64-bit test FAILED ***'; false; \ +@@ -157,6 +157,12 @@ example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h + minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c + ++crc32_test.o: $(SRCDIR)test/crc32_test.c $(SRCDIR)zlib.h zconf.h ++ $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/crc32_test.c ++ ++crc32_test64.o: $(SRCDIR)test/crc32_test.c $(SRCDIR)zlib.h zconf.h ++ $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/crc32_test.c ++ + example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c + +@@ -307,12 +313,21 @@ example$(EXE): example.o $(STATICLIB) + minigzip$(EXE): minigzip.o $(STATICLIB) + $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) + ++crc32_test$(EXE): crc32_test.o $(STATICLIB) ++ $(CC) $(CFLAGS) -o $@ crc32_test.o $(TEST_LDFLAGS) ++ ++crc32_testsh$(EXE): crc32_test.o $(SHAREDLIBV) ++ $(CC) $(CFLAGS) -o $@ crc32_test.o -L. $(SHAREDLIBV) ++ + examplesh$(EXE): example.o $(SHAREDLIBV) + $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) + + minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) + $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) + ++crc32_test64$(EXE): crc32_test64.o $(STATICLIB) ++ $(CC) $(CFLAGS) -o $@ crc32_test64.o $(TEST_LDFLAGS) ++ + example64$(EXE): example64.o $(STATICLIB) + $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) + +@@ -382,8 +397,8 @@ zconf: $(SRCDIR)zconf.h.in + mostlyclean: clean + clean: + rm -f *.o *.lo *~ \ +- example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ +- example64$(EXE) minigzip64$(EXE) \ ++ crc32_test$(EXE) example$(EXE) minigzip$(EXE) crc32_testsh$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ ++ crc32_test64$(EXE) example64$(EXE) minigzip64$(EXE) \ + infcover \ + libz.* foo.gz so_locations \ + _match.s maketree contrib/infback9/*.o +@@ -407,7 +422,7 @@ tags: + + adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h + gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h +-compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h ++compress.o crc32_test.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h + crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h + deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h + infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h +@@ -417,7 +432,7 @@ trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)tr + + adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h + gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h +-compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h ++compress.lo crc32_test.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h + crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h + deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h + infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h +diff --git a/test/crc32_test.c b/test/crc32_test.c +new file mode 100644 +index 0000000..5d73128 +--- /dev/null ++++ b/test/crc32_test.c +@@ -0,0 +1,205 @@ ++/* crc32_tes.c -- unit test for crc32 in the zlib compression library ++ * Copyright (C) 1995-2006, 2010, 2011, 2016, 2019 Rogerio Alves ++ * For conditions of distribution and use, see copyright notice in zlib.h ++ */ ++ ++#include "zlib.h" ++#include ++ ++#ifdef STDC ++# include ++# include ++#endif ++ ++void test_crc32 OF((uLong crc, Byte* buf, z_size_t len, uLong chk, int line)); ++int main OF((void)); ++ ++typedef struct { ++ int line; ++ uLong crc; ++ Byte* buf; ++ int len; ++ uLong expect; ++} crc32_test; ++ ++void test_crc32(crc, buf, len, chk, line) ++ uLong crc; ++ Byte *buf; ++ z_size_t len; ++ uLong chk; ++ int line; ++{ ++ uLong res = crc32(crc, buf, len); ++ if (res != chk) { ++ fprintf(stderr, "FAIL [%d]: crc32 returned 0x%08X expected 0x%08X\n", ++ line, (unsigned int)res, (unsigned int)chk); ++ exit(1); ++ } ++} ++ ++static const crc32_test tests[] = { ++ {__LINE__, 0x0, 0x0, 0, 0x0}, ++ {__LINE__, 0xffffffff, 0x0, 0, 0x0}, ++ {__LINE__, 0x0, 0x0, 255, 0x0}, /* BZ 174799. */ ++ {__LINE__, 0x0, 0x0, 256, 0x0}, ++ {__LINE__, 0x0, 0x0, 257, 0x0}, ++ {__LINE__, 0x0, 0x0, 32767, 0x0}, ++ {__LINE__, 0x0, 0x0, 32768, 0x0}, ++ {__LINE__, 0x0, 0x0, 32769, 0x0}, ++ {__LINE__, 0x0, "", 0, 0x0}, ++ {__LINE__, 0xffffffff, "", 0, 0xffffffff}, ++ {__LINE__, 0x0, "abacus", 6, 0xc3d7115b}, ++ {__LINE__, 0x0, "backlog", 7, 0x269205}, ++ {__LINE__, 0x0, "campfire", 8, 0x22a515f8}, ++ {__LINE__, 0x0, "delta", 5, 0x9643fed9}, ++ {__LINE__, 0x0, "executable", 10, 0xd68eda01}, ++ {__LINE__, 0x0, "file", 4, 0x8c9f3610}, ++ {__LINE__, 0x0, "greatest", 8, 0xc1abd6cd}, ++ {__LINE__, 0x0, "hello", 5, 0x3610a686}, ++ {__LINE__, 0x0, "inverter", 8, 0xc9e962c9}, ++ {__LINE__, 0x0, "jigsaw", 6, 0xce4e3f69}, ++ {__LINE__, 0x0, "karate", 6, 0x890be0e2}, ++ {__LINE__, 0x0, "landscape", 9, 0xc4e0330b}, ++ {__LINE__, 0x0, "machine", 7, 0x1505df84}, ++ {__LINE__, 0x0, "nanometer", 9, 0xd4e19f39}, ++ {__LINE__, 0x0, "oblivion", 8, 0xdae9de77}, ++ {__LINE__, 0x0, "panama", 6, 0x66b8979c}, ++ {__LINE__, 0x0, "quest", 5, 0x4317f817}, ++ {__LINE__, 0x0, "resource", 8, 0xbc91f416}, ++ {__LINE__, 0x0, "secret", 6, 0x5ca2e8e5}, ++ {__LINE__, 0x0, "test", 4, 0xd87f7e0c}, ++ {__LINE__, 0x0, "ultimate", 8, 0x3fc79b0b}, ++ {__LINE__, 0x0, "vector", 6, 0x1b6e485b}, ++ {__LINE__, 0x0, "walrus", 6, 0xbe769b97}, ++ {__LINE__, 0x0, "xeno", 4, 0xe7a06444}, ++ {__LINE__, 0x0, "yelling", 7, 0xfe3944e5}, ++ {__LINE__, 0x0, "zlib", 4, 0x73887d3a}, ++ {__LINE__, 0x0, "4BJD7PocN1VqX0jXVpWB", 20, 0xd487a5a1}, ++ {__LINE__, 0x0, "F1rPWI7XvDs6nAIRx41l", 20, 0x61a0132e}, ++ {__LINE__, 0x0, "ldhKlsVkPFOveXgkGtC2", 20, 0xdf02f76}, ++ {__LINE__, 0x0, "5KKnGOOrs8BvJ35iKTOS", 20, 0x579b2b0a}, ++ {__LINE__, 0x0, "0l1tw7GOcem06Ddu7yn4", 20, 0xf7d16e2d}, ++ {__LINE__, 0x0, "MCr47CjPIn9R1IvE1Tm5", 20, 0x731788f5}, ++ {__LINE__, 0x0, "UcixbzPKTIv0SvILHVdO", 20, 0x7112bb11}, ++ {__LINE__, 0x0, "dGnAyAhRQDsWw0ESou24", 20, 0xf32a0dac}, ++ {__LINE__, 0x0, "di0nvmY9UYMYDh0r45XT", 20, 0x625437bb}, ++ {__LINE__, 0x0, "2XKDwHfAhFsV0RhbqtvH", 20, 0x896930f9}, ++ {__LINE__, 0x0, "ZhrANFIiIvRnqClIVyeD", 20, 0x8579a37}, ++ {__LINE__, 0x0, "v7Q9ehzioTOVeDIZioT1", 20, 0x632aa8e0}, ++ {__LINE__, 0x0, "Yod5hEeKcYqyhfXbhxj2", 20, 0xc829af29}, ++ {__LINE__, 0x0, "GehSWY2ay4uUKhehXYb0", 20, 0x1b08b7e8}, ++ {__LINE__, 0x0, "kwytJmq6UqpflV8Y8GoE", 20, 0x4e33b192}, ++ {__LINE__, 0x0, "70684206568419061514", 20, 0x59a179f0}, ++ {__LINE__, 0x0, "42015093765128581010", 20, 0xcd1013d7}, ++ {__LINE__, 0x0, "88214814356148806939", 20, 0xab927546}, ++ {__LINE__, 0x0, "43472694284527343838", 20, 0x11f3b20c}, ++ {__LINE__, 0x0, "49769333513942933689", 20, 0xd562d4ca}, ++ {__LINE__, 0x0, "54979784887993251199", 20, 0x233395f7}, ++ {__LINE__, 0x0, "58360544869206793220", 20, 0x2d167fd5}, ++ {__LINE__, 0x0, "27347953487840714234", 20, 0x8b5108ba}, ++ {__LINE__, 0x0, "07650690295365319082", 20, 0xc46b3cd8}, ++ {__LINE__, 0x0, "42655507906821911703", 20, 0xc10b2662}, ++ {__LINE__, 0x0, "29977409200786225655", 20, 0xc9a0f9d2}, ++ {__LINE__, 0x0, "85181542907229116674", 20, 0x9341357b}, ++ {__LINE__, 0x0, "87963594337989416799", 20, 0xf0424937}, ++ {__LINE__, 0x0, "21395988329504168551", 20, 0xd7c4c31f}, ++ {__LINE__, 0x0, "51991013580943379423", 20, 0xf11edcc4}, ++ {__LINE__, 0x0, "*]+@!);({_$;}[_},?{?;(_?,=-][@", 30, 0x40795df4}, ++ {__LINE__, 0x0, "_@:_).&(#.[:[{[:)$++-($_;@[)}+", 30, 0xdd61a631}, ++ {__LINE__, 0x0, "&[!,[$_==}+.]@!;*(+},[;:)$;)-@", 30, 0xca907a99}, ++ {__LINE__, 0x0, "]{.[.+?+[[=;[?}_#&;[=)__$$:+=_", 30, 0xf652deac}, ++ {__LINE__, 0x0, "-%.)=/[@].:.(:,()$;=%@-$?]{%+%", 30, 0xaf39a5a9}, ++ {__LINE__, 0x0, "+]#$(@&.=:,*];/.!]%/{:){:@(;)$", 30, 0x6bebb4cf}, ++ {__LINE__, 0x0, ")-._.:?[&:.=+}(*$/=!.${;(=$@!}", 30, 0x76430bac}, ++ {__LINE__, 0x0, ":(_*&%/[[}+,?#$&*+#[([*-/#;%(]", 30, 0x6c80c388}, ++ {__LINE__, 0x0, "{[#-;:$/{)(+[}#]/{&!%(@)%:@-$:", 30, 0xd54d977d}, ++ {__LINE__, 0x0, "_{$*,}(&,@.)):=!/%(&(,,-?$}}}!", 30, 0xe3966ad5}, ++ {__LINE__, 0x0, "e$98KNzqaV)Y:2X?]77].{gKRD4G5{mHZk,Z)SpU%L3FSgv!Wb8MLAFdi{+fp)c,@8m6v)yXg@]HBDFk?.4&}g5_udE*JHCiH=aL", 100, 0xe7c71db9}, ++ {__LINE__, 0x0, "r*Fd}ef+5RJQ;+W=4jTR9)R*p!B;]Ed7tkrLi;88U7g@3v!5pk2X6D)vt,.@N8c]@yyEcKi[vwUu@.Ppm@C6%Mv*3Nw}Y,58_aH)", 100, 0xeaa52777}, ++ {__LINE__, 0x0, "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&", 100, 0xcd472048}, ++ {__LINE__, 0x7a30360d, "abacus", 6, 0xf8655a84}, ++ {__LINE__, 0x6fd767ee, "backlog", 7, 0x1ed834b1}, ++ {__LINE__, 0xefeb7589, "campfire", 8, 0x686cfca}, ++ {__LINE__, 0x61cf7e6b, "delta", 5, 0x1554e4b1}, ++ {__LINE__, 0xdc712e2, "executable", 10, 0x761b4254}, ++ {__LINE__, 0xad23c7fd, "file", 4, 0x7abdd09b}, ++ {__LINE__, 0x85cb2317, "greatest", 8, 0x4ba91c6b}, ++ {__LINE__, 0x9eed31b0, "inverter", 8, 0xd5e78ba5}, ++ {__LINE__, 0xb94f34ca, "jigsaw", 6, 0x23649109}, ++ {__LINE__, 0xab058a2, "karate", 6, 0xc5591f41}, ++ {__LINE__, 0x5bff2b7a, "landscape", 9, 0xf10eb644}, ++ {__LINE__, 0x605c9a5f, "machine", 7, 0xbaa0a636}, ++ {__LINE__, 0x51bdeea5, "nanometer", 9, 0x6af89afb}, ++ {__LINE__, 0x85c21c79, "oblivion", 8, 0xecae222b}, ++ {__LINE__, 0x97216f56, "panama", 6, 0x47dffac4}, ++ {__LINE__, 0x18444af2, "quest", 5, 0x70c2fe36}, ++ {__LINE__, 0xbe6ce359, "resource", 8, 0x1471d925}, ++ {__LINE__, 0x843071f1, "secret", 6, 0x50c9a0db}, ++ {__LINE__, 0xf2480c60, "ultimate", 8, 0xf973daf8}, ++ {__LINE__, 0x2d2feb3d, "vector", 6, 0x344ac03d}, ++ {__LINE__, 0x7490310a, "walrus", 6, 0x6d1408ef}, ++ {__LINE__, 0x97d247d4, "xeno", 4, 0xe62670b5}, ++ {__LINE__, 0x93cf7599, "yelling", 7, 0x1b36da38}, ++ {__LINE__, 0x73c84278, "zlib", 4, 0x6432d127}, ++ {__LINE__, 0x228a87d1, "4BJD7PocN1VqX0jXVpWB", 20, 0x997107d0}, ++ {__LINE__, 0xa7a048d0, "F1rPWI7XvDs6nAIRx41l", 20, 0xdc567274}, ++ {__LINE__, 0x1f0ded40, "ldhKlsVkPFOveXgkGtC2", 20, 0xdcc63870}, ++ {__LINE__, 0xa804a62f, "5KKnGOOrs8BvJ35iKTOS", 20, 0x6926cffd}, ++ {__LINE__, 0x508fae6a, "0l1tw7GOcem06Ddu7yn4", 20, 0xb52b38bc}, ++ {__LINE__, 0xe5adaf4f, "MCr47CjPIn9R1IvE1Tm5", 20, 0xf83b8178}, ++ {__LINE__, 0x67136a40, "UcixbzPKTIv0SvILHVdO", 20, 0xc5213070}, ++ {__LINE__, 0xb00c4a10, "dGnAyAhRQDsWw0ESou24", 20, 0xbc7648b0}, ++ {__LINE__, 0x2e0c84b5, "di0nvmY9UYMYDh0r45XT", 20, 0xd8123a72}, ++ {__LINE__, 0x81238d44, "2XKDwHfAhFsV0RhbqtvH", 20, 0xd5ac5620}, ++ {__LINE__, 0xf853aa92, "ZhrANFIiIvRnqClIVyeD", 20, 0xceae099d}, ++ {__LINE__, 0x5a692325, "v7Q9ehzioTOVeDIZioT1", 20, 0xb07d2b24}, ++ {__LINE__, 0x3275b9f, "Yod5hEeKcYqyhfXbhxj2", 20, 0x24ce91df}, ++ {__LINE__, 0x38371feb, "GehSWY2ay4uUKhehXYb0", 20, 0x707b3b30}, ++ {__LINE__, 0xafc8bf62, "kwytJmq6UqpflV8Y8GoE", 20, 0x16abc6a9}, ++ {__LINE__, 0x9b07db73, "70684206568419061514", 20, 0xae1fb7b7}, ++ {__LINE__, 0xe75b214, "42015093765128581010", 20, 0xd4eecd2d}, ++ {__LINE__, 0x72d0fe6f, "88214814356148806939", 20, 0x4660ec7}, ++ {__LINE__, 0xf857a4b1, "43472694284527343838", 20, 0xfd8afdf7}, ++ {__LINE__, 0x54b8e14, "49769333513942933689", 20, 0xc6d1b5f2}, ++ {__LINE__, 0xd6aa5616, "54979784887993251199", 20, 0x32476461}, ++ {__LINE__, 0x11e63098, "58360544869206793220", 20, 0xd917cf1a}, ++ {__LINE__, 0xbe92385, "27347953487840714234", 20, 0x4ad14a12}, ++ {__LINE__, 0x49511de0, "07650690295365319082", 20, 0xe37b5c6c}, ++ {__LINE__, 0x3db13bc1, "42655507906821911703", 20, 0x7cc497f1}, ++ {__LINE__, 0xbb899bea, "29977409200786225655", 20, 0x99781bb2}, ++ {__LINE__, 0xf6cd9436, "85181542907229116674", 20, 0x132256a1}, ++ {__LINE__, 0x9109e6c3, "87963594337989416799", 20, 0xbfdb2c83}, ++ {__LINE__, 0x75770fc, "21395988329504168551", 20, 0x8d9d1e81}, ++ {__LINE__, 0x69b1d19b, "51991013580943379423", 20, 0x7b6d4404}, ++ {__LINE__, 0xc6132975, "*]+@!);({_$;}[_},?{?;(_?,=-][@", 30, 0x8619f010}, ++ {__LINE__, 0xd58cb00c, "_@:_).&(#.[:[{[:)$++-($_;@[)}+", 30, 0x15746ac3}, ++ {__LINE__, 0xb63b8caa, "&[!,[$_==}+.]@!;*(+},[;:)$;)-@", 30, 0xaccf812f}, ++ {__LINE__, 0x8a45a2b8, "]{.[.+?+[[=;[?}_#&;[=)__$$:+=_", 30, 0x78af45de}, ++ {__LINE__, 0xcbe95b78, "-%.)=/[@].:.(:,()$;=%@-$?]{%+%", 30, 0x25b06b59}, ++ {__LINE__, 0x4ef8a54b, "+]#$(@&.=:,*];/.!]%/{:){:@(;)$", 30, 0x4ba0d08f}, ++ {__LINE__, 0x76ad267a, ")-._.:?[&:.=+}(*$/=!.${;(=$@!}", 30, 0xe26b6aac}, ++ {__LINE__, 0x569e613c, ":(_*&%/[[}+,?#$&*+#[([*-/#;%(]", 30, 0x7e2b0a66}, ++ {__LINE__, 0x36aa61da, "{[#-;:$/{)(+[}#]/{&!%(@)%:@-$:", 30, 0xb3430dc7}, ++ {__LINE__, 0xf67222df, "_{$*,}(&,@.)):=!/%(&(,,-?$}}}!", 30, 0x626c17a}, ++ {__LINE__, 0x74b34fd3, "e$98KNzqaV)Y:2X?]77].{gKRD4G5{mHZk,Z)SpU%L3FSgv!Wb8MLAFdi{+fp)c,@8m6v)yXg@]HBDFk?.4&}g5_udE*JHCiH=aL", 100, 0xccf98060}, ++ {__LINE__, 0x351fd770, "r*Fd}ef+5RJQ;+W=4jTR9)R*p!B;]Ed7tkrLi;88U7g@3v!5pk2X6D)vt,.@N8c]@yyEcKi[vwUu@.Ppm@C6%Mv*3Nw}Y,58_aH)", 100, 0xd8b95312}, ++ {__LINE__, 0xc45aef77, "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&", 100, 0xbb1c9912}, ++ {__LINE__, 0xc45aef77, "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&" ++ "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&" ++ "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&" ++ "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&" ++ "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&" ++ "h{bcmdC+a;t+Cf{6Y_dFq-{X4Yu&7uNfVDh?q&_u.UWJU],-GiH7ADzb7-V.Q%4=+v!$L9W+T=bP]$_:]Vyg}A.ygD.r;h-D]m%&", 600, 0x888AFA5B} ++}; ++ ++static const int test_size = sizeof(tests) / sizeof(tests[0]); ++ ++int main(void) ++{ ++ int i; ++ for (i = 0; i < test_size; i++) { ++ test_crc32(tests[i].crc, tests[i].buf, tests[i].len, ++ tests[i].expect, tests[i].line); ++ } ++ return 0; ++} +\ No newline at end of file +-- +2.19.1 + diff --git a/zlib-1.2.11-inflateSyncPoint-return-value-fix.patch b/zlib-1.2.11-inflateSyncPoint-return-value-fix.patch new file mode 100644 index 0000000..f9b3756 --- /dev/null +++ b/zlib-1.2.11-inflateSyncPoint-return-value-fix.patch @@ -0,0 +1,45 @@ +Subject: [PATCH] Fixed inflateSyncPoint() bad return value on z15 + +--- + contrib/s390/dfltcc.h | 4 ++++ + inflate.c | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/contrib/s390/dfltcc.h b/contrib/s390/dfltcc.h +index 574e84c..7960626 100644 +--- a/contrib/s390/dfltcc.h ++++ b/contrib/s390/dfltcc.h +@@ -51,5 +51,9 @@ int ZLIB_INTERNAL dfltcc_inflate_disable OF((z_streamp strm)); + do { \ + if (dfltcc_was_inflate_used((strm))) return -(1L << 16); \ + } while (0) ++#define INFLATE_SYNC_POINT_HOOK(strm) \ ++ do { \ ++ if (dfltcc_was_inflate_used((strm))) return Z_STREAM_ERROR; \ ++ } while (0) + + #endif +\ No newline at end of file +diff --git a/inflate.c b/inflate.c +index f77c2ae..596034c 100644 +--- a/inflate.c ++++ b/inflate.c +@@ -100,6 +100,7 @@ + #define INFLATE_NEED_CHECKSUM(strm) 1 + #define INFLATE_NEED_UPDATEWINDOW(strm) 1 + #define INFLATE_MARK_HOOK(strm) do {} while (0) ++#define INFLATE_SYNC_POINT_HOOK(strm) do {} while (0) + #endif + + #ifdef MAKEFIXED +@@ -1483,6 +1484,7 @@ z_streamp strm; + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; ++ INFLATE_SYNC_POINT_HOOK(strm); + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; + } +-- +2.26.0 + diff --git a/zlib-1.2.11-optimized-CRC32-framework.patch b/zlib-1.2.11-optimized-CRC32-framework.patch new file mode 100644 index 0000000..18255fa --- /dev/null +++ b/zlib-1.2.11-optimized-CRC32-framework.patch @@ -0,0 +1,2258 @@ +From d1155b9ab9a2ef643ec82285d1fb767dcfd00d16 Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Thu, 1 Aug 2019 12:17:06 +0200 +Subject: [PATCH] Optimized CRC32 for POWER 8+ architectures. + +--- + Makefile.in | 8 + + configure | 77 ++ + contrib/power8-crc/clang_workaround.h | 82 ++ + contrib/power8-crc/crc32_constants.h | 1206 +++++++++++++++++++++++++ + contrib/power8-crc/vec_crc32.c | 674 ++++++++++++++ + crc32.c | 100 +- + 6 files changed, 2135 insertions(+), 12 deletions(-) + create mode 100644 contrib/power8-crc/clang_workaround.h + create mode 100644 contrib/power8-crc/crc32_constants.h + create mode 100644 contrib/power8-crc/vec_crc32.c + +diff --git a/Makefile.in b/Makefile.in +index b7bdbf2..55f6489 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -167,6 +167,9 @@ minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h + adler32.o: $(SRCDIR)adler32.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c + ++crc32_power8.o: $(SRCDIR)contrib/power8-crc/vec_crc32.c ++ $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)contrib/power8-crc/vec_crc32.c ++ + crc32.o: $(SRCDIR)crc32.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c + +@@ -215,6 +218,11 @@ adler32.lo: $(SRCDIR)adler32.c + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c + -@mv objs/adler32.o $@ + ++crc32_power8.lo: $(SRCDIR)contrib/power8-crc/vec_crc32.c ++ -@mkdir objs 2>/dev/null || test -d objs ++ $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32_power8.o $(SRCDIR)contrib/power8-crc/vec_crc32.c ++ -@mv objs/crc32_power8.o $@ ++ + crc32.lo: $(SRCDIR)crc32.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c +diff --git a/configure b/configure +index cd9eeef..e93ff99 100755 +--- a/configure ++++ b/configure +@@ -839,6 +839,83 @@ else + echo "Checking for sys/sdt.h ... No." | tee -a configure.log + fi + ++# test to see if Power8+ implementation is compile time possible ++echo >> configure.log ++cat > $test.c < ++#include ++int main() ++{ ++ return (getauxval(AT_HWCAP2) & PPC_FEATURE2_ARCH_2_07); ++} ++#endif ++#else ++#error No Power 8 or newer architecture, may need -mcpu=power8 ++#endif ++EOF ++ ++if tryboth $CC -c $CFLAGS $test.c; then ++ OBJC="$OBJC crc32_power8.o" ++ PIC_OBJC="$PIC_OBJC crc32_power8.lo" ++ echo "Checking for runtime cpu detection and Power 8 (or newer) Architecture support... Yes." | tee -a configure.log ++else ++ echo "Checking for runtime cpu detection and Power 8 (or newer) Architecture support... No." | tee -a configure.log ++fi ++ ++# test to see if we can use a gnu indirection function to detect and load optimized code at runtime ++echo >> configure.log ++cat > $test.c <> configure.log ++ cat > $test.c <> configure.log + echo ALL = $ALL >> configure.log +diff --git a/contrib/power8-crc/clang_workaround.h b/contrib/power8-crc/clang_workaround.h +new file mode 100644 +index 0000000..09c411b +--- /dev/null ++++ b/contrib/power8-crc/clang_workaround.h +@@ -0,0 +1,82 @@ ++#ifndef CLANG_WORKAROUNDS_H ++#define CLANG_WORKAROUNDS_H ++ ++/* ++ * These stubs fix clang incompatibilities with GCC builtins. ++ */ ++ ++#ifndef __builtin_crypto_vpmsumw ++#define __builtin_crypto_vpmsumw __builtin_crypto_vpmsumb ++#endif ++#ifndef __builtin_crypto_vpmsumd ++#define __builtin_crypto_vpmsumd __builtin_crypto_vpmsumb ++#endif ++ ++static inline ++__vector unsigned long long __attribute__((overloadable)) ++vec_ld(int __a, const __vector unsigned long long* __b) ++{ ++ return (__vector unsigned long long)__builtin_altivec_lvx(__a, __b); ++} ++ ++/* ++ * GCC __builtin_pack_vector_int128 returns a vector __int128_t but Clang ++ * does not recognize this type. On GCC this builtin is translated to a ++ * xxpermdi instruction that only moves the registers __a, __b instead generates ++ * a load. ++ * ++ * Clang has vec_xxpermdi intrinsics. It was implemented in 4.0.0. ++ */ ++static inline ++__vector unsigned long long __builtin_pack_vector (unsigned long __a, ++ unsigned long __b) ++{ ++ #if defined(__BIG_ENDIAN__) ++ __vector unsigned long long __v = {__a, __b}; ++ #else ++ __vector unsigned long long __v = {__b, __a}; ++ #endif ++ return __v; ++} ++ ++#ifndef vec_xxpermdi ++ ++static inline ++unsigned long __builtin_unpack_vector (__vector unsigned long long __v, ++ int __o) ++{ ++ return __v[__o]; ++} ++ ++#if defined(__BIG_ENDIAN__) ++#define __builtin_unpack_vector_0(a) __builtin_unpack_vector ((a), 0) ++#define __builtin_unpack_vector_1(a) __builtin_unpack_vector ((a), 1) ++#else ++#define __builtin_unpack_vector_0(a) __builtin_unpack_vector ((a), 1) ++#define __builtin_unpack_vector_1(a) __builtin_unpack_vector ((a), 0) ++#endif ++ ++#else ++ ++static inline ++unsigned long __builtin_unpack_vector_0 (__vector unsigned long long __v) ++{ ++ #if defined(__BIG_ENDIAN__) ++ return vec_xxpermdi(__v, __v, 0x0)[1]; ++ #else ++ return vec_xxpermdi(__v, __v, 0x0)[0]; ++ #endif ++} ++ ++static inline ++unsigned long __builtin_unpack_vector_1 (__vector unsigned long long __v) ++{ ++ #if defined(__BIG_ENDIAN__) ++ return vec_xxpermdi(__v, __v, 0x3)[1]; ++ #else ++ return vec_xxpermdi(__v, __v, 0x3)[0]; ++ #endif ++} ++#endif /* vec_xxpermdi */ ++ ++#endif +\ No newline at end of file +diff --git a/contrib/power8-crc/crc32_constants.h b/contrib/power8-crc/crc32_constants.h +new file mode 100644 +index 0000000..58088dc +--- /dev/null ++++ b/contrib/power8-crc/crc32_constants.h +@@ -0,0 +1,1206 @@ ++/* ++* ++* THIS FILE IS GENERATED WITH ++./crc32_constants -c -r -x 0x04C11DB7 ++ ++* This is from https://github.com/antonblanchard/crc32-vpmsum/ ++* DO NOT MODIFY IT MANUALLY! ++* ++*/ ++ ++#define CRC 0x4c11db7 ++#define CRC_XOR ++#define REFLECT ++#define MAX_SIZE 32768 ++ ++#ifndef __ASSEMBLER__ ++#ifdef CRC_TABLE ++static const unsigned int crc_table[] = { ++ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, ++ 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, ++ 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, ++ 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, ++ 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, ++ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, ++ 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, ++ 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, ++ 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, ++ 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, ++ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, ++ 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, ++ 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, ++ 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, ++ 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, ++ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, ++ 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, ++ 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, ++ 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, ++ 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, ++ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, ++ 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, ++ 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, ++ 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, ++ 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, ++ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, ++ 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, ++ 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, ++ 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, ++ 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, ++ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, ++ 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, ++ 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, ++ 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, ++ 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, ++ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, ++ 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, ++ 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, ++ 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, ++ 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, ++ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, ++ 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, ++ 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, ++ 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, ++ 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, ++ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, ++ 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, ++ 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, ++ 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, ++ 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, ++ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, ++ 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, ++ 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, ++ 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, ++ 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, ++ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, ++ 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, ++ 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, ++ 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, ++ 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, ++ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, ++ 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, ++ 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, ++ 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,}; ++ ++#endif /* CRC_TABLE */ ++#ifdef POWER8_INTRINSICS ++ ++/* Constants */ ++ ++/* Reduce 262144 kbits to 1024 bits */ ++static const __vector unsigned long long vcrc_const[255] ++ __attribute__((aligned (16))) = { ++#ifdef __LITTLE_ENDIAN__ ++ /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */ ++ { 0x0000000099ea94a8, 0x00000001651797d2 }, ++ /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */ ++ { 0x00000000945a8420, 0x0000000021e0d56c }, ++ /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */ ++ { 0x0000000030762706, 0x000000000f95ecaa }, ++ /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */ ++ { 0x00000001a52fc582, 0x00000001ebd224ac }, ++ /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */ ++ { 0x00000001a4a7167a, 0x000000000ccb97ca }, ++ /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */ ++ { 0x000000000c18249a, 0x00000001006ec8a8 }, ++ /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */ ++ { 0x00000000a924ae7c, 0x000000014f58f196 }, ++ /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */ ++ { 0x00000001e12ccc12, 0x00000001a7192ca6 }, ++ /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */ ++ { 0x00000000a0b9d4ac, 0x000000019a64bab2 }, ++ /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */ ++ { 0x0000000095e8ddfe, 0x0000000014f4ed2e }, ++ /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */ ++ { 0x00000000233fddc4, 0x000000011092b6a2 }, ++ /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */ ++ { 0x00000001b4529b62, 0x00000000c8a1629c }, ++ /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */ ++ { 0x00000001a7fa0e64, 0x000000017bf32e8e }, ++ /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */ ++ { 0x00000001b5334592, 0x00000001f8cc6582 }, ++ /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */ ++ { 0x000000011f8ee1b4, 0x000000008631ddf0 }, ++ /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */ ++ { 0x000000006252e632, 0x000000007e5a76d0 }, ++ /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */ ++ { 0x00000000ab973e84, 0x000000002b09b31c }, ++ /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */ ++ { 0x000000007734f5ec, 0x00000001b2df1f84 }, ++ /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */ ++ { 0x000000007c547798, 0x00000001d6f56afc }, ++ /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */ ++ { 0x000000007ec40210, 0x00000001b9b5e70c }, ++ /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */ ++ { 0x00000001ab1695a8, 0x0000000034b626d2 }, ++ /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */ ++ { 0x0000000090494bba, 0x000000014c53479a }, ++ /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */ ++ { 0x00000001123fb816, 0x00000001a6d179a4 }, ++ /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */ ++ { 0x00000001e188c74c, 0x000000015abd16b4 }, ++ /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */ ++ { 0x00000001c2d3451c, 0x00000000018f9852 }, ++ /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */ ++ { 0x00000000f55cf1ca, 0x000000001fb3084a }, ++ /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */ ++ { 0x00000001a0531540, 0x00000000c53dfb04 }, ++ /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */ ++ { 0x0000000132cd7ebc, 0x00000000e10c9ad6 }, ++ /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */ ++ { 0x0000000073ab7f36, 0x0000000025aa994a }, ++ /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */ ++ { 0x0000000041aed1c2, 0x00000000fa3a74c4 }, ++ /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */ ++ { 0x0000000136c53800, 0x0000000033eb3f40 }, ++ /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */ ++ { 0x0000000126835a30, 0x000000017193f296 }, ++ /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */ ++ { 0x000000006241b502, 0x0000000043f6c86a }, ++ /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */ ++ { 0x00000000d5196ad4, 0x000000016b513ec6 }, ++ /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */ ++ { 0x000000009cfa769a, 0x00000000c8f25b4e }, ++ /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */ ++ { 0x00000000920e5df4, 0x00000001a45048ec }, ++ /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */ ++ { 0x0000000169dc310e, 0x000000000c441004 }, ++ /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */ ++ { 0x0000000009fc331c, 0x000000000e17cad6 }, ++ /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */ ++ { 0x000000010d94a81e, 0x00000001253ae964 }, ++ /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */ ++ { 0x0000000027a20ab2, 0x00000001d7c88ebc }, ++ /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */ ++ { 0x0000000114f87504, 0x00000001e7ca913a }, ++ /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */ ++ { 0x000000004b076d96, 0x0000000033ed078a }, ++ /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */ ++ { 0x00000000da4d1e74, 0x00000000e1839c78 }, ++ /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */ ++ { 0x000000001b81f672, 0x00000001322b267e }, ++ /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */ ++ { 0x000000009367c988, 0x00000000638231b6 }, ++ /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */ ++ { 0x00000001717214ca, 0x00000001ee7f16f4 }, ++ /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */ ++ { 0x000000009f47d820, 0x0000000117d9924a }, ++ /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */ ++ { 0x000000010d9a47d2, 0x00000000e1a9e0c4 }, ++ /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */ ++ { 0x00000000a696c58c, 0x00000001403731dc }, ++ /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */ ++ { 0x000000002aa28ec6, 0x00000001a5ea9682 }, ++ /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */ ++ { 0x00000001fe18fd9a, 0x0000000101c5c578 }, ++ /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */ ++ { 0x000000019d4fc1ae, 0x00000000dddf6494 }, ++ /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */ ++ { 0x00000001ba0e3dea, 0x00000000f1c3db28 }, ++ /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */ ++ { 0x0000000074b59a5e, 0x000000013112fb9c }, ++ /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */ ++ { 0x00000000f2b5ea98, 0x00000000b680b906 }, ++ /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */ ++ { 0x0000000187132676, 0x000000001a282932 }, ++ /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */ ++ { 0x000000010a8c6ad4, 0x0000000089406e7e }, ++ /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */ ++ { 0x00000001e21dfe70, 0x00000001def6be8c }, ++ /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */ ++ { 0x00000001da0050e4, 0x0000000075258728 }, ++ /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */ ++ { 0x00000000772172ae, 0x000000019536090a }, ++ /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */ ++ { 0x00000000e47724aa, 0x00000000f2455bfc }, ++ /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */ ++ { 0x000000003cd63ac4, 0x000000018c40baf4 }, ++ /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */ ++ { 0x00000001bf47d352, 0x000000004cd390d4 }, ++ /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */ ++ { 0x000000018dc1d708, 0x00000001e4ece95a }, ++ /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */ ++ { 0x000000002d4620a4, 0x000000001a3ee918 }, ++ /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */ ++ { 0x0000000058fd1740, 0x000000007c652fb8 }, ++ /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */ ++ { 0x00000000dadd9bfc, 0x000000011c67842c }, ++ /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */ ++ { 0x00000001ea2140be, 0x00000000254f759c }, ++ /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */ ++ { 0x000000009de128ba, 0x000000007ece94ca }, ++ /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */ ++ { 0x000000013ac3aa8e, 0x0000000038f258c2 }, ++ /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */ ++ { 0x0000000099980562, 0x00000001cdf17b00 }, ++ /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */ ++ { 0x00000001c1579c86, 0x000000011f882c16 }, ++ /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */ ++ { 0x0000000068dbbf94, 0x0000000100093fc8 }, ++ /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */ ++ { 0x000000004509fb04, 0x00000001cd684f16 }, ++ /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */ ++ { 0x00000001202f6398, 0x000000004bc6a70a }, ++ /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */ ++ { 0x000000013aea243e, 0x000000004fc7e8e4 }, ++ /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */ ++ { 0x00000001b4052ae6, 0x0000000130103f1c }, ++ /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */ ++ { 0x00000001cd2a0ae8, 0x0000000111b0024c }, ++ /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */ ++ { 0x00000001fe4aa8b4, 0x000000010b3079da }, ++ /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */ ++ { 0x00000001d1559a42, 0x000000010192bcc2 }, ++ /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */ ++ { 0x00000001f3e05ecc, 0x0000000074838d50 }, ++ /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */ ++ { 0x0000000104ddd2cc, 0x000000001b20f520 }, ++ /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */ ++ { 0x000000015393153c, 0x0000000050c3590a }, ++ /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */ ++ { 0x0000000057e942c6, 0x00000000b41cac8e }, ++ /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */ ++ { 0x000000012c633850, 0x000000000c72cc78 }, ++ /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */ ++ { 0x00000000ebcaae4c, 0x0000000030cdb032 }, ++ /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */ ++ { 0x000000013ee532a6, 0x000000013e09fc32 }, ++ /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */ ++ { 0x00000001bf0cbc7e, 0x000000001ed624d2 }, ++ /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */ ++ { 0x00000000d50b7a5a, 0x00000000781aee1a }, ++ /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */ ++ { 0x0000000002fca6e8, 0x00000001c4d8348c }, ++ /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */ ++ { 0x000000007af40044, 0x0000000057a40336 }, ++ /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */ ++ { 0x0000000016178744, 0x0000000085544940 }, ++ /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */ ++ { 0x000000014c177458, 0x000000019cd21e80 }, ++ /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */ ++ { 0x000000011b6ddf04, 0x000000013eb95bc0 }, ++ /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */ ++ { 0x00000001f3e29ccc, 0x00000001dfc9fdfc }, ++ /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */ ++ { 0x0000000135ae7562, 0x00000000cd028bc2 }, ++ /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */ ++ { 0x0000000190ef812c, 0x0000000090db8c44 }, ++ /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */ ++ { 0x0000000067a2c786, 0x000000010010a4ce }, ++ /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */ ++ { 0x0000000048b9496c, 0x00000001c8f4c72c }, ++ /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */ ++ { 0x000000015a422de6, 0x000000001c26170c }, ++ /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */ ++ { 0x00000001ef0e3640, 0x00000000e3fccf68 }, ++ /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */ ++ { 0x00000001006d2d26, 0x00000000d513ed24 }, ++ /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */ ++ { 0x00000001170d56d6, 0x00000000141beada }, ++ /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */ ++ { 0x00000000a5fb613c, 0x000000011071aea0 }, ++ /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */ ++ { 0x0000000040bbf7fc, 0x000000012e19080a }, ++ /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */ ++ { 0x000000016ac3a5b2, 0x0000000100ecf826 }, ++ /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */ ++ { 0x00000000abf16230, 0x0000000069b09412 }, ++ /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */ ++ { 0x00000001ebe23fac, 0x0000000122297bac }, ++ /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */ ++ { 0x000000008b6a0894, 0x00000000e9e4b068 }, ++ /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */ ++ { 0x00000001288ea478, 0x000000004b38651a }, ++ /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */ ++ { 0x000000016619c442, 0x00000001468360e2 }, ++ /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */ ++ { 0x0000000086230038, 0x00000000121c2408 }, ++ /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */ ++ { 0x000000017746a756, 0x00000000da7e7d08 }, ++ /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */ ++ { 0x0000000191b8f8f8, 0x00000001058d7652 }, ++ /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */ ++ { 0x000000008e167708, 0x000000014a098a90 }, ++ /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */ ++ { 0x0000000148b22d54, 0x0000000020dbe72e }, ++ /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */ ++ { 0x0000000044ba2c3c, 0x000000011e7323e8 }, ++ /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */ ++ { 0x00000000b54d2b52, 0x00000000d5d4bf94 }, ++ /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */ ++ { 0x0000000005a4fd8a, 0x0000000199d8746c }, ++ /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */ ++ { 0x0000000139f9fc46, 0x00000000ce9ca8a0 }, ++ /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */ ++ { 0x000000015a1fa824, 0x00000000136edece }, ++ /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */ ++ { 0x000000000a61ae4c, 0x000000019b92a068 }, ++ /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */ ++ { 0x0000000145e9113e, 0x0000000071d62206 }, ++ /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */ ++ { 0x000000006a348448, 0x00000000dfc50158 }, ++ /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */ ++ { 0x000000004d80a08c, 0x00000001517626bc }, ++ /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */ ++ { 0x000000014b6837a0, 0x0000000148d1e4fa }, ++ /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */ ++ { 0x000000016896a7fc, 0x0000000094d8266e }, ++ /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */ ++ { 0x000000014f187140, 0x00000000606c5e34 }, ++ /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */ ++ { 0x000000019581b9da, 0x000000019766beaa }, ++ /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */ ++ { 0x00000001091bc984, 0x00000001d80c506c }, ++ /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */ ++ { 0x000000001067223c, 0x000000001e73837c }, ++ /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */ ++ { 0x00000001ab16ea02, 0x0000000064d587de }, ++ /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */ ++ { 0x000000013c4598a8, 0x00000000f4a507b0 }, ++ /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */ ++ { 0x00000000b3735430, 0x0000000040e342fc }, ++ /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */ ++ { 0x00000001bb3fc0c0, 0x00000001d5ad9c3a }, ++ /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */ ++ { 0x00000001570ae19c, 0x0000000094a691a4 }, ++ /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */ ++ { 0x00000001ea910712, 0x00000001271ecdfa }, ++ /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */ ++ { 0x0000000167127128, 0x000000009e54475a }, ++ /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */ ++ { 0x0000000019e790a2, 0x00000000c9c099ee }, ++ /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */ ++ { 0x000000003788f710, 0x000000009a2f736c }, ++ /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */ ++ { 0x00000001682a160e, 0x00000000bb9f4996 }, ++ /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */ ++ { 0x000000007f0ebd2e, 0x00000001db688050 }, ++ /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */ ++ { 0x000000002b032080, 0x00000000e9b10af4 }, ++ /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */ ++ { 0x00000000cfd1664a, 0x000000012d4545e4 }, ++ /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */ ++ { 0x00000000aa1181c2, 0x000000000361139c }, ++ /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */ ++ { 0x00000000ddd08002, 0x00000001a5a1a3a8 }, ++ /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */ ++ { 0x00000000e8dd0446, 0x000000006844e0b0 }, ++ /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */ ++ { 0x00000001bbd94a00, 0x00000000c3762f28 }, ++ /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */ ++ { 0x00000000ab6cd180, 0x00000001d26287a2 }, ++ /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */ ++ { 0x0000000031803ce2, 0x00000001f6f0bba8 }, ++ /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */ ++ { 0x0000000024f40b0c, 0x000000002ffabd62 }, ++ /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */ ++ { 0x00000001ba1d9834, 0x00000000fb4516b8 }, ++ /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */ ++ { 0x0000000104de61aa, 0x000000018cfa961c }, ++ /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */ ++ { 0x0000000113e40d46, 0x000000019e588d52 }, ++ /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */ ++ { 0x00000001415598a0, 0x00000001180f0bbc }, ++ /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */ ++ { 0x00000000bf6c8c90, 0x00000000e1d9177a }, ++ /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */ ++ { 0x00000001788b0504, 0x0000000105abc27c }, ++ /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */ ++ { 0x0000000038385d02, 0x00000000972e4a58 }, ++ /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */ ++ { 0x00000001b6c83844, 0x0000000183499a5e }, ++ /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */ ++ { 0x0000000051061a8a, 0x00000001c96a8cca }, ++ /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */ ++ { 0x000000017351388a, 0x00000001a1a5b60c }, ++ /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */ ++ { 0x0000000132928f92, 0x00000000e4b6ac9c }, ++ /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */ ++ { 0x00000000e6b4f48a, 0x00000001807e7f5a }, ++ /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */ ++ { 0x0000000039d15e90, 0x000000017a7e3bc8 }, ++ /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */ ++ { 0x00000000312d6074, 0x00000000d73975da }, ++ /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */ ++ { 0x000000017bbb2cc4, 0x000000017375d038 }, ++ /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */ ++ { 0x000000016ded3e18, 0x00000000193680bc }, ++ /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */ ++ { 0x00000000f1638b16, 0x00000000999b06f6 }, ++ /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */ ++ { 0x00000001d38b9ecc, 0x00000001f685d2b8 }, ++ /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */ ++ { 0x000000018b8d09dc, 0x00000001f4ecbed2 }, ++ /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */ ++ { 0x00000000e7bc27d2, 0x00000000ba16f1a0 }, ++ /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */ ++ { 0x00000000275e1e96, 0x0000000115aceac4 }, ++ /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */ ++ { 0x00000000e2e3031e, 0x00000001aeff6292 }, ++ /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */ ++ { 0x00000001041c84d8, 0x000000009640124c }, ++ /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */ ++ { 0x00000000706ce672, 0x0000000114f41f02 }, ++ /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */ ++ { 0x000000015d5070da, 0x000000009c5f3586 }, ++ /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */ ++ { 0x0000000038f9493a, 0x00000001878275fa }, ++ /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */ ++ { 0x00000000a3348a76, 0x00000000ddc42ce8 }, ++ /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */ ++ { 0x00000001ad0aab92, 0x0000000181d2c73a }, ++ /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */ ++ { 0x000000019e85f712, 0x0000000141c9320a }, ++ /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */ ++ { 0x000000005a871e76, 0x000000015235719a }, ++ /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */ ++ { 0x000000017249c662, 0x00000000be27d804 }, ++ /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */ ++ { 0x000000003a084712, 0x000000006242d45a }, ++ /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */ ++ { 0x00000000ed438478, 0x000000009a53638e }, ++ /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */ ++ { 0x00000000abac34cc, 0x00000001001ecfb6 }, ++ /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */ ++ { 0x000000005f35ef3e, 0x000000016d7c2d64 }, ++ /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */ ++ { 0x0000000047d6608c, 0x00000001d0ce46c0 }, ++ /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */ ++ { 0x000000002d01470e, 0x0000000124c907b4 }, ++ /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */ ++ { 0x0000000158bbc7b0, 0x0000000018a555ca }, ++ /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */ ++ { 0x00000000c0a23e8e, 0x000000006b0980bc }, ++ /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */ ++ { 0x00000001ebd85c88, 0x000000008bbba964 }, ++ /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */ ++ { 0x000000019ee20bb2, 0x00000001070a5a1e }, ++ /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */ ++ { 0x00000001acabf2d6, 0x000000002204322a }, ++ /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */ ++ { 0x00000001b7963d56, 0x00000000a27524d0 }, ++ /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */ ++ { 0x000000017bffa1fe, 0x0000000020b1e4ba }, ++ /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */ ++ { 0x000000001f15333e, 0x0000000032cc27fc }, ++ /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */ ++ { 0x000000018593129e, 0x0000000044dd22b8 }, ++ /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */ ++ { 0x000000019cb32602, 0x00000000dffc9e0a }, ++ /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */ ++ { 0x0000000142b05cc8, 0x00000001b7a0ed14 }, ++ /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */ ++ { 0x00000001be49e7a4, 0x00000000c7842488 }, ++ /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */ ++ { 0x0000000108f69d6c, 0x00000001c02a4fee }, ++ /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */ ++ { 0x000000006c0971f0, 0x000000003c273778 }, ++ /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */ ++ { 0x000000005b16467a, 0x00000001d63f8894 }, ++ /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */ ++ { 0x00000001551a628e, 0x000000006be557d6 }, ++ /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */ ++ { 0x000000019e42ea92, 0x000000006a7806ea }, ++ /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */ ++ { 0x000000012fa83ff2, 0x000000016155aa0c }, ++ /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */ ++ { 0x000000011ca9cde0, 0x00000000908650ac }, ++ /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */ ++ { 0x00000000c8e5cd74, 0x00000000aa5a8084 }, ++ /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */ ++ { 0x0000000096c27f0c, 0x0000000191bb500a }, ++ /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */ ++ { 0x000000002baed926, 0x0000000064e9bed0 }, ++ /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */ ++ { 0x000000017c8de8d2, 0x000000009444f302 }, ++ /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */ ++ { 0x00000000d43d6068, 0x000000019db07d3c }, ++ /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */ ++ { 0x00000000cb2c4b26, 0x00000001359e3e6e }, ++ /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */ ++ { 0x0000000145b8da26, 0x00000001e4f10dd2 }, ++ /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */ ++ { 0x000000018fff4b08, 0x0000000124f5735e }, ++ /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */ ++ { 0x0000000150b58ed0, 0x0000000124760a4c }, ++ /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */ ++ { 0x00000001549f39bc, 0x000000000f1fc186 }, ++ /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */ ++ { 0x00000000ef4d2f42, 0x00000000150e4cc4 }, ++ /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */ ++ { 0x00000001b1468572, 0x000000002a6204e8 }, ++ /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */ ++ { 0x000000013d7403b2, 0x00000000beb1d432 }, ++ /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */ ++ { 0x00000001a4681842, 0x0000000135f3f1f0 }, ++ /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */ ++ { 0x0000000167714492, 0x0000000074fe2232 }, ++ /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */ ++ { 0x00000001e599099a, 0x000000001ac6e2ba }, ++ /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */ ++ { 0x00000000fe128194, 0x0000000013fca91e }, ++ /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */ ++ { 0x0000000077e8b990, 0x0000000183f4931e }, ++ /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */ ++ { 0x00000001a267f63a, 0x00000000b6d9b4e4 }, ++ /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */ ++ { 0x00000001945c245a, 0x00000000b5188656 }, ++ /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */ ++ { 0x0000000149002e76, 0x0000000027a81a84 }, ++ /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */ ++ { 0x00000001bb8310a4, 0x0000000125699258 }, ++ /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */ ++ { 0x000000019ec60bcc, 0x00000001b23de796 }, ++ /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */ ++ { 0x000000012d8590ae, 0x00000000fe4365dc }, ++ /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */ ++ { 0x0000000065b00684, 0x00000000c68f497a }, ++ /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */ ++ { 0x000000015e5aeadc, 0x00000000fbf521ee }, ++ /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */ ++ { 0x00000000b77ff2b0, 0x000000015eac3378 }, ++ /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */ ++ { 0x0000000188da2ff6, 0x0000000134914b90 }, ++ /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */ ++ { 0x0000000063da929a, 0x0000000016335cfe }, ++ /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */ ++ { 0x00000001389caa80, 0x000000010372d10c }, ++ /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */ ++ { 0x000000013db599d2, 0x000000015097b908 }, ++ /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */ ++ { 0x0000000122505a86, 0x00000001227a7572 }, ++ /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */ ++ { 0x000000016bd72746, 0x000000009a8f75c0 }, ++ /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */ ++ { 0x00000001c3faf1d4, 0x00000000682c77a2 }, ++ /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */ ++ { 0x00000001111c826c, 0x00000000231f091c }, ++ /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */ ++ { 0x00000000153e9fb2, 0x000000007d4439f2 }, ++ /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */ ++ { 0x000000002b1f7b60, 0x000000017e221efc }, ++ /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */ ++ { 0x00000000b1dba570, 0x0000000167457c38 }, ++ /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */ ++ { 0x00000001f6397b76, 0x00000000bdf081c4 }, ++ /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */ ++ { 0x0000000156335214, 0x000000016286d6b0 }, ++ /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */ ++ { 0x00000001d70e3986, 0x00000000c84f001c }, ++ /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */ ++ { 0x000000003701a774, 0x0000000064efe7c0 }, ++ /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */ ++ { 0x00000000ac81ef72, 0x000000000ac2d904 }, ++ /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */ ++ { 0x0000000133212464, 0x00000000fd226d14 }, ++ /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */ ++ { 0x00000000e4e45610, 0x000000011cfd42e0 }, ++ /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */ ++ { 0x000000000c1bd370, 0x000000016e5a5678 }, ++ /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */ ++ { 0x00000001a7b9e7a6, 0x00000001d888fe22 }, ++ /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */ ++ { 0x000000007d657a10, 0x00000001af77fcd4 } ++#else /* __LITTLE_ENDIAN__ */ ++ /* x^261120 mod p(x)` << 1, x^261184 mod p(x)` << 1 */ ++ { 0x00000001651797d2, 0x0000000099ea94a8 }, ++ /* x^260096 mod p(x)` << 1, x^260160 mod p(x)` << 1 */ ++ { 0x0000000021e0d56c, 0x00000000945a8420 }, ++ /* x^259072 mod p(x)` << 1, x^259136 mod p(x)` << 1 */ ++ { 0x000000000f95ecaa, 0x0000000030762706 }, ++ /* x^258048 mod p(x)` << 1, x^258112 mod p(x)` << 1 */ ++ { 0x00000001ebd224ac, 0x00000001a52fc582 }, ++ /* x^257024 mod p(x)` << 1, x^257088 mod p(x)` << 1 */ ++ { 0x000000000ccb97ca, 0x00000001a4a7167a }, ++ /* x^256000 mod p(x)` << 1, x^256064 mod p(x)` << 1 */ ++ { 0x00000001006ec8a8, 0x000000000c18249a }, ++ /* x^254976 mod p(x)` << 1, x^255040 mod p(x)` << 1 */ ++ { 0x000000014f58f196, 0x00000000a924ae7c }, ++ /* x^253952 mod p(x)` << 1, x^254016 mod p(x)` << 1 */ ++ { 0x00000001a7192ca6, 0x00000001e12ccc12 }, ++ /* x^252928 mod p(x)` << 1, x^252992 mod p(x)` << 1 */ ++ { 0x000000019a64bab2, 0x00000000a0b9d4ac }, ++ /* x^251904 mod p(x)` << 1, x^251968 mod p(x)` << 1 */ ++ { 0x0000000014f4ed2e, 0x0000000095e8ddfe }, ++ /* x^250880 mod p(x)` << 1, x^250944 mod p(x)` << 1 */ ++ { 0x000000011092b6a2, 0x00000000233fddc4 }, ++ /* x^249856 mod p(x)` << 1, x^249920 mod p(x)` << 1 */ ++ { 0x00000000c8a1629c, 0x00000001b4529b62 }, ++ /* x^248832 mod p(x)` << 1, x^248896 mod p(x)` << 1 */ ++ { 0x000000017bf32e8e, 0x00000001a7fa0e64 }, ++ /* x^247808 mod p(x)` << 1, x^247872 mod p(x)` << 1 */ ++ { 0x00000001f8cc6582, 0x00000001b5334592 }, ++ /* x^246784 mod p(x)` << 1, x^246848 mod p(x)` << 1 */ ++ { 0x000000008631ddf0, 0x000000011f8ee1b4 }, ++ /* x^245760 mod p(x)` << 1, x^245824 mod p(x)` << 1 */ ++ { 0x000000007e5a76d0, 0x000000006252e632 }, ++ /* x^244736 mod p(x)` << 1, x^244800 mod p(x)` << 1 */ ++ { 0x000000002b09b31c, 0x00000000ab973e84 }, ++ /* x^243712 mod p(x)` << 1, x^243776 mod p(x)` << 1 */ ++ { 0x00000001b2df1f84, 0x000000007734f5ec }, ++ /* x^242688 mod p(x)` << 1, x^242752 mod p(x)` << 1 */ ++ { 0x00000001d6f56afc, 0x000000007c547798 }, ++ /* x^241664 mod p(x)` << 1, x^241728 mod p(x)` << 1 */ ++ { 0x00000001b9b5e70c, 0x000000007ec40210 }, ++ /* x^240640 mod p(x)` << 1, x^240704 mod p(x)` << 1 */ ++ { 0x0000000034b626d2, 0x00000001ab1695a8 }, ++ /* x^239616 mod p(x)` << 1, x^239680 mod p(x)` << 1 */ ++ { 0x000000014c53479a, 0x0000000090494bba }, ++ /* x^238592 mod p(x)` << 1, x^238656 mod p(x)` << 1 */ ++ { 0x00000001a6d179a4, 0x00000001123fb816 }, ++ /* x^237568 mod p(x)` << 1, x^237632 mod p(x)` << 1 */ ++ { 0x000000015abd16b4, 0x00000001e188c74c }, ++ /* x^236544 mod p(x)` << 1, x^236608 mod p(x)` << 1 */ ++ { 0x00000000018f9852, 0x00000001c2d3451c }, ++ /* x^235520 mod p(x)` << 1, x^235584 mod p(x)` << 1 */ ++ { 0x000000001fb3084a, 0x00000000f55cf1ca }, ++ /* x^234496 mod p(x)` << 1, x^234560 mod p(x)` << 1 */ ++ { 0x00000000c53dfb04, 0x00000001a0531540 }, ++ /* x^233472 mod p(x)` << 1, x^233536 mod p(x)` << 1 */ ++ { 0x00000000e10c9ad6, 0x0000000132cd7ebc }, ++ /* x^232448 mod p(x)` << 1, x^232512 mod p(x)` << 1 */ ++ { 0x0000000025aa994a, 0x0000000073ab7f36 }, ++ /* x^231424 mod p(x)` << 1, x^231488 mod p(x)` << 1 */ ++ { 0x00000000fa3a74c4, 0x0000000041aed1c2 }, ++ /* x^230400 mod p(x)` << 1, x^230464 mod p(x)` << 1 */ ++ { 0x0000000033eb3f40, 0x0000000136c53800 }, ++ /* x^229376 mod p(x)` << 1, x^229440 mod p(x)` << 1 */ ++ { 0x000000017193f296, 0x0000000126835a30 }, ++ /* x^228352 mod p(x)` << 1, x^228416 mod p(x)` << 1 */ ++ { 0x0000000043f6c86a, 0x000000006241b502 }, ++ /* x^227328 mod p(x)` << 1, x^227392 mod p(x)` << 1 */ ++ { 0x000000016b513ec6, 0x00000000d5196ad4 }, ++ /* x^226304 mod p(x)` << 1, x^226368 mod p(x)` << 1 */ ++ { 0x00000000c8f25b4e, 0x000000009cfa769a }, ++ /* x^225280 mod p(x)` << 1, x^225344 mod p(x)` << 1 */ ++ { 0x00000001a45048ec, 0x00000000920e5df4 }, ++ /* x^224256 mod p(x)` << 1, x^224320 mod p(x)` << 1 */ ++ { 0x000000000c441004, 0x0000000169dc310e }, ++ /* x^223232 mod p(x)` << 1, x^223296 mod p(x)` << 1 */ ++ { 0x000000000e17cad6, 0x0000000009fc331c }, ++ /* x^222208 mod p(x)` << 1, x^222272 mod p(x)` << 1 */ ++ { 0x00000001253ae964, 0x000000010d94a81e }, ++ /* x^221184 mod p(x)` << 1, x^221248 mod p(x)` << 1 */ ++ { 0x00000001d7c88ebc, 0x0000000027a20ab2 }, ++ /* x^220160 mod p(x)` << 1, x^220224 mod p(x)` << 1 */ ++ { 0x00000001e7ca913a, 0x0000000114f87504 }, ++ /* x^219136 mod p(x)` << 1, x^219200 mod p(x)` << 1 */ ++ { 0x0000000033ed078a, 0x000000004b076d96 }, ++ /* x^218112 mod p(x)` << 1, x^218176 mod p(x)` << 1 */ ++ { 0x00000000e1839c78, 0x00000000da4d1e74 }, ++ /* x^217088 mod p(x)` << 1, x^217152 mod p(x)` << 1 */ ++ { 0x00000001322b267e, 0x000000001b81f672 }, ++ /* x^216064 mod p(x)` << 1, x^216128 mod p(x)` << 1 */ ++ { 0x00000000638231b6, 0x000000009367c988 }, ++ /* x^215040 mod p(x)` << 1, x^215104 mod p(x)` << 1 */ ++ { 0x00000001ee7f16f4, 0x00000001717214ca }, ++ /* x^214016 mod p(x)` << 1, x^214080 mod p(x)` << 1 */ ++ { 0x0000000117d9924a, 0x000000009f47d820 }, ++ /* x^212992 mod p(x)` << 1, x^213056 mod p(x)` << 1 */ ++ { 0x00000000e1a9e0c4, 0x000000010d9a47d2 }, ++ /* x^211968 mod p(x)` << 1, x^212032 mod p(x)` << 1 */ ++ { 0x00000001403731dc, 0x00000000a696c58c }, ++ /* x^210944 mod p(x)` << 1, x^211008 mod p(x)` << 1 */ ++ { 0x00000001a5ea9682, 0x000000002aa28ec6 }, ++ /* x^209920 mod p(x)` << 1, x^209984 mod p(x)` << 1 */ ++ { 0x0000000101c5c578, 0x00000001fe18fd9a }, ++ /* x^208896 mod p(x)` << 1, x^208960 mod p(x)` << 1 */ ++ { 0x00000000dddf6494, 0x000000019d4fc1ae }, ++ /* x^207872 mod p(x)` << 1, x^207936 mod p(x)` << 1 */ ++ { 0x00000000f1c3db28, 0x00000001ba0e3dea }, ++ /* x^206848 mod p(x)` << 1, x^206912 mod p(x)` << 1 */ ++ { 0x000000013112fb9c, 0x0000000074b59a5e }, ++ /* x^205824 mod p(x)` << 1, x^205888 mod p(x)` << 1 */ ++ { 0x00000000b680b906, 0x00000000f2b5ea98 }, ++ /* x^204800 mod p(x)` << 1, x^204864 mod p(x)` << 1 */ ++ { 0x000000001a282932, 0x0000000187132676 }, ++ /* x^203776 mod p(x)` << 1, x^203840 mod p(x)` << 1 */ ++ { 0x0000000089406e7e, 0x000000010a8c6ad4 }, ++ /* x^202752 mod p(x)` << 1, x^202816 mod p(x)` << 1 */ ++ { 0x00000001def6be8c, 0x00000001e21dfe70 }, ++ /* x^201728 mod p(x)` << 1, x^201792 mod p(x)` << 1 */ ++ { 0x0000000075258728, 0x00000001da0050e4 }, ++ /* x^200704 mod p(x)` << 1, x^200768 mod p(x)` << 1 */ ++ { 0x000000019536090a, 0x00000000772172ae }, ++ /* x^199680 mod p(x)` << 1, x^199744 mod p(x)` << 1 */ ++ { 0x00000000f2455bfc, 0x00000000e47724aa }, ++ /* x^198656 mod p(x)` << 1, x^198720 mod p(x)` << 1 */ ++ { 0x000000018c40baf4, 0x000000003cd63ac4 }, ++ /* x^197632 mod p(x)` << 1, x^197696 mod p(x)` << 1 */ ++ { 0x000000004cd390d4, 0x00000001bf47d352 }, ++ /* x^196608 mod p(x)` << 1, x^196672 mod p(x)` << 1 */ ++ { 0x00000001e4ece95a, 0x000000018dc1d708 }, ++ /* x^195584 mod p(x)` << 1, x^195648 mod p(x)` << 1 */ ++ { 0x000000001a3ee918, 0x000000002d4620a4 }, ++ /* x^194560 mod p(x)` << 1, x^194624 mod p(x)` << 1 */ ++ { 0x000000007c652fb8, 0x0000000058fd1740 }, ++ /* x^193536 mod p(x)` << 1, x^193600 mod p(x)` << 1 */ ++ { 0x000000011c67842c, 0x00000000dadd9bfc }, ++ /* x^192512 mod p(x)` << 1, x^192576 mod p(x)` << 1 */ ++ { 0x00000000254f759c, 0x00000001ea2140be }, ++ /* x^191488 mod p(x)` << 1, x^191552 mod p(x)` << 1 */ ++ { 0x000000007ece94ca, 0x000000009de128ba }, ++ /* x^190464 mod p(x)` << 1, x^190528 mod p(x)` << 1 */ ++ { 0x0000000038f258c2, 0x000000013ac3aa8e }, ++ /* x^189440 mod p(x)` << 1, x^189504 mod p(x)` << 1 */ ++ { 0x00000001cdf17b00, 0x0000000099980562 }, ++ /* x^188416 mod p(x)` << 1, x^188480 mod p(x)` << 1 */ ++ { 0x000000011f882c16, 0x00000001c1579c86 }, ++ /* x^187392 mod p(x)` << 1, x^187456 mod p(x)` << 1 */ ++ { 0x0000000100093fc8, 0x0000000068dbbf94 }, ++ /* x^186368 mod p(x)` << 1, x^186432 mod p(x)` << 1 */ ++ { 0x00000001cd684f16, 0x000000004509fb04 }, ++ /* x^185344 mod p(x)` << 1, x^185408 mod p(x)` << 1 */ ++ { 0x000000004bc6a70a, 0x00000001202f6398 }, ++ /* x^184320 mod p(x)` << 1, x^184384 mod p(x)` << 1 */ ++ { 0x000000004fc7e8e4, 0x000000013aea243e }, ++ /* x^183296 mod p(x)` << 1, x^183360 mod p(x)` << 1 */ ++ { 0x0000000130103f1c, 0x00000001b4052ae6 }, ++ /* x^182272 mod p(x)` << 1, x^182336 mod p(x)` << 1 */ ++ { 0x0000000111b0024c, 0x00000001cd2a0ae8 }, ++ /* x^181248 mod p(x)` << 1, x^181312 mod p(x)` << 1 */ ++ { 0x000000010b3079da, 0x00000001fe4aa8b4 }, ++ /* x^180224 mod p(x)` << 1, x^180288 mod p(x)` << 1 */ ++ { 0x000000010192bcc2, 0x00000001d1559a42 }, ++ /* x^179200 mod p(x)` << 1, x^179264 mod p(x)` << 1 */ ++ { 0x0000000074838d50, 0x00000001f3e05ecc }, ++ /* x^178176 mod p(x)` << 1, x^178240 mod p(x)` << 1 */ ++ { 0x000000001b20f520, 0x0000000104ddd2cc }, ++ /* x^177152 mod p(x)` << 1, x^177216 mod p(x)` << 1 */ ++ { 0x0000000050c3590a, 0x000000015393153c }, ++ /* x^176128 mod p(x)` << 1, x^176192 mod p(x)` << 1 */ ++ { 0x00000000b41cac8e, 0x0000000057e942c6 }, ++ /* x^175104 mod p(x)` << 1, x^175168 mod p(x)` << 1 */ ++ { 0x000000000c72cc78, 0x000000012c633850 }, ++ /* x^174080 mod p(x)` << 1, x^174144 mod p(x)` << 1 */ ++ { 0x0000000030cdb032, 0x00000000ebcaae4c }, ++ /* x^173056 mod p(x)` << 1, x^173120 mod p(x)` << 1 */ ++ { 0x000000013e09fc32, 0x000000013ee532a6 }, ++ /* x^172032 mod p(x)` << 1, x^172096 mod p(x)` << 1 */ ++ { 0x000000001ed624d2, 0x00000001bf0cbc7e }, ++ /* x^171008 mod p(x)` << 1, x^171072 mod p(x)` << 1 */ ++ { 0x00000000781aee1a, 0x00000000d50b7a5a }, ++ /* x^169984 mod p(x)` << 1, x^170048 mod p(x)` << 1 */ ++ { 0x00000001c4d8348c, 0x0000000002fca6e8 }, ++ /* x^168960 mod p(x)` << 1, x^169024 mod p(x)` << 1 */ ++ { 0x0000000057a40336, 0x000000007af40044 }, ++ /* x^167936 mod p(x)` << 1, x^168000 mod p(x)` << 1 */ ++ { 0x0000000085544940, 0x0000000016178744 }, ++ /* x^166912 mod p(x)` << 1, x^166976 mod p(x)` << 1 */ ++ { 0x000000019cd21e80, 0x000000014c177458 }, ++ /* x^165888 mod p(x)` << 1, x^165952 mod p(x)` << 1 */ ++ { 0x000000013eb95bc0, 0x000000011b6ddf04 }, ++ /* x^164864 mod p(x)` << 1, x^164928 mod p(x)` << 1 */ ++ { 0x00000001dfc9fdfc, 0x00000001f3e29ccc }, ++ /* x^163840 mod p(x)` << 1, x^163904 mod p(x)` << 1 */ ++ { 0x00000000cd028bc2, 0x0000000135ae7562 }, ++ /* x^162816 mod p(x)` << 1, x^162880 mod p(x)` << 1 */ ++ { 0x0000000090db8c44, 0x0000000190ef812c }, ++ /* x^161792 mod p(x)` << 1, x^161856 mod p(x)` << 1 */ ++ { 0x000000010010a4ce, 0x0000000067a2c786 }, ++ /* x^160768 mod p(x)` << 1, x^160832 mod p(x)` << 1 */ ++ { 0x00000001c8f4c72c, 0x0000000048b9496c }, ++ /* x^159744 mod p(x)` << 1, x^159808 mod p(x)` << 1 */ ++ { 0x000000001c26170c, 0x000000015a422de6 }, ++ /* x^158720 mod p(x)` << 1, x^158784 mod p(x)` << 1 */ ++ { 0x00000000e3fccf68, 0x00000001ef0e3640 }, ++ /* x^157696 mod p(x)` << 1, x^157760 mod p(x)` << 1 */ ++ { 0x00000000d513ed24, 0x00000001006d2d26 }, ++ /* x^156672 mod p(x)` << 1, x^156736 mod p(x)` << 1 */ ++ { 0x00000000141beada, 0x00000001170d56d6 }, ++ /* x^155648 mod p(x)` << 1, x^155712 mod p(x)` << 1 */ ++ { 0x000000011071aea0, 0x00000000a5fb613c }, ++ /* x^154624 mod p(x)` << 1, x^154688 mod p(x)` << 1 */ ++ { 0x000000012e19080a, 0x0000000040bbf7fc }, ++ /* x^153600 mod p(x)` << 1, x^153664 mod p(x)` << 1 */ ++ { 0x0000000100ecf826, 0x000000016ac3a5b2 }, ++ /* x^152576 mod p(x)` << 1, x^152640 mod p(x)` << 1 */ ++ { 0x0000000069b09412, 0x00000000abf16230 }, ++ /* x^151552 mod p(x)` << 1, x^151616 mod p(x)` << 1 */ ++ { 0x0000000122297bac, 0x00000001ebe23fac }, ++ /* x^150528 mod p(x)` << 1, x^150592 mod p(x)` << 1 */ ++ { 0x00000000e9e4b068, 0x000000008b6a0894 }, ++ /* x^149504 mod p(x)` << 1, x^149568 mod p(x)` << 1 */ ++ { 0x000000004b38651a, 0x00000001288ea478 }, ++ /* x^148480 mod p(x)` << 1, x^148544 mod p(x)` << 1 */ ++ { 0x00000001468360e2, 0x000000016619c442 }, ++ /* x^147456 mod p(x)` << 1, x^147520 mod p(x)` << 1 */ ++ { 0x00000000121c2408, 0x0000000086230038 }, ++ /* x^146432 mod p(x)` << 1, x^146496 mod p(x)` << 1 */ ++ { 0x00000000da7e7d08, 0x000000017746a756 }, ++ /* x^145408 mod p(x)` << 1, x^145472 mod p(x)` << 1 */ ++ { 0x00000001058d7652, 0x0000000191b8f8f8 }, ++ /* x^144384 mod p(x)` << 1, x^144448 mod p(x)` << 1 */ ++ { 0x000000014a098a90, 0x000000008e167708 }, ++ /* x^143360 mod p(x)` << 1, x^143424 mod p(x)` << 1 */ ++ { 0x0000000020dbe72e, 0x0000000148b22d54 }, ++ /* x^142336 mod p(x)` << 1, x^142400 mod p(x)` << 1 */ ++ { 0x000000011e7323e8, 0x0000000044ba2c3c }, ++ /* x^141312 mod p(x)` << 1, x^141376 mod p(x)` << 1 */ ++ { 0x00000000d5d4bf94, 0x00000000b54d2b52 }, ++ /* x^140288 mod p(x)` << 1, x^140352 mod p(x)` << 1 */ ++ { 0x0000000199d8746c, 0x0000000005a4fd8a }, ++ /* x^139264 mod p(x)` << 1, x^139328 mod p(x)` << 1 */ ++ { 0x00000000ce9ca8a0, 0x0000000139f9fc46 }, ++ /* x^138240 mod p(x)` << 1, x^138304 mod p(x)` << 1 */ ++ { 0x00000000136edece, 0x000000015a1fa824 }, ++ /* x^137216 mod p(x)` << 1, x^137280 mod p(x)` << 1 */ ++ { 0x000000019b92a068, 0x000000000a61ae4c }, ++ /* x^136192 mod p(x)` << 1, x^136256 mod p(x)` << 1 */ ++ { 0x0000000071d62206, 0x0000000145e9113e }, ++ /* x^135168 mod p(x)` << 1, x^135232 mod p(x)` << 1 */ ++ { 0x00000000dfc50158, 0x000000006a348448 }, ++ /* x^134144 mod p(x)` << 1, x^134208 mod p(x)` << 1 */ ++ { 0x00000001517626bc, 0x000000004d80a08c }, ++ /* x^133120 mod p(x)` << 1, x^133184 mod p(x)` << 1 */ ++ { 0x0000000148d1e4fa, 0x000000014b6837a0 }, ++ /* x^132096 mod p(x)` << 1, x^132160 mod p(x)` << 1 */ ++ { 0x0000000094d8266e, 0x000000016896a7fc }, ++ /* x^131072 mod p(x)` << 1, x^131136 mod p(x)` << 1 */ ++ { 0x00000000606c5e34, 0x000000014f187140 }, ++ /* x^130048 mod p(x)` << 1, x^130112 mod p(x)` << 1 */ ++ { 0x000000019766beaa, 0x000000019581b9da }, ++ /* x^129024 mod p(x)` << 1, x^129088 mod p(x)` << 1 */ ++ { 0x00000001d80c506c, 0x00000001091bc984 }, ++ /* x^128000 mod p(x)` << 1, x^128064 mod p(x)` << 1 */ ++ { 0x000000001e73837c, 0x000000001067223c }, ++ /* x^126976 mod p(x)` << 1, x^127040 mod p(x)` << 1 */ ++ { 0x0000000064d587de, 0x00000001ab16ea02 }, ++ /* x^125952 mod p(x)` << 1, x^126016 mod p(x)` << 1 */ ++ { 0x00000000f4a507b0, 0x000000013c4598a8 }, ++ /* x^124928 mod p(x)` << 1, x^124992 mod p(x)` << 1 */ ++ { 0x0000000040e342fc, 0x00000000b3735430 }, ++ /* x^123904 mod p(x)` << 1, x^123968 mod p(x)` << 1 */ ++ { 0x00000001d5ad9c3a, 0x00000001bb3fc0c0 }, ++ /* x^122880 mod p(x)` << 1, x^122944 mod p(x)` << 1 */ ++ { 0x0000000094a691a4, 0x00000001570ae19c }, ++ /* x^121856 mod p(x)` << 1, x^121920 mod p(x)` << 1 */ ++ { 0x00000001271ecdfa, 0x00000001ea910712 }, ++ /* x^120832 mod p(x)` << 1, x^120896 mod p(x)` << 1 */ ++ { 0x000000009e54475a, 0x0000000167127128 }, ++ /* x^119808 mod p(x)` << 1, x^119872 mod p(x)` << 1 */ ++ { 0x00000000c9c099ee, 0x0000000019e790a2 }, ++ /* x^118784 mod p(x)` << 1, x^118848 mod p(x)` << 1 */ ++ { 0x000000009a2f736c, 0x000000003788f710 }, ++ /* x^117760 mod p(x)` << 1, x^117824 mod p(x)` << 1 */ ++ { 0x00000000bb9f4996, 0x00000001682a160e }, ++ /* x^116736 mod p(x)` << 1, x^116800 mod p(x)` << 1 */ ++ { 0x00000001db688050, 0x000000007f0ebd2e }, ++ /* x^115712 mod p(x)` << 1, x^115776 mod p(x)` << 1 */ ++ { 0x00000000e9b10af4, 0x000000002b032080 }, ++ /* x^114688 mod p(x)` << 1, x^114752 mod p(x)` << 1 */ ++ { 0x000000012d4545e4, 0x00000000cfd1664a }, ++ /* x^113664 mod p(x)` << 1, x^113728 mod p(x)` << 1 */ ++ { 0x000000000361139c, 0x00000000aa1181c2 }, ++ /* x^112640 mod p(x)` << 1, x^112704 mod p(x)` << 1 */ ++ { 0x00000001a5a1a3a8, 0x00000000ddd08002 }, ++ /* x^111616 mod p(x)` << 1, x^111680 mod p(x)` << 1 */ ++ { 0x000000006844e0b0, 0x00000000e8dd0446 }, ++ /* x^110592 mod p(x)` << 1, x^110656 mod p(x)` << 1 */ ++ { 0x00000000c3762f28, 0x00000001bbd94a00 }, ++ /* x^109568 mod p(x)` << 1, x^109632 mod p(x)` << 1 */ ++ { 0x00000001d26287a2, 0x00000000ab6cd180 }, ++ /* x^108544 mod p(x)` << 1, x^108608 mod p(x)` << 1 */ ++ { 0x00000001f6f0bba8, 0x0000000031803ce2 }, ++ /* x^107520 mod p(x)` << 1, x^107584 mod p(x)` << 1 */ ++ { 0x000000002ffabd62, 0x0000000024f40b0c }, ++ /* x^106496 mod p(x)` << 1, x^106560 mod p(x)` << 1 */ ++ { 0x00000000fb4516b8, 0x00000001ba1d9834 }, ++ /* x^105472 mod p(x)` << 1, x^105536 mod p(x)` << 1 */ ++ { 0x000000018cfa961c, 0x0000000104de61aa }, ++ /* x^104448 mod p(x)` << 1, x^104512 mod p(x)` << 1 */ ++ { 0x000000019e588d52, 0x0000000113e40d46 }, ++ /* x^103424 mod p(x)` << 1, x^103488 mod p(x)` << 1 */ ++ { 0x00000001180f0bbc, 0x00000001415598a0 }, ++ /* x^102400 mod p(x)` << 1, x^102464 mod p(x)` << 1 */ ++ { 0x00000000e1d9177a, 0x00000000bf6c8c90 }, ++ /* x^101376 mod p(x)` << 1, x^101440 mod p(x)` << 1 */ ++ { 0x0000000105abc27c, 0x00000001788b0504 }, ++ /* x^100352 mod p(x)` << 1, x^100416 mod p(x)` << 1 */ ++ { 0x00000000972e4a58, 0x0000000038385d02 }, ++ /* x^99328 mod p(x)` << 1, x^99392 mod p(x)` << 1 */ ++ { 0x0000000183499a5e, 0x00000001b6c83844 }, ++ /* x^98304 mod p(x)` << 1, x^98368 mod p(x)` << 1 */ ++ { 0x00000001c96a8cca, 0x0000000051061a8a }, ++ /* x^97280 mod p(x)` << 1, x^97344 mod p(x)` << 1 */ ++ { 0x00000001a1a5b60c, 0x000000017351388a }, ++ /* x^96256 mod p(x)` << 1, x^96320 mod p(x)` << 1 */ ++ { 0x00000000e4b6ac9c, 0x0000000132928f92 }, ++ /* x^95232 mod p(x)` << 1, x^95296 mod p(x)` << 1 */ ++ { 0x00000001807e7f5a, 0x00000000e6b4f48a }, ++ /* x^94208 mod p(x)` << 1, x^94272 mod p(x)` << 1 */ ++ { 0x000000017a7e3bc8, 0x0000000039d15e90 }, ++ /* x^93184 mod p(x)` << 1, x^93248 mod p(x)` << 1 */ ++ { 0x00000000d73975da, 0x00000000312d6074 }, ++ /* x^92160 mod p(x)` << 1, x^92224 mod p(x)` << 1 */ ++ { 0x000000017375d038, 0x000000017bbb2cc4 }, ++ /* x^91136 mod p(x)` << 1, x^91200 mod p(x)` << 1 */ ++ { 0x00000000193680bc, 0x000000016ded3e18 }, ++ /* x^90112 mod p(x)` << 1, x^90176 mod p(x)` << 1 */ ++ { 0x00000000999b06f6, 0x00000000f1638b16 }, ++ /* x^89088 mod p(x)` << 1, x^89152 mod p(x)` << 1 */ ++ { 0x00000001f685d2b8, 0x00000001d38b9ecc }, ++ /* x^88064 mod p(x)` << 1, x^88128 mod p(x)` << 1 */ ++ { 0x00000001f4ecbed2, 0x000000018b8d09dc }, ++ /* x^87040 mod p(x)` << 1, x^87104 mod p(x)` << 1 */ ++ { 0x00000000ba16f1a0, 0x00000000e7bc27d2 }, ++ /* x^86016 mod p(x)` << 1, x^86080 mod p(x)` << 1 */ ++ { 0x0000000115aceac4, 0x00000000275e1e96 }, ++ /* x^84992 mod p(x)` << 1, x^85056 mod p(x)` << 1 */ ++ { 0x00000001aeff6292, 0x00000000e2e3031e }, ++ /* x^83968 mod p(x)` << 1, x^84032 mod p(x)` << 1 */ ++ { 0x000000009640124c, 0x00000001041c84d8 }, ++ /* x^82944 mod p(x)` << 1, x^83008 mod p(x)` << 1 */ ++ { 0x0000000114f41f02, 0x00000000706ce672 }, ++ /* x^81920 mod p(x)` << 1, x^81984 mod p(x)` << 1 */ ++ { 0x000000009c5f3586, 0x000000015d5070da }, ++ /* x^80896 mod p(x)` << 1, x^80960 mod p(x)` << 1 */ ++ { 0x00000001878275fa, 0x0000000038f9493a }, ++ /* x^79872 mod p(x)` << 1, x^79936 mod p(x)` << 1 */ ++ { 0x00000000ddc42ce8, 0x00000000a3348a76 }, ++ /* x^78848 mod p(x)` << 1, x^78912 mod p(x)` << 1 */ ++ { 0x0000000181d2c73a, 0x00000001ad0aab92 }, ++ /* x^77824 mod p(x)` << 1, x^77888 mod p(x)` << 1 */ ++ { 0x0000000141c9320a, 0x000000019e85f712 }, ++ /* x^76800 mod p(x)` << 1, x^76864 mod p(x)` << 1 */ ++ { 0x000000015235719a, 0x000000005a871e76 }, ++ /* x^75776 mod p(x)` << 1, x^75840 mod p(x)` << 1 */ ++ { 0x00000000be27d804, 0x000000017249c662 }, ++ /* x^74752 mod p(x)` << 1, x^74816 mod p(x)` << 1 */ ++ { 0x000000006242d45a, 0x000000003a084712 }, ++ /* x^73728 mod p(x)` << 1, x^73792 mod p(x)` << 1 */ ++ { 0x000000009a53638e, 0x00000000ed438478 }, ++ /* x^72704 mod p(x)` << 1, x^72768 mod p(x)` << 1 */ ++ { 0x00000001001ecfb6, 0x00000000abac34cc }, ++ /* x^71680 mod p(x)` << 1, x^71744 mod p(x)` << 1 */ ++ { 0x000000016d7c2d64, 0x000000005f35ef3e }, ++ /* x^70656 mod p(x)` << 1, x^70720 mod p(x)` << 1 */ ++ { 0x00000001d0ce46c0, 0x0000000047d6608c }, ++ /* x^69632 mod p(x)` << 1, x^69696 mod p(x)` << 1 */ ++ { 0x0000000124c907b4, 0x000000002d01470e }, ++ /* x^68608 mod p(x)` << 1, x^68672 mod p(x)` << 1 */ ++ { 0x0000000018a555ca, 0x0000000158bbc7b0 }, ++ /* x^67584 mod p(x)` << 1, x^67648 mod p(x)` << 1 */ ++ { 0x000000006b0980bc, 0x00000000c0a23e8e }, ++ /* x^66560 mod p(x)` << 1, x^66624 mod p(x)` << 1 */ ++ { 0x000000008bbba964, 0x00000001ebd85c88 }, ++ /* x^65536 mod p(x)` << 1, x^65600 mod p(x)` << 1 */ ++ { 0x00000001070a5a1e, 0x000000019ee20bb2 }, ++ /* x^64512 mod p(x)` << 1, x^64576 mod p(x)` << 1 */ ++ { 0x000000002204322a, 0x00000001acabf2d6 }, ++ /* x^63488 mod p(x)` << 1, x^63552 mod p(x)` << 1 */ ++ { 0x00000000a27524d0, 0x00000001b7963d56 }, ++ /* x^62464 mod p(x)` << 1, x^62528 mod p(x)` << 1 */ ++ { 0x0000000020b1e4ba, 0x000000017bffa1fe }, ++ /* x^61440 mod p(x)` << 1, x^61504 mod p(x)` << 1 */ ++ { 0x0000000032cc27fc, 0x000000001f15333e }, ++ /* x^60416 mod p(x)` << 1, x^60480 mod p(x)` << 1 */ ++ { 0x0000000044dd22b8, 0x000000018593129e }, ++ /* x^59392 mod p(x)` << 1, x^59456 mod p(x)` << 1 */ ++ { 0x00000000dffc9e0a, 0x000000019cb32602 }, ++ /* x^58368 mod p(x)` << 1, x^58432 mod p(x)` << 1 */ ++ { 0x00000001b7a0ed14, 0x0000000142b05cc8 }, ++ /* x^57344 mod p(x)` << 1, x^57408 mod p(x)` << 1 */ ++ { 0x00000000c7842488, 0x00000001be49e7a4 }, ++ /* x^56320 mod p(x)` << 1, x^56384 mod p(x)` << 1 */ ++ { 0x00000001c02a4fee, 0x0000000108f69d6c }, ++ /* x^55296 mod p(x)` << 1, x^55360 mod p(x)` << 1 */ ++ { 0x000000003c273778, 0x000000006c0971f0 }, ++ /* x^54272 mod p(x)` << 1, x^54336 mod p(x)` << 1 */ ++ { 0x00000001d63f8894, 0x000000005b16467a }, ++ /* x^53248 mod p(x)` << 1, x^53312 mod p(x)` << 1 */ ++ { 0x000000006be557d6, 0x00000001551a628e }, ++ /* x^52224 mod p(x)` << 1, x^52288 mod p(x)` << 1 */ ++ { 0x000000006a7806ea, 0x000000019e42ea92 }, ++ /* x^51200 mod p(x)` << 1, x^51264 mod p(x)` << 1 */ ++ { 0x000000016155aa0c, 0x000000012fa83ff2 }, ++ /* x^50176 mod p(x)` << 1, x^50240 mod p(x)` << 1 */ ++ { 0x00000000908650ac, 0x000000011ca9cde0 }, ++ /* x^49152 mod p(x)` << 1, x^49216 mod p(x)` << 1 */ ++ { 0x00000000aa5a8084, 0x00000000c8e5cd74 }, ++ /* x^48128 mod p(x)` << 1, x^48192 mod p(x)` << 1 */ ++ { 0x0000000191bb500a, 0x0000000096c27f0c }, ++ /* x^47104 mod p(x)` << 1, x^47168 mod p(x)` << 1 */ ++ { 0x0000000064e9bed0, 0x000000002baed926 }, ++ /* x^46080 mod p(x)` << 1, x^46144 mod p(x)` << 1 */ ++ { 0x000000009444f302, 0x000000017c8de8d2 }, ++ /* x^45056 mod p(x)` << 1, x^45120 mod p(x)` << 1 */ ++ { 0x000000019db07d3c, 0x00000000d43d6068 }, ++ /* x^44032 mod p(x)` << 1, x^44096 mod p(x)` << 1 */ ++ { 0x00000001359e3e6e, 0x00000000cb2c4b26 }, ++ /* x^43008 mod p(x)` << 1, x^43072 mod p(x)` << 1 */ ++ { 0x00000001e4f10dd2, 0x0000000145b8da26 }, ++ /* x^41984 mod p(x)` << 1, x^42048 mod p(x)` << 1 */ ++ { 0x0000000124f5735e, 0x000000018fff4b08 }, ++ /* x^40960 mod p(x)` << 1, x^41024 mod p(x)` << 1 */ ++ { 0x0000000124760a4c, 0x0000000150b58ed0 }, ++ /* x^39936 mod p(x)` << 1, x^40000 mod p(x)` << 1 */ ++ { 0x000000000f1fc186, 0x00000001549f39bc }, ++ /* x^38912 mod p(x)` << 1, x^38976 mod p(x)` << 1 */ ++ { 0x00000000150e4cc4, 0x00000000ef4d2f42 }, ++ /* x^37888 mod p(x)` << 1, x^37952 mod p(x)` << 1 */ ++ { 0x000000002a6204e8, 0x00000001b1468572 }, ++ /* x^36864 mod p(x)` << 1, x^36928 mod p(x)` << 1 */ ++ { 0x00000000beb1d432, 0x000000013d7403b2 }, ++ /* x^35840 mod p(x)` << 1, x^35904 mod p(x)` << 1 */ ++ { 0x0000000135f3f1f0, 0x00000001a4681842 }, ++ /* x^34816 mod p(x)` << 1, x^34880 mod p(x)` << 1 */ ++ { 0x0000000074fe2232, 0x0000000167714492 }, ++ /* x^33792 mod p(x)` << 1, x^33856 mod p(x)` << 1 */ ++ { 0x000000001ac6e2ba, 0x00000001e599099a }, ++ /* x^32768 mod p(x)` << 1, x^32832 mod p(x)` << 1 */ ++ { 0x0000000013fca91e, 0x00000000fe128194 }, ++ /* x^31744 mod p(x)` << 1, x^31808 mod p(x)` << 1 */ ++ { 0x0000000183f4931e, 0x0000000077e8b990 }, ++ /* x^30720 mod p(x)` << 1, x^30784 mod p(x)` << 1 */ ++ { 0x00000000b6d9b4e4, 0x00000001a267f63a }, ++ /* x^29696 mod p(x)` << 1, x^29760 mod p(x)` << 1 */ ++ { 0x00000000b5188656, 0x00000001945c245a }, ++ /* x^28672 mod p(x)` << 1, x^28736 mod p(x)` << 1 */ ++ { 0x0000000027a81a84, 0x0000000149002e76 }, ++ /* x^27648 mod p(x)` << 1, x^27712 mod p(x)` << 1 */ ++ { 0x0000000125699258, 0x00000001bb8310a4 }, ++ /* x^26624 mod p(x)` << 1, x^26688 mod p(x)` << 1 */ ++ { 0x00000001b23de796, 0x000000019ec60bcc }, ++ /* x^25600 mod p(x)` << 1, x^25664 mod p(x)` << 1 */ ++ { 0x00000000fe4365dc, 0x000000012d8590ae }, ++ /* x^24576 mod p(x)` << 1, x^24640 mod p(x)` << 1 */ ++ { 0x00000000c68f497a, 0x0000000065b00684 }, ++ /* x^23552 mod p(x)` << 1, x^23616 mod p(x)` << 1 */ ++ { 0x00000000fbf521ee, 0x000000015e5aeadc }, ++ /* x^22528 mod p(x)` << 1, x^22592 mod p(x)` << 1 */ ++ { 0x000000015eac3378, 0x00000000b77ff2b0 }, ++ /* x^21504 mod p(x)` << 1, x^21568 mod p(x)` << 1 */ ++ { 0x0000000134914b90, 0x0000000188da2ff6 }, ++ /* x^20480 mod p(x)` << 1, x^20544 mod p(x)` << 1 */ ++ { 0x0000000016335cfe, 0x0000000063da929a }, ++ /* x^19456 mod p(x)` << 1, x^19520 mod p(x)` << 1 */ ++ { 0x000000010372d10c, 0x00000001389caa80 }, ++ /* x^18432 mod p(x)` << 1, x^18496 mod p(x)` << 1 */ ++ { 0x000000015097b908, 0x000000013db599d2 }, ++ /* x^17408 mod p(x)` << 1, x^17472 mod p(x)` << 1 */ ++ { 0x00000001227a7572, 0x0000000122505a86 }, ++ /* x^16384 mod p(x)` << 1, x^16448 mod p(x)` << 1 */ ++ { 0x000000009a8f75c0, 0x000000016bd72746 }, ++ /* x^15360 mod p(x)` << 1, x^15424 mod p(x)` << 1 */ ++ { 0x00000000682c77a2, 0x00000001c3faf1d4 }, ++ /* x^14336 mod p(x)` << 1, x^14400 mod p(x)` << 1 */ ++ { 0x00000000231f091c, 0x00000001111c826c }, ++ /* x^13312 mod p(x)` << 1, x^13376 mod p(x)` << 1 */ ++ { 0x000000007d4439f2, 0x00000000153e9fb2 }, ++ /* x^12288 mod p(x)` << 1, x^12352 mod p(x)` << 1 */ ++ { 0x000000017e221efc, 0x000000002b1f7b60 }, ++ /* x^11264 mod p(x)` << 1, x^11328 mod p(x)` << 1 */ ++ { 0x0000000167457c38, 0x00000000b1dba570 }, ++ /* x^10240 mod p(x)` << 1, x^10304 mod p(x)` << 1 */ ++ { 0x00000000bdf081c4, 0x00000001f6397b76 }, ++ /* x^9216 mod p(x)` << 1, x^9280 mod p(x)` << 1 */ ++ { 0x000000016286d6b0, 0x0000000156335214 }, ++ /* x^8192 mod p(x)` << 1, x^8256 mod p(x)` << 1 */ ++ { 0x00000000c84f001c, 0x00000001d70e3986 }, ++ /* x^7168 mod p(x)` << 1, x^7232 mod p(x)` << 1 */ ++ { 0x0000000064efe7c0, 0x000000003701a774 }, ++ /* x^6144 mod p(x)` << 1, x^6208 mod p(x)` << 1 */ ++ { 0x000000000ac2d904, 0x00000000ac81ef72 }, ++ /* x^5120 mod p(x)` << 1, x^5184 mod p(x)` << 1 */ ++ { 0x00000000fd226d14, 0x0000000133212464 }, ++ /* x^4096 mod p(x)` << 1, x^4160 mod p(x)` << 1 */ ++ { 0x000000011cfd42e0, 0x00000000e4e45610 }, ++ /* x^3072 mod p(x)` << 1, x^3136 mod p(x)` << 1 */ ++ { 0x000000016e5a5678, 0x000000000c1bd370 }, ++ /* x^2048 mod p(x)` << 1, x^2112 mod p(x)` << 1 */ ++ { 0x00000001d888fe22, 0x00000001a7b9e7a6 }, ++ /* x^1024 mod p(x)` << 1, x^1088 mod p(x)` << 1 */ ++ { 0x00000001af77fcd4, 0x000000007d657a10 } ++#endif /* __LITTLE_ENDIAN__ */ ++ }; ++ ++/* Reduce final 1024-2048 bits to 64 bits, shifting 32 bits to include the trailing 32 bits of zeros */ ++ ++static const __vector unsigned long long vcrc_short_const[16] ++ __attribute__((aligned (16))) = { ++#ifdef __LITTLE_ENDIAN__ ++ /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */ ++ { 0x99168a18ec447f11, 0xed837b2613e8221e }, ++ /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */ ++ { 0xe23e954e8fd2cd3c, 0xc8acdd8147b9ce5a }, ++ /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */ ++ { 0x92f8befe6b1d2b53, 0xd9ad6d87d4277e25 }, ++ /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */ ++ { 0xf38a3556291ea462, 0xc10ec5e033fbca3b }, ++ /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */ ++ { 0x974ac56262b6ca4b, 0xc0b55b0e82e02e2f }, ++ /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */ ++ { 0x855712b3784d2a56, 0x71aa1df0e172334d }, ++ /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */ ++ { 0xa5abe9f80eaee722, 0xfee3053e3969324d }, ++ /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */ ++ { 0x1fa0943ddb54814c, 0xf44779b93eb2bd08 }, ++ /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */ ++ { 0xa53ff440d7bbfe6a, 0xf5449b3f00cc3374 }, ++ /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */ ++ { 0xebe7e3566325605c, 0x6f8346e1d777606e }, ++ /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */ ++ { 0xc65a272ce5b592b8, 0xe3ab4f2ac0b95347 }, ++ /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */ ++ { 0x5705a9ca4721589f, 0xaa2215ea329ecc11 }, ++ /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */ ++ { 0xe3720acb88d14467, 0x1ed8f66ed95efd26 }, ++ /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */ ++ { 0xba1aca0315141c31, 0x78ed02d5a700e96a }, ++ /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */ ++ { 0xad2a31b3ed627dae, 0xba8ccbe832b39da3 }, ++ /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */ ++ { 0x6655004fa06a2517, 0xedb88320b1e6b092 } ++#else /* __LITTLE_ENDIAN__ */ ++ /* x^1952 mod p(x) , x^1984 mod p(x) , x^2016 mod p(x) , x^2048 mod p(x) */ ++ { 0xed837b2613e8221e, 0x99168a18ec447f11 }, ++ /* x^1824 mod p(x) , x^1856 mod p(x) , x^1888 mod p(x) , x^1920 mod p(x) */ ++ { 0xc8acdd8147b9ce5a, 0xe23e954e8fd2cd3c }, ++ /* x^1696 mod p(x) , x^1728 mod p(x) , x^1760 mod p(x) , x^1792 mod p(x) */ ++ { 0xd9ad6d87d4277e25, 0x92f8befe6b1d2b53 }, ++ /* x^1568 mod p(x) , x^1600 mod p(x) , x^1632 mod p(x) , x^1664 mod p(x) */ ++ { 0xc10ec5e033fbca3b, 0xf38a3556291ea462 }, ++ /* x^1440 mod p(x) , x^1472 mod p(x) , x^1504 mod p(x) , x^1536 mod p(x) */ ++ { 0xc0b55b0e82e02e2f, 0x974ac56262b6ca4b }, ++ /* x^1312 mod p(x) , x^1344 mod p(x) , x^1376 mod p(x) , x^1408 mod p(x) */ ++ { 0x71aa1df0e172334d, 0x855712b3784d2a56 }, ++ /* x^1184 mod p(x) , x^1216 mod p(x) , x^1248 mod p(x) , x^1280 mod p(x) */ ++ { 0xfee3053e3969324d, 0xa5abe9f80eaee722 }, ++ /* x^1056 mod p(x) , x^1088 mod p(x) , x^1120 mod p(x) , x^1152 mod p(x) */ ++ { 0xf44779b93eb2bd08, 0x1fa0943ddb54814c }, ++ /* x^928 mod p(x) , x^960 mod p(x) , x^992 mod p(x) , x^1024 mod p(x) */ ++ { 0xf5449b3f00cc3374, 0xa53ff440d7bbfe6a }, ++ /* x^800 mod p(x) , x^832 mod p(x) , x^864 mod p(x) , x^896 mod p(x) */ ++ { 0x6f8346e1d777606e, 0xebe7e3566325605c }, ++ /* x^672 mod p(x) , x^704 mod p(x) , x^736 mod p(x) , x^768 mod p(x) */ ++ { 0xe3ab4f2ac0b95347, 0xc65a272ce5b592b8 }, ++ /* x^544 mod p(x) , x^576 mod p(x) , x^608 mod p(x) , x^640 mod p(x) */ ++ { 0xaa2215ea329ecc11, 0x5705a9ca4721589f }, ++ /* x^416 mod p(x) , x^448 mod p(x) , x^480 mod p(x) , x^512 mod p(x) */ ++ { 0x1ed8f66ed95efd26, 0xe3720acb88d14467 }, ++ /* x^288 mod p(x) , x^320 mod p(x) , x^352 mod p(x) , x^384 mod p(x) */ ++ { 0x78ed02d5a700e96a, 0xba1aca0315141c31 }, ++ /* x^160 mod p(x) , x^192 mod p(x) , x^224 mod p(x) , x^256 mod p(x) */ ++ { 0xba8ccbe832b39da3, 0xad2a31b3ed627dae }, ++ /* x^32 mod p(x) , x^64 mod p(x) , x^96 mod p(x) , x^128 mod p(x) */ ++ { 0xedb88320b1e6b092, 0x6655004fa06a2517 } ++#endif /* __LITTLE_ENDIAN__ */ ++ }; ++ ++/* Barrett constants */ ++/* 33 bit reflected Barrett constant m - (4^32)/n */ ++ ++static const __vector unsigned long long v_Barrett_const[2] ++ __attribute__((aligned (16))) = { ++ /* x^64 div p(x) */ ++#ifdef __LITTLE_ENDIAN__ ++ { 0x00000001f7011641, 0x0000000000000000 }, ++ { 0x00000001db710641, 0x0000000000000000 } ++#else /* __LITTLE_ENDIAN__ */ ++ { 0x0000000000000000, 0x00000001f7011641 }, ++ { 0x0000000000000000, 0x00000001db710641 } ++#endif /* __LITTLE_ENDIAN__ */ ++ }; ++#endif /* POWER8_INTRINSICS */ ++ ++#endif /* __ASSEMBLER__ */ +diff --git a/contrib/power8-crc/vec_crc32.c b/contrib/power8-crc/vec_crc32.c +new file mode 100644 +index 0000000..bb2204b +--- /dev/null ++++ b/contrib/power8-crc/vec_crc32.c +@@ -0,0 +1,674 @@ ++/* ++ * Calculate the checksum of data that is 16 byte aligned and a multiple of ++ * 16 bytes. ++ * ++ * The first step is to reduce it to 1024 bits. We do this in 8 parallel ++ * chunks in order to mask the latency of the vpmsum instructions. If we ++ * have more than 32 kB of data to checksum we repeat this step multiple ++ * times, passing in the previous 1024 bits. ++ * ++ * The next step is to reduce the 1024 bits to 64 bits. This step adds ++ * 32 bits of 0s to the end - this matches what a CRC does. We just ++ * calculate constants that land the data in this 32 bits. ++ * ++ * We then use fixed point Barrett reduction to compute a mod n over GF(2) ++ * for n = CRC using POWER8 instructions. We use x = 32. ++ * ++ * http://en.wikipedia.org/wiki/Barrett_reduction ++ * ++ * This code uses gcc vector builtins instead using assembly directly. ++ * ++ * Copyright (C) 2017 Rogerio Alves , IBM ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of either: ++ * ++ * a) the GNU General Public License as published by the Free Software ++ * Foundation; either version 2 of the License, or (at your option) ++ * any later version, or ++ * b) the Apache License, Version 2.0 ++ */ ++ ++#include ++ ++#define POWER8_INTRINSICS ++#define CRC_TABLE ++ ++#ifdef CRC32_CONSTANTS_HEADER ++#include CRC32_CONSTANTS_HEADER ++#else ++#include "crc32_constants.h" ++#endif ++ ++#define VMX_ALIGN 16 ++#define VMX_ALIGN_MASK (VMX_ALIGN-1) ++ ++#ifdef REFLECT ++static unsigned int crc32_align(unsigned int crc, const unsigned char *p, ++ unsigned long len) ++{ ++ while (len--) ++ crc = crc_table[(crc ^ *p++) & 0xff] ^ (crc >> 8); ++ return crc; ++} ++#else ++static unsigned int crc32_align(unsigned int crc, const unsigned char *p, ++ unsigned long len) ++{ ++ while (len--) ++ crc = crc_table[((crc >> 24) ^ *p++) & 0xff] ^ (crc << 8); ++ return crc; ++} ++#endif ++ ++static unsigned int __attribute__ ((aligned (32))) ++__crc32_vpmsum(unsigned int crc, const void* p, unsigned long len); ++ ++#ifndef CRC32_FUNCTION ++#define CRC32_FUNCTION crc32_vpmsum ++#endif ++ ++unsigned int CRC32_FUNCTION(unsigned int crc, const unsigned char *p, ++ unsigned long len) ++{ ++ unsigned int prealign; ++ unsigned int tail; ++ ++#ifdef CRC_XOR ++ crc ^= 0xffffffff; ++#endif ++ ++ if (len < VMX_ALIGN + VMX_ALIGN_MASK) { ++ crc = crc32_align(crc, p, len); ++ goto out; ++ } ++ ++ if ((unsigned long)p & VMX_ALIGN_MASK) { ++ prealign = VMX_ALIGN - ((unsigned long)p & VMX_ALIGN_MASK); ++ crc = crc32_align(crc, p, prealign); ++ len -= prealign; ++ p += prealign; ++ } ++ ++ crc = __crc32_vpmsum(crc, p, len & ~VMX_ALIGN_MASK); ++ ++ tail = len & VMX_ALIGN_MASK; ++ if (tail) { ++ p += len & ~VMX_ALIGN_MASK; ++ crc = crc32_align(crc, p, tail); ++ } ++ ++out: ++#ifdef CRC_XOR ++ crc ^= 0xffffffff; ++#endif ++ ++ return crc; ++} ++ ++#if defined (__clang__) ++#include "clang_workaround.h" ++#else ++#define __builtin_pack_vector(a, b) __builtin_pack_vector_int128 ((a), (b)) ++#define __builtin_unpack_vector_0(a) __builtin_unpack_vector_int128 ((vector __int128_t)(a), 0) ++#define __builtin_unpack_vector_1(a) __builtin_unpack_vector_int128 ((vector __int128_t)(a), 1) ++#endif ++ ++/* When we have a load-store in a single-dispatch group and address overlap ++ * such that foward is not allowed (load-hit-store) the group must be flushed. ++ * A group ending NOP prevents the flush. ++ */ ++#define GROUP_ENDING_NOP asm("ori 2,2,0" ::: "memory") ++ ++#if defined(__BIG_ENDIAN__) && defined (REFLECT) ++#define BYTESWAP_DATA ++#elif defined(__LITTLE_ENDIAN__) && !defined(REFLECT) ++#define BYTESWAP_DATA ++#endif ++ ++#ifdef BYTESWAP_DATA ++#define VEC_PERM(vr, va, vb, vc) vr = vec_perm(va, vb,\ ++ (__vector unsigned char) vc) ++#if defined(__LITTLE_ENDIAN__) ++/* Byte reverse permute constant LE. */ ++static const __vector unsigned long long vperm_const ++ __attribute__ ((aligned(16))) = { 0x08090A0B0C0D0E0FUL, ++ 0x0001020304050607UL }; ++#else ++static const __vector unsigned long long vperm_const ++ __attribute__ ((aligned(16))) = { 0x0F0E0D0C0B0A0908UL, ++ 0X0706050403020100UL }; ++#endif ++#else ++#define VEC_PERM(vr, va, vb, vc) ++#endif ++ ++static unsigned int __attribute__ ((aligned (32))) ++__crc32_vpmsum(unsigned int crc, const void* p, unsigned long len) { ++ ++ const __vector unsigned long long vzero = {0,0}; ++ const __vector unsigned long long vones = {0xffffffffffffffffUL, ++ 0xffffffffffffffffUL}; ++ ++#ifdef REFLECT ++ const __vector unsigned long long vmask_32bit = ++ (__vector unsigned long long)vec_sld((__vector unsigned char)vzero, ++ (__vector unsigned char)vones, 4); ++#endif ++ ++ const __vector unsigned long long vmask_64bit = ++ (__vector unsigned long long)vec_sld((__vector unsigned char)vzero, ++ (__vector unsigned char)vones, 8); ++ ++ __vector unsigned long long vcrc; ++ ++ __vector unsigned long long vconst1, vconst2; ++ ++ /* vdata0-vdata7 will contain our data (p). */ ++ __vector unsigned long long vdata0, vdata1, vdata2, vdata3, vdata4, ++ vdata5, vdata6, vdata7; ++ ++ /* v0-v7 will contain our checksums */ ++ __vector unsigned long long v0 = {0,0}; ++ __vector unsigned long long v1 = {0,0}; ++ __vector unsigned long long v2 = {0,0}; ++ __vector unsigned long long v3 = {0,0}; ++ __vector unsigned long long v4 = {0,0}; ++ __vector unsigned long long v5 = {0,0}; ++ __vector unsigned long long v6 = {0,0}; ++ __vector unsigned long long v7 = {0,0}; ++ ++ ++ /* Vector auxiliary variables. */ ++ __vector unsigned long long va0, va1, va2, va3, va4, va5, va6, va7; ++ ++ unsigned int result = 0; ++ unsigned int offset; /* Constant table offset. */ ++ ++ unsigned long i; /* Counter. */ ++ unsigned long chunks; ++ ++ unsigned long block_size; ++ int next_block = 0; ++ ++ /* Align by 128 bits. The last 128 bit block will be processed at end. */ ++ unsigned long length = len & 0xFFFFFFFFFFFFFF80UL; ++ ++#ifdef REFLECT ++ vcrc = (__vector unsigned long long)__builtin_pack_vector(0UL, crc); ++#else ++ vcrc = (__vector unsigned long long)__builtin_pack_vector(crc, 0UL); ++ ++ /* Shift into top 32 bits */ ++ vcrc = (__vector unsigned long long)vec_sld((__vector unsigned char)vcrc, ++ (__vector unsigned char)vzero, 4); ++#endif ++ ++ /* Short version. */ ++ if (len < 256) { ++ /* Calculate where in the constant table we need to start. */ ++ offset = 256 - len; ++ ++ vconst1 = vec_ld(offset, vcrc_short_const); ++ vdata0 = vec_ld(0, (__vector unsigned long long*) p); ++ VEC_PERM(vdata0, vdata0, vconst1, vperm_const); ++ ++ /* xor initial value*/ ++ vdata0 = vec_xor(vdata0, vcrc); ++ ++ vdata0 = (__vector unsigned long long) __builtin_crypto_vpmsumw ++ ((__vector unsigned int)vdata0, (__vector unsigned int)vconst1); ++ v0 = vec_xor(v0, vdata0); ++ ++ for (i = 16; i < len; i += 16) { ++ vconst1 = vec_ld(offset + i, vcrc_short_const); ++ vdata0 = vec_ld(i, (__vector unsigned long long*) p); ++ VEC_PERM(vdata0, vdata0, vconst1, vperm_const); ++ vdata0 = (__vector unsigned long long) __builtin_crypto_vpmsumw ++ ((__vector unsigned int)vdata0, (__vector unsigned int)vconst1); ++ v0 = vec_xor(v0, vdata0); ++ } ++ } else { ++ ++ /* Load initial values. */ ++ vdata0 = vec_ld(0, (__vector unsigned long long*) p); ++ vdata1 = vec_ld(16, (__vector unsigned long long*) p); ++ ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ VEC_PERM(vdata1, vdata1, vdata1, vperm_const); ++ ++ vdata2 = vec_ld(32, (__vector unsigned long long*) p); ++ vdata3 = vec_ld(48, (__vector unsigned long long*) p); ++ ++ VEC_PERM(vdata2, vdata2, vdata2, vperm_const); ++ VEC_PERM(vdata3, vdata3, vdata3, vperm_const); ++ ++ vdata4 = vec_ld(64, (__vector unsigned long long*) p); ++ vdata5 = vec_ld(80, (__vector unsigned long long*) p); ++ ++ VEC_PERM(vdata4, vdata4, vdata4, vperm_const); ++ VEC_PERM(vdata5, vdata5, vdata5, vperm_const); ++ ++ vdata6 = vec_ld(96, (__vector unsigned long long*) p); ++ vdata7 = vec_ld(112, (__vector unsigned long long*) p); ++ ++ VEC_PERM(vdata6, vdata6, vdata6, vperm_const); ++ VEC_PERM(vdata7, vdata7, vdata7, vperm_const); ++ ++ /* xor in initial value */ ++ vdata0 = vec_xor(vdata0, vcrc); ++ ++ p = (char *)p + 128; ++ ++ do { ++ /* Checksum in blocks of MAX_SIZE. */ ++ block_size = length; ++ if (block_size > MAX_SIZE) { ++ block_size = MAX_SIZE; ++ } ++ ++ length = length - block_size; ++ ++ /* ++ * Work out the offset into the constants table to start at. Each ++ * constant is 16 bytes, and it is used against 128 bytes of input ++ * data - 128 / 16 = 8 ++ */ ++ offset = (MAX_SIZE/8) - (block_size/8); ++ /* We reduce our final 128 bytes in a separate step */ ++ chunks = (block_size/128)-1; ++ ++ vconst1 = vec_ld(offset, vcrc_const); ++ ++ va0 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata0, ++ (__vector unsigned long long)vconst1); ++ va1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata1, ++ (__vector unsigned long long)vconst1); ++ va2 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata2, ++ (__vector unsigned long long)vconst1); ++ va3 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata3, ++ (__vector unsigned long long)vconst1); ++ va4 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata4, ++ (__vector unsigned long long)vconst1); ++ va5 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata5, ++ (__vector unsigned long long)vconst1); ++ va6 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata6, ++ (__vector unsigned long long)vconst1); ++ va7 = __builtin_crypto_vpmsumd ((__vector unsigned long long)vdata7, ++ (__vector unsigned long long)vconst1); ++ ++ if (chunks > 1) { ++ offset += 16; ++ vconst2 = vec_ld(offset, vcrc_const); ++ GROUP_ENDING_NOP; ++ ++ vdata0 = vec_ld(0, (__vector unsigned long long*) p); ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ ++ vdata1 = vec_ld(16, (__vector unsigned long long*) p); ++ VEC_PERM(vdata1, vdata1, vdata1, vperm_const); ++ ++ vdata2 = vec_ld(32, (__vector unsigned long long*) p); ++ VEC_PERM(vdata2, vdata2, vdata2, vperm_const); ++ ++ vdata3 = vec_ld(48, (__vector unsigned long long*) p); ++ VEC_PERM(vdata3, vdata3, vdata3, vperm_const); ++ ++ vdata4 = vec_ld(64, (__vector unsigned long long*) p); ++ VEC_PERM(vdata4, vdata4, vdata4, vperm_const); ++ ++ vdata5 = vec_ld(80, (__vector unsigned long long*) p); ++ VEC_PERM(vdata5, vdata5, vdata5, vperm_const); ++ ++ vdata6 = vec_ld(96, (__vector unsigned long long*) p); ++ VEC_PERM(vdata6, vdata6, vdata6, vperm_const); ++ ++ vdata7 = vec_ld(112, (__vector unsigned long long*) p); ++ VEC_PERM(vdata7, vdata7, vdata7, vperm_const); ++ ++ p = (char *)p + 128; ++ ++ /* ++ * main loop. We modulo schedule it such that it takes three ++ * iterations to complete - first iteration load, second ++ * iteration vpmsum, third iteration xor. ++ */ ++ for (i = 0; i < chunks-2; i++) { ++ vconst1 = vec_ld(offset, vcrc_const); ++ offset += 16; ++ GROUP_ENDING_NOP; ++ ++ v0 = vec_xor(v0, va0); ++ va0 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata0, (__vector unsigned long long)vconst2); ++ vdata0 = vec_ld(0, (__vector unsigned long long*) p); ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v1 = vec_xor(v1, va1); ++ va1 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata1, (__vector unsigned long long)vconst2); ++ vdata1 = vec_ld(16, (__vector unsigned long long*) p); ++ VEC_PERM(vdata1, vdata1, vdata1, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v2 = vec_xor(v2, va2); ++ va2 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata2, (__vector unsigned long long)vconst2); ++ vdata2 = vec_ld(32, (__vector unsigned long long*) p); ++ VEC_PERM(vdata2, vdata2, vdata2, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v3 = vec_xor(v3, va3); ++ va3 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata3, (__vector unsigned long long)vconst2); ++ vdata3 = vec_ld(48, (__vector unsigned long long*) p); ++ VEC_PERM(vdata3, vdata3, vdata3, vperm_const); ++ ++ vconst2 = vec_ld(offset, vcrc_const); ++ GROUP_ENDING_NOP; ++ ++ v4 = vec_xor(v4, va4); ++ va4 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata4, (__vector unsigned long long)vconst1); ++ vdata4 = vec_ld(64, (__vector unsigned long long*) p); ++ VEC_PERM(vdata4, vdata4, vdata4, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v5 = vec_xor(v5, va5); ++ va5 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata5, (__vector unsigned long long)vconst1); ++ vdata5 = vec_ld(80, (__vector unsigned long long*) p); ++ VEC_PERM(vdata5, vdata5, vdata5, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v6 = vec_xor(v6, va6); ++ va6 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata6, (__vector unsigned long long)vconst1); ++ vdata6 = vec_ld(96, (__vector unsigned long long*) p); ++ VEC_PERM(vdata6, vdata6, vdata6, vperm_const); ++ GROUP_ENDING_NOP; ++ ++ v7 = vec_xor(v7, va7); ++ va7 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata7, (__vector unsigned long long)vconst1); ++ vdata7 = vec_ld(112, (__vector unsigned long long*) p); ++ VEC_PERM(vdata7, vdata7, vdata7, vperm_const); ++ ++ p = (char *)p + 128; ++ } ++ ++ /* First cool down*/ ++ vconst1 = vec_ld(offset, vcrc_const); ++ offset += 16; ++ ++ v0 = vec_xor(v0, va0); ++ va0 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata0, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v1 = vec_xor(v1, va1); ++ va1 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata1, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v2 = vec_xor(v2, va2); ++ va2 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata2, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v3 = vec_xor(v3, va3); ++ va3 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata3, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v4 = vec_xor(v4, va4); ++ va4 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata4, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v5 = vec_xor(v5, va5); ++ va5 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata5, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v6 = vec_xor(v6, va6); ++ va6 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata6, (__vector unsigned long long)vconst1); ++ GROUP_ENDING_NOP; ++ ++ v7 = vec_xor(v7, va7); ++ va7 = __builtin_crypto_vpmsumd ((__vector unsigned long ++ long)vdata7, (__vector unsigned long long)vconst1); ++ }/* else */ ++ ++ /* Second cool down. */ ++ v0 = vec_xor(v0, va0); ++ v1 = vec_xor(v1, va1); ++ v2 = vec_xor(v2, va2); ++ v3 = vec_xor(v3, va3); ++ v4 = vec_xor(v4, va4); ++ v5 = vec_xor(v5, va5); ++ v6 = vec_xor(v6, va6); ++ v7 = vec_xor(v7, va7); ++ ++#ifdef REFLECT ++ /* ++ * vpmsumd produces a 96 bit result in the least significant bits ++ * of the register. Since we are bit reflected we have to shift it ++ * left 32 bits so it occupies the least significant bits in the ++ * bit reflected domain. ++ */ ++ v0 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0, ++ (__vector unsigned char)vzero, 4); ++ v1 = (__vector unsigned long long)vec_sld((__vector unsigned char)v1, ++ (__vector unsigned char)vzero, 4); ++ v2 = (__vector unsigned long long)vec_sld((__vector unsigned char)v2, ++ (__vector unsigned char)vzero, 4); ++ v3 = (__vector unsigned long long)vec_sld((__vector unsigned char)v3, ++ (__vector unsigned char)vzero, 4); ++ v4 = (__vector unsigned long long)vec_sld((__vector unsigned char)v4, ++ (__vector unsigned char)vzero, 4); ++ v5 = (__vector unsigned long long)vec_sld((__vector unsigned char)v5, ++ (__vector unsigned char)vzero, 4); ++ v6 = (__vector unsigned long long)vec_sld((__vector unsigned char)v6, ++ (__vector unsigned char)vzero, 4); ++ v7 = (__vector unsigned long long)vec_sld((__vector unsigned char)v7, ++ (__vector unsigned char)vzero, 4); ++#endif ++ ++ /* xor with the last 1024 bits. */ ++ va0 = vec_ld(0, (__vector unsigned long long*) p); ++ VEC_PERM(va0, va0, va0, vperm_const); ++ ++ va1 = vec_ld(16, (__vector unsigned long long*) p); ++ VEC_PERM(va1, va1, va1, vperm_const); ++ ++ va2 = vec_ld(32, (__vector unsigned long long*) p); ++ VEC_PERM(va2, va2, va2, vperm_const); ++ ++ va3 = vec_ld(48, (__vector unsigned long long*) p); ++ VEC_PERM(va3, va3, va3, vperm_const); ++ ++ va4 = vec_ld(64, (__vector unsigned long long*) p); ++ VEC_PERM(va4, va4, va4, vperm_const); ++ ++ va5 = vec_ld(80, (__vector unsigned long long*) p); ++ VEC_PERM(va5, va5, va5, vperm_const); ++ ++ va6 = vec_ld(96, (__vector unsigned long long*) p); ++ VEC_PERM(va6, va6, va6, vperm_const); ++ ++ va7 = vec_ld(112, (__vector unsigned long long*) p); ++ VEC_PERM(va7, va7, va7, vperm_const); ++ ++ p = (char *)p + 128; ++ ++ vdata0 = vec_xor(v0, va0); ++ vdata1 = vec_xor(v1, va1); ++ vdata2 = vec_xor(v2, va2); ++ vdata3 = vec_xor(v3, va3); ++ vdata4 = vec_xor(v4, va4); ++ vdata5 = vec_xor(v5, va5); ++ vdata6 = vec_xor(v6, va6); ++ vdata7 = vec_xor(v7, va7); ++ ++ /* Check if we have more blocks to process */ ++ next_block = 0; ++ if (length != 0) { ++ next_block = 1; ++ ++ /* zero v0-v7 */ ++ v0 = vec_xor(v0, v0); ++ v1 = vec_xor(v1, v1); ++ v2 = vec_xor(v2, v2); ++ v3 = vec_xor(v3, v3); ++ v4 = vec_xor(v4, v4); ++ v5 = vec_xor(v5, v5); ++ v6 = vec_xor(v6, v6); ++ v7 = vec_xor(v7, v7); ++ } ++ length = length + 128; ++ ++ } while (next_block); ++ ++ /* Calculate how many bytes we have left. */ ++ length = (len & 127); ++ ++ /* Calculate where in (short) constant table we need to start. */ ++ offset = 128 - length; ++ ++ v0 = vec_ld(offset, vcrc_short_const); ++ v1 = vec_ld(offset + 16, vcrc_short_const); ++ v2 = vec_ld(offset + 32, vcrc_short_const); ++ v3 = vec_ld(offset + 48, vcrc_short_const); ++ v4 = vec_ld(offset + 64, vcrc_short_const); ++ v5 = vec_ld(offset + 80, vcrc_short_const); ++ v6 = vec_ld(offset + 96, vcrc_short_const); ++ v7 = vec_ld(offset + 112, vcrc_short_const); ++ ++ offset += 128; ++ ++ v0 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata0,(__vector unsigned int)v0); ++ v1 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata1,(__vector unsigned int)v1); ++ v2 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata2,(__vector unsigned int)v2); ++ v3 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata3,(__vector unsigned int)v3); ++ v4 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata4,(__vector unsigned int)v4); ++ v5 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata5,(__vector unsigned int)v5); ++ v6 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata6,(__vector unsigned int)v6); ++ v7 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata7,(__vector unsigned int)v7); ++ ++ /* Now reduce the tail (0-112 bytes). */ ++ for (i = 0; i < length; i+=16) { ++ vdata0 = vec_ld(i,(__vector unsigned long long*)p); ++ VEC_PERM(vdata0, vdata0, vdata0, vperm_const); ++ va0 = vec_ld(offset + i,vcrc_short_const); ++ va0 = (__vector unsigned long long)__builtin_crypto_vpmsumw ( ++ (__vector unsigned int)vdata0,(__vector unsigned int)va0); ++ v0 = vec_xor(v0, va0); ++ } ++ ++ /* xor all parallel chunks together. */ ++ v0 = vec_xor(v0, v1); ++ v2 = vec_xor(v2, v3); ++ v4 = vec_xor(v4, v5); ++ v6 = vec_xor(v6, v7); ++ ++ v0 = vec_xor(v0, v2); ++ v4 = vec_xor(v4, v6); ++ ++ v0 = vec_xor(v0, v4); ++ } ++ ++ /* Barrett Reduction */ ++ vconst1 = vec_ld(0, v_Barrett_const); ++ vconst2 = vec_ld(16, v_Barrett_const); ++ ++ v1 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0, ++ (__vector unsigned char)v0, 8); ++ v0 = vec_xor(v1,v0); ++ ++#ifdef REFLECT ++ /* shift left one bit */ ++ __vector unsigned char vsht_splat = vec_splat_u8 (1); ++ v0 = (__vector unsigned long long)vec_sll ((__vector unsigned char)v0, ++ vsht_splat); ++#endif ++ ++ v0 = vec_and(v0, vmask_64bit); ++ ++#ifndef REFLECT ++ ++ /* ++ * Now for the actual algorithm. The idea is to calculate q, ++ * the multiple of our polynomial that we need to subtract. By ++ * doing the computation 2x bits higher (ie 64 bits) and shifting the ++ * result back down 2x bits, we round down to the nearest multiple. ++ */ ++ ++ /* ma */ ++ v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v0, ++ (__vector unsigned long long)vconst1); ++ /* q = floor(ma/(2^64)) */ ++ v1 = (__vector unsigned long long)vec_sld ((__vector unsigned char)vzero, ++ (__vector unsigned char)v1, 8); ++ /* qn */ ++ v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v1, ++ (__vector unsigned long long)vconst2); ++ /* a - qn, subtraction is xor in GF(2) */ ++ v0 = vec_xor (v0, v1); ++ /* ++ * Get the result into r3. We need to shift it left 8 bytes: ++ * V0 [ 0 1 2 X ] ++ * V0 [ 0 X 2 3 ] ++ */ ++ result = __builtin_unpack_vector_1 (v0); ++#else ++ ++ /* ++ * The reflected version of Barrett reduction. Instead of bit ++ * reflecting our data (which is expensive to do), we bit reflect our ++ * constants and our algorithm, which means the intermediate data in ++ * our vector registers goes from 0-63 instead of 63-0. We can reflect ++ * the algorithm because we don't carry in mod 2 arithmetic. ++ */ ++ ++ /* bottom 32 bits of a */ ++ v1 = vec_and(v0, vmask_32bit); ++ ++ /* ma */ ++ v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v1, ++ (__vector unsigned long long)vconst1); ++ ++ /* bottom 32bits of ma */ ++ v1 = vec_and(v1, vmask_32bit); ++ /* qn */ ++ v1 = __builtin_crypto_vpmsumd ((__vector unsigned long long)v1, ++ (__vector unsigned long long)vconst2); ++ /* a - qn, subtraction is xor in GF(2) */ ++ v0 = vec_xor (v0, v1); ++ ++ /* ++ * Since we are bit reflected, the result (ie the low 32 bits) is in ++ * the high 32 bits. We just need to shift it left 4 bytes ++ * V0 [ 0 1 X 3 ] ++ * V0 [ 0 X 2 3 ] ++ */ ++ ++ /* shift result into top 64 bits of */ ++ v0 = (__vector unsigned long long)vec_sld((__vector unsigned char)v0, ++ (__vector unsigned char)vzero, 4); ++ ++ result = __builtin_unpack_vector_0 (v0); ++#endif ++ ++ return result; ++} +diff --git a/crc32.c b/crc32.c +index 9580440..406d350 100644 +--- a/crc32.c ++++ b/crc32.c +@@ -199,13 +199,78 @@ const z_crc_t FAR * ZEXPORT get_crc_table() + #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 + + /* ========================================================================= */ +-unsigned long ZEXPORT crc32_z(crc, buf, len) ++local ++unsigned long ZEXPORT crc32_table_lookup(crc, buf, len) + unsigned long crc; + const unsigned char FAR *buf; + z_size_t len; + { + if (buf == Z_NULL) return 0UL; + ++ crc = crc ^ 0xffffffffUL; ++ while (len >= 8) { ++ DO8; ++ len -= 8; ++ } ++ if (len) do { ++ DO1; ++ } while (--len); ++ return crc ^ 0xffffffffUL; ++} ++ ++/* Small helper function to compare optfun against the reference table lookup ++ * return test_ref_comparision_##optfn in crc32_z_ifunc ++#include ++#define TEST_COMPARE(optfn) \ ++ static unsigned long test_ref_comparision_ ## optfn(unsigned long crc, const unsigned char FAR *p, z_size_t len) \ ++ { \ ++ unsigned long crc_tbl_lookup = crc32_table_lookup(crc, p, len); \ ++ unsigned long optcrc = optfn(crc, p, len); \ ++ assert( optcrc == crc_tbl_lookup ); \ ++ return optcrc; \ ++ } ++*/ ++ ++#ifdef Z_IFUNC_ASM ++unsigned long (*(crc32_z_ifunc(void)))(unsigned long, const unsigned char FAR *, z_size_t) ++ __asm__ ("crc32_z"); ++__asm__(".type crc32_z, %gnu_indirect_function"); ++#elif defined(Z_IFUNC_NATIVE) ++unsigned long ZEXPORT crc32_z( ++ unsigned long crc, ++ const unsigned char FAR *buf, ++ z_size_t len) ++ __attribute__ ((ifunc ("crc32_z_ifunc"))); ++#endif ++ ++#if _ARCH_PWR8==1 ++unsigned long crc32_vpmsum(unsigned long, const unsigned char FAR *, z_size_t); ++/* for testing TEST_COMPARE(crc32_vpmsum) */ ++#ifndef __BUILTIN_CPU_SUPPORTS__ ++#include ++#include ++#endif ++#endif ++ ++/* due to a quirk of gnu_indirect_function - "local" (aka static) is applied to ++ * crc32_z which is not desired. crc32_z_ifunc is implictly "local" */ ++#ifndef Z_IFUNC_ASM ++local ++#endif ++unsigned long (*(crc32_z_ifunc(void)))(unsigned long, const unsigned char FAR *, z_size_t) ++{ ++#if _ARCH_PWR8==1 ++#if defined(__BUILTIN_CPU_SUPPORTS__) ++ if (__builtin_cpu_supports("arch_2_07")) ++ return crc32_vpmsum; ++#else ++ if (getauxval(AT_HWCAP2) & PPC_FEATURE2_ARCH_2_07) ++ return crc32_vpmsum; ++#endif ++#endif /* _ARCH_PWR8 */ ++ ++/* return a function pointer for optimized arches here */ ++ + #ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +@@ -217,22 +282,31 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + + endian = 1; + if (*((unsigned char *)(&endian))) +- return crc32_little(crc, buf, len); ++ return crc32_little; + else +- return crc32_big(crc, buf, len); ++ return crc32_big; + } + #endif /* BYFOUR */ +- crc = crc ^ 0xffffffffUL; +- while (len >= 8) { +- DO8; +- len -= 8; +- } +- if (len) do { +- DO1; +- } while (--len); +- return crc ^ 0xffffffffUL; ++ ++ return crc32_table_lookup; + } + ++#if !defined(Z_IFUNC_ASM) && !defined(Z_IFUNC_NATIVE) ++ ++unsigned long ZEXPORT crc32_z(crc, buf, len) ++ unsigned long crc; ++ const unsigned char FAR *buf; ++ z_size_t len; ++{ ++ static unsigned long ZEXPORT (*crc32_func)(unsigned long, const unsigned char FAR *, z_size_t) = NULL; ++ ++ if (!crc32_func) ++ crc32_func = crc32_z_ifunc(); ++ return (*crc32_func)(crc, buf, len); ++} ++ ++#endif /* defined(Z_IFUNC_ASM) || defined(Z_IFUNC_NATIVE) */ ++ + /* ========================================================================= */ + unsigned long ZEXPORT crc32(crc, buf, len) + unsigned long crc; +@@ -271,6 +345,7 @@ local unsigned long crc32_little(crc, buf, len) + register z_crc_t c; + register const z_crc_t FAR *buf4; + ++ if (buf == Z_NULL) return 0UL; + c = (z_crc_t)crc; + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { +@@ -311,6 +386,7 @@ local unsigned long crc32_big(crc, buf, len) + register z_crc_t c; + register const z_crc_t FAR *buf4; + ++ if (buf == Z_NULL) return 0UL; + c = ZSWAP32((z_crc_t)crc); + c = ~c; + while (len && ((ptrdiff_t)buf & 3)) { +-- +2.19.1 + diff --git a/zlib-1.2.11-optimized-s390.patch b/zlib-1.2.11-optimized-s390.patch new file mode 100644 index 0000000..50a5151 --- /dev/null +++ b/zlib-1.2.11-optimized-s390.patch @@ -0,0 +1,41 @@ +diff --git a/deflate.c b/deflate.c +index 1ec7614..b724c8d 100644 +--- a/deflate.c ++++ b/deflate.c +@@ -1233,15 +1233,16 @@ local void lm_init (s) + /* For 80x86 and 680x0, an optimized version will be provided in match.asm or + * match.S. The code will be functionally equivalent. + */ +-local uInt longest_match(s, cur_match) ++local uInt longest_match(s, pcur_match) + deflate_state *s; +- IPos cur_match; /* current match */ ++ IPos pcur_match; /* current match */ + { ++ ptrdiff_t cur_match = pcur_match; /* extend to pointer width */ + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ +- int best_len = (int)s->prev_length; /* best match length so far */ ++ ptrdiff_t best_len = s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; +@@ -1256,12 +1257,12 @@ local uInt longest_match(s, cur_match) + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; +- register ush scan_start = *(ushf*)scan; +- register ush scan_end = *(ushf*)(scan+best_len-1); ++ register uInt scan_start = *(ushf*)scan; ++ register uInt scan_end = *(ushf*)(scan+best_len-1); + #else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; +- register Byte scan_end1 = scan[best_len-1]; +- register Byte scan_end = scan[best_len]; ++ register uInt scan_end1 = scan[best_len-1]; ++ register uInt scan_end = scan[best_len]; + #endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. diff --git a/zlib-1.2.11-permit-deflateParams-change.patch b/zlib-1.2.11-permit-deflateParams-change.patch index 3a83930..4f7b0ef 100644 --- a/zlib-1.2.11-permit-deflateParams-change.patch +++ b/zlib-1.2.11-permit-deflateParams-change.patch @@ -1,10 +1,9 @@ -From f9694097dd69354b03cb8af959094c7f260db0a1 Mon Sep 17 00:00:00 2001 -From: Mark Adler -Date: Mon, 16 Jan 2017 09:49:35 -0800 -Subject: [PATCH] Permit a deflateParams() parameter change as soon as - possible. +From d09bb1ab8ef9bb91457c0ead09589e8807489260 Mon Sep 17 00:00:00 2001 +From: Ondrej Dubaj +Date: Thu, 6 Aug 2020 08:09:53 +0200 +Subject: [PATCH] Permit a deflateParams() parameter change. -This commit allows a parameter change even if the input data has +This change allows a parameter change even if the input data has not all been compressed and copied to the application output buffer, so long as all of the input data has been compressed to the internal pending output buffer. This also allows an immediate @@ -16,10 +15,10 @@ since initialization or reset. 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/deflate.c b/deflate.c -index b63311a..20bda4f 100644 +index 9705c1c..f3c9924 100644 --- a/deflate.c +++ b/deflate.c -@@ -494,7 +494,7 @@ int ZEXPORT deflateResetKeep (strm) +@@ -509,7 +509,7 @@ int ZEXPORT deflateResetKeep (strm) s->wrap == 2 ? crc32(0L, Z_NULL, 0) : #endif adler32(0L, Z_NULL, 0); @@ -28,14 +27,15 @@ index b63311a..20bda4f 100644 _tr_init(s); -@@ -587,12 +587,12 @@ int ZEXPORT deflateParams(strm, level, strategy) +@@ -606,13 +606,13 @@ int ZEXPORT deflateParams(strm, level, strategy) func = configuration_table[s->level].func; - if ((strategy != s->strategy || func != configuration_table[level].func) && -- s->high_water) { -+ s->last_flush != -2) { + if ((strategy != s->strategy || func != configuration_table[level].func || +- hook_flush != Z_NO_FLUSH) && s->high_water) { ++ hook_flush != Z_NO_FLUSH) && s->last_flush != -2) { /* Flush the last buffer: */ - int err = deflate(strm, Z_BLOCK); + int err = deflate(strm, RANK(hook_flush) > RANK(Z_BLOCK) ? + hook_flush : Z_BLOCK); if (err == Z_STREAM_ERROR) return err; - if (strm->avail_out == 0) @@ -44,7 +44,7 @@ index b63311a..20bda4f 100644 } if (s->level != level) { diff --git a/zlib.h b/zlib.h -index 5daf4f2..577d81e 100644 +index f09cdaf..001624e 100644 --- a/zlib.h +++ b/zlib.h @@ -712,11 +712,12 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, @@ -66,5 +66,5 @@ index 5daf4f2..577d81e 100644 If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does not have enough output space to complete, then the parameter change will not -- -2.29.2 +2.26.0 diff --git a/zlib-1.2.11.tar.xz b/zlib-1.2.11.tar.xz deleted file mode 100644 index 305b7a058f2b18b5ff15b0c5258ab7d489c21973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467960 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%0A%uo}t#T?tjvg|P!a>S?%DPk(~*N7Ao_sq(hD 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%0AHEk;%?EcRd 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�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%0D$XY!QHFRRM9a{ot->>@dwlB% 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%0DKmhjvHEw#JSb(vTXib<;SfT5n4 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

nq}Ia9+5!8ZKfy%N3B1Xs%nC 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 G1X)`2>G|~l diff --git a/zlib.spec b/zlib.spec index 3d9582b..acf66c0 100644 --- a/zlib.spec +++ b/zlib.spec @@ -1,10 +1,9 @@ -%define anolis_release .0.4 # disabled, per rhbz#1609830 and rhbz#1602742 %bcond_with minizip Name: zlib Version: 1.2.11 -Release: 17%{anolis_release}%{?dist} +Release: 21%{?dist} Summary: The compression and decompression library # /contrib/dotzlib/ have Boost license License: zlib and Boost @@ -13,25 +12,35 @@ URL: http://www.zlib.net/ Source: http://www.zlib.net/zlib-%{version}.tar.xz # https://github.com/madler/zlib/pull/210 Patch0: zlib-1.2.5-minizip-fixuncrypt.patch +# resolves: #805113 +Patch1: zlib-1.2.11-optimized-s390.patch +# IBM Z optimalizations +Patch2: zlib-1.2.11-IBM-Z-hw-accelrated-deflate-s390x.patch +# IBM CRC32 optimalization for POWER archs +Patch3: zlib-1.2.11-optimized-CRC32-framework.patch +# fixed firefox crash + added test case +Patch4: zlib-1.2.11-firefox-crash-fix.patch +# fixed covscan issues +Patch5: zlib-1.2.11-covscan-issues.patch +# fix for IBM Z optimalizations +Patch6: zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch # permit a deflateParams() parameter change -Patch1: zlib-1.2.11-permit-deflateParams-change.patch - -# general aarch64 optimizations -Patch1001: 1001-zlib-anolis-Neon-Optimized-hash-chain-rebase.patch -Patch1002: 1002-zlib-anolis-Porting-optimized-longest_match.patch -Patch1003: 1003-zlib-anolis-arm64-specific-build-patch.patch -# optimized CRC32 function in armv8 -Patch1004: 1004-zlib-anolis-compute-crc32-using-armv8-specific-instruction.patch -# ARM optimized insert_string -Patch1005: 1005-zlib-anolis-ARM-optimized-insert_string.patch -# x86_64 optimized slide_hash -Patch1006: 1006-zlib-anolis-Optimize-slide_hash.patch -# optimized adler32 function in armv8 -Patch1007: 1007-zlib-anolis-Neon-Optimized-adler32.patch -# optimized crc32 function with crc32 + pmul instruction in armv8 -Patch1008: 1008-zlib-anolis-Optimized-crc32-pmul-mix.patch -# optimized chunk copy by neon in armv8 -Patch1009: 1009-zlib-anolis-Neon-Optimized-chunkcopy_neon.patch +Patch7: zlib-1.2.11-permit-deflateParams-change.patch +# fixed DFLTCC compression level switching issues +# enabled HW compression for compression levels 1 through 6 +Patch8: zlib-1.2.11-IBM-DFLTCC-compression-level-switching-issues.patch +# fixed inflateSyncPoint() bad return value on z15 +Patch9: zlib-1.2.11-inflateSyncPoint-return-value-fix.patch +Patch10: zlib-1.2.11-CVE-2018-25032.patch +# Fix the compressBound() on z15 +Patch11: zlib-1.2.11-IBM-Z-hw-accelrated-deflate-compressBound-fix.patch + +# Fix CVE-2022-37434 +Patch12: zlib-1.2.11-cve-2022-37434.patch +Patch13: zlib-1.2.11-cve-2022-37434_2.patch + +# Fix setting strm.adler on z15 +Patch14: zlib-1.2.11-IBM-Z-hw-accelrated-deflate-strm-adler-fix.patch BuildRequires: automake, autoconf, libtool @@ -83,22 +92,23 @@ developing applications which use minizip. %prep %setup -q %patch0 -p1 -b .fixuncrypt -%patch1 -p1 - -%ifarch aarch64 -%patch1001 -p1 -%patch1002 -p1 -%patch1003 -p1 -%patch1004 -p1 -%patch1005 -p1 -%patch1007 -p1 -%patch1008 -p1 -%patch1009 -p1 +%ifarch s390 s390x +%patch1 -p1 -b .optimized-deflate %endif +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 -%ifarch x86_64 -%patch1006 -p1 -%endif iconv -f iso-8859-2 -t utf-8 < ChangeLog > ChangeLog.tmp mv ChangeLog.tmp ChangeLog @@ -106,15 +116,17 @@ mv ChangeLog.tmp ChangeLog %build export CFLAGS="$RPM_OPT_FLAGS" - -%ifarch aarch64 -CFLAGS+=" -DARM_NEON -O3" -CFLAGS+=" -march=armv8-a+crc" +%ifarch ppc64 +CFLAGS+=" -O3" %endif export LDFLAGS="$LDFLAGS -Wl,-z,relro -Wl,-z,now" # no-autotools, %%configure is not compatible +%ifarch s390 s390x +./configure --libdir=%{_libdir} --includedir=%{_includedir} --prefix=%{_prefix} --dfltcc +%else ./configure --libdir=%{_libdir} --includedir=%{_includedir} --prefix=%{_prefix} +%endif %make_build %if %{with minizip} @@ -176,18 +188,20 @@ find $RPM_BUILD_ROOT -name '*.la' -delete %changelog -* Tue Aug 30 2022 binbin Xu - 1.2.11-17.0.4 -- add optimized chunk copy by neon patch for aarch64 +* Wed Oct 12 2022 Ilya Leoshkevich - 1.2.11-21 +- Fix for IBM strm.adler rhbz#2134074 -* Thu Aug 25 2022 binbin Xu - 1.2.11-17.0.3 -- add optimized crc32 with pmul mix crc patch for aarch64 +* Tue Aug 09 2022 Matej Mužila - 1.2.11-20 +- Fix heap-based buffer over-read or buffer overflow in inflate in inflate.c +- Resolves: CVE-2022-37434 -* Wed Aug 24 2022 binbin Xu - 1.2.11-17.0.2 -- add optimized adler32_neon patch for aarch64 +* Mon May 16 2022 Lukas Javorsky - 1.2.11-19 +- Apply IBM patch for compressBound() function +- Source from https://github.com/madler/zlib/issues/410#issuecomment-947212824 +- Resolves: #2056900 -* Tue Nov 23 2021 Chunmei Xu - 1.2.11-17.0.1 -- remove optimised patches for s390 and IBM Z -- add optimised patches for aarch64 and x86_64 +* Tue Mar 29 2022 Matej Mužila - 1.2.11-18 +- Resolves: CVE-2018-25032 * Mon Jun 15 2020 Ondrej Dubaj - 1.2.11-17 - Fixed DFLTCC compression level switching issues (#1875492) -- Gitee