]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Improved decompression speed (by @inikep)
authorYann Collet <yann.collet.73@gmail.com>
Thu, 17 Mar 2016 11:11:16 +0000 (12:11 +0100)
committerYann Collet <yann.collet.73@gmail.com>
Thu, 17 Mar 2016 11:11:16 +0000 (12:11 +0100)
lib/zstd_decompress.c

index 2d89a2de8b381aef2521dfb34867d0b15cc47700..17ba5822e51462b8acd088f54012983a145ab259 100644 (file)
@@ -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 */
     }