summaryrefslogtreecommitdiff
path: root/deflate.c
diff options
context:
space:
mode:
authorAdenilson Cavalcanti <adenilson.cavalcanti@arm.com>2018-08-07 16:08:59 +0000
committerCommit Bot <commit-bot@chromium.org>2018-08-07 16:08:59 +0000
commitd6d1961d89ea288546c348d23ab11bc29102c670 (patch)
tree681b381834484fa1b0c8265c4718d9f6f99abe5e /deflate.c
parentf07211103538b8ec7a6902ed11dfe09adff49ca4 (diff)
downloadzlib-d6d1961d89ea288546c348d23ab11bc29102c670.tar.gz
Neon-Optimized hash chain
This should help with compression of data, using NEON instructions (therefore useful for ARMv7/ARMv8). Average gains were around 4% to 5% in data compression, depending on the data entropy. Re-write of a patch contributed to Fedora Core, for reference: https://src.fedoraproject.org/rpms/zlib/c/25e9802713484882c27c1f979a6610a42414ee13?branch=master Bug: 863257 Change-Id: I76573d75843d6a63de75d8a9536da98515314543 Reviewed-on: https://chromium-review.googlesource.com/1136940 Reviewed-by: Mike Klein <mtklein@chromium.org> Reviewed-by: Chris Blume <cblume@chromium.org> Commit-Queue: Adenilson Cavalcanti <cavalcantii@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#581241} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: ddbbeb05cb3f0a4c27e7a5d5d0305462db373677
Diffstat (limited to 'deflate.c')
-rw-r--r--deflate.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/deflate.c b/deflate.c
index 6fe9c7e..68d75b2 100644
--- a/deflate.c
+++ b/deflate.c
@@ -51,6 +51,9 @@
#include <assert.h>
#include "deflate.h"
#include "x86.h"
+#if (defined(__ARM_NEON__) || defined(__ARM_NEON))
+#include "contrib/optimizations/slide_hash_neon.h"
+#endif
const char deflate_copyright[] =
" deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler ";
@@ -226,6 +229,10 @@ local INLINE Pos insert_string(deflate_state *const s, const Pos str)
local void slide_hash(s)
deflate_state *s;
{
+#if (defined(__ARM_NEON__) || defined(__ARM_NEON))
+ /* NEON based hash table rebase. */
+ return neon_slide_hash(s->head, s->prev, s->w_size, s->hash_size);
+#endif
unsigned n, m;
Posf *p;
uInt wsize = s->w_size;