improved level 3
This commit is contained in:
parent
17e482efdd
commit
c54692faeb
@ -1232,9 +1232,20 @@ void ZSTD_compressBlock_doubleFast_generic(ZSTD_CCtx* cctx,
|
|||||||
offset = (U32)(ip-matchLong);
|
offset = (U32)(ip-matchLong);
|
||||||
while (((ip>anchor) & (matchLong>lowest)) && (ip[-1] == matchLong[-1])) { ip--; matchLong--; mLength++; } /* catch up */
|
while (((ip>anchor) & (matchLong>lowest)) && (ip[-1] == matchLong[-1])) { ip--; matchLong--; mLength++; } /* catch up */
|
||||||
} else if ( (matchIndexS > lowestIndex) && (MEM_read32(match) == MEM_read32(ip)) ) {
|
} else if ( (matchIndexS > lowestIndex) && (MEM_read32(match) == MEM_read32(ip)) ) {
|
||||||
mLength = ZSTD_count(ip+4, match+4, iend) + 4;
|
size_t const h3 = ZSTD_hashPtr(ip+1, hBitsL, 8);
|
||||||
offset = (U32)(ip-match);
|
U32 const matchIndex3 = hashLong[h3];
|
||||||
while (((ip>anchor) & (match>lowest)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
|
const BYTE* match3 = base + matchIndex3;
|
||||||
|
hashLong[h3] = current + 1;
|
||||||
|
if ( (matchIndex3 > lowestIndex) && (MEM_read64(match3) == MEM_read64(ip+1)) ) {
|
||||||
|
mLength = ZSTD_count(ip+9, match3+8, iend) + 8;
|
||||||
|
ip++;
|
||||||
|
offset = (U32)(ip-match3);
|
||||||
|
while (((ip>anchor) & (match3>lowest)) && (ip[-1] == match3[-1])) { ip--; match3--; mLength++; } /* catch up */
|
||||||
|
} else {
|
||||||
|
mLength = ZSTD_count(ip+4, match+4, iend) + 4;
|
||||||
|
offset = (U32)(ip-match);
|
||||||
|
while (((ip>anchor) & (match>lowest)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ip += ((ip-anchor) >> g_searchStrength) + 1;
|
ip += ((ip-anchor) >> g_searchStrength) + 1;
|
||||||
continue;
|
continue;
|
||||||
@ -1361,16 +1372,32 @@ static void ZSTD_compressBlock_doubleFast_extDict_generic(ZSTD_CCtx* ctx,
|
|||||||
offset_2 = offset_1;
|
offset_2 = offset_1;
|
||||||
offset_1 = offset;
|
offset_1 = offset;
|
||||||
ZSTD_storeSeq(seqStorePtr, ip-anchor, anchor, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
|
ZSTD_storeSeq(seqStorePtr, ip-anchor, anchor, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
|
||||||
|
|
||||||
} else if ((matchIndex > lowestIndex) && (MEM_read32(match) == MEM_read32(ip))) {
|
} else if ((matchIndex > lowestIndex) && (MEM_read32(match) == MEM_read32(ip))) {
|
||||||
const BYTE* matchEnd = matchIndex < dictLimit ? dictEnd : iend;
|
size_t const h3 = ZSTD_hashPtr(ip+1, hBitsL, 8);
|
||||||
const BYTE* lowMatchPtr = matchIndex < dictLimit ? dictStart : lowPrefixPtr;
|
U32 const matchIndex3 = hashLong[h3];
|
||||||
|
const BYTE* const match3Base = matchIndex3 < dictLimit ? dictBase : base;
|
||||||
|
const BYTE* match3 = match3Base + matchIndex3;
|
||||||
U32 offset;
|
U32 offset;
|
||||||
mLength = ZSTD_count_2segments(ip+4, match+4, iend, matchEnd, lowPrefixPtr) + 4;
|
hashLong[h3] = current + 1;
|
||||||
while (((ip>anchor) & (match>lowMatchPtr)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
|
if ( (matchIndex3 > lowestIndex) && (MEM_read64(match3) == MEM_read64(ip+1)) ) {
|
||||||
offset = current - matchIndex;
|
const BYTE* matchEnd = matchIndex3 < dictLimit ? dictEnd : iend;
|
||||||
|
const BYTE* lowMatchPtr = matchIndex3 < dictLimit ? dictStart : lowPrefixPtr;
|
||||||
|
mLength = ZSTD_count_2segments(ip+9, match3+8, iend, matchEnd, lowPrefixPtr) + 8;
|
||||||
|
ip++;
|
||||||
|
offset = current+1 - matchIndex3;
|
||||||
|
while (((ip>anchor) & (match3>lowMatchPtr)) && (ip[-1] == match3[-1])) { ip--; match3--; mLength++; } /* catch up */
|
||||||
|
} else {
|
||||||
|
const BYTE* matchEnd = matchIndex < dictLimit ? dictEnd : iend;
|
||||||
|
const BYTE* lowMatchPtr = matchIndex < dictLimit ? dictStart : lowPrefixPtr;
|
||||||
|
mLength = ZSTD_count_2segments(ip+4, match+4, iend, matchEnd, lowPrefixPtr) + 4;
|
||||||
|
offset = current - matchIndex;
|
||||||
|
while (((ip>anchor) & (match>lowMatchPtr)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
|
||||||
|
}
|
||||||
offset_2 = offset_1;
|
offset_2 = offset_1;
|
||||||
offset_1 = offset;
|
offset_1 = offset;
|
||||||
ZSTD_storeSeq(seqStorePtr, ip-anchor, anchor, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
|
ZSTD_storeSeq(seqStorePtr, ip-anchor, anchor, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ip += ((ip-anchor) >> g_searchStrength) + 1;
|
ip += ((ip-anchor) >> g_searchStrength) + 1;
|
||||||
continue;
|
continue;
|
||||||
@ -3043,7 +3070,7 @@ static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEV
|
|||||||
{ 18, 12, 12, 1, 7, 16, ZSTD_fast }, /* level 0 - not used */
|
{ 18, 12, 12, 1, 7, 16, ZSTD_fast }, /* level 0 - not used */
|
||||||
{ 19, 13, 14, 1, 7, 16, ZSTD_fast }, /* level 1 */
|
{ 19, 13, 14, 1, 7, 16, ZSTD_fast }, /* level 1 */
|
||||||
{ 19, 15, 16, 1, 6, 16, ZSTD_fast }, /* level 2 */
|
{ 19, 15, 16, 1, 6, 16, ZSTD_fast }, /* level 2 */
|
||||||
{ 20, 16, 18, 1, 5, 16, ZSTD_dfast }, /* level 3 */
|
{ 20, 16, 17, 1, 5, 16, ZSTD_dfast }, /* level 3 */
|
||||||
{ 20, 13, 17, 2, 5, 16, ZSTD_greedy }, /* level 4.*/
|
{ 20, 13, 17, 2, 5, 16, ZSTD_greedy }, /* level 4.*/
|
||||||
{ 20, 15, 18, 3, 5, 16, ZSTD_greedy }, /* level 5 */
|
{ 20, 15, 18, 3, 5, 16, ZSTD_greedy }, /* level 5 */
|
||||||
{ 21, 16, 19, 2, 5, 16, ZSTD_lazy }, /* level 6 */
|
{ 21, 16, 19, 2, 5, 16, ZSTD_lazy }, /* level 6 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user