summaryrefslogtreecommitdiff
path: root/functable.c
diff options
context:
space:
mode:
authorNathan Moinvaziri <nathan@nathanm.com>2020-05-22 21:35:26 -0700
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-06-08 21:17:18 +0200
commitf8801a00b02c8796c6dddde8a30adc18a1a80477 (patch)
treefda08e1bd900f39fd8be758f1c33ca1d2a586a6a /functable.c
parentb360d95afdf1d74d64b1b27808375aaf0249ba59 (diff)
Added Adler32 SSSE3 and AVX2 implementations to functable.
Co-authored-by: Brian Bockelman <bockelman@gmail.com> Co-authored-by: Mika T. Lindqvist <postmaster@raasu.org>
Diffstat (limited to 'functable.c')
-rw-r--r--functable.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/functable.c b/functable.c
index e25da33..4ba575c 100644
--- a/functable.c
+++ b/functable.c
@@ -47,6 +47,12 @@ extern uint32_t adler32_c(uint32_t adler, const unsigned char *buf, size_t len);
#if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && defined(ARM_NEON_ADLER32)
extern uint32_t adler32_neon(uint32_t adler, const unsigned char *buf, size_t len);
#endif
+#ifdef X86_SSSE3_ADLER32
+extern uint32_t adler32_ssse3(uint32_t adler, const unsigned char *buf, size_t len);
+#endif
+#ifdef X86_AVX2_ADLER32
+extern uint32_t adler32_avx2(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);
@@ -195,6 +201,14 @@ ZLIB_INTERNAL uint32_t adler32_stub(uint32_t adler, const unsigned char *buf, si
# endif
functable.adler32 = &adler32_neon;
#endif
+#ifdef X86_SSSE3_ADLER32
+ if (x86_cpu_has_ssse3)
+ functable.adler32 = &adler32_ssse3;
+#endif
+#ifdef X86_AVX2_ADLER32
+ if (x86_cpu_has_avx2)
+ functable.adler32 = &adler32_avx2;
+#endif
return functable.adler32(adler, buf, len);
}