diff options
author | Rogerio Alves <rcardoso@linux.ibm.com> | 2019-12-09 14:40:53 -0300 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2020-06-25 15:29:54 +0200 |
commit | a13b6039b327fb127685a99191d0053a62346e03 (patch) | |
tree | 07f80e9bbade937b87f053daad84b4614ef297cb /functable.c | |
parent | c5dd84bd3bd711748881490005d5f01d5eb837bc (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.c | 7 |
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); } |