Commit Graph

379 Commits

Author SHA1 Message Date
Yann Collet
d51f046628 2-stages LZ4_count
separate first branch from the rest of the compare loop
to get dedicated prediction.

measured a 3-4% compression speed improvement.
2017-11-06 15:42:50 -08:00
Sylvestre Ledru
4fed595dac Only ignore with C++17 2017-11-06 16:16:02 +01:00
Sylvestre Ledru
cca7618f09 When building with a C++ compiler, remove the 'register' keyword to silent a warning
For example, with clang:

lz4.c:XXX:36: error: 'register' storage class specifier is deprecated and incompatible with C++17 [-Werror,-Wdeprecated-register]
static unsigned LZ4_NbCommonBytes (register reg_t val)
                                   ^~~~~~~~~
2017-11-05 11:48:03 +01:00
Yann Collet
cc4a109b0d
Merge pull request #415 from lz4/fasterDecodingXp
Faster decoding xp
2017-11-01 09:58:49 -07:00
Yann Collet
a5731d6b26 minor change, to help store forwarding
in a marginal case (offset==4)
2017-10-31 15:51:56 -07:00
Yann Collet
9378f76e41 extended shortcut match length to 18 2017-10-31 14:20:25 -07:00
Yann Collet
ace334a4c9 minor : coding style : use ML_MASK constant 2017-10-31 12:22:15 -07:00
Yann Collet
3f173052ae added comments, as suggested by @terrelln 2017-10-31 11:49:57 -07:00
Yann Collet
e0914ff70c more complete shortcut - passes tests 2017-10-30 16:07:15 -07:00
mikir
63a7f34fee
Separated visibility from LZ4LIB_API macro. 2017-10-30 13:44:24 +01:00
Yann Collet
a31b7058cb small modification of lz4 decoder to shortcut common case (short branch). 2017-10-25 10:10:53 +02:00
Rei Odaira
73bcf90e51 Use the optimization level of O2 for the decompression functions on ppc64le with gcc, to avoid harmful unrolling and SIMDization with O3 2017-10-13 14:53:37 -05:00
Yann Collet
87968517f9 fixed decoding block checksum in lz4frame 2017-10-04 15:24:08 -07:00
Yann Collet
f6b31bf0d0 fix #404
static analyzer `cppcheck` complains about a shift-by-32 on a 32 bits value,
which is an undefined behavior.
However, the flagged code path is never triggered in 32-bits mode,
(actually, it's not even generated if DCE kicks in),
the shift-by-32 is necessarily performed on a 64-bits value.

While it doesn't change anything regarding lz4 code generation, for both 32 and 64 bits mode,
(can be checked by md5sum on the generated binary),
the shift has been rewritten in a way which should please this static analyzer,
since it now pretends to shift by 16 on 32-bits cpu (note : it doesn't matter since the code will not even be generated in this case).

Note : this is a blind fix, the new code has not been tested with cppcheck, because cppcheck only works on Windows.
Other static analyzer, such as scan-build, do not trigger this false positive.
2017-09-30 10:35:55 -07:00
Yann Collet
ceb868f442 minor lz4frame code refactor
try to improve code readability.
minor optimization on condition to preserve history.
2017-09-23 15:06:24 -07:00
W. Felix Handte
77f7245ea7 Fix Segfault When Copying Dict
dctx must have been initialized before we can copy the dictionary in.
2017-09-22 13:20:49 -07:00
Yann Collet
a30cba08f4 fixed a bunch of -Wcomma warnings
reported by @rvandermeulen (#398)
2017-09-10 14:32:38 -07:00
Yann Collet
b500c5282e fix #397 : decompression failed when using a combination of extDict + low memory address
Reported and fixed by @jscheid

Note : we are missing a test case to include it in the CI
2017-09-07 12:48:24 -07:00
Yann Collet
00418f7611 bench : made decompression speed evaluation same time as compression
minor : slightly modified an example do avoid disabling a gcc warning through #pragma
2017-09-07 12:12:36 -07:00
Yann Collet
ee5332438b minor Makefile fixes 2017-09-06 17:41:44 -07:00
Yann Collet
1ad9a36cfb updated lib/README
clarifications, improved wording
2017-09-06 11:22:45 -07:00
Yann Collet
3d260f3522 complementary information for #394 2017-08-30 16:09:10 -07:00
Yann Collet
e3c71584ff clarified documentation of streaming decompression functions
(synchronous bufferless mode)
answering questions by @jtbandes (#394)
2017-08-30 15:42:04 -07:00
Yann Collet
f212a10ae0 fixed FS-independent file order in /lib
identified by @bmwiedemann
2017-08-29 15:31:56 -07:00
Yann Collet
c4d6884cd8 build: source files sorted in a FS independent manner
to be more compatible with reproducible builds.
patch inspired by @bmwiedemann
2017-08-26 12:22:51 -07:00
Nick Terrell
252ce14fd2 Don't use C++11 deprecation attribute with clang
Clang doesn't accept a C++11 attribute following `LZ4LIB_API`.
Use the GNU attribute instead.
2017-08-24 14:06:34 -07:00
tcpan
f423d016cf FIX: added prefix to FORCE_INLINE to prevent redefinition error during compilation when used with other libraries that define FORCE_INLINE 2017-08-24 10:14:20 -04:00
Yann Collet
c10863b98e fix : asan error in dctx, due to increased maximum frame header size, reported by Craig Young 2017-08-17 10:55:30 -07:00
Yann Collet
a1f3a27e9b Merge branch 'dev' into installVars and fixed conflicts 2017-08-15 16:57:00 -07:00
Yann Collet
af9d72b7f6 Merge pull request #383 from lz4/blockChecksum
Block checksum
2017-08-15 16:50:04 -07:00
Yann Collet
8593ba8831 Merge pull request #380 from lz4/dictID
Frame Dictionary API
2017-08-15 14:12:04 -07:00
Yann Collet
aea7d521ae better respect GNU standard Makefile conventions
supports lowercase directory variables
add an "Installation" section in README.md
added an INSTALL file
2017-08-14 15:13:23 -07:00
Yann Collet
77f99d2922 restored block checksum capability at lz4frame API level 2017-08-11 17:46:52 -07:00
Yann Collet
757497ae3d implemented lz4frame decompression API 2017-08-10 16:53:57 -07:00
Yann Collet
4531637ecd support dictionary compression with independent blocks 2017-08-10 12:12:53 -07:00
Yann Collet
8d597d62d5 fixed gcc prototype warning 2017-08-10 10:28:52 -07:00
Yann Collet
d8aafe2c52 dictionary compression correctly uses compression level
Not obvious : copying the state was copying cdict's compression level
2017-08-10 00:48:19 -07:00
Yann Collet
ca2fb166ab fixed C++ conversion warnings 2017-08-09 18:22:26 -07:00
Yann Collet
bf8daa2fd5 fixed uninitialization error in lz4frame 2017-08-09 18:00:48 -07:00
Yann Collet
31f2cdf4d2 implemented dictionary compression in lz4frame
note : only compression API is implemented and tested
still to do : decompression API
2017-08-09 16:51:19 -07:00
Yann Collet
a82dadfbae added dictID inside LZ4F_frameInfo_t
Compressor can set dictID on LZ4F_compressBegin()
Decompressor can retrieve it using LZ4F_getFrameInfo()
2017-08-08 17:43:11 -07:00
Alex Deymo
76ef6d0ab0 Allow to predefine FORCE_INLINE macro.
FORCE_INLINE macro is defined based on the compiler used. When using
gcc, it will include "__attribute__((always_inline))" forcing gcc to
always inline all the functions marked as FORCE_INLINE. However, this
can cause a performance degradation of about 15%.

This patch allows to set the FORCE_INLINE macro from the compiler
command line to either "static" or "static inline" giving allowing it
to inline functions as needed when performing optimizations.
2017-08-07 10:34:33 +02:00
Ido Rosen
8aeaf6bb3a Fix typos preventing installation of static lib. 2017-08-01 00:48:58 -04:00
Yann Collet
6ad3a983db fix #369
The bug would make the bt search read one byte in an invalid memory region,
and make a branch decision based on its value.
Impact was small (missed compression opportunity).
It only happens in -BD mode, with extDict-prefix overlapping matches.

The bt match search is supposed to work also in extDict mode.
In which case, the match ptr can point into Dict.
When the match was overlapping Dict<->Prefix,
match[matchLength] would end up outside of Dict, in an invalid memory area.
The correction ensures that in such a case,
match[matchLength] ends up at intended location, inside prefix.
2017-06-26 11:29:05 -07:00
Chocobo1
a4ec7fa7b7 Fix gcc7 Wimplicit-fallthrough warnings
For the default Wimplicit-fallthrough=3 level,
the comment should start with "fall*"
2017-06-19 13:57:35 +08:00
Yann Collet
89b9f026c9 made level 10 a bit faster
at the expense of a little bit of compression ratio.

Now speed is intermediate on calgary corpus :
25 - 12 - 8 - 3
2017-06-13 17:25:29 -07:00
Yann Collet
bfc1806605 clarified lz4frame api comment (#350) 2017-06-13 12:35:00 -07:00
Yann Collet
139a387d17 updated NEWS 2017-06-12 10:54:59 -07:00
Yann Collet
e60cbb5cac added test for LZ4F_resetDecompressionContext() 2017-05-10 16:28:36 -07:00
Yann Collet
a902127613 bumped version number to 1.8.0
due to addition of prototype
LZ4F_resetDecompressionContext()
2017-05-10 13:27:18 -07:00