From 9378f76e4186e7b4f33a79451b22afd5b6344c8d Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Tue, 31 Oct 2017 14:20:25 -0700 Subject: [PATCH] extended shortcut match length to 18 --- lib/lz4.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/lz4.c b/lib/lz4.c index 34d8c40..1504790 100644 --- a/lib/lz4.c +++ b/lib/lz4.c @@ -1181,18 +1181,19 @@ LZ4_FORCE_INLINE int LZ4_decompress_generic( unsigned const token = *ip++; /* shortcut for common case : - * in most circumstances, we expect to decode small matches (<= 16 bytes) separated by few literals (<= 14 bytes). + * in most circumstances, we expect to decode small matches (<= 18 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<> ML_BITS; size_t const off = LZ4_readLE16(ip+ll); const BYTE* const matchPtr = op + ll - off; /* pointer underflow risk ? */ - if ((off >= 16) /* do not deal with overlapping matches */ & (matchPtr >= lowPrefix)) { + if ((off >= 18) /* 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, 16); op += ml; + memcpy(op, matchPtr, 18); op += ml; continue; } } -- 2.7.4