made level 10 a bit faster

at the expense of a little bit of compression ratio.

Now speed is intermediate on calgary corpus :
25 - 12 - 8 - 3
This commit is contained in:
Yann Collet 2017-06-13 17:25:29 -07:00
parent a6fd0f9d0b
commit 89b9f026c9

View File

@ -182,7 +182,7 @@ FORCE_INLINE int LZ4HC_InsertAndGetWiderMatch (
const BYTE* const dictBase = hc4->dictBase; const BYTE* const dictBase = hc4->dictBase;
int const delta = (int)(ip-iLowLimit); int const delta = (int)(ip-iLowLimit);
int nbAttempts = maxNbAttempts; int nbAttempts = maxNbAttempts;
U32 matchIndex; U32 matchIndex;
/* First Match */ /* First Match */
@ -192,16 +192,17 @@ FORCE_INLINE int LZ4HC_InsertAndGetWiderMatch (
while ((matchIndex>=lowLimit) && (nbAttempts)) { while ((matchIndex>=lowLimit) && (nbAttempts)) {
nbAttempts--; nbAttempts--;
if (matchIndex >= dictLimit) { if (matchIndex >= dictLimit) {
const BYTE* matchPtr = base + matchIndex; const BYTE* const matchPtr = base + matchIndex;
if (*(iLowLimit + longest) == *(matchPtr - delta + longest)) { if (*(iLowLimit + longest) == *(matchPtr - delta + longest)) {
if (LZ4_read32(matchPtr) == LZ4_read32(ip)) { if (LZ4_read32(matchPtr) == LZ4_read32(ip)) {
int mlt = MINMATCH + LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, iHighLimit); int mlt = MINMATCH + LZ4_count(ip+MINMATCH, matchPtr+MINMATCH, iHighLimit);
int back = 0; int back = 0;
while ((ip+back > iLowLimit) while ( (ip+back > iLowLimit)
&& (matchPtr+back > lowPrefixPtr) && (matchPtr+back > lowPrefixPtr)
&& (ip[back-1] == matchPtr[back-1])) && (ip[back-1] == matchPtr[back-1])) {
back--; back--;
}
mlt -= back; mlt -= back;
@ -548,7 +549,7 @@ static int LZ4HC_compress_generic (
if (limit == limitedDestSize) cLevel = 10; if (limit == limitedDestSize) cLevel = 10;
switch (cLevel) { switch (cLevel) {
case 10: case 10:
return LZ4HC_compress_hashChain(ctx, src, dst, srcSizePtr, dstCapacity, 1 << (15-1), limit); return LZ4HC_compress_hashChain(ctx, src, dst, srcSizePtr, dstCapacity, 1 << 12, limit);
case 11: case 11:
ctx->searchNum = LZ4HC_getSearchNum(cLevel); ctx->searchNum = LZ4HC_getSearchNum(cLevel);
return LZ4HC_compress_optimal(ctx, src, dst, *srcSizePtr, dstCapacity, limit, 128, 0); return LZ4HC_compress_optimal(ctx, src, dst, *srcSizePtr, dstCapacity, limit, 128, 0);