]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
AArch64: Revert previous branch optimization
authorArpad Panyik <Arpad.Panyik@arm.com>
Wed, 8 Oct 2025 18:58:45 +0000 (18:58 +0000)
committerArpad Panyik <Arpad.Panyik@arm.com>
Wed, 8 Oct 2025 18:58:45 +0000 (18:58 +0000)
Revert a branch optimization that was based on an incorrect
assumption in the AArch64 part of ZSTD_decodeSequence. In extreme
cases the existing implementation could lead to data corruption.

Insert an UNLIKELY hint to guide the compilers toward generating more
efficient machine code.

lib/decompress/zstd_decompress_block.c

index b2ccd92a199ff897874029e65f44c696942f885c..b4cc731ac9e3434be20abcfd9a3701e38ca58084 100644 (file)
@@ -1332,14 +1332,11 @@ ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, c
             seq.offset = offset;
         }
 
-        if (mlBits > 0) {
+        if (mlBits > 0)
             seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
 
-            if (MEM_32bits() && (mlBits+llBits >= STREAM_ACCUMULATOR_MIN_32-LONG_OFFSETS_MAX_EXTRA_BITS_32))
-                BIT_reloadDStream(&seqState->DStream);
-            if (MEM_64bits() && (totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
-                BIT_reloadDStream(&seqState->DStream);
-        }
+        if (UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
+            BIT_reloadDStream(&seqState->DStream);
 
         /* Ensure there are enough bits to read the rest of data in 64-bit mode. */
         ZSTD_STATIC_ASSERT(16+LLFSELog+MLFSELog+OffFSELog < STREAM_ACCUMULATOR_MIN_64);