]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Removed `if (matchIndex >= current) return 0;` as recommended by @inikep
authorYann Collet <yann.collet.73@gmail.com>
Mon, 15 Feb 2016 16:44:14 +0000 (17:44 +0100)
committerYann Collet <yann.collet.73@gmail.com>
Mon, 15 Feb 2016 16:44:14 +0000 (17:44 +0100)
lib/zstd_opt.h
programs/fuzzer.c

index 2512f803baff030061a4d3a13cbeb8dc71b42f77..6d898400cf831ba53cb20e3ffe6296ad13339d4a 100644 (file)
@@ -172,8 +172,7 @@ MEM_STATIC void ZSTD_updatePrice(seqStore_t* seqStorePtr, U32 litLength, const B
 /*-*************************************
 *  Binary Tree search
 ***************************************/
-FORCE_INLINE /* inlining is important to hardwire a hot branch (template emulation) */
-U32 ZSTD_insertBtAndGetAllMatches (
+static U32 ZSTD_insertBtAndGetAllMatches (
                         ZSTD_CCtx* zc,
                         const BYTE* const ip, const BYTE* const iend,
                         U32 nbCompares, const U32 mls,
@@ -201,7 +200,6 @@ U32 ZSTD_insertBtAndGetAllMatches (
     U32 dummy32;   /* to be nullified at the end */
     U32 mnum = 0;
 
-    if (matchIndex >= current) return 0;
     bestLength = MINMATCH-1;
     hashTable[h] = current;   /* Update Hash Table */
 
@@ -257,8 +255,7 @@ U32 ZSTD_insertBtAndGetAllMatches (
 
 
 /** Tree updater, providing best match */
-FORCE_INLINE /* inlining is important to hardwire a hot branch (template emulation) */
-U32 ZSTD_BtGetAllMatches (
+static U32 ZSTD_BtGetAllMatches (
                         ZSTD_CCtx* zc,
                         const BYTE* const ip, const BYTE* const iLimit,
                         const U32 maxNbAttempts, const U32 mls, ZSTD_match_t* matches, U32 minml)
@@ -285,8 +282,7 @@ static U32 ZSTD_BtGetAllMatches_selectMLS (
 }
 
 /** Tree updater, providing best match */
-FORCE_INLINE /* inlining is important to hardwire a hot branch (template emulation) */
-U32 ZSTD_BtGetAllMatches_extDict (
+static U32 ZSTD_BtGetAllMatches_extDict (
                         ZSTD_CCtx* zc,
                         const BYTE* const ip, const BYTE* const iLimit,
                         const U32 maxNbAttempts, const U32 mls, ZSTD_match_t* matches, U32 minml)
@@ -342,7 +338,6 @@ U32 ZSTD_HcGetAllMatches_generic (
 
     /* HC4 match finder */
     matchIndex = ZSTD_insertAndFindFirstIndex (zc, ip, mls);
-    if (matchIndex >= current) return 0;
 
     while ((matchIndex>lowLimit) && (nbAttempts)) {
         size_t currentMl=0;
@@ -746,9 +741,10 @@ _storeSequence:   /* cur, last_pos, best_mlen, best_off have to be set */
             ZSTD_updatePrice(seqStorePtr, 0, anchor, 0, best_mlen);
             ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, best_mlen);
             anchor += best_mlen+MINMATCH;
-            ip = anchor;
             continue;   /* faster when present ... (?) */
-    }   }
+        }
+        if (anchor > ip) ip = anchor;
+    }
 
     {   /* Last Literals */
         size_t lastLLSize = iend - anchor;
@@ -1112,11 +1108,12 @@ _storeSequence: // cur, last_pos, best_mlen, best_off have to be set
                 ZSTD_updatePrice(seqStorePtr, 0, anchor, 0, mlen-MINMATCH);
                 ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, mlen-MINMATCH);
                 anchor += mlen;
-                ip = anchor;
                 continue;   /* faster when present ... (?) */
             }
             break;
-    }   }
+        }
+        if (anchor > ip) ip = anchor;
+    }
 
     {   /* Last Literals */
         size_t lastLLSize = iend - anchor;
index edc562be62af4672f767b20b09f200792e28baf3..f09cf06f2c4abfdba67d77a8511bc565059568a9 100644 (file)
@@ -91,6 +91,7 @@ static U32 g_testTime = 0;
 /*********************************************************
 *  Fuzzer functions
 *********************************************************/
+#define MIN(a,b) ((a)<(b)?(a):(b))
 #define MAX(a,b) ((a)>(b)?(a):(b))
 
 static U32 FUZ_GetMilliStart(void)
@@ -452,7 +453,8 @@ int fuzzerTests(U32 seed, U32 nbTests, unsigned startTest, double compressibilit
         crcOrig = XXH64(sampleBuffer, sampleSize, 0);
 
         /* compression test */
-        cLevelMod = MAX(1, 38 - (int)(MAX(9, sampleSizeLog) * 2));   /* high levels only for small samples, for manageable speed */
+        //cLevelMod = MAX(1, 38 - (int)(MAX(9, sampleSizeLog) * 2));   /* high levels only for small samples, for manageable speed */
+        cLevelMod = MIN( ZSTD_maxCLevel(), (U32)MAX(1,  55 - 3*(int)sampleSizeLog) );   /* high levels only for small samples, for manageable speed */
         cLevel = (FUZ_rand(&lseed) % cLevelMod) +1;
         cSize = ZSTD_compressCCtx(ctx, cBuffer, cBufferSize, sampleBuffer, sampleSize, cLevel);
         CHECK(ZSTD_isError(cSize), "ZSTD_compressCCtx failed");