minor decompression speed gains
This commit is contained in:
@@ -707,12 +707,12 @@ size_t ZSTD_compressSequences(ZSTD_CCtx* zc,
|
|||||||
|
|
||||||
{ size_t n;
|
{ size_t n;
|
||||||
for (n=nbSeq-2 ; n<nbSeq ; n--) { /* intentional underflow */
|
for (n=nbSeq-2 ; n<nbSeq ; n--) { /* intentional underflow */
|
||||||
|
BYTE const llCode = llCodeTable[n];
|
||||||
BYTE const ofCode = ofCodeTable[n];
|
BYTE const ofCode = ofCodeTable[n];
|
||||||
BYTE const mlCode = mlCodeTable[n];
|
BYTE const mlCode = mlCodeTable[n];
|
||||||
BYTE const llCode = llCodeTable[n];
|
|
||||||
U32 const llBits = LL_bits[llCode];
|
U32 const llBits = LL_bits[llCode];
|
||||||
U32 const mlBits = ML_bits[mlCode];
|
|
||||||
U32 const ofBits = ofCode; /* 32b*/ /* 64b*/
|
U32 const ofBits = ofCode; /* 32b*/ /* 64b*/
|
||||||
|
U32 const mlBits = ML_bits[mlCode];
|
||||||
/* (7)*/ /* (7)*/
|
/* (7)*/ /* (7)*/
|
||||||
FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode); /* 15 */ /* 15 */
|
FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode); /* 15 */ /* 15 */
|
||||||
FSE_encodeSymbol(&blockStream, &stateMatchLength, mlCode); /* 24 */ /* 24 */
|
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);
|
if (MEM_32bits() && ((llBits+mlBits)>24)) BIT_flushBits(&blockStream);
|
||||||
BIT_addBits(&blockStream, sequences[n].matchLength, mlBits);
|
BIT_addBits(&blockStream, sequences[n].matchLength, mlBits);
|
||||||
if (MEM_32bits()) BIT_flushBits(&blockStream); /* (7)*/
|
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)*/
|
BIT_flushBits(&blockStream); /* (7)*/
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
|||||||
@@ -583,7 +583,7 @@ typedef struct {
|
|||||||
FSE_DState_t stateLL;
|
FSE_DState_t stateLL;
|
||||||
FSE_DState_t stateOffb;
|
FSE_DState_t stateOffb;
|
||||||
FSE_DState_t stateML;
|
FSE_DState_t stateML;
|
||||||
size_t prevOffset[ZSTD_REP_NUM];
|
U32 prevOffset[ZSTD_REP_NUM];
|
||||||
} seqState_t;
|
} seqState_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -629,7 +629,7 @@ static seq_t ZSTD_decodeSequence(seqState_t* seqState)
|
|||||||
if (ofCode <= 1) {
|
if (ofCode <= 1) {
|
||||||
if ((llCode == 0) & (offset <= 1)) offset = 1-offset;
|
if ((llCode == 0) & (offset <= 1)) offset = 1-offset;
|
||||||
if (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];
|
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
|
||||||
seqState->prevOffset[1] = seqState->prevOffset[0];
|
seqState->prevOffset[1] = seqState->prevOffset[0];
|
||||||
seqState->prevOffset[0] = offset = temp;
|
seqState->prevOffset[0] = offset = temp;
|
||||||
@@ -639,7 +639,7 @@ static seq_t ZSTD_decodeSequence(seqState_t* seqState)
|
|||||||
} else {
|
} else {
|
||||||
seqState->prevOffset[2] = seqState->prevOffset[1];
|
seqState->prevOffset[2] = seqState->prevOffset[1];
|
||||||
seqState->prevOffset[1] = seqState->prevOffset[0];
|
seqState->prevOffset[1] = seqState->prevOffset[0];
|
||||||
seqState->prevOffset[0] = offset;
|
seqState->prevOffset[0] = (U32)offset;
|
||||||
}
|
}
|
||||||
seq.offset = offset;
|
seq.offset = offset;
|
||||||
}
|
}
|
||||||
@@ -763,7 +763,7 @@ static size_t ZSTD_decompressSequences(
|
|||||||
if (nbSeq) {
|
if (nbSeq) {
|
||||||
seqState_t seqState;
|
seqState_t seqState;
|
||||||
dctx->fseEntropy = 1;
|
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);
|
{ size_t const errorCode = BIT_initDStream(&(seqState.DStream), ip, iend-ip);
|
||||||
if (ERR_isError(errorCode)) return ERROR(corruption_detected); }
|
if (ERR_isError(errorCode)) return ERROR(corruption_detected); }
|
||||||
FSE_initDState(&(seqState.stateLL), &(seqState.DStream), DTableLL);
|
FSE_initDState(&(seqState.stateLL), &(seqState.DStream), DTableLL);
|
||||||
@@ -781,7 +781,7 @@ static size_t ZSTD_decompressSequences(
|
|||||||
/* check if reached exact end */
|
/* check if reached exact end */
|
||||||
if (nbSeq) return ERROR(corruption_detected);
|
if (nbSeq) return ERROR(corruption_detected);
|
||||||
/* save reps for next block */
|
/* 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 */
|
/* last literal segment */
|
||||||
|
|||||||
Reference in New Issue
Block a user