W. Felix Handte
efc419a6d4
Replace calloc() Calls With malloc() Where Possible
2018-03-12 14:58:43 -04:00
W. Felix Handte
80790c587b
Copy the Dict Table Into the Context for Large Compressions
2018-03-12 14:58:43 -04:00
W. Felix Handte
14ce912b70
Switch Current Offset to 1 Only When in External Dictionary Context Mode
2018-03-12 14:58:43 -04:00
W. Felix Handte
cea09d67a9
Hoist Table Reset One Level Up
2018-03-12 14:58:43 -04:00
W. Felix Handte
68c6bd17b8
Set Dictionary Context Pointer Rather than Copying the Context In
2018-03-12 14:58:43 -04:00
W. Felix Handte
73cc39327e
Lookup Matches in Separate Dictionary Context
2018-03-12 14:58:43 -04:00
W. Felix Handte
62cb52b341
Initialize Current Offset to 1
2018-03-12 14:58:43 -04:00
W. Felix Handte
b3628cb0c5
Avoid Resetting the Context When Possible
2018-03-12 14:58:43 -04:00
W. Felix Handte
aa36e118f1
Const-ify Table Arg to LZ4_getPosition(OnHash)
2018-03-12 14:58:43 -04:00
W. Felix Handte
d6a3024dbb
Add LZ4_compress_fast_safeExtState Function
2018-03-12 14:58:43 -04:00
W. Felix Handte
5709891de6
Add a Table Type Field to LZ4_stream_t
2018-03-12 14:58:43 -04:00
W. Felix Handte
6933f5ad9c
Remove Obsolete Stream Functions to Free Space in LZ4_stream_t
2018-03-12 14:58:43 -04:00
W. Felix Handte
6d156fea56
Allow Empty Dictionaries
2018-03-12 14:58:43 -04:00
Yann Collet
7173a631db
edge case : compress up to end-mflimit (12 bytes)
...
The LZ4 block format specification
states that the last match must start
at a minimum distance of 12 bytes from the end of the block.
However, out of an abundance of caution,
the reference implementation would actually stop searching matches
at 13 bytes from the end of the block.
This patch fixes this small detail.
The new version is now able to properly compress a limit case
such as `aaaaaaaabaaa\n`
as reported by Gao Xiang (@hsiangkao).
Obviously, it doesn't change a lot of things.
This is just one additional match candidate per block, with a maximum match length of 7 (since last 5 bytes must remain literals).
With default policy, blocks are 4 MB long, so it doesn't happen too often
Compressing silesia.tar at default level 1 saves 5 bytes (100930101 -> 100930096).
At max level 12, it saves a grand 16 bytes (77389871 -> 77389855).
The impact is a bit more visible when blocks are smaller, hence more numerous.
For example, compressing silesia with blocks of 64 KB (using -12 -B4D) saves 543 bytes (77304583 -> 77304040).
So the smaller the packet size, the more visible the impact.
And it happens we have a ton of scenarios with little blocks using LZ4 compression ...
And a useless "hooray" sidenote :
the patch improves the LZ4 compression record of silesia (using -12 -B7D --no-frame-crc) by 16 bytes (77270672 -> 77270656)
and the record on enwik9 by 44 bytes (371680396 -> 371680352) (previously claimed by [smallz4](http://create.stephan-brumme.com/smallz4/ ) ).
2018-02-24 11:47:53 -08:00
Yann Collet
219abab74b
removed LZ4_copy8
...
better use memcpy() directly
2018-02-11 22:20:09 -08:00
Yann Collet
3ad3b0f850
slightly improved decompression speed (~+1-2%)
...
by making shortcut slightly more common
2018-02-11 01:43:20 -08:00
Ben Boeckel
c4671be550
intel: do not use __attribute__((packed)) on Windows
...
On Windows, the Intel compiler is closer to MSVC rather than GCC and
does not support the GCC attribute syntax.
Fixes #468
2018-02-08 09:15:27 -05:00
Yann Collet
6bbe45e1b8
remove register
keyword
...
deprecated in newer C++ versions,
and dubious utility
2017-12-04 17:10:23 -08:00
Yann Collet
dac26084a9
Merge pull request #416 from lz4/newopt
...
Improve Optimal parser
2017-11-09 14:13:30 -08:00
Yann Collet
9221419c6f
added LZ4_FORCEINLINE to counter gcc regression
...
as recommended by @terrelln
2017-11-06 17:29:27 -08:00
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
8e16eb0cd1
fixed last lost bytes in maximal mode
...
even gained 2 bytes on calgary.tar...
added conditional traces `g_debuglog_enable`
2017-11-02 14:53:06 -07:00
Yann Collet
15b0d229c1
Merge branch 'dev' into btopt
2017-10-31 17:55:01 -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
Yann Collet
a31b7058cb
small modification of lz4 decoder to shortcut common case (short branch).
2017-10-25 10:10:53 +02:00
Yann Collet
6cec68de39
added assert
2017-10-19 16:47:25 -07: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
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
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
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
8593ba8831
Merge pull request #380 from lz4/dictID
...
Frame Dictionary API
2017-08-15 14:12:04 -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
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
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
Yann Collet
a8dd86d93e
changed macro HEAPMODE into LZ4_HEAPMODE
...
This macro is susceptible to be triggered from user side
typically through compiler flag (-DLZ4_HEAPMODE=1).
In which case, it makes sense to prefix the macro
since we want to reduce potential side-effect on namespace.
2017-05-01 22:32:21 -07:00
Yann Collet
e2827775ee
make __packed memory access default for gcc
...
It's always as good or better then memcpy()
but depends on gcc-specific extension.
solves https://github.com/facebook/zstd/issues/620
2017-03-30 12:22:17 -07:00
Yann Collet
cd35f0d98c
LZ4_compress_HC_destSize() uses LZ4HC_compress_generic() code path
...
Limits compression level to 10,
to remain compatible with Hash Chain.
2017-03-16 15:10:38 -07:00
Yann Collet
5eb547a608
fix #283 : implement LZ4_versionString().
2016-12-04 20:05:36 +01:00
Yann Collet
a91983daa0
highly improved speed on -mx32 mode
...
Now -mx32 is fastest mode on x64 CPU
2016-11-18 17:05:06 -08:00
Yann Collet
8e1ea59ad6
attempt to fix sanitize32 package dependency
2016-11-17 18:30:46 -08:00
Yann Collet
1abecbc33c
fix 32-bits mode.
...
Large File support for Mac OS-X in 32-bits mode
Fixed potential undefined behavior
Changed makefile for 32-bits mode
2016-11-17 13:02:06 -08:00
Yann Collet
4c5c711b7a
fixed minor conversion warning
2016-11-14 14:53:15 -08:00
Yann Collet
f094f53144
silence a minor msan warning
2016-11-14 14:38:46 -08:00
Yann Collet
0fe5c187a5
fixed minor msan warning
2016-11-14 11:34:10 -08:00
Yann Collet
bb97e8a6fd
fixed __GNUC__ macro
2016-11-12 13:30:02 -08:00
Yann Collet
3580d96980
enabled deprecation warnings on remaining obsolete functions
2016-11-12 08:48:42 -08:00
Nick Terrell
85aeb0e4bb
Expose internal types to remove strict aliasing
2016-11-11 13:00:02 -08:00
Yann Collet
1f246a9899
Fixed #178 fullbench on small input
2016-11-10 15:31:59 -08:00
Yann Collet
e9089bcbe4
small compression ratio and speed improvement on small files
2016-11-07 17:31:38 -08:00
Yann Collet
f6a7c6b578
Merge branch 'dev' of github.com:Cyan4973/lz4 into dev
2016-11-07 10:31:43 -08:00
Nick Terrell
920bf21714
Fix LZ4_decompress_fast_continue() bug
...
It specified the external dictionary location incorrectly.
Add tests that expose this bug with both normal compilation and ASAN.
2016-11-04 20:01:23 -07:00
Yann Collet
207f478bab
minor refactor
2016-11-04 19:04:32 -07:00
Nick Terrell
f30c56c083
Quiet gcc-4.6.3 narrowing warning
2016-11-04 12:34:28 -07:00
Yann Collet
f878c08b76
better correctness on big-endian 64-bits platforms
2016-11-04 07:24:21 -07:00
Yann Collet
26dec498cf
small compression speed improvement on 64-bits systems
2016-11-04 07:18:03 -07:00
Yann Collet
258a5e7fa4
updated comments
2016-11-03 17:14:25 -07:00
Przemyslaw Skibinski
84cedb4632
updated links to LZ4 repository
2016-11-03 15:12:57 +01:00
Yann Collet
33993542af
removed test artefacts
2016-09-06 16:46:52 +02:00
Yann Collet
5bd3eaa481
minor comments
2016-08-21 00:08:38 +02:00
Yann Collet
9578ff539d
minor refactor
2016-08-20 23:59:45 +02:00
Yann Collet
a7672dc4f9
minor decompression speed gains
2016-08-20 23:52:20 +02:00
Ben Wiederhake
d3e2d80266
Use https wherever possible
2016-07-08 00:46:02 +02:00
Yann Collet
6b1600f41e
changed : default benchmark LZ4_decompress_safe()
2016-06-29 17:48:28 +02:00
Yann Collet
6923f3e230
Minor refactoring (code style)
2016-06-29 17:12:24 +02:00
Yann Collet
410ec81543
Fixed : alignment warning
2016-06-29 17:02:09 +02:00
Yann Collet
bc342ab94c
minor refactoring
2016-06-29 16:01:24 +02:00
Yann Collet
c8a573d32c
very minor decompression speed gain
2016-06-29 15:04:19 +02:00
Yann Collet
e27e7316dd
minor code refactoring
2016-06-29 14:54:07 +02:00
Yann Collet
8938e10742
minor compression speed improvement
2016-06-29 14:07:54 +02:00
Yann Collet
c77c0c1086
minor refactoring
2016-06-29 13:21:23 +02:00
Yann Collet
3c03326004
minor refactoring (coding style)
2016-06-29 12:54:23 +02:00
Irwan Djajadi
bc70a4b72e
fixed non-C99 compilers
2016-04-19 15:06:15 -05:00
Irwan Djajadi
10e3eecc56
fixed non-C99 compiler
2016-04-19 15:01:35 -05:00
Irwan Djajadi
973baa2c19
Merge branch 'heapmode_alloc_failure_fix' into dev
2016-04-19 08:22:56 -05:00
Irwan Djajadi
3e5bb67537
alloc failure fix
2016-04-18 15:51:32 -05:00
John Zhuge
cf6652f9b9
lz4cli: print library version
2016-04-01 07:07:25 -07:00
Julius Werner
dc868cd5b1
Allow for safe in-place decoding
...
Add a check to allow safe "in-place" decoding (meaning that the
beginning of the source buffer partially overlaps the end of the
destination buffer). This is usually possible as long as the output
stops at least 15 bytes before the end of the input buffer (7 to account
for the extra spill from LZ4_wildCopy, 4 for a possible block checksum,
and 4 for the terminating block header), but in some pathological edge
cases it could be possible for the output stream to overwrite a byte in
the input stream before it gets decoded. With this patch the decoder
will reliably detect those cases and return a decoding error.
Signed-off-by: Julius Werner <jwerner@chromium.org>
2016-02-12 22:52:51 -08:00
Yann Collet
2c80138121
heapmode macro option for lz4hc
2015-10-21 15:00:48 +01:00
Yann Collet
fb6fece770
Updated Makefile and .travis
2015-09-01 15:59:24 +01:00
Yann Collet
9aa5504f0c
New unalign access method
2015-08-19 18:16:17 +01:00
Yann Collet
d15ac1f1a7
Slightly improved compression speed on ARMv6
2015-08-16 02:33:57 +01:00
Yann Collet
0f2bf0c54e
Improved performance on ARMv6
2015-08-16 01:54:55 +01:00
Yann Collet
9517bd9234
minor simplification lz4_readarch()
2015-08-06 03:49:29 +01:00
Yann Collet
00eedb37d1
minor refactor
2015-07-16 09:38:10 +01:00
Yann Collet
3e579afa6d
Slightly improved decompression speed
...
Slightly decreased decompression stack usage in 64-bits mode
2015-07-16 09:03:55 +01:00
Yann Collet
795a2cdb1b
sligthly improved decompression speed
2015-07-16 08:55:48 +01:00
Yann Collet
91c1b9a682
Performance fix : big compression speed boost for clang (+30%)
2015-05-21 01:17:56 +01:00
Yann Collet
05c3f66bb8
Updated a few comments
2015-05-12 10:10:20 +01:00
Yann Collet
efbebd2a99
Added : LZ4_compress_destSize()
2015-05-06 02:29:04 +01:00
Yann Collet
1c3e633c48
Added compilation flag -Wcast-qual
2015-05-06 01:58:24 +01:00
Yann Collet
b4348a4718
Fixed minor Visual warning
2015-05-03 18:06:01 +01:00
Yann Collet
1b17bf2ab8
New lz4 API, using LZ4_compress_fast()
2015-05-03 17:57:46 +01:00
Yann Collet
791512cfdd
Fixed bug 9318
2015-05-02 19:10:28 +01:00
Yann Collet
d6dc0a410d
streaming API : Improved ring buffer management
2015-04-24 10:15:12 +01:00
Yann Collet
9c6fb8b160
Added LZ4_compress_fast_extState()
2015-04-23 07:46:35 +01:00
Yann Collet
f11afafe23
Removed LZ4_compress() (obsolete) from lz4
2015-04-21 18:31:35 +01:00
Takayuki MATSUOKA
d7298d2059
Replace GCC_VERSION with LZ4_GCC_VERSION
2015-04-15 06:39:04 +09:00
Yann Collet
2852b9e439
Fixed issue #84
2015-04-12 15:17:10 +01:00
Yann Collet
138673df5e
fixed minor g++ warning
2015-04-12 09:37:34 +01:00
Yann Collet
81fdd9df23
Fixed a few Valgrind warnings
2015-04-12 09:29:52 +01:00
Yann Collet
973e385fa3
Implemented obsolete warning message
2015-04-11 18:59:22 +01:00
Yann Collet
f344fbd3ca
Fixed a few warnings from -fsanitize=undefined
2015-04-09 22:59:07 +01:00
Yann Collet
2f8a4c32f9
New LZ4_compress_safe() API
2015-04-09 13:34:38 +01:00
Yann Collet
78d2dfd427
fullbench : tests of _limitedOutput variants intentionnally provides less memory space than safe (LZ4_compressBound())
2015-04-01 18:21:03 +01:00
Yann Collet
28e237e954
simplified LZ4_compress_limitedOutput()
2015-04-01 15:53:08 +01:00
Yann Collet
76a03c1035
simplified LZ4_compress_withState()
2015-04-01 14:59:42 +01:00
Yann Collet
6625068902
simplified LZ4_compress()
2015-04-01 14:48:24 +01:00
Yann Collet
a761546b1b
Fix : minor warning under Visual
2015-03-31 18:52:52 +01:00
Yann Collet
5b9fb69715
minor tweak
2015-03-30 22:39:08 +01:00
Yann Collet
4c227a487e
Added LZ4_compress_fast()
2015-03-30 21:32:25 +01:00
Yann Collet
6c69dc176c
faster compression in 64 bits mode
2015-03-30 18:34:15 +01:00
Yann Collet
a357f434f0
Fixed cast-align warnings on 32-bits
2015-03-25 18:06:40 +01:00
Yann Collet
7cf4e5c941
Updates tests & Man pages
2015-03-22 13:42:00 +01:00
Yann Collet
7d87d43e61
Updated lz4io sparse file support (alignment properties)
2015-03-17 18:02:01 +01:00
Yann Collet
bbcfe2144d
Added : clang test
2015-03-15 14:19:47 +01:00
Yann Collet
45b0642bf5
scan-build tests
2015-03-15 01:42:27 +01:00
Yann Collet
45a357fd17
Improved sparse file support
2015-03-13 02:24:08 +01:00
Yann Collet
e3f33d2579
Fixed minor warnings
2015-03-11 18:38:44 +01:00
Yann Collet
ceec6fa849
g++ compatibility
2015-03-10 16:57:42 +01:00
Yann Collet
32a85fc76d
NetBSD compatibility ( #48 )
2015-03-07 19:30:45 +01:00
Yann Collet
8a9fb8cf32
Fixed : older compiler don't like nameless unions, reported by Cheyi Lin
2014-12-16 22:03:16 +01:00
Yann Collet
95cc6cef64
Fixed : bug within LZ4 HC streaming mode, reported by James Boyle
2014-12-16 02:13:19 +01:00
Yann Collet
7a8cd69960
Fixed : GCC 4.9 bug on highest performance settings, reported by Greg Slazinski
2014-12-14 14:29:15 +01:00
Yann Collet
e68d7dcf22
Fixed : LZ4_compress_limitedOutput() bug, as reported by Christopher Speller
2014-12-10 17:58:15 +01:00
Yann Collet
3477cbac73
stronger tests for LZ4_compress_limitedOutput()
2014-12-10 09:05:44 +01:00
Yann Collet
b827ecf728
Clarified a few comments
2014-12-03 23:19:11 +01:00
Yann Collet
65ee6b09c4
Fixed : deprecated function LZ4_slideInputBufferHC()
2014-12-03 19:17:10 +01:00
Yann Collet
118296aeb0
variable ref renamed
2014-12-02 23:57:15 +01:00
Yann Collet
d008c87151
New directory structure : library source files into /lib directory
2014-11-30 23:32:12 +01:00