diff options
author | Jia Tan <jiat0218@gmail.com> | 2024-02-12 17:09:10 +0200 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2024-02-14 18:31:16 +0200 |
commit | de5c5e417645ad8906ef914bc059d08c1462fc29 (patch) | |
tree | 62672e60baf3f24030c402f5b3364671a2b81dee /src/common/tuklib_exit.c | |
parent | liblzma: Creates separate "safe" range decoder mode. (diff) | |
download | xz-de5c5e417645ad8906ef914bc059d08c1462fc29.tar.xz |
liblzma: Creates Non-resumable and Resumable modes for lzma_decoder.
The new decoder resumes the first decoder loop in the Resumable mode.
Then, the code executes in Non-resumable mode until it detects that it
cannot guarantee to have enough input/output to decode another symbol.
The Resumable mode is how the decoder has always worked. Before decoding
every input bit, it checks if there is enough space and will save its
location to be resumed later. When the decoder has more input/output,
it jumps back to the correct sequence in the Resumable mode code.
When the input/output buffers are large, the Resumable mode is much
slower than the Non-resumable because it has more branches and is harder
for the compiler to optimize since it is in a large switch block.
Early benchmarking shows significant time improvement (8-10% on gcc and
clang x86) by using the Non-resumable code as much as possible.
Diffstat (limited to 'src/common/tuklib_exit.c')
0 files changed, 0 insertions, 0 deletions