From: inikep Date: Sat, 30 Jan 2016 11:15:56 +0000 (+0100) Subject: ZSTD_opt X-Git-Tag: v0.5.1^2~3^2~58^2~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c71568fd447320f3b2170af03185dddb55915086;p=thirdparty%2Fzstd.git ZSTD_opt --- diff --git a/.gitignore b/.gitignore index 8641d7f99..9c7737f4c 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,5 @@ ipch/ # Other files .directory +_codelite +_zstdbench diff --git a/lib/zstd_compress.c b/lib/zstd_compress.c index 6e3d6ca5a..c2becc5ff 100644 --- a/lib/zstd_compress.c +++ b/lib/zstd_compress.c @@ -153,7 +153,7 @@ static unsigned ZSTD_highbit(U32 val); optimize for srcSize if srcSize > 0 */ void ZSTD_validateParams(ZSTD_parameters* params) { - const U32 btPlus = (params->strategy == ZSTD_btlazy2); + const U32 btPlus = (params->strategy == ZSTD_btlazy2) || (params->strategy == ZSTD_opt_bt); /* validate params */ if (MEM_32bits()) if (params->windowLog > 25) params->windowLog = 25; /* 32 bits mode cannot flush > 24 bits */ @@ -175,7 +175,7 @@ void ZSTD_validateParams(ZSTD_parameters* params) if (params->searchLog < ZSTD_SEARCHLOG_MIN) params->searchLog = ZSTD_SEARCHLOG_MIN; if (params->searchLength> ZSTD_SEARCHLENGTH_MAX) params->searchLength = ZSTD_SEARCHLENGTH_MAX; if (params->searchLength< ZSTD_SEARCHLENGTH_MIN) params->searchLength = ZSTD_SEARCHLENGTH_MIN; - if ((U32)params->strategy>(U32)ZSTD_btlazy2) params->strategy = ZSTD_btlazy2; + if ((U32)params->strategy>(U32)ZSTD_opt_bt) params->strategy = ZSTD_opt_bt; } @@ -1977,7 +1977,7 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* zc, /* preemptive overflow correction */ if (zc->lowLimit > (1<<30)) { - U32 btplus = (zc->params.strategy == ZSTD_btlazy2); + U32 btplus = (zc->params.strategy == ZSTD_btlazy2) || (zc->params.strategy == ZSTD_opt_bt); U32 contentMask = (1 << (zc->params.contentLog - btplus)) - 1; U32 newLowLimit = zc->lowLimit & contentMask; /* preserve position % contentSize */ U32 correction = zc->lowLimit - newLowLimit; @@ -2280,6 +2280,10 @@ static const ZSTD_parameters ZSTD_defaultParameters[4][ZSTD_MAX_CLEVEL+1] = { { 0, 25, 24, 23, 5, 5, ZSTD_btlazy2 }, /* level 18 */ { 0, 25, 26, 23, 5, 5, ZSTD_btlazy2 }, /* level 19 */ { 0, 26, 27, 25, 9, 5, ZSTD_btlazy2 }, /* level 20 */ + { 0, 23, 21, 22, 5, 5, ZSTD_opt }, /* level 21 */ + { 0, 23, 24, 23, 4, 5, ZSTD_opt }, /* level 22 */ + { 0, 25, 26, 23, 5, 5, ZSTD_opt }, /* level 23 */ + { 0, 26, 27, 25, 9, 5, ZSTD_opt }, /* level 24 */ }, { /* for srcSize <= 256 KB */ /* W, C, H, S, L, strat */ @@ -2304,6 +2308,10 @@ static const ZSTD_parameters ZSTD_defaultParameters[4][ZSTD_MAX_CLEVEL+1] = { { 0, 18, 18, 18, 11, 4, ZSTD_lazy2 }, /* level 18 */ { 0, 18, 18, 18, 12, 4, ZSTD_lazy2 }, /* level 19 */ { 0, 18, 18, 18, 13, 4, ZSTD_lazy2 }, /* level 20 */ + { 0, 18, 18, 18, 10, 4, ZSTD_lazy2 }, /* level 17 */ + { 0, 18, 18, 18, 11, 4, ZSTD_lazy2 }, /* level 18 */ + { 0, 18, 18, 18, 12, 4, ZSTD_lazy2 }, /* level 19 */ + { 0, 18, 18, 18, 13, 4, ZSTD_lazy2 }, /* level 20 */ }, { /* for srcSize <= 128 KB */ /* W, C, H, S, L, strat */ @@ -2328,6 +2336,10 @@ static const ZSTD_parameters ZSTD_defaultParameters[4][ZSTD_MAX_CLEVEL+1] = { { 0, 17, 18, 16, 9, 4, ZSTD_btlazy2 }, /* level 18 */ { 0, 17, 18, 16, 10, 4, ZSTD_btlazy2 }, /* level 19 */ { 0, 17, 18, 18, 12, 4, ZSTD_btlazy2 }, /* level 20 */ + { 0, 17, 18, 16, 8, 4, ZSTD_btlazy2 }, /* level 17 */ + { 0, 17, 18, 16, 9, 4, ZSTD_btlazy2 }, /* level 18 */ + { 0, 17, 18, 16, 10, 4, ZSTD_btlazy2 }, /* level 19 */ + { 0, 17, 18, 18, 12, 4, ZSTD_btlazy2 }, /* level 20 */ }, { /* for srcSize <= 16 KB */ /* W, C, H, S, L, strat */ @@ -2352,6 +2364,10 @@ static const ZSTD_parameters ZSTD_defaultParameters[4][ZSTD_MAX_CLEVEL+1] = { { 0, 14, 15, 15, 13, 4, ZSTD_btlazy2 }, /* level 18 */ { 0, 14, 15, 15, 14, 4, ZSTD_btlazy2 }, /* level 19 */ { 0, 14, 15, 15, 15, 4, ZSTD_btlazy2 }, /* level 20 */ + { 0, 14, 15, 15, 12, 4, ZSTD_btlazy2 }, /* level 17 */ + { 0, 14, 15, 15, 13, 4, ZSTD_btlazy2 }, /* level 18 */ + { 0, 14, 15, 15, 14, 4, ZSTD_btlazy2 }, /* level 19 */ + { 0, 14, 15, 15, 15, 4, ZSTD_btlazy2 }, /* level 20 */ }, }; diff --git a/lib/zstd_static.h b/lib/zstd_static.h index de2212d9d..9997d67d9 100644 --- a/lib/zstd_static.h +++ b/lib/zstd_static.h @@ -65,7 +65,7 @@ extern "C" { #define ZSTD_SEARCHLENGTH_MIN 4 /** from faster to stronger */ -typedef enum { ZSTD_fast, ZSTD_greedy, ZSTD_lazy, ZSTD_lazy2, ZSTD_btlazy2 } ZSTD_strategy; +typedef enum { ZSTD_fast, ZSTD_greedy, ZSTD_lazy, ZSTD_lazy2, ZSTD_btlazy2, ZSTD_opt, ZSTD_opt_bt } ZSTD_strategy; typedef struct { @@ -243,7 +243,7 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t maxDstSize, const /* ************************************* * Pre-defined compression levels ***************************************/ -#define ZSTD_MAX_CLEVEL 20 +#define ZSTD_MAX_CLEVEL 24 ZSTDLIB_API unsigned ZSTD_maxCLevel (void);