Skip to content

Commit

Permalink
Use character buffer for scan_start and scan_end to fix type-aliasing…
Browse files Browse the repository at this point in the history
… warning. This allows us to also get rid of bestcmp_t type.
  • Loading branch information
nmoinvaz committed Jan 10, 2022
1 parent 7b6b726 commit 70239dc
Showing 1 changed file with 18 additions and 23 deletions.
41 changes: 18 additions & 23 deletions match_tpl.h
Expand Up @@ -54,12 +54,7 @@ Z_INTERNAL uint32_t LONGEST_MATCH(deflate_state *const s, Pos cur_match) {
uint32_t chain_length, nice_match, best_len, offset;
uint32_t lookahead = s->lookahead;
Pos match_offset = 0;
bestcmp_t scan_end;
#ifndef UNALIGNED_OK
bestcmp_t scan_end0;
#else
bestcmp_t scan_start;
#endif
uint8_t scan_start[8], scan_end[8];

#define GOTO_NEXT_CHAIN \
if (--chain_length && (cur_match = prev[cur_match & wmask]) > limit) \
Expand All @@ -86,14 +81,14 @@ Z_INTERNAL uint32_t LONGEST_MATCH(deflate_state *const s, Pos cur_match) {
#endif

#ifdef UNALIGNED64_OK
zmemcpy_8(&scan_start, scan);
zmemcpy_8(&scan_end, scan+offset);
zmemcpy_8(scan_start, scan);
zmemcpy_8(scan_end, scan+offset);
#elif defined(UNALIGNED_OK)
zmemcpy_4(&scan_start, scan);
zmemcpy_4(&scan_end, scan+offset);
zmemcpy_4(scan_start, scan);
zmemcpy_4(scan_end, scan+offset);
#else
scan_end = *(scan+offset);
scan_end0 = *(scan+offset+1);
scan_end[0] = *(scan+offset);
scan_end[1] = *(scan+offset+1);
#endif
mbase_end = (mbase_start+offset);

Expand Down Expand Up @@ -157,31 +152,31 @@ Z_INTERNAL uint32_t LONGEST_MATCH(deflate_state *const s, Pos cur_match) {
#ifdef UNALIGNED_OK
if (best_len < sizeof(uint32_t)) {
for (;;) {
if (zmemcmp_2(mbase_end+cur_match, &scan_end) == 0 &&
zmemcmp_2(mbase_start+cur_match, &scan_start) == 0)
if (zmemcmp_2(mbase_end+cur_match, scan_end) == 0 &&
zmemcmp_2(mbase_start+cur_match, scan_start) == 0)
break;
GOTO_NEXT_CHAIN;
}
# ifdef UNALIGNED64_OK
} else if (best_len >= sizeof(uint64_t)) {
for (;;) {
if (zmemcmp_8(mbase_end+cur_match, &scan_end) == 0 &&
zmemcmp_8(mbase_start+cur_match, &scan_start) == 0)
if (zmemcmp_8(mbase_end+cur_match, scan_end) == 0 &&
zmemcmp_8(mbase_start+cur_match, scan_start) == 0)
break;
GOTO_NEXT_CHAIN;
}
# endif
} else {
for (;;) {
if (zmemcmp_4(mbase_end+cur_match, &scan_end) == 0 &&
zmemcmp_4(mbase_start+cur_match, &scan_start) == 0)
if (zmemcmp_4(mbase_end+cur_match, scan_end) == 0 &&
zmemcmp_4(mbase_start+cur_match, scan_start) == 0)
break;
GOTO_NEXT_CHAIN;
}
}
#else
for (;;) {
if (mbase_end[cur_match] == scan_end && mbase_end[cur_match+1] == scan_end0 &&
if (mbase_end[cur_match] == scan_end[0] && mbase_end[cur_match+1] == scan_end[1] &&
mbase_start[cur_match] == scan[0] && mbase_start[cur_match+1] == scan[1])
break;
GOTO_NEXT_CHAIN;
Expand Down Expand Up @@ -213,12 +208,12 @@ Z_INTERNAL uint32_t LONGEST_MATCH(deflate_state *const s, Pos cur_match) {
#endif

#ifdef UNALIGNED64_OK
zmemcpy_8(&scan_end, scan+offset);
zmemcpy_8(scan_end, scan+offset);
#elif defined(UNALIGNED_OK)
zmemcpy_4(&scan_end, scan+offset);
zmemcpy_4(scan_end, scan+offset);
#else
scan_end = *(scan+offset);
scan_end0 = *(scan+offset+1);
scan_end[0] = *(scan+offset);
scan_end[1] = *(scan+offset+1);
#endif

#ifdef LONGEST_MATCH_SLOW
Expand Down

0 comments on commit 70239dc

Please sign in to comment.