[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;
|
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
|
Subject: [PATCH] fixed covscan issues
|
||||||
|
|
||||||
---
|
---
|
||||||
crc32.c | 2 +-
|
|
||||||
deflate.c | 2 +-
|
deflate.c | 2 +-
|
||||||
test/crc32_test.c | 8 ++++----
|
test/crc32_test.c | 8 ++++----
|
||||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
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
|
diff --git a/deflate.c b/deflate.c
|
||||||
index 089285a..9b09718 100644
|
index 089285a..9b09718 100644
|
||||||
--- a/deflate.c
|
--- a/deflate.c
|
||||||
@ -35,27 +21,20 @@ index 089285a..9b09718 100644
|
|||||||
|
|
||||||
bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate :
|
bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate :
|
||||||
s->level == 0 ? deflate_stored(s, flush) :
|
s->level == 0 ? deflate_stored(s, flush) :
|
||||||
diff --git a/test/crc32_test.c b/test/crc32_test.c
|
diff -rup zlib-1.2.12/test/crc32_test.c.old zlib-1.2.12/test/crc32_test.c
|
||||||
index 5d73128..2d2a6c7 100644
|
--- zlib-1.2.12/test/crc32_test.c.old 2022-06-23 11:20:52.393574517 +0000
|
||||||
--- a/test/crc32_test.c
|
+++ zlib-1.2.12/test/crc32_test.c 2022-06-23 11:21:50.195574517 +0000
|
||||||
+++ b/test/crc32_test.c
|
@@ -11,7 +11,7 @@
|
||||||
@@ -11,25 +11,25 @@
|
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
-void test_crc32 OF((uLong crc, Byte* buf, z_size_t len, uLong chk, int line));
|
-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));
|
+void test_crc32 OF((uLong crc, char* buf, z_size_t len, uLong chk, int line));
|
||||||
int main OF((void));
|
int main OF((void));
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int line;
|
@@ -24,12 +24,12 @@ typedef struct {
|
||||||
uLong crc;
|
|
||||||
- Byte* buf;
|
|
||||||
+ char* buf;
|
|
||||||
int len;
|
|
||||||
uLong expect;
|
|
||||||
} crc32_test;
|
|
||||||
|
|
||||||
void test_crc32(crc, buf, len, chk, line)
|
void test_crc32(crc, buf, len, chk, line)
|
||||||
uLong crc;
|
uLong crc;
|
||||||
- Byte *buf;
|
- Byte *buf;
|
||||||
@ -66,9 +45,7 @@ index 5d73128..2d2a6c7 100644
|
|||||||
{
|
{
|
||||||
- uLong res = crc32(crc, buf, len);
|
- uLong res = crc32(crc, buf, len);
|
||||||
+ uLong res = crc32(crc, (Bytef *) 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",
|
fprintf(stderr, "FAIL [%d]: crc32 returned 0x%08X expected 0x%08X\n",
|
||||||
line, (unsigned int)res, (unsigned int)chk);
|
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
|
index 1ec7614..b724c8d 100644
|
||||||
--- a/deflate.c
|
--- a/deflate.c
|
||||||
+++ b/deflate.c
|
+++ b/deflate.c
|
||||||
@@ -1233,15 +1233,16 @@ local void lm_init (s)
|
@@ -1322,15 +1322,16 @@ local void lm_init (s)
|
||||||
/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
|
#define longest_match longest_match_default
|
||||||
* match.S. The code will be functionally equivalent.
|
#endif /* Z_POWER_OPT */
|
||||||
*/
|
|
||||||
-local uInt longest_match(s, cur_match)
|
-local uInt longest_match(s, cur_match)
|
||||||
+local uInt longest_match(s, pcur_match)
|
+local uInt longest_match(s, pcur_match)
|
||||||
deflate_state *s;
|
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>
|
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||||
Date: Thu, 19 Mar 2020 11:52:03 +0100
|
Date: Thu, 19 Mar 2020 11:52:03 +0100
|
||||||
Subject: [PATCH] s390x: vectorize crc32
|
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
|
extensions (it has to be not just the CPU, but also the kernel) and
|
||||||
choose between the regular and the vectorized implementations.
|
choose between the regular and the vectorized implementations.
|
||||||
---
|
---
|
||||||
Makefile.in | 9 ++
|
Makefile.in | 9 ++
|
||||||
configure | 28 ++++++
|
configure | 28 +++++
|
||||||
contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++++++++++
|
contrib/gcc/zifunc.h | 21 +++-
|
||||||
crc32.c | 55 +++++++++++-
|
contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++
|
||||||
4 files changed, 285 insertions(+), 2 deletions(-)
|
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-vx.c
|
||||||
|
create mode 100644 contrib/s390/crc32_z_resolver.c
|
||||||
|
|
||||||
diff --git a/Makefile.in b/Makefile.in
|
diff --git a/Makefile.in b/Makefile.in
|
||||||
index 6070dcc..9e9743b 100644
|
index 2e78f38..04c2f5d 100644
|
||||||
--- a/Makefile.in
|
--- a/Makefile.in
|
||||||
+++ b/Makefile.in
|
+++ b/Makefile.in
|
||||||
@@ -29,6 +29,7 @@ LDFLAGS=
|
@@ -29,6 +29,7 @@ LDFLAGS=
|
||||||
@ -27,9 +30,9 @@ index 6070dcc..9e9743b 100644
|
|||||||
|
|
||||||
STATICLIB=libz.a
|
STATICLIB=libz.a
|
||||||
SHAREDLIB=libz.so
|
SHAREDLIB=libz.so
|
||||||
@@ -179,6 +180,9 @@ crc32_power8.o: $(SRCDIR)contrib/power8-crc/vec_crc32.c
|
@@ -179,6 +180,9 @@ crc32.o: $(SRCDIR)crc32.c
|
||||||
crc32.o: $(SRCDIR)crc32.c
|
crc32_z_power8.o: $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||||
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
|
$(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||||
|
|
||||||
+crc32-vx.o: $(SRCDIR)contrib/s390/crc32-vx.c
|
+crc32-vx.o: $(SRCDIR)contrib/s390/crc32-vx.c
|
||||||
+ $(CC) $(CFLAGS) $(VGFMAFLAG) $(ZINC) -c -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
|
deflate.o: $(SRCDIR)deflate.c
|
||||||
$(CC) $(CFLAGS) $(ZINC) -c -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
|
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
|
||||||
-@mv objs/crc32.o $@
|
-@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
|
+ $(CC) $(SFLAGS) $(VGFMAFLAG) $(ZINC) -DPIC -c -o objs/crc32-vx.o $(SRCDIR)contrib/s390/crc32-vx.c
|
||||||
+ -@mv objs/crc32-vx.o $@
|
+ -@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
|
-@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
|
diff --git a/configure b/configure
|
||||||
index 70ed86b..7941f75 100755
|
index dd01b5c..acf94a5 100755
|
||||||
--- a/configure
|
--- a/configure
|
||||||
+++ b/configure
|
+++ b/configure
|
||||||
@@ -923,6 +923,32 @@ EOF
|
@@ -927,6 +927,32 @@ else
|
||||||
fi
|
echo "Checking for sys/sdt.h ... No." | tee -a configure.log
|
||||||
fi
|
fi
|
||||||
|
|
||||||
+# check if we are compiling for s390 and binutils support vector extensions
|
+# 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
|
# show the results in the log
|
||||||
echo >> configure.log
|
echo >> configure.log
|
||||||
echo ALL = $ALL >> 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 prefix = $prefix >> configure.log
|
||||||
echo sharedlibdir = $sharedlibdir >> configure.log
|
echo sharedlibdir = $sharedlibdir >> configure.log
|
||||||
echo uname = $uname >> configure.log
|
echo uname = $uname >> configure.log
|
||||||
@ -94,7 +97,7 @@ index 70ed86b..7941f75 100755
|
|||||||
|
|
||||||
# udpate Makefile with the configure results
|
# udpate Makefile with the configure results
|
||||||
sed < ${SRCDIR}Makefile.in "
|
sed < ${SRCDIR}Makefile.in "
|
||||||
@@ -964,6 +991,7 @@ sed < ${SRCDIR}Makefile.in "
|
@@ -969,6 +996,7 @@ sed < ${SRCDIR}Makefile.in "
|
||||||
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
|
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
|
||||||
/^LDSHARED *=/s#=.*#=$LDSHARED#
|
/^LDSHARED *=/s#=.*#=$LDSHARED#
|
||||||
/^CPP *=/s#=.*#=$CPP#
|
/^CPP *=/s#=.*#=$CPP#
|
||||||
@ -102,6 +105,40 @@ index 70ed86b..7941f75 100755
|
|||||||
/^STATICLIB *=/s#=.*#=$STATICLIB#
|
/^STATICLIB *=/s#=.*#=$STATICLIB#
|
||||||
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
|
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
|
||||||
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
|
/^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
|
diff --git a/contrib/s390/crc32-vx.c b/contrib/s390/crc32-vx.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..fa5387c
|
index 0000000..fa5387c
|
||||||
@ -303,16 +340,14 @@ index 0000000..fa5387c
|
|||||||
+
|
+
|
||||||
+ return ((uv4si)v2)[2];
|
+ return ((uv4si)v2)[2];
|
||||||
+}
|
+}
|
||||||
diff --git a/crc32.c b/crc32.c
|
diff --git a/contrib/s390/crc32_z_resolver.c b/contrib/s390/crc32_z_resolver.c
|
||||||
index 34132ea..dfa33ef 100644
|
new file mode 100644
|
||||||
--- a/crc32.c
|
index 0000000..9749cab
|
||||||
+++ b/crc32.c
|
--- /dev/null
|
||||||
@@ -252,12 +252,54 @@ unsigned long crc32_vpmsum(unsigned long, const unsigned char FAR *, z_size_t);
|
+++ b/contrib/s390/crc32_z_resolver.c
|
||||||
#endif
|
@@ -0,0 +1,41 @@
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef HAVE_S390X_VX
|
|
||||||
+#include <sys/auxv.h>
|
+#include <sys/auxv.h>
|
||||||
|
+#include "../gcc/zifunc.h"
|
||||||
+
|
+
|
||||||
+#define VX_MIN_LEN 64
|
+#define VX_MIN_LEN 64
|
||||||
+#define VX_ALIGNMENT 16L
|
+#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)
|
+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 (buf == Z_NULL) return 0UL;
|
||||||
+
|
+
|
||||||
+ if (len < VX_MIN_LEN + VX_ALIGN_MASK)
|
+ 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) {
|
+ if ((uintptr_t)buf & VX_ALIGN_MASK) {
|
||||||
+ prealign = VX_ALIGNMENT - ((uintptr_t)buf & VX_ALIGN_MASK);
|
+ prealign = VX_ALIGNMENT - ((uintptr_t)buf & VX_ALIGN_MASK);
|
||||||
+ len -= prealign;
|
+ len -= prealign;
|
||||||
+ crc = crc32_big(crc, buf, prealign);
|
+ crc = crc32_z_default(crc, buf, prealign);
|
||||||
+ buf += prealign;
|
+ buf += prealign;
|
||||||
+ }
|
+ }
|
||||||
+ aligned = len & ~VX_ALIGN_MASK;
|
+ 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;
|
+ crc = crc32_le_vgfm_16(crc ^ 0xffffffff, buf, (size_t)aligned) ^ 0xffffffff;
|
||||||
+
|
+
|
||||||
+ if (remaining)
|
+ if (remaining)
|
||||||
+ crc = crc32_big(crc, buf + aligned, remaining);
|
+ crc = crc32_z_default(crc, buf + aligned, remaining);
|
||||||
+
|
+
|
||||||
+ return crc;
|
+ return crc;
|
||||||
+}
|
+}
|
||||||
+#endif
|
|
||||||
+
|
+
|
||||||
/* due to a quirk of gnu_indirect_function - "local" (aka static) is applied to
|
+Z_IFUNC(crc32_z)
|
||||||
* 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
|
|
||||||
+ if (hwcap & HWCAP_S390_VX)
|
+ if (hwcap & HWCAP_S390_VX)
|
||||||
+ return s390_crc32_vx;
|
+ return s390_crc32_vx;
|
||||||
+#endif
|
+ return crc32_z_default;
|
||||||
+
|
+}
|
||||||
/* return a function pointer for optimized arches here */
|
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)
|
-#ifdef Z_POWER_OPT
|
||||||
static unsigned long ZEXPORT (*crc32_func)(unsigned long, const unsigned char FAR *, z_size_t) = NULL;
|
+#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)
|
unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||||
- crc32_func = crc32_z_ifunc();
|
unsigned long crc;
|
||||||
+ crc32_func = crc32_z_ifunc(
|
@@ -1064,10 +1064,15 @@ unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||||
+#ifdef __s390__
|
return crc ^ 0xffffffff;
|
||||||
+ getauxval(AT_HWCAP)
|
|
||||||
+#endif
|
|
||||||
+ );
|
|
||||||
return (*crc32_func)(crc, buf, len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-#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