From: Yann Collet Date: Sat, 30 Jul 2016 01:20:47 +0000 (+0200) Subject: minor decompression speed gains X-Git-Tag: v0.8.0^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c6b808870672c0d20566ffd62c0725e0f470d23;p=thirdparty%2Fzstd.git minor decompression speed gains --- diff --git a/lib/compress/zstd_compress.c b/lib/compress/zstd_compress.c index 07f23b5ab..d43054d86 100644 --- a/lib/compress/zstd_compress.c +++ b/lib/compress/zstd_compress.c @@ -707,12 +707,12 @@ size_t ZSTD_compressSequences(ZSTD_CCtx* zc, { size_t n; for (n=nbSeq-2 ; n24)) 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)*/ } } diff --git a/lib/decompress/zstd_decompress.c b/lib/decompress/zstd_decompress.c index e1ac20049..a73543ced 100644 --- a/lib/decompress/zstd_decompress.c +++ b/lib/decompress/zstd_decompress.c @@ -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; irep[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; irep[i] = (U32)(seqState.prevOffset[i]); } + memcpy(dctx->rep, seqState.prevOffset, sizeof(seqState.prevOffset)); } /* last literal segment */