From: inikep Date: Wed, 2 Mar 2016 13:36:41 +0000 (+0100) Subject: improved price function initialization X-Git-Tag: v0.6.0^2~17^2~91^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=338533f741f79439662e05a1a3b7d77cd8eaa050;p=thirdparty%2Fzstd.git improved price function initialization --- diff --git a/lib/zstd_opt_internal.h b/lib/zstd_opt_internal.h index 576f4115c..f0a0e69e9 100644 --- a/lib/zstd_opt_internal.h +++ b/lib/zstd_opt_internal.h @@ -41,8 +41,6 @@ *********************************************/ /*- Constants -*/ #define ZSTD_OPT_NUM (1<<12) -#define ZSTD_FREQ_START 1 -#define ZSTD_FREQ_STEP 1 #define ZSTD_FREQ_DIV 5 @@ -66,74 +64,75 @@ MEM_STATIC void ZSTD_rescaleFreqs(seqStore_t* ssPtr) unsigned u; if (ssPtr->litLengthSum == 0) { - ssPtr->matchLengthSum = ZSTD_FREQ_START*(1<litLengthSum = ZSTD_FREQ_START*(1<litSum = ZSTD_FREQ_START*(1<offCodeSum = ZSTD_FREQ_START*(1<matchSum = ssPtr->litSum; - + ssPtr->litSum = 2*(1<litLengthSum = 1*(1<matchLengthSum = 1*(1<offCodeSum = 1*(1<matchSum = 2*(1<litFreq[u] = ZSTD_FREQ_START; + ssPtr->litFreq[u] = 2; for (u=0; u<=MaxLL; u++) - ssPtr->litLengthFreq[u] = ZSTD_FREQ_START; + ssPtr->litLengthFreq[u] = 1; for (u=0; u<=MaxML; u++) - ssPtr->matchLengthFreq[u] = ZSTD_FREQ_START; + ssPtr->matchLengthFreq[u] = 1; for (u=0; u<=MaxOff; u++) - ssPtr->offCodeFreq[u] = ZSTD_FREQ_START; + ssPtr->offCodeFreq[u] = 1; } else { ssPtr->matchLengthSum = 0; ssPtr->litLengthSum = 0; - ssPtr->litSum = 0; ssPtr->offCodeSum = 0; ssPtr->matchSum = 0; + ssPtr->litSum = 0; for (u=0; u<=MaxLit; u++) { - ssPtr->litFreq[u] = ZSTD_FREQ_START + (ssPtr->litFreq[u]>>ZSTD_FREQ_DIV); + ssPtr->litFreq[u] = 1 + (ssPtr->litFreq[u]>>ZSTD_FREQ_DIV); ssPtr->litSum += ssPtr->litFreq[u]; } for (u=0; u<=MaxLL; u++) { - ssPtr->litLengthFreq[u] = ZSTD_FREQ_START + (ssPtr->litLengthFreq[u]>>ZSTD_FREQ_DIV); + ssPtr->litLengthFreq[u] = 1 + (ssPtr->litLengthFreq[u]>>ZSTD_FREQ_DIV); ssPtr->litLengthSum += ssPtr->litLengthFreq[u]; } for (u=0; u<=MaxML; u++) { - ssPtr->matchLengthFreq[u] = ZSTD_FREQ_START + (ssPtr->matchLengthFreq[u]>>ZSTD_FREQ_DIV); + ssPtr->matchLengthFreq[u] = 1 + (ssPtr->matchLengthFreq[u]>>ZSTD_FREQ_DIV); ssPtr->matchLengthSum += ssPtr->matchLengthFreq[u]; ssPtr->matchSum += ssPtr->matchLengthFreq[u] * (u + 3); } for (u=0; u<=MaxOff; u++) { - ssPtr->offCodeFreq[u] = ZSTD_FREQ_START + (ssPtr->offCodeFreq[u]>>ZSTD_FREQ_DIV); + ssPtr->offCodeFreq[u] = 1 + (ssPtr->offCodeFreq[u]>>ZSTD_FREQ_DIV); ssPtr->offCodeSum += ssPtr->offCodeFreq[u]; } } } + MEM_STATIC void ZSTD_updatePrice(seqStore_t* seqStorePtr, U32 litLength, const BYTE* literals, U32 offset, U32 matchLength) { U32 u; /* literals */ - seqStorePtr->litSum += litLength * ZSTD_FREQ_STEP; + seqStorePtr->litSum += litLength; for (u=0; u < litLength; u++) - seqStorePtr->litFreq[literals[u]] += ZSTD_FREQ_STEP; + seqStorePtr->litFreq[literals[u]]++; /* literal Length */ - seqStorePtr->litLengthSum += ZSTD_FREQ_STEP; + seqStorePtr->litLengthSum++; if (litLength >= MaxLL) - seqStorePtr->litLengthFreq[MaxLL] += ZSTD_FREQ_STEP; + seqStorePtr->litLengthFreq[MaxLL]++; else - seqStorePtr->litLengthFreq[litLength] += ZSTD_FREQ_STEP; + seqStorePtr->litLengthFreq[litLength]++; /* match offset */ - seqStorePtr->offCodeSum += ZSTD_FREQ_STEP; + seqStorePtr->offCodeSum++; BYTE offCode = offset ? (BYTE)ZSTD_highbit(offset+1) + 1 : 0; - seqStorePtr->offCodeFreq[offCode] += ZSTD_FREQ_STEP; + seqStorePtr->offCodeFreq[offCode]++; /* match Length */ - seqStorePtr->matchLengthSum += ZSTD_FREQ_STEP; + seqStorePtr->matchLengthSum++; if (matchLength >= MaxML) - seqStorePtr->matchLengthFreq[MaxML] += ZSTD_FREQ_STEP; + seqStorePtr->matchLengthFreq[MaxML]++; else - seqStorePtr->matchLengthFreq[matchLength] += ZSTD_FREQ_STEP; + seqStorePtr->matchLengthFreq[matchLength]++; } FORCE_INLINE U32 ZSTD_getLiteralPrice(seqStore_t* seqStorePtr, U32 litLength, const BYTE* literals)