From 14affd8ffa601b52ba49127ae674d3aa139da756 Mon Sep 17 00:00:00 2001 From: "J.D. Purcell" Date: Sat, 22 Mar 2025 17:14:38 -0400 Subject: [PATCH] Optimize LZMA range decoder --- .../Compressors/LZMA/RangeCoder/RangeCoder.cs | 2 ++ .../Compressors/LZMA/RangeCoder/RangeCoderBit.cs | 15 ++------------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoder.cs b/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoder.cs index 87906809..23b3b0b9 100644 --- a/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoder.cs +++ b/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoder.cs @@ -1,6 +1,7 @@ #nullable disable using System.IO; +using System.Runtime.CompilerServices; namespace SharpCompress.Compressors.LZMA.RangeCoder; @@ -152,6 +153,7 @@ internal class Decoder } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Normalize2() { if (_range < K_TOP_VALUE) diff --git a/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoderBit.cs b/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoderBit.cs index dd93b526..562b2356 100644 --- a/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoderBit.cs +++ b/src/SharpCompress/Compressors/LZMA/RangeCoder/RangeCoderBit.cs @@ -107,24 +107,13 @@ internal struct BitDecoder { rangeDecoder._range = newBound; _prob += (K_BIT_MODEL_TOTAL - _prob) >> K_NUM_MOVE_BITS; - if (rangeDecoder._range < Decoder.K_TOP_VALUE) - { - rangeDecoder._code = - (rangeDecoder._code << 8) | (byte)rangeDecoder._stream.ReadByte(); - rangeDecoder._range <<= 8; - rangeDecoder._total++; - } + rangeDecoder.Normalize2(); return 0; } rangeDecoder._range -= newBound; rangeDecoder._code -= newBound; _prob -= (_prob) >> K_NUM_MOVE_BITS; - if (rangeDecoder._range < Decoder.K_TOP_VALUE) - { - rangeDecoder._code = (rangeDecoder._code << 8) | (byte)rangeDecoder._stream.ReadByte(); - rangeDecoder._range <<= 8; - rangeDecoder._total++; - } + rangeDecoder.Normalize2(); return 1; } }