summaryrefslogtreecommitdiff
path: root/functable.c
diff options
context:
space:
mode:
authorRogerio Alves <rcardoso@linux.ibm.com>2019-12-09 14:40:53 -0300
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-06-25 15:29:54 +0200
commita13b6039b327fb127685a99191d0053a62346e03 (patch)
tree07f80e9bbade937b87f053daad84b4614ef297cb /functable.c
parentc5dd84bd3bd711748881490005d5f01d5eb837bc (diff)
Adler32 vector optimization for Power.
This commit implements a Power (POWER8+) vector optimization for Adler32 checksum using VSX (vector) instructions. The VSX adler32 checksum is up to 10x fast than the adler32 baseline code. Author: Rogerio Alves <rcardoso@linux.ibm.com>
Diffstat (limited to 'functable.c')
-rw-r--r--functable.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/functable.c b/functable.c
index 8124965..6679a9d 100644
--- a/functable.c
+++ b/functable.c
@@ -53,6 +53,9 @@ extern uint32_t adler32_ssse3(uint32_t adler, const unsigned char *buf, size_t l
#ifdef X86_AVX2_ADLER32
extern uint32_t adler32_avx2(uint32_t adler, const unsigned char *buf, size_t len);
#endif
+#ifdef POWER8_VSX_ADLER32
+extern uint32_t adler32_power8(uint32_t adler, const unsigned char* buf, size_t len);
+#endif
/* CRC32 */
ZLIB_INTERNAL uint32_t crc32_generic(uint32_t, const unsigned char *, uint64_t);
@@ -213,6 +216,10 @@ ZLIB_INTERNAL uint32_t adler32_stub(uint32_t adler, const unsigned char *buf, si
if (x86_cpu_has_avx2)
functable.adler32 = &adler32_avx2;
#endif
+#ifdef POWER8_VSX_ADLER32
+ if (power_cpu_has_arch_2_07)
+ functable.adler32 = &adler32_power8;
+#endif
return functable.adler32(adler, buf, len);
}