Skip to content

Commit

Permalink
speed up encoding by ~5 %
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 505061835
  • Loading branch information
Brotli authored and eustas committed Jan 30, 2023
1 parent 36533a8 commit 1e61e97
Showing 1 changed file with 13 additions and 21 deletions.
34 changes: 13 additions & 21 deletions c/enc/find_match_length.h
Expand Up @@ -22,31 +22,23 @@ extern "C" {
static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
const uint8_t* s2,
size_t limit) {
size_t matched = 0;
size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */
while (BROTLI_PREDICT_TRUE(--limit2)) {
if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) ==
BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) {
s2 += 8;
matched += 8;
} else {
uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
BROTLI_UNALIGNED_LOAD64LE(s1 + matched);
const uint8_t *s1_orig = s1;
for (; limit >= 8; limit -= 8) {
uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
BROTLI_UNALIGNED_LOAD64LE(s1);
s2 += 8;
if (x != 0) {
size_t matching_bits = (size_t)BROTLI_TZCNT64(x);
matched += matching_bits >> 3;
return matched;
return (size_t)(s1 - s1_orig) + (matching_bits >> 3);
}
s1 += 8;
}
limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */
while (--limit) {
if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) {
++s2;
++matched;
} else {
return matched;
}
while (limit && *s1 == *s2) {
limit--;
++s2;
++s1;
}
return matched;
return (size_t)(s1 - s1_orig);
}
#else
static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
Expand Down

0 comments on commit 1e61e97

Please sign in to comment.