summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorYann Collet <cyan@fb.com>2018-02-11 09:42:12 (GMT)
committerYann Collet <cyan@fb.com>2018-02-11 09:43:20 (GMT)
commit3ad3b0f850ed3bcf5f3faafa414f21f84706461a (patch)
treedf5d3c757241bfcbd6f938071d4dc82783e34aaf /lib
parentf76ee4e267e567bbce611aecd91f41b5de3b44d5 (diff)
downloadlz4-3ad3b0f850ed3bcf5f3faafa414f21f84706461a.zip
lz4-3ad3b0f850ed3bcf5f3faafa414f21f84706461a.tar.gz
lz4-3ad3b0f850ed3bcf5f3faafa414f21f84706461a.tar.bz2
slightly improved decompression speed (~+1-2%)
by making shortcut slightly more common
Diffstat (limited to 'lib')
-rw-r--r--lib/lz4.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/lz4.c b/lib/lz4.c
index 7bf8677..6e5e9f5 100644
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -1220,10 +1220,13 @@ LZ4_FORCE_INLINE int LZ4_decompress_generic(
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 >= 18) /* do not deal with overlapping matches */ & (matchPtr >= lowPrefix)) {
+ if ((off >= 8) /* do not deal with overlapping matches */ & (matchPtr >= lowPrefix)) {
size_t const ml = (token & ML_MASK) + MINMATCH;
memcpy(op, ip, 16); op += ll; ip += ll + 2 /*offset*/;
- memcpy(op, matchPtr, 18); op += ml;
+ memcpy(op+ 0, matchPtr+ 0, 8);
+ memcpy(op+ 8, matchPtr+ 8, 8);
+ memcpy(op+16, matchPtr+16, 2);
+ op += ml;
continue;
}
}