mirror of
https://github.com/facebook/zstd.git
synced 2025-10-08 00:04:02 -04:00
Hoist Hash Table Writes Up into Each Match Found Block
Refactoring this way avoids the bad write in the case that `step > 4`, and is a bit more straightforward. It also seems to perform better!
This commit is contained in:
parent
040986a4f4
commit
cd1f582943
@ -182,6 +182,10 @@ _start: /* Requires: ip0 */
|
||||
match0 -= mLength;
|
||||
offcode = REPCODE1_TO_OFFBASE;
|
||||
mLength += 4;
|
||||
|
||||
/* first write next hash table entry; we've already calculated it */
|
||||
hashTable[hash1] = (U32)(ip1 - base);
|
||||
|
||||
goto _match;
|
||||
}
|
||||
|
||||
@ -195,6 +199,10 @@ _start: /* Requires: ip0 */
|
||||
/* check match at ip[0] */
|
||||
if (MEM_read32(ip0) == mval) {
|
||||
/* found a match! */
|
||||
|
||||
/* first write next hash table entry; we've already calculated it */
|
||||
hashTable[hash1] = (U32)(ip1 - base);
|
||||
|
||||
goto _offset;
|
||||
}
|
||||
|
||||
@ -224,7 +232,9 @@ _start: /* Requires: ip0 */
|
||||
/* check match at ip[0] */
|
||||
if (MEM_read32(ip0) == mval) {
|
||||
/* found a match! */
|
||||
if (step > 4) {
|
||||
|
||||
/* first write next hash table entry; we've already calculated it */
|
||||
if (step <= 4) {
|
||||
/* We need to avoid writing an index into the hash table >= the
|
||||
* position at which we will pick up our searching after we've
|
||||
* taken this match.
|
||||
@ -239,8 +249,9 @@ _start: /* Requires: ip0 */
|
||||
* this is the only match path where this can occur. (In rep-
|
||||
* code and the first match checks, ip1 == ip0 + 1.)
|
||||
*/
|
||||
ip1 = base;
|
||||
hashTable[hash1] = (U32)(ip1 - base);
|
||||
}
|
||||
|
||||
goto _offset;
|
||||
}
|
||||
|
||||
@ -304,9 +315,6 @@ _match: /* Requires: ip0, match0, offcode */
|
||||
ip0 += mLength;
|
||||
anchor = ip0;
|
||||
|
||||
/* write next hash table entry */
|
||||
hashTable[hash1] = (U32)(ip1 - base);
|
||||
|
||||
/* Fill table and check for immediate repcode. */
|
||||
if (ip0 <= ilimit) {
|
||||
/* Fill Table */
|
||||
|
Loading…
x
Reference in New Issue
Block a user