From: inikep Date: Thu, 7 Apr 2016 09:35:17 +0000 (+0200) Subject: minor speed improvements X-Git-Tag: v0.6.0^2~17^2~16^2^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81a345b0cefbf70d14d56264df06194dd2bf1597;p=thirdparty%2Fzstd.git minor speed improvements --- diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index 409737354..d353c3936 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -1319,6 +1319,7 @@ size_t ZSTD_HcFindBestMatch_generic ( const U32 minMatch = (mls == 3) ? 3 : 4; size_t ml=minMatch-1; +#if 0 if (minMatch == 3) { /* HC3 match finder */ U32 const matchIndex3 = ZSTD_insertAndFindFirstIndexHash3 (zc, ip); if (matchIndex3>lowLimit && current - matchIndex3<(1<<18)) { @@ -1326,8 +1327,7 @@ size_t ZSTD_HcFindBestMatch_generic ( size_t currentMl=0; if ((!extDict) || matchIndex3 >= dictLimit) { match = base + matchIndex3; - if (match[ml] == ip[ml]) /* potentially better */ - currentMl = ZSTD_count(ip, match, iLimit); + if (match[ml] == ip[ml]) currentMl = ZSTD_count(ip, match, iLimit); /* potentially better */ } else { match = dictBase + matchIndex3; if (MEM_readMINMATCH(match, MINMATCH) == MEM_readMINMATCH(ip, MINMATCH)) /* assumption : matchIndex3 <= dictLimit-4 (by table construction) */ @@ -1335,9 +1335,12 @@ size_t ZSTD_HcFindBestMatch_generic ( } /* save best solution */ - if (currentMl > ml) { ml = currentMl; *offsetPtr = ZSTD_REP_MOVE + current - matchIndex3; if (ip+currentMl == iLimit) return (ml>=MINMATCH) ? ml : 0; /* best possible, and avoid read overflow*/ } - } + if (currentMl > ml) { + ml = currentMl; *offsetPtr = ZSTD_REP_MOVE + current - matchIndex3; + if (ip+currentMl == iLimit) return (ml>=MINMATCH) ? ml : 0; /* best possible, and avoid read overflow*/ + } } } +#endif /* HC4 match finder */ U32 matchIndex = ZSTD_insertAndFindFirstIndex (zc, ip, mls); @@ -1536,7 +1539,7 @@ static size_t ZSTD_insertBtAndFindBestMatch ( size_t bestLength = minMatch-1; if (minMatch == 3) { /* HC3 match finder */ - U32 matchIndex3 = ZSTD_insertAndFindFirstIndexHash3 (zc, ip); + U32 const matchIndex3 = ZSTD_insertAndFindFirstIndexHash3 (zc, ip); if (matchIndex3>windowLow && (current - matchIndex3 < (1<<18))) { const BYTE* match; size_t currentMl=0; @@ -1545,8 +1548,8 @@ static size_t ZSTD_insertBtAndFindBestMatch ( if (match[bestLength] == ip[bestLength]) currentMl = ZSTD_count(ip, match, iend); } else { match = dictBase + matchIndex3; - if (MEM_readMINMATCH(match, minMatch) == MEM_readMINMATCH(ip, minMatch)) /* assumption : matchIndex3 <= dictLimit-4 (by table construction) */ - currentMl = ZSTD_count_2segments(ip+minMatch, match+minMatch, iend, dictEnd, prefixStart) + minMatch; + if (MEM_readMINMATCH(match, MINMATCH) == MEM_readMINMATCH(ip, MINMATCH)) /* assumption : matchIndex3 <= dictLimit-4 (by table construction) */ + currentMl = ZSTD_count_2segments(ip+MINMATCH, match+MINMATCH, iend, dictEnd, prefixStart) + MINMATCH; } /* save best solution */ diff --git a/lib/zstd_opt.h b/lib/zstd_opt.h index 88d7a6975..2c7df9f59 100644 --- a/lib/zstd_opt.h +++ b/lib/zstd_opt.h @@ -247,8 +247,7 @@ static U32 ZSTD_insertBtAndGetAllMatches ( size_t bestLength = minMatch-1; if (minMatch == 3) { /* HC3 match finder */ - U32 matchIndex3 = ZSTD_insertAndFindFirstIndexHash3 (zc, ip); - + U32 const matchIndex3 = ZSTD_insertAndFindFirstIndexHash3 (zc, ip); if (matchIndex3>windowLow && (current - matchIndex3 < (1<<18))) { const BYTE* match; size_t currentMl=0; @@ -257,8 +256,8 @@ static U32 ZSTD_insertBtAndGetAllMatches ( if (match[bestLength] == ip[bestLength]) currentMl = ZSTD_count(ip, match, iLimit); } else { match = dictBase + matchIndex3; - if (MEM_readMINMATCH(match, minMatch) == MEM_readMINMATCH(ip, minMatch)) /* assumption : matchIndex3 <= dictLimit-4 (by table construction) */ - currentMl = ZSTD_count_2segments(ip+minMatch, match+minMatch, iLimit, dictEnd, prefixStart) + minMatch; + if (MEM_readMINMATCH(match, MINMATCH) == MEM_readMINMATCH(ip, MINMATCH)) /* assumption : matchIndex3 <= dictLimit-4 (by table construction) */ + currentMl = ZSTD_count_2segments(ip+MINMATCH, match+MINMATCH, iLimit, dictEnd, prefixStart) + MINMATCH; } /* save best solution */