zstd-ruby 1.3.7.0 → 1.3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
}
|