]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
minor decompression speed gains
authorYann Collet <yann.collet.73@gmail.com>
Sat, 30 Jul 2016 01:20:47 +0000 (03:20 +0200)
committerYann Collet <yann.collet.73@gmail.com>
Sat, 30 Jul 2016 01:20:47 +0000 (03:20 +0200)
lib/compress/zstd_compress.c
lib/decompress/zstd_decompress.c

index 07f23b5ab4ee4c9312b68ed44e48baa2efbe5292..d43054d86a8a6f7ab94c5ec923c7eb4368e4bbed 100644 (file)
@@ -707,12 +707,12 @@ size_t ZSTD_compressSequences(ZSTD_CCtx* zc,
 
         {   size_t n;
             for (n=nbSeq-2 ; n<nbSeq ; n--) {      /* intentional underflow */
+                BYTE const llCode = llCodeTable[n];
                 BYTE const ofCode = ofCodeTable[n];
                 BYTE const mlCode = mlCodeTable[n];
-                BYTE const llCode = llCodeTable[n];
                 U32  const llBits = LL_bits[llCode];
-                U32  const mlBits = ML_bits[mlCode];
                 U32  const ofBits = ofCode;                                     /* 32b*/  /* 64b*/
+                U32  const mlBits = ML_bits[mlCode];
                                                                                 /* (7)*/  /* (7)*/
                 FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode);       /* 15 */  /* 15 */
                 FSE_encodeSymbol(&blockStream, &stateMatchLength, mlCode);      /* 24 */  /* 24 */
@@ -724,7 +724,7 @@ size_t ZSTD_compressSequences(ZSTD_CCtx* zc,
                 if (MEM_32bits() && ((llBits+mlBits)>24)) BIT_flushBits(&blockStream);
                 BIT_addBits(&blockStream, sequences[n].matchLength, mlBits);
                 if (MEM_32bits()) BIT_flushBits(&blockStream);                  /* (7)*/
-                BIT_addBits(&blockStream, sequences[n].offset, ofBits);              /* 31 */
+                BIT_addBits(&blockStream, sequences[n].offset, ofBits);         /* 31 */
                 BIT_flushBits(&blockStream);                                    /* (7)*/
         }   }
 
index e1ac2004923f96eb6502c1b13a770578e03ea1f5..a73543ced6af1856bad8fff0265382034655f729 100644 (file)
@@ -583,7 +583,7 @@ typedef struct {
     FSE_DState_t stateLL;
     FSE_DState_t stateOffb;
     FSE_DState_t stateML;
-    size_t prevOffset[ZSTD_REP_NUM];
+    U32 prevOffset[ZSTD_REP_NUM];
 } seqState_t;
 
 
@@ -629,7 +629,7 @@ static seq_t ZSTD_decodeSequence(seqState_t* seqState)
         if (ofCode <= 1) {
             if ((llCode == 0) & (offset <= 1)) offset = 1-offset;
             if (offset) {
-                size_t const temp = seqState->prevOffset[offset];
+                U32 const temp = seqState->prevOffset[offset];
                 if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
                 seqState->prevOffset[1] = seqState->prevOffset[0];
                 seqState->prevOffset[0] = offset = temp;
@@ -639,7 +639,7 @@ static seq_t ZSTD_decodeSequence(seqState_t* seqState)
         } else {
             seqState->prevOffset[2] = seqState->prevOffset[1];
             seqState->prevOffset[1] = seqState->prevOffset[0];
-            seqState->prevOffset[0] = offset;
+            seqState->prevOffset[0] = (U32)offset;
         }
         seq.offset = offset;
     }
@@ -763,7 +763,7 @@ static size_t ZSTD_decompressSequences(
     if (nbSeq) {
         seqState_t seqState;
         dctx->fseEntropy = 1;
-        { U32 i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->rep[i]; }
+        memcpy(seqState.prevOffset, dctx->rep, sizeof(seqState.prevOffset));
         { size_t const errorCode = BIT_initDStream(&(seqState.DStream), ip, iend-ip);
           if (ERR_isError(errorCode)) return ERROR(corruption_detected); }
         FSE_initDState(&(seqState.stateLL), &(seqState.DStream), DTableLL);
@@ -781,7 +781,7 @@ static size_t ZSTD_decompressSequences(
         /* check if reached exact end */
         if (nbSeq) return ERROR(corruption_detected);
         /* save reps for next block */
-        { U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->rep[i] = (U32)(seqState.prevOffset[i]); }
+        memcpy(dctx->rep, seqState.prevOffset, sizeof(seqState.prevOffset));
     }
 
     /* last literal segment */