]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
rewrite code in the manner suggested by @terrelln
authorYann Collet <cyan@fb.com>
Thu, 17 Oct 2024 16:36:56 +0000 (09:36 -0700)
committerYann Collet <cyan@fb.com>
Thu, 17 Oct 2024 16:37:23 +0000 (09:37 -0700)
lib/compress/zstd_double_fast.c

index 72b541ea6c86292708db45d010e73c902c96e9fa..50d698b379a29efe716f6f7a0c0f4bf75dd5fbb5 100644 (file)
@@ -254,23 +254,21 @@ _search_next_long:
 
         /* short match found: let's check for a longer one */
         mLength = ZSTD_count(ip+4, matchs0+4, iend) + 4;
+        offset = (U32)(ip - matchs0);
 
         /* check long match at +1 position */
-        if (idxl1 > prefixLowestIndex) {
-            if (MEM_read64(matchl1) == MEM_read64(ip1)) {
-                size_t const llen = ZSTD_count(ip1+8, matchl1+8, iend) + 8;
-                if (llen > mLength) {
-                    ip = ip1;
-                    mLength = llen;
-                    offset = (U32)(ip-matchl1);
-                    while (((ip>anchor) & (matchl1>prefixLowest)) && (ip[-1] == matchl1[-1])) { ip--; matchl1--; mLength++; } /* catch up */
-                    goto _match_found;
-            }   }
+        if ((idxl1 > prefixLowestIndex) && (MEM_read64(matchl1) == MEM_read64(ip1))) {
+            size_t const l1len = ZSTD_count(ip1+8, matchl1+8, iend) + 8;
+            if (l1len > mLength) {
+                /* use the long match instead */
+                ip = ip1;
+                mLength = l1len;
+                offset = (U32)(ip-matchl1);
+                matchs0 = matchl1;
+            }
         }
 
-        /* validate short match previously found */
-        offset = (U32)(ip - matchs0);
-        while (((ip>anchor) & (matchs0>prefixLowest)) && (ip[-1] == matchs0[-1])) { ip--; matchs0--; mLength++; } /* catch up */
+        while (((ip>anchor) & (matchs0>prefixLowest)) && (ip[-1] == matchs0[-1])) { ip--; matchs0--; mLength++; } /* complete backward */
 
         /* fall-through */