Merge branch 'dev060' of github.com:Cyan4973/zstd into dev060
This commit is contained in:
commit
2486371008
25
lib/mem.h
25
lib/mem.h
@ -187,17 +187,6 @@ MEM_STATIC void MEM_write64(void* memPtr, U64 value)
|
|||||||
|
|
||||||
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
||||||
|
|
||||||
|
|
||||||
MEM_STATIC U32 MEM_readMINMATCH(const void* memPtr, U32 length)
|
|
||||||
{
|
|
||||||
switch (length)
|
|
||||||
{
|
|
||||||
default :
|
|
||||||
case 4 : return MEM_read32(memPtr);
|
|
||||||
case 3 : return MEM_read32(memPtr)<<8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
||||||
{
|
{
|
||||||
if (MEM_isLittleEndian())
|
if (MEM_isLittleEndian())
|
||||||
@ -286,6 +275,20 @@ MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val)
|
|||||||
MEM_writeLE64(memPtr, (U64)val);
|
MEM_writeLE64(memPtr, (U64)val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* function safe only for comparisons */
|
||||||
|
MEM_STATIC U32 MEM_readMINMATCH(const void* memPtr, U32 length)
|
||||||
|
{
|
||||||
|
switch (length)
|
||||||
|
{
|
||||||
|
default :
|
||||||
|
case 4 : return MEM_read32(memPtr);
|
||||||
|
case 3 : if (MEM_isLittleEndian())
|
||||||
|
return MEM_read32(memPtr)<<8;
|
||||||
|
else
|
||||||
|
return MEM_read32(memPtr)>>8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
#if defined (__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -876,7 +876,7 @@ static size_t ZSTD_count_2segments(const BYTE* ip, const BYTE* match, const BYTE
|
|||||||
***************************************/
|
***************************************/
|
||||||
static const U32 prime3bytes = 506832829U;
|
static const U32 prime3bytes = 506832829U;
|
||||||
static U32 ZSTD_hash3(U32 u, U32 h) { return ((u << (32-24)) * prime3bytes) >> (32-h) ; }
|
static U32 ZSTD_hash3(U32 u, U32 h) { return ((u << (32-24)) * prime3bytes) >> (32-h) ; }
|
||||||
static size_t ZSTD_hash3Ptr(const void* ptr, U32 h) { return ZSTD_hash3(MEM_read32(ptr), h); }
|
static size_t ZSTD_hash3Ptr(const void* ptr, U32 h) { return ZSTD_hash3(MEM_readLE32(ptr), h); }
|
||||||
|
|
||||||
static const U32 prime4bytes = 2654435761U;
|
static const U32 prime4bytes = 2654435761U;
|
||||||
static U32 ZSTD_hash4(U32 u, U32 h) { return (u * prime4bytes) >> (32-h) ; }
|
static U32 ZSTD_hash4(U32 u, U32 h) { return (u * prime4bytes) >> (32-h) ; }
|
||||||
|
@ -105,7 +105,7 @@ static const size_t ZSTD_frameHeaderSize_min = 5;
|
|||||||
#define OffFSELog 9
|
#define OffFSELog 9
|
||||||
#define MaxSeq MAX(MaxLL, MaxML)
|
#define MaxSeq MAX(MaxLL, MaxML)
|
||||||
|
|
||||||
#define LONGNBSEQ 0xFF00
|
#define LONGNBSEQ 0x7F00
|
||||||
|
|
||||||
#define FSE_ENCODING_RAW 0
|
#define FSE_ENCODING_RAW 0
|
||||||
#define FSE_ENCODING_RLE 1
|
#define FSE_ENCODING_RLE 1
|
||||||
|
@ -250,8 +250,8 @@ static U32 ZSTD_insertBtAndGetAllMatches (
|
|||||||
matches[mnum].off = current - matchIndex3;
|
matches[mnum].off = current - matchIndex3;
|
||||||
matches[mnum].len = (U32)currentMl;
|
matches[mnum].len = (U32)currentMl;
|
||||||
mnum++;
|
mnum++;
|
||||||
if (currentMl > ZSTD_OPT_NUM) return mnum;
|
if (currentMl > ZSTD_OPT_NUM) goto update;
|
||||||
if (ip+currentMl == iLimit) return mnum; /* best possible, and avoid read overflow*/
|
if (ip+currentMl == iLimit) goto update; /* best possible, and avoid read overflow*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,6 +316,7 @@ static U32 ZSTD_insertBtAndGetAllMatches (
|
|||||||
|
|
||||||
*smallerPtr = *largerPtr = 0;
|
*smallerPtr = *largerPtr = 0;
|
||||||
|
|
||||||
|
update:
|
||||||
zc->nextToUpdate = (matchEndIdx > current + 8) ? matchEndIdx - 8 : current+1;
|
zc->nextToUpdate = (matchEndIdx > current + 8) ? matchEndIdx - 8 : current+1;
|
||||||
return mnum;
|
return mnum;
|
||||||
}
|
}
|
||||||
@ -335,12 +336,12 @@ static U32 ZSTD_BtGetAllMatches (
|
|||||||
|
|
||||||
static U32 ZSTD_BtGetAllMatches_selectMLS (
|
static U32 ZSTD_BtGetAllMatches_selectMLS (
|
||||||
ZSTD_CCtx* zc, /* Index table will be updated */
|
ZSTD_CCtx* zc, /* Index table will be updated */
|
||||||
const BYTE* ip, const BYTE* const iLowLimit, const BYTE* const iHighLimit,
|
const BYTE* ip, const BYTE* const iHighLimit,
|
||||||
const U32 maxNbAttempts, const U32 matchLengthSearch, ZSTD_match_t* matches)
|
const U32 maxNbAttempts, const U32 matchLengthSearch, ZSTD_match_t* matches)
|
||||||
{
|
{
|
||||||
(void)iLowLimit; /* unused */
|
|
||||||
switch(matchLengthSearch)
|
switch(matchLengthSearch)
|
||||||
{
|
{
|
||||||
|
case 3 : return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 3, matches);
|
||||||
default :
|
default :
|
||||||
case 4 : return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 4, matches);
|
case 4 : return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 4, matches);
|
||||||
case 5 : return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 5, matches);
|
case 5 : return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 5, matches);
|
||||||
@ -362,12 +363,12 @@ static U32 ZSTD_BtGetAllMatches_extDict (
|
|||||||
|
|
||||||
static U32 ZSTD_BtGetAllMatches_selectMLS_extDict (
|
static U32 ZSTD_BtGetAllMatches_selectMLS_extDict (
|
||||||
ZSTD_CCtx* zc, /* Index table will be updated */
|
ZSTD_CCtx* zc, /* Index table will be updated */
|
||||||
const BYTE* ip, const BYTE* const iLowLimit, const BYTE* const iHighLimit,
|
const BYTE* ip, const BYTE* const iHighLimit,
|
||||||
const U32 maxNbAttempts, const U32 matchLengthSearch, ZSTD_match_t* matches)
|
const U32 maxNbAttempts, const U32 matchLengthSearch, ZSTD_match_t* matches)
|
||||||
{
|
{
|
||||||
(void)iLowLimit;
|
|
||||||
switch(matchLengthSearch)
|
switch(matchLengthSearch)
|
||||||
{
|
{
|
||||||
|
case 3 : return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 3, matches);
|
||||||
default :
|
default :
|
||||||
case 4 : return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 4, matches);
|
case 4 : return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 4, matches);
|
||||||
case 5 : return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 5, matches);
|
case 5 : return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 5, matches);
|
||||||
@ -445,7 +446,7 @@ void ZSTD_compressBlock_opt_generic(ZSTD_CCtx* ctx,
|
|||||||
} while (mlen >= minMatch);
|
} while (mlen >= minMatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
match_num = ZSTD_BtGetAllMatches_selectMLS(ctx, ip, ip, iend, maxSearches, mls, matches); /* first search (depth 0) */
|
match_num = ZSTD_BtGetAllMatches_selectMLS(ctx, ip, iend, maxSearches, mls, matches); /* first search (depth 0) */
|
||||||
|
|
||||||
ZSTD_LOG_PARSER("%d: match_num=%d last_pos=%d\n", (int)(ip-base), match_num, last_pos);
|
ZSTD_LOG_PARSER("%d: match_num=%d last_pos=%d\n", (int)(ip-base), match_num, last_pos);
|
||||||
if (!last_pos && !match_num) { ip++; continue; }
|
if (!last_pos && !match_num) { ip++; continue; }
|
||||||
@ -565,7 +566,7 @@ void ZSTD_compressBlock_opt_generic(ZSTD_CCtx* ctx,
|
|||||||
} while (mlen >= minMatch);
|
} while (mlen >= minMatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
match_num = ZSTD_BtGetAllMatches_selectMLS(ctx, inr, ip, iend, maxSearches, mls, matches);
|
match_num = ZSTD_BtGetAllMatches_selectMLS(ctx, inr, iend, maxSearches, mls, matches);
|
||||||
ZSTD_LOG_PARSER("%d: ZSTD_GetAllMatches match_num=%d\n", (int)(inr-base), match_num);
|
ZSTD_LOG_PARSER("%d: ZSTD_GetAllMatches match_num=%d\n", (int)(inr-base), match_num);
|
||||||
|
|
||||||
if (match_num > 0 && matches[match_num-1].len > sufficient_len) {
|
if (match_num > 0 && matches[match_num-1].len > sufficient_len) {
|
||||||
@ -777,7 +778,7 @@ void ZSTD_compressBlock_opt_extDict_generic(ZSTD_CCtx* ctx,
|
|||||||
|
|
||||||
best_mlen = (last_pos) ? last_pos : minMatch;
|
best_mlen = (last_pos) ? last_pos : minMatch;
|
||||||
|
|
||||||
match_num = ZSTD_BtGetAllMatches_selectMLS_extDict(ctx, ip, ip, iend, maxSearches, mls, matches); /* first search (depth 0) */
|
match_num = ZSTD_BtGetAllMatches_selectMLS_extDict(ctx, ip, iend, maxSearches, mls, matches); /* first search (depth 0) */
|
||||||
|
|
||||||
ZSTD_LOG_PARSER("%d: match_num=%d last_pos=%d\n", (int)(ip-base), match_num, last_pos);
|
ZSTD_LOG_PARSER("%d: match_num=%d last_pos=%d\n", (int)(ip-base), match_num, last_pos);
|
||||||
if (!last_pos && !match_num) { ip++; continue; }
|
if (!last_pos && !match_num) { ip++; continue; }
|
||||||
@ -907,7 +908,7 @@ void ZSTD_compressBlock_opt_extDict_generic(ZSTD_CCtx* ctx,
|
|||||||
|
|
||||||
best_mlen = (best_mlen > minMatch) ? best_mlen : minMatch;
|
best_mlen = (best_mlen > minMatch) ? best_mlen : minMatch;
|
||||||
|
|
||||||
match_num = ZSTD_BtGetAllMatches_selectMLS_extDict(ctx, inr, ip, iend, maxSearches, mls, matches);
|
match_num = ZSTD_BtGetAllMatches_selectMLS_extDict(ctx, inr, iend, maxSearches, mls, matches);
|
||||||
ZSTD_LOG_PARSER("%d: ZSTD_GetAllMatches match_num=%d\n", (int)(inr-base), match_num);
|
ZSTD_LOG_PARSER("%d: ZSTD_GetAllMatches match_num=%d\n", (int)(inr-base), match_num);
|
||||||
|
|
||||||
if (match_num > 0 && matches[match_num-1].len > sufficient_len) {
|
if (match_num > 0 && matches[match_num-1].len > sufficient_len) {
|
||||||
|
@ -65,7 +65,7 @@ extern "C" {
|
|||||||
#define ZSTD_HASHLOG_MAX 28
|
#define ZSTD_HASHLOG_MAX 28
|
||||||
#define ZSTD_HASHLOG_MIN 12
|
#define ZSTD_HASHLOG_MIN 12
|
||||||
#define ZSTD_HASHLOG3_MAX 24
|
#define ZSTD_HASHLOG3_MAX 24
|
||||||
#define ZSTD_HASHLOG3_MIN 12
|
#define ZSTD_HASHLOG3_MIN 2
|
||||||
#define ZSTD_SEARCHLOG_MAX (ZSTD_CONTENTLOG_MAX-1)
|
#define ZSTD_SEARCHLOG_MAX (ZSTD_CONTENTLOG_MAX-1)
|
||||||
#define ZSTD_SEARCHLOG_MIN 1
|
#define ZSTD_SEARCHLOG_MIN 1
|
||||||
#define ZSTD_SEARCHLENGTH_MAX 7
|
#define ZSTD_SEARCHLENGTH_MAX 7
|
||||||
|
Loading…
Reference in New Issue
Block a user