zstd-ruby 1.3.7.0 → 1.3.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/zstdruby/libzstd/BUCK +15 -2
- data/ext/zstdruby/libzstd/Makefile +37 -2
- data/ext/zstdruby/libzstd/README.md +67 -41
- data/ext/zstdruby/libzstd/common/bitstream.h +2 -2
- data/ext/zstdruby/libzstd/common/compiler.h +19 -12
- data/ext/zstdruby/libzstd/common/cpu.h +1 -1
- data/ext/zstdruby/libzstd/common/debug.h +22 -11
- data/ext/zstdruby/libzstd/common/error_private.c +6 -0
- data/ext/zstdruby/libzstd/common/fse.h +2 -2
- data/ext/zstdruby/libzstd/common/huf.h +25 -1
- data/ext/zstdruby/libzstd/common/pool.c +1 -1
- data/ext/zstdruby/libzstd/common/zstd_common.c +3 -1
- data/ext/zstdruby/libzstd/common/zstd_errors.h +1 -0
- data/ext/zstdruby/libzstd/common/zstd_internal.h +11 -2
- data/ext/zstdruby/libzstd/compress/fse_compress.c +3 -3
- data/ext/zstdruby/libzstd/compress/hist.c +19 -11
- data/ext/zstdruby/libzstd/compress/hist.h +11 -8
- data/ext/zstdruby/libzstd/compress/huf_compress.c +33 -31
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +621 -371
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +90 -28
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +4 -4
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +15 -15
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +25 -18
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +18 -67
- data/ext/zstdruby/libzstd/compress/zstd_ldm.h +2 -6
- data/ext/zstdruby/libzstd/compress/zstd_opt.c +133 -48
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +8 -0
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +229 -73
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +18 -10
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +178 -42
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +240 -0
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +44 -0
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +244 -1680
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +1307 -0
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +59 -0
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +168 -0
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +13 -11
- data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +15 -15
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +28 -28
- data/ext/zstdruby/libzstd/dll/libzstd.def +0 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +0 -10
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +15 -15
- data/ext/zstdruby/libzstd/zstd.h +1208 -968
- data/lib/zstd-ruby/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09569e18846a17f43eb0a6b5cfad3b2b2f6839e725dea1f9470ec3a12335a54f'
|
4
|
+
data.tar.gz: 6f7820cc8eda43d8e0e5de6cb9f9b40dafee7a63de5f78c645bc523d67232c72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35e224f5a80c71a84accbd6ad8973b7718bc424341edb4c9421bf4af97c9e79492e2d536ebcd940c14d2c538adf79e0e51934557764a7cc1b0c62c22d6f40a6a
|
7
|
+
data.tar.gz: 2e89cc6b4ab292b72abed39fbe09dab3d3254aa5f4a92a5fdf155af325540a354ceccca7359c33f39ef8c15c44c4d2896ffb07955789f011244bc200be67f172
|
data/README.md
CHANGED
data/ext/zstdruby/libzstd/BUCK
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
cxx_library(
|
2
2
|
name='zstd',
|
3
3
|
header_namespace='',
|
4
|
+
exported_headers=['zstd.h'],
|
4
5
|
visibility=['PUBLIC'],
|
5
6
|
deps=[
|
6
7
|
':common',
|
@@ -17,7 +18,7 @@ cxx_library(
|
|
17
18
|
exported_headers=subdir_glob([
|
18
19
|
('compress', 'zstd*.h'),
|
19
20
|
]),
|
20
|
-
srcs=glob(['compress/zstd*.c']),
|
21
|
+
srcs=glob(['compress/zstd*.c', 'compress/hist.c']),
|
21
22
|
deps=[':common'],
|
22
23
|
)
|
23
24
|
|
@@ -40,7 +41,7 @@ cxx_library(
|
|
40
41
|
header_namespace='',
|
41
42
|
visibility=['PUBLIC'],
|
42
43
|
exported_headers=subdir_glob([
|
43
|
-
('
|
44
|
+
('deprecated', '*.h'),
|
44
45
|
]),
|
45
46
|
srcs=glob(['deprecated/*.c']),
|
46
47
|
deps=[':common'],
|
@@ -118,6 +119,7 @@ cxx_library(
|
|
118
119
|
'decompress/huf_decompress.c',
|
119
120
|
],
|
120
121
|
deps=[
|
122
|
+
':debug',
|
121
123
|
':bitstream',
|
122
124
|
':compiler',
|
123
125
|
':errors',
|
@@ -204,9 +206,20 @@ cxx_library(
|
|
204
206
|
],
|
205
207
|
)
|
206
208
|
|
209
|
+
cxx_library(
|
210
|
+
name='debug',
|
211
|
+
header_namespace='',
|
212
|
+
visibility=['PUBLIC'],
|
213
|
+
exported_headers=subdir_glob([
|
214
|
+
('common', 'debug.h'),
|
215
|
+
]),
|
216
|
+
srcs=['common/debug.c'],
|
217
|
+
)
|
218
|
+
|
207
219
|
cxx_library(
|
208
220
|
name='common',
|
209
221
|
deps=[
|
222
|
+
':debug',
|
210
223
|
':bitstream',
|
211
224
|
':compiler',
|
212
225
|
':cpu',
|
@@ -27,11 +27,16 @@ DEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
|
|
27
27
|
-Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
|
28
28
|
-Wstrict-prototypes -Wundef -Wpointer-arith -Wformat-security \
|
29
29
|
-Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
|
30
|
-
-Wredundant-decls -Wmissing-prototypes
|
30
|
+
-Wredundant-decls -Wmissing-prototypes -Wc++-compat
|
31
31
|
CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS)
|
32
32
|
FLAGS = $(CPPFLAGS) $(CFLAGS)
|
33
33
|
|
34
|
-
|
34
|
+
HAVE_COLORNEVER = $(shell echo a | grep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
|
35
|
+
GREP_OPTIONS ?=
|
36
|
+
ifeq ($HAVE_COLORNEVER, 1)
|
37
|
+
GREP_OPTIONS += --color=never
|
38
|
+
endif
|
39
|
+
GREP = grep $(GREP_OPTIONS)
|
35
40
|
|
36
41
|
ZSTDCOMMON_FILES := $(sort $(wildcard common/*.c))
|
37
42
|
ZSTDCOMP_FILES := $(sort $(wildcard compress/*.c))
|
@@ -45,6 +50,12 @@ ZSTD_LIB_COMPRESSION ?= 1
|
|
45
50
|
ZSTD_LIB_DECOMPRESSION ?= 1
|
46
51
|
ZSTD_LIB_DICTBUILDER ?= 1
|
47
52
|
ZSTD_LIB_DEPRECATED ?= 1
|
53
|
+
HUF_FORCE_DECOMPRESS_X1 ?= 0
|
54
|
+
HUF_FORCE_DECOMPRESS_X2 ?= 0
|
55
|
+
ZSTD_FORCE_DECOMPRESS_SHORT ?= 0
|
56
|
+
ZSTD_FORCE_DECOMPRESS_LONG ?= 0
|
57
|
+
ZSTD_NO_INLINE ?= 0
|
58
|
+
ZSTD_STRIP_ERROR_STRINGS ?= 0
|
48
59
|
|
49
60
|
ifeq ($(ZSTD_LIB_COMPRESSION), 0)
|
50
61
|
ZSTD_LIB_DICTBUILDER = 0
|
@@ -72,6 +83,30 @@ ifneq ($(ZSTD_LIB_DICTBUILDER), 0)
|
|
72
83
|
ZSTD_FILES += $(ZDICT_FILES)
|
73
84
|
endif
|
74
85
|
|
86
|
+
ifneq ($(HUF_FORCE_DECOMPRESS_X1), 0)
|
87
|
+
CFLAGS += -DHUF_FORCE_DECOMPRESS_X1
|
88
|
+
endif
|
89
|
+
|
90
|
+
ifneq ($(HUF_FORCE_DECOMPRESS_X2), 0)
|
91
|
+
CFLAGS += -DHUF_FORCE_DECOMPRESS_X2
|
92
|
+
endif
|
93
|
+
|
94
|
+
ifneq ($(ZSTD_FORCE_DECOMPRESS_SHORT), 0)
|
95
|
+
CFLAGS += -DZSTD_FORCE_DECOMPRESS_SHORT
|
96
|
+
endif
|
97
|
+
|
98
|
+
ifneq ($(ZSTD_FORCE_DECOMPRESS_LONG), 0)
|
99
|
+
CFLAGS += -DZSTD_FORCE_DECOMPRESS_LONG
|
100
|
+
endif
|
101
|
+
|
102
|
+
ifneq ($(ZSTD_NO_INLINE), 0)
|
103
|
+
CFLAGS += -DZSTD_NO_INLINE
|
104
|
+
endif
|
105
|
+
|
106
|
+
ifneq ($(ZSTD_STRIP_ERROR_STRINGS), 0)
|
107
|
+
CFLAGS += -DZSTD_STRIP_ERROR_STRINGS
|
108
|
+
endif
|
109
|
+
|
75
110
|
ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
|
76
111
|
ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
|
77
112
|
ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
|
@@ -7,13 +7,32 @@ in order to make it easier to select or exclude features.
|
|
7
7
|
|
8
8
|
#### Building
|
9
9
|
|
10
|
-
`Makefile` script is provided, supporting
|
10
|
+
`Makefile` script is provided, supporting [Makefile conventions](https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html#Makefile-Conventions),
|
11
11
|
including commands variables, staged install, directory variables and standard targets.
|
12
12
|
- `make` : generates both static and dynamic libraries
|
13
|
-
- `make install` : install libraries in
|
13
|
+
- `make install` : install libraries and headers in target system directories
|
14
14
|
|
15
|
-
`libzstd` default scope
|
16
|
-
and
|
15
|
+
`libzstd` default scope is pretty large, including compression, decompression, dictionary builder,
|
16
|
+
and support for decoding legacy formats >= v0.5.0.
|
17
|
+
The scope can be reduced on demand (see paragraph _modular build_).
|
18
|
+
|
19
|
+
|
20
|
+
#### Multithreading support
|
21
|
+
|
22
|
+
Multithreading is disabled by default when building with `make`.
|
23
|
+
Enabling multithreading requires 2 conditions :
|
24
|
+
- set build macro `ZSTD_MULTITHREAD` (`-DZSTD_MULTITHREAD` for `gcc`)
|
25
|
+
- for POSIX systems : compile with pthread (`-pthread` compilation flag for `gcc`)
|
26
|
+
|
27
|
+
Both conditions are automatically applied when invoking `make lib-mt` target.
|
28
|
+
|
29
|
+
When linking a POSIX program with a multithreaded version of `libzstd`,
|
30
|
+
note that it's necessary to request the `-pthread` flag during link stage.
|
31
|
+
|
32
|
+
Multithreading capabilities are exposed
|
33
|
+
via the [advanced API defined in `lib/zstd.h`](https://github.com/facebook/zstd/blob/v1.3.8/lib/zstd.h#L592).
|
34
|
+
This API is still labelled experimental,
|
35
|
+
but is expected to become "stable" in the near future.
|
17
36
|
|
18
37
|
|
19
38
|
#### API
|
@@ -26,63 +45,70 @@ Zstandard's stable API is exposed within [lib/zstd.h](zstd.h).
|
|
26
45
|
Optional advanced features are exposed via :
|
27
46
|
|
28
47
|
- `lib/common/zstd_errors.h` : translates `size_t` function results
|
29
|
-
|
48
|
+
into a `ZSTD_ErrorCode`, for accurate error handling.
|
49
|
+
|
30
50
|
- `ZSTD_STATIC_LINKING_ONLY` : if this macro is defined _before_ including `zstd.h`,
|
31
|
-
it unlocks access to
|
32
|
-
exposed in second part of `zstd.h`.
|
33
|
-
|
34
|
-
|
51
|
+
it unlocks access to the experimental API,
|
52
|
+
exposed in the second part of `zstd.h`.
|
53
|
+
All definitions in the experimental APIs are unstable,
|
54
|
+
they may still change in the future, or even be removed.
|
55
|
+
As a consequence, experimental definitions shall ___never be used with dynamic library___ !
|
35
56
|
Only static linking is allowed.
|
36
57
|
|
37
58
|
|
38
59
|
#### Modular build
|
39
60
|
|
40
|
-
It's possible to compile only a limited set of features
|
61
|
+
It's possible to compile only a limited set of features within `libzstd`.
|
62
|
+
The file structure is designed to make this selection manually achievable for any build system :
|
41
63
|
|
42
64
|
- Directory `lib/common` is always required, for all variants.
|
65
|
+
|
43
66
|
- Compression source code lies in `lib/compress`
|
67
|
+
|
44
68
|
- Decompression source code lies in `lib/decompress`
|
69
|
+
|
45
70
|
- It's possible to include only `compress` or only `decompress`, they don't depend on each other.
|
71
|
+
|
46
72
|
- `lib/dictBuilder` : makes it possible to generate dictionaries from a set of samples.
|
47
73
|
The API is exposed in `lib/dictBuilder/zdict.h`.
|
48
74
|
This module depends on both `lib/common` and `lib/compress` .
|
49
|
-
|
75
|
+
|
76
|
+
- `lib/legacy` : makes it possible to decompress legacy zstd formats, starting from `v0.1.0`.
|
50
77
|
This module depends on `lib/common` and `lib/decompress`.
|
51
78
|
To enable this feature, define `ZSTD_LEGACY_SUPPORT` during compilation.
|
52
79
|
Specifying a number limits versions supported to that version onward.
|
53
80
|
For example, `ZSTD_LEGACY_SUPPORT=2` means : "support legacy formats >= v0.2.0".
|
54
|
-
`ZSTD_LEGACY_SUPPORT=
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
`ZSTD_LEGACY_SUPPORT=0` also means "do __not__ support legacy formats".
|
60
|
-
Once enabled, this capability is transparently triggered within decompression functions.
|
61
|
-
It's also possible to invoke directly legacy API, as exposed in `lib/legacy/zstd_legacy.h`.
|
62
|
-
Each version also provides an additional dedicated set of advanced API.
|
81
|
+
Conversely, `ZSTD_LEGACY_SUPPORT=0` means "do __not__ support legacy formats".
|
82
|
+
By default, this build macro is set as `ZSTD_LEGACY_SUPPORT=5`.
|
83
|
+
Decoding supported legacy format is a transparent capability triggered within decompression functions.
|
84
|
+
It's also allowed to invoke legacy API directly, exposed in `lib/legacy/zstd_legacy.h`.
|
85
|
+
Each version does also provide its own set of advanced API.
|
63
86
|
For example, advanced API for version `v0.4` is exposed in `lib/legacy/zstd_v04.h` .
|
64
|
-
Note : `lib/legacy` only supports _decoding_ legacy formats.
|
65
|
-
- Similarly, you can define `ZSTD_LIB_COMPRESSION, ZSTD_LIB_DECOMPRESSION`, `ZSTD_LIB_DICTBUILDER`,
|
66
|
-
and `ZSTD_LIB_DEPRECATED` as 0 to forgo compilation of the corresponding features. This will
|
67
|
-
also disable compilation of all dependencies (eg. `ZSTD_LIB_COMPRESSION=0` will also disable
|
68
|
-
dictBuilder).
|
69
87
|
|
88
|
+
- While invoking `make libzstd`, it's possible to define build macros
|
89
|
+
`ZSTD_LIB_COMPRESSION, ZSTD_LIB_DECOMPRESSION`, `ZSTD_LIB_DICTBUILDER`,
|
90
|
+
and `ZSTD_LIB_DEPRECATED` as `0` to forgo compilation of the corresponding features.
|
91
|
+
This will also disable compilation of all dependencies
|
92
|
+
(eg. `ZSTD_LIB_COMPRESSION=0` will also disable dictBuilder).
|
70
93
|
|
71
|
-
|
94
|
+
- There are some additional build macros that can be used to minify the decoder.
|
72
95
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
96
|
+
Zstandard often has more than one implementation of a piece of functionality,
|
97
|
+
where each implementation optimizes for different scenarios. For example, the
|
98
|
+
Huffman decoder has complementary implementations that decode the stream one
|
99
|
+
symbol at a time or two symbols at a time. Zstd normally includes both (and
|
100
|
+
dispatches between them at runtime), but by defining `HUF_FORCE_DECOMPRESS_X1`
|
101
|
+
or `HUF_FORCE_DECOMPRESS_X2`, you can force the use of one or the other, avoiding
|
102
|
+
compilation of the other. Similarly, `ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT`
|
103
|
+
and `ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG` force the compilation and use of
|
104
|
+
only one or the other of two decompression implementations. The smallest
|
105
|
+
binary is achieved by using `HUF_FORCE_DECOMPRESS_X1` and
|
106
|
+
`ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT`.
|
81
107
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
108
|
+
For squeezing the last ounce of size out, you can also define
|
109
|
+
`ZSTD_NO_INLINE`, which disables inlining, and `ZSTD_STRIP_ERROR_STRINGS`,
|
110
|
+
which removes the error messages that are otherwise returned by
|
111
|
+
`ZSTD_getErrorName`.
|
86
112
|
|
87
113
|
|
88
114
|
#### Windows : using MinGW+MSYS to create DLL
|
@@ -113,8 +139,8 @@ Consider migrating code towards supported streaming API exposed in `zstd.h`.
|
|
113
139
|
|
114
140
|
The other files are not source code. There are :
|
115
141
|
|
116
|
-
- `LICENSE` : contains the BSD license text
|
117
|
-
- `Makefile` : `make` script to build and install zstd library (static and dynamic)
|
118
142
|
- `BUCK` : support for `buck` build system (https://buckbuild.com/)
|
119
|
-
- `
|
143
|
+
- `Makefile` : `make` script to build and install zstd library (static and dynamic)
|
120
144
|
- `README.md` : this file
|
145
|
+
- `dll/` : resources directory for Windows compilation
|
146
|
+
- `libzstd.pc.in` : script for `pkg-config` (used in `make install`)
|
@@ -389,7 +389,7 @@ MEM_STATIC void BIT_skipBits(BIT_DStream_t* bitD, U32 nbBits)
|
|
389
389
|
* Read (consume) next n bits from local register and update.
|
390
390
|
* Pay attention to not read more than nbBits contained into local register.
|
391
391
|
* @return : extracted value. */
|
392
|
-
MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD,
|
392
|
+
MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits)
|
393
393
|
{
|
394
394
|
size_t const value = BIT_lookBits(bitD, nbBits);
|
395
395
|
BIT_skipBits(bitD, nbBits);
|
@@ -398,7 +398,7 @@ MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD, U32 nbBits)
|
|
398
398
|
|
399
399
|
/*! BIT_readBitsFast() :
|
400
400
|
* unsafe version; only works only if nbBits >= 1 */
|
401
|
-
MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD,
|
401
|
+
MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits)
|
402
402
|
{
|
403
403
|
size_t const value = BIT_lookBitsFast(bitD, nbBits);
|
404
404
|
assert(nbBits >= 1);
|
@@ -15,6 +15,8 @@
|
|
15
15
|
* Compiler specifics
|
16
16
|
*********************************************************/
|
17
17
|
/* force inlining */
|
18
|
+
|
19
|
+
#if !defined(ZSTD_NO_INLINE)
|
18
20
|
#if defined (__GNUC__) || defined(__cplusplus) || defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
19
21
|
# define INLINE_KEYWORD inline
|
20
22
|
#else
|
@@ -29,6 +31,13 @@
|
|
29
31
|
# define FORCE_INLINE_ATTR
|
30
32
|
#endif
|
31
33
|
|
34
|
+
#else
|
35
|
+
|
36
|
+
#define INLINE_KEYWORD
|
37
|
+
#define FORCE_INLINE_ATTR
|
38
|
+
|
39
|
+
#endif
|
40
|
+
|
32
41
|
/**
|
33
42
|
* FORCE_INLINE_TEMPLATE is used to define C "templates", which take constant
|
34
43
|
* parameters. They must be inlined for the compiler to elimininate the constant
|
@@ -89,23 +98,21 @@
|
|
89
98
|
#endif
|
90
99
|
|
91
100
|
/* prefetch
|
92
|
-
* can be disabled, by declaring NO_PREFETCH macro
|
93
|
-
* All prefetch invocations use a single default locality 2,
|
94
|
-
* generating instruction prefetcht1,
|
95
|
-
* which, according to Intel, means "load data into L2 cache".
|
96
|
-
* This is a good enough "middle ground" for the time being,
|
97
|
-
* though in theory, it would be better to specialize locality depending on data being prefetched.
|
98
|
-
* Tests could not determine any sensible difference based on locality value. */
|
101
|
+
* can be disabled, by declaring NO_PREFETCH build macro */
|
99
102
|
#if defined(NO_PREFETCH)
|
100
|
-
# define
|
103
|
+
# define PREFETCH_L1(ptr) (void)(ptr) /* disabled */
|
104
|
+
# define PREFETCH_L2(ptr) (void)(ptr) /* disabled */
|
101
105
|
#else
|
102
106
|
# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */
|
103
107
|
# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
|
104
|
-
# define
|
108
|
+
# define PREFETCH_L1(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
|
109
|
+
# define PREFETCH_L2(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T1)
|
105
110
|
# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
|
106
|
-
# define
|
111
|
+
# define PREFETCH_L1(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
|
112
|
+
# define PREFETCH_L2(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 2 /* locality */)
|
107
113
|
# else
|
108
|
-
# define
|
114
|
+
# define PREFETCH_L1(ptr) (void)(ptr) /* disabled */
|
115
|
+
# define PREFETCH_L2(ptr) (void)(ptr) /* disabled */
|
109
116
|
# endif
|
110
117
|
#endif /* NO_PREFETCH */
|
111
118
|
|
@@ -116,7 +123,7 @@
|
|
116
123
|
size_t const _size = (size_t)(s); \
|
117
124
|
size_t _pos; \
|
118
125
|
for (_pos=0; _pos<_size; _pos+=CACHELINE_SIZE) { \
|
119
|
-
|
126
|
+
PREFETCH_L2(_ptr + _pos); \
|
120
127
|
} \
|
121
128
|
}
|
122
129
|
|
@@ -57,9 +57,9 @@ extern "C" {
|
|
57
57
|
#endif
|
58
58
|
|
59
59
|
|
60
|
-
/* static assert is triggered at compile time, leaving no runtime artefact
|
61
|
-
*
|
62
|
-
*
|
60
|
+
/* static assert is triggered at compile time, leaving no runtime artefact.
|
61
|
+
* static assert only works with compile-time constants.
|
62
|
+
* Also, this variant can only be used inside a function. */
|
63
63
|
#define DEBUG_STATIC_ASSERT(c) (void)sizeof(char[(c) ? 1 : -1])
|
64
64
|
|
65
65
|
|
@@ -70,9 +70,19 @@ extern "C" {
|
|
70
70
|
# define DEBUGLEVEL 0
|
71
71
|
#endif
|
72
72
|
|
73
|
+
|
74
|
+
/* DEBUGFILE can be defined externally,
|
75
|
+
* typically through compiler command line.
|
76
|
+
* note : currently useless.
|
77
|
+
* Value must be stderr or stdout */
|
78
|
+
#ifndef DEBUGFILE
|
79
|
+
# define DEBUGFILE stderr
|
80
|
+
#endif
|
81
|
+
|
82
|
+
|
73
83
|
/* recommended values for DEBUGLEVEL :
|
74
|
-
* 0 : no debug, all run-time
|
75
|
-
* 1 :
|
84
|
+
* 0 : release mode, no debug, all run-time checks disabled
|
85
|
+
* 1 : enables assert() only, no display
|
76
86
|
* 2 : reserved, for currently active debug path
|
77
87
|
* 3 : events once per object lifetime (CCtx, CDict, etc.)
|
78
88
|
* 4 : events once per frame
|
@@ -81,7 +91,7 @@ extern "C" {
|
|
81
91
|
* 7+: events at every position (*very* verbose)
|
82
92
|
*
|
83
93
|
* It's generally inconvenient to output traces > 5.
|
84
|
-
* In which case, it's possible to selectively
|
94
|
+
* In which case, it's possible to selectively trigger high verbosity levels
|
85
95
|
* by modifying g_debug_level.
|
86
96
|
*/
|
87
97
|
|
@@ -95,11 +105,12 @@ extern "C" {
|
|
95
105
|
|
96
106
|
#if (DEBUGLEVEL>=2)
|
97
107
|
# include <stdio.h>
|
98
|
-
extern int g_debuglevel; /*
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
108
|
+
extern int g_debuglevel; /* the variable is only declared,
|
109
|
+
it actually lives in debug.c,
|
110
|
+
and is shared by the whole process.
|
111
|
+
It's not thread-safe.
|
112
|
+
It's useful when enabling very verbose levels
|
113
|
+
on selective conditions (such as position in src) */
|
103
114
|
|
104
115
|
# define RAWLOG(l, ...) { \
|
105
116
|
if (l<=g_debuglevel) { \
|
@@ -14,6 +14,10 @@
|
|
14
14
|
|
15
15
|
const char* ERR_getErrorString(ERR_enum code)
|
16
16
|
{
|
17
|
+
#ifdef ZSTD_STRIP_ERROR_STRINGS
|
18
|
+
(void)code;
|
19
|
+
return "Error strings stripped";
|
20
|
+
#else
|
17
21
|
static const char* const notErrorCode = "Unspecified error code";
|
18
22
|
switch( code )
|
19
23
|
{
|
@@ -39,10 +43,12 @@ const char* ERR_getErrorString(ERR_enum code)
|
|
39
43
|
case PREFIX(dictionaryCreation_failed): return "Cannot create Dictionary from provided samples";
|
40
44
|
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
41
45
|
case PREFIX(srcSize_wrong): return "Src size is incorrect";
|
46
|
+
case PREFIX(dstBuffer_null): return "Operation on NULL destination buffer";
|
42
47
|
/* following error codes are not stable and may be removed or changed in a future version */
|
43
48
|
case PREFIX(frameIndex_tooLarge): return "Frame index is too large";
|
44
49
|
case PREFIX(seekableIO): return "An I/O error occurred when reading/seeking";
|
45
50
|
case PREFIX(maxCode):
|
46
51
|
default: return notErrorCode;
|
47
52
|
}
|
53
|
+
#endif
|
48
54
|
}
|