From: Yann Collet Date: Thu, 17 Mar 2016 11:11:16 +0000 (+0100) Subject: Improved decompression speed (by @inikep) X-Git-Tag: v0.6.0^2~17^2~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b40287aaef3c13da55ae4f5b80e34fe59eb629d4;p=thirdparty%2Fzstd.git Improved decompression speed (by @inikep) --- diff --git a/lib/zstd_decompress.c b/lib/zstd_decompress.c index 2d89a2de8..17ba5822e 100644 --- a/lib/zstd_decompress.c +++ b/lib/zstd_decompress.c @@ -654,16 +654,12 @@ typedef struct { static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState, const U32 mls) { - size_t litLength; - size_t prevOffset; - size_t offset; - size_t matchLength; const BYTE* dumps = seqState->dumps; const BYTE* const de = seqState->dumpsEnd; + size_t litLength, offset, matchLength; /* Literal length */ litLength = FSE_peakSymbol(&(seqState->stateLL)); - prevOffset = litLength ? seq->offset : seqState->prevOffset; if (litLength == MaxLL) { U32 add = *dumps++; if (add < 255) litLength += add; @@ -686,7 +682,7 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState, const U32 mls) if (offsetCode==0) nbBits = 0; /* cmove */ offset = offsetPrefix[offsetCode] + BIT_readBits(&(seqState->DStream), nbBits); if (MEM_32bits()) BIT_reloadDStream(&(seqState->DStream)); - if (offsetCode==0) offset = prevOffset; /* repcode, cmove */ + if (offsetCode==0) offset = litLength ? seq->offset : seqState->prevOffset; if (offsetCode | !litLength) seqState->prevOffset = seq->offset; /* cmove */ FSE_decodeSymbol(&(seqState->stateOffb), &(seqState->DStream)); /* update */ }