From 1bdf0410713b25a5c3419e12f32ab16eac62ba86 Mon Sep 17 00:00:00 2001 From: "W. Felix Handte" Date: Wed, 1 Sep 2021 17:50:53 -0400 Subject: [PATCH] Track Step Rather than Recalculating (+0.5% Speed) --- lib/compress/zstd_double_fast.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/compress/zstd_double_fast.c b/lib/compress/zstd_double_fast.c index ee902e19e..73a8e08eb 100644 --- a/lib/compress/zstd_double_fast.c +++ b/lib/compress/zstd_double_fast.c @@ -70,6 +70,9 @@ size_t ZSTD_compressBlock_doubleFast_singleSegment_generic( const BYTE* const ilimit = iend - HASH_READ_SIZE; U32 offset_1=rep[0], offset_2=rep[1]; U32 offsetSaved = 0; + size_t step = 1; + const size_t kStepIncr = 1 << kSearchStrength; + const BYTE* nextStep = ip + kStepIncr; DEBUGLOG(5, "ZSTD_compressBlock_doubleFast_singleSegment_generic"); @@ -121,7 +124,14 @@ size_t ZSTD_compressBlock_doubleFast_singleSegment_generic( } } - ip += ((ip-anchor) >> kSearchStrength) + 1; + if (ip >= nextStep) { + PREFETCH_L1(ip + 64); + PREFETCH_L1(ip + 128); + step++; + nextStep += kStepIncr; + } + ip += step; + #if defined(__aarch64__) PREFETCH_L1(ip+256); #endif @@ -190,6 +200,9 @@ _match_stored: anchor = ip; continue; /* faster when present ... (?) */ } } + + step = 1; + nextStep = ip + kStepIncr; } /* while (ip < ilimit) */ /* save reps for next block */ -- 2.47.2