aboutsummaryrefslogtreecommitdiff
path: root/C/LzFind.c
diff options
context:
space:
mode:
Diffstat (limited to 'C/LzFind.c')
-rw-r--r--C/LzFind.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/C/LzFind.c b/C/LzFind.c
index 1ce4046..330bc17 100644
--- a/C/LzFind.c
+++ b/C/LzFind.c
@@ -1,5 +1,5 @@
1/* LzFind.c -- Match finder for LZ algorithms 1/* LzFind.c -- Match finder for LZ algorithms
22024-03-01 : Igor Pavlov : Public domain */ 2: Igor Pavlov : Public domain */
3 3
4#include "Precomp.h" 4#include "Precomp.h"
5 5
@@ -404,7 +404,7 @@ int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
404 const unsigned nbMax = 404 const unsigned nbMax =
405 (p->numHashBytes == 2 ? 16 : 405 (p->numHashBytes == 2 ? 16 :
406 (p->numHashBytes == 3 ? 24 : 32)); 406 (p->numHashBytes == 3 ? 24 : 32));
407 if (numBits > nbMax) 407 if (numBits >= nbMax)
408 numBits = nbMax; 408 numBits = nbMax;
409 if (numBits >= 32) 409 if (numBits >= 32)
410 hs = (UInt32)0 - 1; 410 hs = (UInt32)0 - 1;
@@ -416,14 +416,14 @@ int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
416 hs |= (256 << kLzHash_CrcShift_2) - 1; 416 hs |= (256 << kLzHash_CrcShift_2) - 1;
417 { 417 {
418 const UInt32 hs2 = MatchFinder_GetHashMask2(p, historySize); 418 const UInt32 hs2 = MatchFinder_GetHashMask2(p, historySize);
419 if (hs > hs2) 419 if (hs >= hs2)
420 hs = hs2; 420 hs = hs2;
421 } 421 }
422 hsCur = hs; 422 hsCur = hs;
423 if (p->expectedDataSize < historySize) 423 if (p->expectedDataSize < historySize)
424 { 424 {
425 const UInt32 hs2 = MatchFinder_GetHashMask2(p, (UInt32)p->expectedDataSize); 425 const UInt32 hs2 = MatchFinder_GetHashMask2(p, (UInt32)p->expectedDataSize);
426 if (hsCur > hs2) 426 if (hsCur >= hs2)
427 hsCur = hs2; 427 hsCur = hs2;
428 } 428 }
429 } 429 }
@@ -434,7 +434,7 @@ int MatchFinder_Create(CMatchFinder *p, UInt32 historySize,
434 if (p->expectedDataSize < historySize) 434 if (p->expectedDataSize < historySize)
435 { 435 {
436 hsCur = MatchFinder_GetHashMask(p, (UInt32)p->expectedDataSize); 436 hsCur = MatchFinder_GetHashMask(p, (UInt32)p->expectedDataSize);
437 if (hsCur > hs) // is it possible? 437 if (hsCur >= hs) // is it possible?
438 hsCur = hs; 438 hsCur = hs;
439 } 439 }
440 } 440 }
@@ -598,7 +598,7 @@ void MatchFinder_Init(void *_p)
598 598
599#ifdef MY_CPU_X86_OR_AMD64 599#ifdef MY_CPU_X86_OR_AMD64
600 #if defined(__clang__) && (__clang_major__ >= 4) \ 600 #if defined(__clang__) && (__clang_major__ >= 4) \
601 || defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40701) 601 || defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40900)
602 // || defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1900) 602 // || defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1900)
603 603
604 #define USE_LZFIND_SATUR_SUB_128 604 #define USE_LZFIND_SATUR_SUB_128
@@ -890,7 +890,7 @@ static UInt32 * Hc_GetMatchesSpec(size_t lenLimit, UInt32 curMatch, UInt32 pos,
890 return d; 890 return d;
891 { 891 {
892 const Byte *pb = cur - delta; 892 const Byte *pb = cur - delta;
893 curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; 893 curMatch = son[_cyclicBufferPos - delta + (_cyclicBufferPos < delta ? _cyclicBufferSize : 0)];
894 if (pb[maxLen] == cur[maxLen] && *pb == *cur) 894 if (pb[maxLen] == cur[maxLen] && *pb == *cur)
895 { 895 {
896 UInt32 len = 0; 896 UInt32 len = 0;
@@ -925,7 +925,7 @@ static UInt32 * Hc_GetMatchesSpec(size_t lenLimit, UInt32 curMatch, UInt32 pos,
925 break; 925 break;
926 { 926 {
927 ptrdiff_t diff; 927 ptrdiff_t diff;
928 curMatch = son[_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)]; 928 curMatch = son[_cyclicBufferPos - delta + (_cyclicBufferPos < delta ? _cyclicBufferSize : 0)];
929 diff = (ptrdiff_t)0 - (ptrdiff_t)delta; 929 diff = (ptrdiff_t)0 - (ptrdiff_t)delta;
930 if (cur[maxLen] == cur[(ptrdiff_t)maxLen + diff]) 930 if (cur[maxLen] == cur[(ptrdiff_t)maxLen + diff])
931 { 931 {
@@ -972,7 +972,7 @@ UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byt
972 // if (curMatch >= pos) { *ptr0 = *ptr1 = kEmptyHashValue; return NULL; } 972 // if (curMatch >= pos) { *ptr0 = *ptr1 = kEmptyHashValue; return NULL; }
973 973
974 cmCheck = (UInt32)(pos - _cyclicBufferSize); 974 cmCheck = (UInt32)(pos - _cyclicBufferSize);
975 if ((UInt32)pos <= _cyclicBufferSize) 975 if ((UInt32)pos < _cyclicBufferSize)
976 cmCheck = 0; 976 cmCheck = 0;
977 977
978 if (cmCheck < curMatch) 978 if (cmCheck < curMatch)
@@ -980,7 +980,7 @@ UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byt
980 { 980 {
981 const UInt32 delta = pos - curMatch; 981 const UInt32 delta = pos - curMatch;
982 { 982 {
983 CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); 983 CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + (_cyclicBufferPos < delta ? _cyclicBufferSize : 0)) << 1);
984 const Byte *pb = cur - delta; 984 const Byte *pb = cur - delta;
985 unsigned len = (len0 < len1 ? len0 : len1); 985 unsigned len = (len0 < len1 ? len0 : len1);
986 const UInt32 pair0 = pair[0]; 986 const UInt32 pair0 = pair[0];
@@ -1039,7 +1039,7 @@ static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const
1039 UInt32 cmCheck; 1039 UInt32 cmCheck;
1040 1040
1041 cmCheck = (UInt32)(pos - _cyclicBufferSize); 1041 cmCheck = (UInt32)(pos - _cyclicBufferSize);
1042 if ((UInt32)pos <= _cyclicBufferSize) 1042 if ((UInt32)pos < _cyclicBufferSize)
1043 cmCheck = 0; 1043 cmCheck = 0;
1044 1044
1045 if (// curMatch >= pos || // failure 1045 if (// curMatch >= pos || // failure
@@ -1048,7 +1048,7 @@ static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const
1048 { 1048 {
1049 const UInt32 delta = pos - curMatch; 1049 const UInt32 delta = pos - curMatch;
1050 { 1050 {
1051 CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + ((delta > _cyclicBufferPos) ? _cyclicBufferSize : 0)) << 1); 1051 CLzRef *pair = son + ((size_t)(_cyclicBufferPos - delta + (_cyclicBufferPos < delta ? _cyclicBufferSize : 0)) << 1);
1052 const Byte *pb = cur - delta; 1052 const Byte *pb = cur - delta;
1053 unsigned len = (len0 < len1 ? len0 : len1); 1053 unsigned len = (len0 < len1 ? len0 : len1);
1054 if (pb[len] == cur[len]) 1054 if (pb[len] == cur[len])
@@ -1595,7 +1595,7 @@ static void Bt5_MatchFinder_Skip(void *_p, UInt32 num)
1595 UInt32 pos = p->pos; \ 1595 UInt32 pos = p->pos; \
1596 UInt32 num2 = num; \ 1596 UInt32 num2 = num; \
1597 /* (p->pos == p->posLimit) is not allowed here !!! */ \ 1597 /* (p->pos == p->posLimit) is not allowed here !!! */ \
1598 { const UInt32 rem = p->posLimit - pos; if (num2 > rem) num2 = rem; } \ 1598 { const UInt32 rem = p->posLimit - pos; if (num2 >= rem) num2 = rem; } \
1599 num -= num2; \ 1599 num -= num2; \
1600 { const UInt32 cycPos = p->cyclicBufferPos; \ 1600 { const UInt32 cycPos = p->cyclicBufferPos; \
1601 son = p->son + cycPos; \ 1601 son = p->son + cycPos; \