added comments, as suggested by @terrelln
authorYann Collet <cyan@fb.com>
Tue, 31 Oct 2017 18:49:57 +0000 (11:49 -0700)
committerYann Collet <cyan@fb.com>
Tue, 31 Oct 2017 18:49:57 +0000 (11:49 -0700)
lib/lz4.c

index 10f8d55..b036d98 100644 (file)
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -1180,15 +1180,16 @@ LZ4_FORCE_INLINE int LZ4_decompress_generic(
 
         unsigned const token = *ip++;
 
-        /* shortcut for common case */
-        /* this shortcut was tested on x86 and x64, where it improves decoding speed.
+        /* shortcut for common case :
+         * in most circumstances, we expect to decode small matches (<= 16 bytes) separated by few literals (<= 14 bytes).
+         * this shortcut was tested on x86 and x64, where it improves decoding speed.
          * it has not yet been benchmarked on ARM, Power, mips, etc. */
         if (((ip + 14 + 2 <= iend) & (op + 14 + 16 <= oend))
-          & ((token < 15*16) & ((token & 0xF) <= 12)) ) {
+          & ((token < (15<<ML_BITS)) & ((token & 0xF) <= 12)) ) {
             size_t const ll = token >> ML_BITS;
             size_t const off = LZ4_readLE16(ip+ll);
             const BYTE* const matchPtr = op + ll - off;  /* pointer underflow risk ? */
-            if ((off >= 16) & (matchPtr >= lowPrefix)) {
+            if ((off >= 16) /* do not deal with overlapping matches */ & (matchPtr >= lowPrefix)) {
                 size_t const ml = (token & 0xF) + MINMATCH;
                 memcpy(op, ip, 16); op += ll; ip += ll + 2 /*offset*/;
                 memcpy(op, matchPtr, 16); op += ml;