[5/6] Rebase patches on new 1.2.12 release
This commit is contained in:
parent
4e76ca623c
commit
37728e12c3
@ -28,38 +28,3 @@ index 96891c2..1197928 100644
|
||||
}
|
||||
return err;
|
||||
}
|
||||
diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c
|
||||
index 44e88a9..a753c17 100644
|
||||
--- a/contrib/minizip/zip.c
|
||||
+++ b/contrib/minizip/zip.c
|
||||
@@ -526,8 +526,8 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
|
||||
break;
|
||||
}
|
||||
|
||||
- if (uPosFound!=0)
|
||||
- break;
|
||||
+ if (uPosFound!=0)
|
||||
+ break;
|
||||
}
|
||||
TRYFREE(buf);
|
||||
return uPosFound;
|
||||
diff --git a/deflate.c b/deflate.c
|
||||
index 085abbe..3963e79 100644
|
||||
--- a/deflate.c
|
||||
+++ b/deflate.c
|
||||
@@ -203,9 +203,10 @@ local const config configuration_table[10] = {
|
||||
* Initialize the hash table (avoiding 64K overflow for 16 bit systems).
|
||||
* prev[] will be initialized on the fly.
|
||||
*/
|
||||
-#define CLEAR_HASH(s) \
|
||||
+#define CLEAR_HASH(s) do { \
|
||||
s->head[s->hash_size-1] = NIL; \
|
||||
- zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
|
||||
+ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
|
||||
+} while (0)
|
||||
|
||||
/* ===========================================================================
|
||||
* Slide the hash table when sliding the window down (could be avoided with 32
|
||||
--
|
||||
2.26.0
|
||||
|
||||
|
@ -4,24 +4,10 @@ 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
|
||||
@ -35,27 +21,20 @@ index 089285a..9b09718 100644
|
||||
|
||||
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 @@
|
||||
diff -rup zlib-1.2.12/test/crc32_test.c.old zlib-1.2.12/test/crc32_test.c
|
||||
--- zlib-1.2.12/test/crc32_test.c.old 2022-06-23 11:20:52.393574517 +0000
|
||||
+++ zlib-1.2.12/test/crc32_test.c 2022-06-23 11:21:50.195574517 +0000
|
||||
@@ -11,7 +11,7 @@
|
||||
# include <stdlib.h>
|
||||
#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;
|
||||
|
||||
@@ -24,12 +24,12 @@ typedef struct {
|
||||
|
||||
void test_crc32(crc, buf, len, chk, line)
|
||||
uLong crc;
|
||||
- Byte *buf;
|
||||
@ -66,9 +45,7 @@ index 5d73128..2d2a6c7 100644
|
||||
{
|
||||
- uLong res = crc32(crc, buf, len);
|
||||
+ uLong res = crc32(crc, (Bytef *) buf, len);
|
||||
if (res != chk) {
|
||||
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
|
||||
|
||||
|
@ -2,10 +2,10 @@ 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.
|
||||
*/
|
||||
@@ -1322,15 +1322,16 @@ local void lm_init (s)
|
||||
#define longest_match longest_match_default
|
||||
#endif /* Z_POWER_OPT */
|
||||
|
||||
-local uInt longest_match(s, cur_match)
|
||||
+local uInt longest_match(s, pcur_match)
|
||||
deflate_state *s;
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 2dfdc5b7d6943c0ac60eef63e361e2a50f9da610 Mon Sep 17 00:00:00 2001
|
||||
From 957bc67cfb4e01403c01fe6243850383183a7c19 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||
Date: Thu, 19 Mar 2020 11:52:03 +0100
|
||||
Subject: [PATCH] s390x: vectorize crc32
|
||||
@ -8,15 +8,18 @@ about them. At runtime, check whether kernel supports vector
|
||||
extensions (it has to be not just the CPU, but also the kernel) and
|
||||
choose between the regular and the vectorized implementations.
|
||||
---
|
||||
Makefile.in | 9 ++
|
||||
configure | 28 ++++++
|
||||
contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++++++++++
|
||||
crc32.c | 55 +++++++++++-
|
||||
4 files changed, 285 insertions(+), 2 deletions(-)
|
||||
Makefile.in | 9 ++
|
||||
configure | 28 +++++
|
||||
contrib/gcc/zifunc.h | 21 +++-
|
||||
contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++
|
||||
contrib/s390/crc32_z_resolver.c | 41 +++++++
|
||||
crc32.c | 11 +-
|
||||
6 files changed, 301 insertions(+), 4 deletions(-)
|
||||
create mode 100644 contrib/s390/crc32-vx.c
|
||||
create mode 100644 contrib/s390/crc32_z_resolver.c
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 6070dcc..9e9743b 100644
|
||||
index 2e78f38..04c2f5d 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -29,6 +29,7 @@ LDFLAGS=
|
||||
@ -27,9 +30,9 @@ index 6070dcc..9e9743b 100644
|
||||
|
||||
STATICLIB=libz.a
|
||||
SHAREDLIB=libz.so
|
||||
@@ -179,6 +180,9 @@ crc32_power8.o: $(SRCDIR)contrib/power8-crc/vec_crc32.c
|
||||
crc32.o: $(SRCDIR)crc32.c
|
||||
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
|
||||
@@ -179,6 +180,9 @@ crc32.o: $(SRCDIR)crc32.c
|
||||
crc32_z_power8.o: $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||
$(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||
|
||||
+crc32-vx.o: $(SRCDIR)contrib/s390/crc32-vx.c
|
||||
+ $(CC) $(CFLAGS) $(VGFMAFLAG) $(ZINC) -c -o $@ $(SRCDIR)contrib/s390/crc32-vx.c
|
||||
@ -37,7 +40,7 @@ index 6070dcc..9e9743b 100644
|
||||
deflate.o: $(SRCDIR)deflate.c
|
||||
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
|
||||
|
||||
@@ -234,6 +238,11 @@ crc32.lo: $(SRCDIR)crc32.c
|
||||
@@ -229,6 +233,11 @@ crc32.lo: $(SRCDIR)crc32.c
|
||||
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
|
||||
-@mv objs/crc32.o $@
|
||||
|
||||
@ -46,15 +49,15 @@ index 6070dcc..9e9743b 100644
|
||||
+ $(CC) $(SFLAGS) $(VGFMAFLAG) $(ZINC) -DPIC -c -o objs/crc32-vx.o $(SRCDIR)contrib/s390/crc32-vx.c
|
||||
+ -@mv objs/crc32-vx.o $@
|
||||
+
|
||||
deflate.lo: $(SRCDIR)deflate.c
|
||||
crc32_z_power8.lo: $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||
-@mkdir objs 2>/dev/null || test -d objs
|
||||
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
|
||||
$(CC) $(SFLAGS) -mcpu=power8 $(ZINC) -DPIC -c -o objs/crc32_z_power8.o $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||
diff --git a/configure b/configure
|
||||
index 70ed86b..7941f75 100755
|
||||
index dd01b5c..acf94a5 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -923,6 +923,32 @@ EOF
|
||||
fi
|
||||
@@ -927,6 +927,32 @@ else
|
||||
echo "Checking for sys/sdt.h ... No." | tee -a configure.log
|
||||
fi
|
||||
|
||||
+# check if we are compiling for s390 and binutils support vector extensions
|
||||
@ -86,7 +89,7 @@ index 70ed86b..7941f75 100755
|
||||
# show the results in the log
|
||||
echo >> configure.log
|
||||
echo ALL = $ALL >> configure.log
|
||||
@@ -955,6 +981,7 @@ echo mandir = $mandir >> configure.log
|
||||
@@ -960,6 +986,7 @@ echo mandir = $mandir >> configure.log
|
||||
echo prefix = $prefix >> configure.log
|
||||
echo sharedlibdir = $sharedlibdir >> configure.log
|
||||
echo uname = $uname >> configure.log
|
||||
@ -94,7 +97,7 @@ index 70ed86b..7941f75 100755
|
||||
|
||||
# udpate Makefile with the configure results
|
||||
sed < ${SRCDIR}Makefile.in "
|
||||
@@ -964,6 +991,7 @@ sed < ${SRCDIR}Makefile.in "
|
||||
@@ -969,6 +996,7 @@ sed < ${SRCDIR}Makefile.in "
|
||||
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
|
||||
/^LDSHARED *=/s#=.*#=$LDSHARED#
|
||||
/^CPP *=/s#=.*#=$CPP#
|
||||
@ -102,6 +105,40 @@ index 70ed86b..7941f75 100755
|
||||
/^STATICLIB *=/s#=.*#=$STATICLIB#
|
||||
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
|
||||
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
|
||||
diff --git a/contrib/gcc/zifunc.h b/contrib/gcc/zifunc.h
|
||||
index daf4fe4..b62379e 100644
|
||||
--- a/contrib/gcc/zifunc.h
|
||||
+++ b/contrib/gcc/zifunc.h
|
||||
@@ -8,9 +8,28 @@
|
||||
|
||||
/* Helpers for arch optimizations */
|
||||
|
||||
+#if defined(__clang__)
|
||||
+#if __has_feature(coverage_sanitizer)
|
||||
+#define Z_IFUNC_NO_SANCOV __attribute__((no_sanitize("coverage")))
|
||||
+#else /* __has_feature(coverage_sanitizer) */
|
||||
+#define Z_IFUNC_NO_SANCOV
|
||||
+#endif /* __has_feature(coverage_sanitizer) */
|
||||
+#else /* __clang__ */
|
||||
+#define Z_IFUNC_NO_SANCOV
|
||||
+#endif /* __clang__ */
|
||||
+
|
||||
+#ifdef __s390__
|
||||
+#define Z_IFUNC_PARAMS unsigned long hwcap
|
||||
+#define Z_IFUNC_ATTRS Z_IFUNC_NO_SANCOV
|
||||
+#else /* __s390__ */
|
||||
+#define Z_IFUNC_PARAMS void
|
||||
+#define Z_IFUNC_ATTRS
|
||||
+#endif /* __s390__ */
|
||||
+
|
||||
#define Z_IFUNC(fname) \
|
||||
typeof(fname) fname __attribute__ ((ifunc (#fname "_resolver"))); \
|
||||
- local typeof(fname) *fname##_resolver(void)
|
||||
+ Z_IFUNC_ATTRS \
|
||||
+ local typeof(fname) *fname##_resolver(Z_IFUNC_PARAMS)
|
||||
/* This is a helper macro to declare a resolver for an indirect function
|
||||
* (ifunc). Let's say you have function
|
||||
*
|
||||
diff --git a/contrib/s390/crc32-vx.c b/contrib/s390/crc32-vx.c
|
||||
new file mode 100644
|
||||
index 0000000..fa5387c
|
||||
@ -303,16 +340,14 @@ index 0000000..fa5387c
|
||||
+
|
||||
+ return ((uv4si)v2)[2];
|
||||
+}
|
||||
diff --git a/crc32.c b/crc32.c
|
||||
index 34132ea..dfa33ef 100644
|
||||
--- a/crc32.c
|
||||
+++ b/crc32.c
|
||||
@@ -252,12 +252,54 @@ unsigned long crc32_vpmsum(unsigned long, const unsigned char FAR *, z_size_t);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#ifdef HAVE_S390X_VX
|
||||
diff --git a/contrib/s390/crc32_z_resolver.c b/contrib/s390/crc32_z_resolver.c
|
||||
new file mode 100644
|
||||
index 0000000..9749cab
|
||||
--- /dev/null
|
||||
+++ b/contrib/s390/crc32_z_resolver.c
|
||||
@@ -0,0 +1,41 @@
|
||||
+#include <sys/auxv.h>
|
||||
+#include "../gcc/zifunc.h"
|
||||
+
|
||||
+#define VX_MIN_LEN 64
|
||||
+#define VX_ALIGNMENT 16L
|
||||
@ -322,17 +357,17 @@ index 34132ea..dfa33ef 100644
|
||||
+
|
||||
+local unsigned long s390_crc32_vx(unsigned long crc, const unsigned char FAR *buf, z_size_t len)
|
||||
+{
|
||||
+ uint64_t prealign, aligned, remaining;
|
||||
+ uintptr_t prealign, aligned, remaining;
|
||||
+
|
||||
+ if (buf == Z_NULL) return 0UL;
|
||||
+
|
||||
+ if (len < VX_MIN_LEN + VX_ALIGN_MASK)
|
||||
+ return crc32_big(crc, buf, len);
|
||||
+ return crc32_z_default(crc, buf, len);
|
||||
+
|
||||
+ if ((uintptr_t)buf & VX_ALIGN_MASK) {
|
||||
+ prealign = VX_ALIGNMENT - ((uintptr_t)buf & VX_ALIGN_MASK);
|
||||
+ len -= prealign;
|
||||
+ crc = crc32_big(crc, buf, prealign);
|
||||
+ crc = crc32_z_default(crc, buf, prealign);
|
||||
+ buf += prealign;
|
||||
+ }
|
||||
+ aligned = len & ~VX_ALIGN_MASK;
|
||||
@ -341,53 +376,53 @@ index 34132ea..dfa33ef 100644
|
||||
+ crc = crc32_le_vgfm_16(crc ^ 0xffffffff, buf, (size_t)aligned) ^ 0xffffffff;
|
||||
+
|
||||
+ if (remaining)
|
||||
+ crc = crc32_big(crc, buf + aligned, remaining);
|
||||
+ crc = crc32_z_default(crc, buf + aligned, remaining);
|
||||
+
|
||||
+ return crc;
|
||||
+}
|
||||
+#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)
|
||||
+unsigned long (*(crc32_z_ifunc(
|
||||
+#ifdef __s390__
|
||||
+unsigned long hwcap
|
||||
+#else
|
||||
+void
|
||||
+#endif
|
||||
+)))(unsigned long, const unsigned char FAR *, z_size_t)
|
||||
{
|
||||
#if _ARCH_PWR8==1
|
||||
#if defined(__BUILTIN_CPU_SUPPORTS__)
|
||||
@@ -269,6 +311,11 @@ unsigned long (*(crc32_z_ifunc(void)))(unsigned long, const unsigned char FAR *,
|
||||
#endif
|
||||
#endif /* _ARCH_PWR8 */
|
||||
|
||||
+#ifdef HAVE_S390X_VX
|
||||
+Z_IFUNC(crc32_z)
|
||||
+{
|
||||
+ if (hwcap & HWCAP_S390_VX)
|
||||
+ return s390_crc32_vx;
|
||||
+#endif
|
||||
+
|
||||
/* return a function pointer for optimized arches here */
|
||||
+ return crc32_z_default;
|
||||
+}
|
||||
diff --git a/crc32.c b/crc32.c
|
||||
index ae7b7e7..c212261 100644
|
||||
--- a/crc32.c
|
||||
+++ b/crc32.c
|
||||
@@ -736,12 +736,12 @@ local z_word_t crc_word_big(data)
|
||||
#endif
|
||||
|
||||
#ifdef DYNAMIC_CRC_TABLE
|
||||
@@ -301,7 +348,11 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||
static unsigned long ZEXPORT (*crc32_func)(unsigned long, const unsigned char FAR *, z_size_t) = NULL;
|
||||
/* ========================================================================= */
|
||||
-#ifdef Z_POWER_OPT
|
||||
+#if defined(Z_POWER_OPT) || defined(HAVE_S390X_VX)
|
||||
/* Rename function so resolver can use its symbol. The default version will be
|
||||
* returned by the resolver if the host has no support for an optimized version.
|
||||
*/
|
||||
#define crc32_z crc32_z_default
|
||||
-#endif /* Z_POWER_OPT */
|
||||
+#endif /* defined(Z_POWER_OPT) || defined(HAVE_S390X_VX) */
|
||||
|
||||
if (!crc32_func)
|
||||
- crc32_func = crc32_z_ifunc();
|
||||
+ crc32_func = crc32_z_ifunc(
|
||||
+#ifdef __s390__
|
||||
+ getauxval(AT_HWCAP)
|
||||
+#endif
|
||||
+ );
|
||||
return (*crc32_func)(crc, buf, len);
|
||||
unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||
unsigned long crc;
|
||||
@@ -1064,10 +1064,15 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||
return crc ^ 0xffffffff;
|
||||
}
|
||||
|
||||
-#ifdef Z_POWER_OPT
|
||||
+#if defined(Z_POWER_OPT) || defined(HAVE_S390X_VX)
|
||||
#undef crc32_z
|
||||
+#ifdef Z_POWER_OPT
|
||||
#include "contrib/power/crc32_z_resolver.c"
|
||||
#endif /* Z_POWER_OPT */
|
||||
+#ifdef HAVE_S390X_VX
|
||||
+#include "contrib/s390/crc32_z_resolver.c"
|
||||
+#endif /* HAVE_S390X_VX */
|
||||
+#endif /* defined(Z_POWER_OPT) || defined(HAVE_S390X_VX) */
|
||||
|
||||
#endif
|
||||
|
||||
--
|
||||
2.25.1
|
||||
2.35.1
|
||||
|
Loading…
Reference in New Issue
Block a user