]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
ZSTD_opt
authorinikep <inikep@gmail.com>
Sat, 30 Jan 2016 11:15:56 +0000 (12:15 +0100)
committerinikep <inikep@gmail.com>
Sun, 31 Jan 2016 10:26:04 +0000 (11:26 +0100)
.gitignore
lib/zstd_compress.c
lib/zstd_static.h

index 8641d7f9963be23c3d7cf5a9adafa65908462989..9c7737f4c23eefead522f107bc5144b3e725c5c0 100644 (file)
@@ -44,3 +44,5 @@ ipch/
 
 # Other files
 .directory
+_codelite
+_zstdbench
index 6e3d6ca5af4bced9adabef904a7ab8642cc38371..c2becc5fff406dfef15f899286ab1c747952e8ed 100644 (file)
@@ -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 */
 },
 };
 
index de2212d9d8874e0a3e8290db448aeb8c778e2574..9997d67d9f48b798f244c774f5515666b9b895ac 100644 (file)
@@ -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);