summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Collet <Cyan4973@users.noreply.github.com>2017-11-07 20:09:32 (GMT)
committerGitHub <noreply@github.com>2017-11-07 20:09:32 (GMT)
commite6365b1854eddb9772693db50b07e9057d0fe4f6 (patch)
treeef5afd10312bc1093cfed666bf798a15a0a94f36
parentce8393e8d7c55e69c73ccff0c37c32f5b0e86b6c (diff)
parent9221419c6fad7d714369cb549b123825fd041d49 (diff)
downloadlz4-e6365b1854eddb9772693db50b07e9057d0fe4f6.zip
lz4-e6365b1854eddb9772693db50b07e9057d0fe4f6.tar.gz
lz4-e6365b1854eddb9772693db50b07e9057d0fe4f6.tar.bz2
Merge pull request #418 from lz4/fasterCount
faster LZ4_count()
-rw-r--r--lib/lz4.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/lz4.c b/lib/lz4.c
index 64a2e82..6157285 100644
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -403,11 +403,20 @@ static unsigned LZ4_NbCommonBytes (REGISTER reg_t val)
}
#define STEPSIZE sizeof(reg_t)
-static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit)
+LZ4_FORCE_INLINE
+unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit)
{
const BYTE* const pStart = pIn;
- while (likely(pIn<pInLimit-(STEPSIZE-1))) {
+ if (likely(pIn < pInLimit-(STEPSIZE-1))) {
+ reg_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn);
+ if (!diff) {
+ pIn+=STEPSIZE; pMatch+=STEPSIZE;
+ } else {
+ return LZ4_NbCommonBytes(diff);
+ } }
+
+ while (likely(pIn < pInLimit-(STEPSIZE-1))) {
reg_t const diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn);
if (!diff) { pIn+=STEPSIZE; pMatch+=STEPSIZE; continue; }
pIn += LZ4_NbCommonBytes(diff);