Skip to content

Commit

Permalink
Removed TRIGGER_LEVEL byte masking from INSERT_STRING and UPDATE_HASH…
Browse files Browse the repository at this point in the history
… due to poor performance on levels 6 and 9 especially with optimized versions of UPDATE_HASH.

From commit d306c75:

.. we hash 4 bytes, instead of 3, for certain levels. This shortens the hash chains, and also improves the quality
of each hash entry.
  • Loading branch information
nmoinvaz authored and Dead2 committed Apr 30, 2020
1 parent 51e6950 commit 0129e88
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 17 deletions.
15 changes: 4 additions & 11 deletions insert_string.c
Expand Up @@ -17,17 +17,10 @@

#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86)
# define UPDATE_HASH(s, h, val) \
do {\
if (s->level < TRIGGER_LEVEL)\
h = (3483 * ((val) & 0xff) +\
23081* (((val) >> 8) & 0xff) +\
6954 * (((val) >> 16) & 0xff) +\
20947* (((val) >> 24) & 0xff));\
else\
h = (25881* (((val)) & 0xff) +\
24674* (((val) >> 8) & 0xff) +\
25811* (((val) >> 16) & 0xff));\
} while (0)
h = (3483 * ((val) & 0xff) +\
23081 * (((val) >> 8) & 0xff) +\
6954 * (((val) >> 16) & 0xff) +\
20947 * (((val) >> 24) & 0xff));
#else
# define UPDATE_HASH(s, h, val)\
h = (s->ins_h = ((s->ins_h << s->hash_shift) ^ ((val) >> ((MIN_MATCH - 1) * 8))) & s->hash_mask)
Expand Down
6 changes: 0 additions & 6 deletions insert_string_tpl.h
Expand Up @@ -41,9 +41,6 @@ ZLIB_INTERNAL Pos QUICK_INSERT_STRING(deflate_state *const s, const Pos str) {
val |= ((uint32_t)s->window[str+3] << 24);
#endif

if (s->level >= TRIGGER_LEVEL)
val &= 0xFFFFFF;

UPDATE_HASH(s, h, val);
hm = h & s->hash_mask;

Expand Down Expand Up @@ -87,9 +84,6 @@ ZLIB_INTERNAL Pos INSERT_STRING(deflate_state *const s, const Pos str, unsigned
val |= ((uint32_t)(strstart[3]) << 24);
#endif

if (s->level >= TRIGGER_LEVEL)
val &= 0xFFFFFF;

UPDATE_HASH(s, h, val);
hm = h & s->hash_mask;

Expand Down

0 comments on commit 0129e88

Please sign in to comment.