zstdlib 0.7.0 → 0.10.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/CHANGES.md +20 -0
- data/README.md +7 -1
- data/Rakefile +38 -8
- data/ext/{zstdlib → zstdlib_c}/extconf.rb +11 -6
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.2/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.3/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.4/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.5/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.6/zstdlib.c +2 -2
- data/ext/{zstdlib → zstdlib_c}/ruby/zlib-2.7/zstdlib.c +2 -2
- data/ext/zstdlib_c/ruby/zlib-3.0/zstdlib.c +4994 -0
- data/ext/zstdlib_c/ruby/zlib-3.1/zstdlib.c +5076 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/adler32.c +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/compress.c +0 -0
- data/ext/zstdlib_c/zlib-1.2.12/crc32.c +1116 -0
- data/ext/zstdlib_c/zlib-1.2.12/crc32.h +9446 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/deflate.c +78 -30
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/deflate.h +12 -15
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzclose.c +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzguts.h +3 -2
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzlib.c +5 -3
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzread.c +5 -7
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/gzwrite.c +25 -13
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/infback.c +2 -1
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inffast.c +14 -14
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inffast.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inffixed.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inflate.c +39 -8
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inflate.h +3 -2
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inftrees.c +3 -3
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/inftrees.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/trees.c +27 -48
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/trees.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/uncompr.c +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zconf.h +0 -0
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zlib.h +123 -100
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zutil.c +2 -2
- data/ext/{zstdlib/zlib-1.2.11 → zstdlib_c/zlib-1.2.12}/zutil.h +12 -9
- data/ext/{zstdlib → zstdlib_c}/zlib.mk +0 -0
- data/ext/{zstdlib → zstdlib_c}/zlibwrapper/zlibwrapper.c +1 -5
- data/ext/{zstdlib → zstdlib_c}/zlibwrapper.mk +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/bitstream.h +46 -22
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/compiler.h +335 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/cpu.h +1 -3
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/debug.c +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/debug.h +12 -19
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/entropy_common.c +368 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/error_private.c +2 -1
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/error_private.h +159 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/fse.h +41 -12
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/fse_decompress.c +139 -22
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/huf.h +47 -23
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/mem.h +87 -98
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/pool.c +34 -23
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/pool.h +4 -4
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/portability_macros.h +137 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/threading.c +6 -5
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/threading.h +0 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/xxhash.c +24 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/xxhash.h +5686 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/zstd_common.c +10 -10
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/zstd_deps.h +111 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/common/zstd_internal.h +191 -145
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/zstd_trace.h +163 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/clevels.h +134 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/fse_compress.c +89 -46
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/hist.c +27 -29
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/hist.h +2 -2
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/huf_compress.c +1370 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress.c +2917 -868
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_internal.h +458 -125
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_literals.c +12 -11
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_literals.h +4 -2
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_sequences.c +41 -18
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_sequences.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_superblock.c +26 -298
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_compress_superblock.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_cwksp.h +234 -83
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_double_fast.c +313 -138
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_double_fast.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_fast.c +329 -150
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_fast.h +1 -1
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_lazy.c +2104 -0
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_lazy.h +125 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_ldm.c +321 -216
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_ldm.h +9 -2
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_ldm_geartab.h +106 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_opt.c +412 -166
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstd_opt.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/compress/zstdmt_compress.c +169 -453
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstdmt_compress.h +113 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/huf_decompress.c +1044 -403
- data/ext/zstdlib_c/zstd-1.5.2/lib/decompress/huf_decompress_amd64.S +585 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_ddict.c +9 -9
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_ddict.h +2 -2
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress.c +450 -105
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress_block.c +913 -273
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress_block.h +14 -5
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/decompress/zstd_decompress_internal.h +59 -12
- data/ext/zstdlib_c/zstd-1.5.2/lib/zdict.h +452 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/lib/zstd.h +699 -214
- data/ext/{zstdlib/zstd-1.4.5/lib/common → zstdlib_c/zstd-1.5.2/lib}/zstd_errors.h +2 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzclose.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzcompatibility.h +1 -1
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzguts.h +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzlib.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzread.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/gzwrite.c +0 -0
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/zstd_zlibwrapper.c +133 -44
- data/ext/{zstdlib/zstd-1.4.5 → zstdlib_c/zstd-1.5.2}/zlibWrapper/zstd_zlibwrapper.h +1 -1
- data/ext/zstdlib_c/zstd.mk +15 -0
- data/lib/zstdlib.rb +2 -2
- metadata +118 -109
- data/ext/zstdlib/zlib-1.2.11/crc32.c +0 -442
- data/ext/zstdlib/zlib-1.2.11/crc32.h +0 -441
- data/ext/zstdlib/zstd-1.4.5/lib/common/compiler.h +0 -175
- data/ext/zstdlib/zstd-1.4.5/lib/common/entropy_common.c +0 -216
- data/ext/zstdlib/zstd-1.4.5/lib/common/error_private.h +0 -80
- data/ext/zstdlib/zstd-1.4.5/lib/common/xxhash.c +0 -864
- data/ext/zstdlib/zstd-1.4.5/lib/common/xxhash.h +0 -285
- data/ext/zstdlib/zstd-1.4.5/lib/compress/huf_compress.c +0 -798
- data/ext/zstdlib/zstd-1.4.5/lib/compress/zstd_lazy.c +0 -1138
- data/ext/zstdlib/zstd-1.4.5/lib/compress/zstd_lazy.h +0 -67
- data/ext/zstdlib/zstd-1.4.5/lib/compress/zstdmt_compress.h +0 -192
- data/ext/zstdlib/zstd.mk +0 -14
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c)
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -18,8 +18,10 @@ extern "C" {
|
|
18
18
|
/*-****************************************
|
19
19
|
* Dependencies
|
20
20
|
******************************************/
|
21
|
-
#include <stddef.h>
|
22
|
-
#include
|
21
|
+
#include <stddef.h> /* size_t, ptrdiff_t */
|
22
|
+
#include "compiler.h" /* __has_builtin */
|
23
|
+
#include "debug.h" /* DEBUG_STATIC_ASSERT */
|
24
|
+
#include "zstd_deps.h" /* ZSTD_memcpy */
|
23
25
|
|
24
26
|
|
25
27
|
/*-****************************************
|
@@ -39,94 +41,18 @@ extern "C" {
|
|
39
41
|
# define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
40
42
|
#endif
|
41
43
|
|
42
|
-
#ifndef __has_builtin
|
43
|
-
# define __has_builtin(x) 0 /* compat. with non-clang compilers */
|
44
|
-
#endif
|
45
|
-
|
46
|
-
/* code only tested on 32 and 64 bits systems */
|
47
|
-
#define MEM_STATIC_ASSERT(c) { enum { MEM_static_assert = 1/(int)(!!(c)) }; }
|
48
|
-
MEM_STATIC void MEM_check(void) { MEM_STATIC_ASSERT((sizeof(size_t)==4) || (sizeof(size_t)==8)); }
|
49
|
-
|
50
|
-
/* detects whether we are being compiled under msan */
|
51
|
-
#if defined (__has_feature)
|
52
|
-
# if __has_feature(memory_sanitizer)
|
53
|
-
# define MEMORY_SANITIZER 1
|
54
|
-
# endif
|
55
|
-
#endif
|
56
|
-
|
57
|
-
#if defined (MEMORY_SANITIZER)
|
58
|
-
/* Not all platforms that support msan provide sanitizers/msan_interface.h.
|
59
|
-
* We therefore declare the functions we need ourselves, rather than trying to
|
60
|
-
* include the header file... */
|
61
|
-
|
62
|
-
#include <stdint.h> /* intptr_t */
|
63
|
-
|
64
|
-
/* Make memory region fully initialized (without changing its contents). */
|
65
|
-
void __msan_unpoison(const volatile void *a, size_t size);
|
66
|
-
|
67
|
-
/* Make memory region fully uninitialized (without changing its contents).
|
68
|
-
This is a legacy interface that does not update origin information. Use
|
69
|
-
__msan_allocated_memory() instead. */
|
70
|
-
void __msan_poison(const volatile void *a, size_t size);
|
71
|
-
|
72
|
-
/* Returns the offset of the first (at least partially) poisoned byte in the
|
73
|
-
memory range, or -1 if the whole range is good. */
|
74
|
-
intptr_t __msan_test_shadow(const volatile void *x, size_t size);
|
75
|
-
#endif
|
76
|
-
|
77
|
-
/* detects whether we are being compiled under asan */
|
78
|
-
#if defined (__has_feature)
|
79
|
-
# if __has_feature(address_sanitizer)
|
80
|
-
# define ADDRESS_SANITIZER 1
|
81
|
-
# endif
|
82
|
-
#elif defined(__SANITIZE_ADDRESS__)
|
83
|
-
# define ADDRESS_SANITIZER 1
|
84
|
-
#endif
|
85
|
-
|
86
|
-
#if defined (ADDRESS_SANITIZER)
|
87
|
-
/* Not all platforms that support asan provide sanitizers/asan_interface.h.
|
88
|
-
* We therefore declare the functions we need ourselves, rather than trying to
|
89
|
-
* include the header file... */
|
90
|
-
|
91
|
-
/**
|
92
|
-
* Marks a memory region (<c>[addr, addr+size)</c>) as unaddressable.
|
93
|
-
*
|
94
|
-
* This memory must be previously allocated by your program. Instrumented
|
95
|
-
* code is forbidden from accessing addresses in this region until it is
|
96
|
-
* unpoisoned. This function is not guaranteed to poison the entire region -
|
97
|
-
* it could poison only a subregion of <c>[addr, addr+size)</c> due to ASan
|
98
|
-
* alignment restrictions.
|
99
|
-
*
|
100
|
-
* \note This function is not thread-safe because no two threads can poison or
|
101
|
-
* unpoison memory in the same memory region simultaneously.
|
102
|
-
*
|
103
|
-
* \param addr Start of memory region.
|
104
|
-
* \param size Size of memory region. */
|
105
|
-
void __asan_poison_memory_region(void const volatile *addr, size_t size);
|
106
|
-
|
107
|
-
/**
|
108
|
-
* Marks a memory region (<c>[addr, addr+size)</c>) as addressable.
|
109
|
-
*
|
110
|
-
* This memory must be previously allocated by your program. Accessing
|
111
|
-
* addresses in this region is allowed until this region is poisoned again.
|
112
|
-
* This function could unpoison a super-region of <c>[addr, addr+size)</c> due
|
113
|
-
* to ASan alignment restrictions.
|
114
|
-
*
|
115
|
-
* \note This function is not thread-safe because no two threads can
|
116
|
-
* poison or unpoison memory in the same memory region simultaneously.
|
117
|
-
*
|
118
|
-
* \param addr Start of memory region.
|
119
|
-
* \param size Size of memory region. */
|
120
|
-
void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
|
121
|
-
#endif
|
122
|
-
|
123
|
-
|
124
44
|
/*-**************************************************************
|
125
45
|
* Basic Types
|
126
46
|
*****************************************************************/
|
127
47
|
#if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
|
128
|
-
#
|
48
|
+
# if defined(_AIX)
|
49
|
+
# include <inttypes.h>
|
50
|
+
# else
|
51
|
+
# include <stdint.h> /* intptr_t */
|
52
|
+
# endif
|
129
53
|
typedef uint8_t BYTE;
|
54
|
+
typedef uint8_t U8;
|
55
|
+
typedef int8_t S8;
|
130
56
|
typedef uint16_t U16;
|
131
57
|
typedef int16_t S16;
|
132
58
|
typedef uint32_t U32;
|
@@ -139,6 +65,8 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
|
|
139
65
|
# error "this implementation requires char to be exactly 8-bit type"
|
140
66
|
#endif
|
141
67
|
typedef unsigned char BYTE;
|
68
|
+
typedef unsigned char U8;
|
69
|
+
typedef signed char S8;
|
142
70
|
#if USHRT_MAX != 65535
|
143
71
|
# error "this implementation requires short to be exactly 16-bit type"
|
144
72
|
#endif
|
@@ -157,7 +85,53 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
|
|
157
85
|
|
158
86
|
|
159
87
|
/*-**************************************************************
|
160
|
-
* Memory I/O
|
88
|
+
* Memory I/O API
|
89
|
+
*****************************************************************/
|
90
|
+
/*=== Static platform detection ===*/
|
91
|
+
MEM_STATIC unsigned MEM_32bits(void);
|
92
|
+
MEM_STATIC unsigned MEM_64bits(void);
|
93
|
+
MEM_STATIC unsigned MEM_isLittleEndian(void);
|
94
|
+
|
95
|
+
/*=== Native unaligned read/write ===*/
|
96
|
+
MEM_STATIC U16 MEM_read16(const void* memPtr);
|
97
|
+
MEM_STATIC U32 MEM_read32(const void* memPtr);
|
98
|
+
MEM_STATIC U64 MEM_read64(const void* memPtr);
|
99
|
+
MEM_STATIC size_t MEM_readST(const void* memPtr);
|
100
|
+
|
101
|
+
MEM_STATIC void MEM_write16(void* memPtr, U16 value);
|
102
|
+
MEM_STATIC void MEM_write32(void* memPtr, U32 value);
|
103
|
+
MEM_STATIC void MEM_write64(void* memPtr, U64 value);
|
104
|
+
|
105
|
+
/*=== Little endian unaligned read/write ===*/
|
106
|
+
MEM_STATIC U16 MEM_readLE16(const void* memPtr);
|
107
|
+
MEM_STATIC U32 MEM_readLE24(const void* memPtr);
|
108
|
+
MEM_STATIC U32 MEM_readLE32(const void* memPtr);
|
109
|
+
MEM_STATIC U64 MEM_readLE64(const void* memPtr);
|
110
|
+
MEM_STATIC size_t MEM_readLEST(const void* memPtr);
|
111
|
+
|
112
|
+
MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val);
|
113
|
+
MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val);
|
114
|
+
MEM_STATIC void MEM_writeLE32(void* memPtr, U32 val32);
|
115
|
+
MEM_STATIC void MEM_writeLE64(void* memPtr, U64 val64);
|
116
|
+
MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val);
|
117
|
+
|
118
|
+
/*=== Big endian unaligned read/write ===*/
|
119
|
+
MEM_STATIC U32 MEM_readBE32(const void* memPtr);
|
120
|
+
MEM_STATIC U64 MEM_readBE64(const void* memPtr);
|
121
|
+
MEM_STATIC size_t MEM_readBEST(const void* memPtr);
|
122
|
+
|
123
|
+
MEM_STATIC void MEM_writeBE32(void* memPtr, U32 val32);
|
124
|
+
MEM_STATIC void MEM_writeBE64(void* memPtr, U64 val64);
|
125
|
+
MEM_STATIC void MEM_writeBEST(void* memPtr, size_t val);
|
126
|
+
|
127
|
+
/*=== Byteswap ===*/
|
128
|
+
MEM_STATIC U32 MEM_swap32(U32 in);
|
129
|
+
MEM_STATIC U64 MEM_swap64(U64 in);
|
130
|
+
MEM_STATIC size_t MEM_swapST(size_t in);
|
131
|
+
|
132
|
+
|
133
|
+
/*-**************************************************************
|
134
|
+
* Memory I/O Implementation
|
161
135
|
*****************************************************************/
|
162
136
|
/* MEM_FORCE_MEMORY_ACCESS :
|
163
137
|
* By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
|
@@ -173,9 +147,7 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
|
|
173
147
|
* Prefer these methods in priority order (0 > 1 > 2)
|
174
148
|
*/
|
175
149
|
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
176
|
-
# if defined(
|
177
|
-
# define MEM_FORCE_MEMORY_ACCESS 2
|
178
|
-
# elif defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
|
150
|
+
# if defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
|
179
151
|
# define MEM_FORCE_MEMORY_ACCESS 1
|
180
152
|
# endif
|
181
153
|
#endif
|
@@ -185,8 +157,22 @@ MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; }
|
|
185
157
|
|
186
158
|
MEM_STATIC unsigned MEM_isLittleEndian(void)
|
187
159
|
{
|
160
|
+
#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
161
|
+
return 1;
|
162
|
+
#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
163
|
+
return 0;
|
164
|
+
#elif defined(__clang__) && __LITTLE_ENDIAN__
|
165
|
+
return 1;
|
166
|
+
#elif defined(__clang__) && __BIG_ENDIAN__
|
167
|
+
return 0;
|
168
|
+
#elif defined(_MSC_VER) && (_M_AMD64 || _M_IX86)
|
169
|
+
return 1;
|
170
|
+
#elif defined(__DMC__) && defined(_M_IX86)
|
171
|
+
return 1;
|
172
|
+
#else
|
188
173
|
const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */
|
189
174
|
return one.c[0];
|
175
|
+
#endif
|
190
176
|
}
|
191
177
|
|
192
178
|
#if defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==2)
|
@@ -236,37 +222,37 @@ MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign64*)memPtr)->v =
|
|
236
222
|
|
237
223
|
MEM_STATIC U16 MEM_read16(const void* memPtr)
|
238
224
|
{
|
239
|
-
U16 val;
|
225
|
+
U16 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
|
240
226
|
}
|
241
227
|
|
242
228
|
MEM_STATIC U32 MEM_read32(const void* memPtr)
|
243
229
|
{
|
244
|
-
U32 val;
|
230
|
+
U32 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
|
245
231
|
}
|
246
232
|
|
247
233
|
MEM_STATIC U64 MEM_read64(const void* memPtr)
|
248
234
|
{
|
249
|
-
U64 val;
|
235
|
+
U64 val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
|
250
236
|
}
|
251
237
|
|
252
238
|
MEM_STATIC size_t MEM_readST(const void* memPtr)
|
253
239
|
{
|
254
|
-
size_t val;
|
240
|
+
size_t val; ZSTD_memcpy(&val, memPtr, sizeof(val)); return val;
|
255
241
|
}
|
256
242
|
|
257
243
|
MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
258
244
|
{
|
259
|
-
|
245
|
+
ZSTD_memcpy(memPtr, &value, sizeof(value));
|
260
246
|
}
|
261
247
|
|
262
248
|
MEM_STATIC void MEM_write32(void* memPtr, U32 value)
|
263
249
|
{
|
264
|
-
|
250
|
+
ZSTD_memcpy(memPtr, &value, sizeof(value));
|
265
251
|
}
|
266
252
|
|
267
253
|
MEM_STATIC void MEM_write64(void* memPtr, U64 value)
|
268
254
|
{
|
269
|
-
|
255
|
+
ZSTD_memcpy(memPtr, &value, sizeof(value));
|
270
256
|
}
|
271
257
|
|
272
258
|
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
@@ -338,7 +324,7 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
|
|
338
324
|
|
339
325
|
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
|
340
326
|
{
|
341
|
-
return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
|
327
|
+
return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
|
342
328
|
}
|
343
329
|
|
344
330
|
MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val)
|
@@ -445,6 +431,9 @@ MEM_STATIC void MEM_writeBEST(void* memPtr, size_t val)
|
|
445
431
|
MEM_writeBE64(memPtr, (U64)val);
|
446
432
|
}
|
447
433
|
|
434
|
+
/* code only tested on 32 and 64 bits systems */
|
435
|
+
MEM_STATIC void MEM_check(void) { DEBUG_STATIC_ASSERT((sizeof(size_t)==4) || (sizeof(size_t)==8)); }
|
436
|
+
|
448
437
|
|
449
438
|
#if defined (__cplusplus)
|
450
439
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c)
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -10,9 +10,9 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
/* ====== Dependencies ======= */
|
13
|
-
#include
|
13
|
+
#include "zstd_deps.h" /* size_t */
|
14
14
|
#include "debug.h" /* assert */
|
15
|
-
#include "zstd_internal.h" /*
|
15
|
+
#include "zstd_internal.h" /* ZSTD_customMalloc, ZSTD_customFree */
|
16
16
|
#include "pool.h"
|
17
17
|
|
18
18
|
/* ====== Compiler specifics ====== */
|
@@ -86,7 +86,7 @@ static void* POOL_thread(void* opaque) {
|
|
86
86
|
{ POOL_job const job = ctx->queue[ctx->queueHead];
|
87
87
|
ctx->queueHead = (ctx->queueHead + 1) % ctx->queueSize;
|
88
88
|
ctx->numThreadsBusy++;
|
89
|
-
ctx->queueEmpty = ctx->queueHead == ctx->queueTail;
|
89
|
+
ctx->queueEmpty = (ctx->queueHead == ctx->queueTail);
|
90
90
|
/* Unlock the mutex, signal a pusher, and run the job */
|
91
91
|
ZSTD_pthread_cond_signal(&ctx->queuePushCond);
|
92
92
|
ZSTD_pthread_mutex_unlock(&ctx->queueMutex);
|
@@ -105,24 +105,30 @@ static void* POOL_thread(void* opaque) {
|
|
105
105
|
assert(0); /* Unreachable */
|
106
106
|
}
|
107
107
|
|
108
|
+
/* ZSTD_createThreadPool() : public access point */
|
109
|
+
POOL_ctx* ZSTD_createThreadPool(size_t numThreads) {
|
110
|
+
return POOL_create (numThreads, 0);
|
111
|
+
}
|
112
|
+
|
108
113
|
POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
|
109
114
|
return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem);
|
110
115
|
}
|
111
116
|
|
112
117
|
POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize,
|
113
|
-
ZSTD_customMem customMem)
|
118
|
+
ZSTD_customMem customMem)
|
119
|
+
{
|
114
120
|
POOL_ctx* ctx;
|
115
121
|
/* Check parameters */
|
116
122
|
if (!numThreads) { return NULL; }
|
117
123
|
/* Allocate the context and zero initialize */
|
118
|
-
ctx = (POOL_ctx*)
|
124
|
+
ctx = (POOL_ctx*)ZSTD_customCalloc(sizeof(POOL_ctx), customMem);
|
119
125
|
if (!ctx) { return NULL; }
|
120
126
|
/* Initialize the job queue.
|
121
127
|
* It needs one extra space since one space is wasted to differentiate
|
122
128
|
* empty and full queues.
|
123
129
|
*/
|
124
130
|
ctx->queueSize = queueSize + 1;
|
125
|
-
ctx->queue = (POOL_job*)
|
131
|
+
ctx->queue = (POOL_job*)ZSTD_customMalloc(ctx->queueSize * sizeof(POOL_job), customMem);
|
126
132
|
ctx->queueHead = 0;
|
127
133
|
ctx->queueTail = 0;
|
128
134
|
ctx->numThreadsBusy = 0;
|
@@ -136,7 +142,7 @@ POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize,
|
|
136
142
|
}
|
137
143
|
ctx->shutdown = 0;
|
138
144
|
/* Allocate space for the thread handles */
|
139
|
-
ctx->threads = (ZSTD_pthread_t*)
|
145
|
+
ctx->threads = (ZSTD_pthread_t*)ZSTD_customMalloc(numThreads * sizeof(ZSTD_pthread_t), customMem);
|
140
146
|
ctx->threadCapacity = 0;
|
141
147
|
ctx->customMem = customMem;
|
142
148
|
/* Check for errors */
|
@@ -179,14 +185,16 @@ void POOL_free(POOL_ctx *ctx) {
|
|
179
185
|
ZSTD_pthread_mutex_destroy(&ctx->queueMutex);
|
180
186
|
ZSTD_pthread_cond_destroy(&ctx->queuePushCond);
|
181
187
|
ZSTD_pthread_cond_destroy(&ctx->queuePopCond);
|
182
|
-
|
183
|
-
|
184
|
-
|
188
|
+
ZSTD_customFree(ctx->queue, ctx->customMem);
|
189
|
+
ZSTD_customFree(ctx->threads, ctx->customMem);
|
190
|
+
ZSTD_customFree(ctx, ctx->customMem);
|
185
191
|
}
|
186
192
|
|
193
|
+
void ZSTD_freeThreadPool (ZSTD_threadPool* pool) {
|
194
|
+
POOL_free (pool);
|
195
|
+
}
|
187
196
|
|
188
|
-
|
189
|
-
size_t POOL_sizeof(POOL_ctx *ctx) {
|
197
|
+
size_t POOL_sizeof(const POOL_ctx* ctx) {
|
190
198
|
if (ctx==NULL) return 0; /* supports sizeof NULL */
|
191
199
|
return sizeof(*ctx)
|
192
200
|
+ ctx->queueSize * sizeof(POOL_job)
|
@@ -203,11 +211,11 @@ static int POOL_resize_internal(POOL_ctx* ctx, size_t numThreads)
|
|
203
211
|
return 0;
|
204
212
|
}
|
205
213
|
/* numThreads > threadCapacity */
|
206
|
-
{ ZSTD_pthread_t* const threadPool = (ZSTD_pthread_t*)
|
214
|
+
{ ZSTD_pthread_t* const threadPool = (ZSTD_pthread_t*)ZSTD_customMalloc(numThreads * sizeof(ZSTD_pthread_t), ctx->customMem);
|
207
215
|
if (!threadPool) return 1;
|
208
216
|
/* replace existing thread pool */
|
209
|
-
|
210
|
-
|
217
|
+
ZSTD_memcpy(threadPool, ctx->threads, ctx->threadCapacity * sizeof(*threadPool));
|
218
|
+
ZSTD_customFree(ctx->threads, ctx->customMem);
|
211
219
|
ctx->threads = threadPool;
|
212
220
|
/* Initialize additional threads */
|
213
221
|
{ size_t threadId;
|
@@ -251,7 +259,8 @@ static int isQueueFull(POOL_ctx const* ctx) {
|
|
251
259
|
}
|
252
260
|
|
253
261
|
|
254
|
-
static void
|
262
|
+
static void
|
263
|
+
POOL_add_internal(POOL_ctx* ctx, POOL_function function, void *opaque)
|
255
264
|
{
|
256
265
|
POOL_job const job = {function, opaque};
|
257
266
|
assert(ctx != NULL);
|
@@ -301,21 +310,23 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque)
|
|
301
310
|
struct POOL_ctx_s {
|
302
311
|
int dummy;
|
303
312
|
};
|
304
|
-
static POOL_ctx
|
313
|
+
static POOL_ctx g_poolCtx;
|
305
314
|
|
306
315
|
POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
|
307
316
|
return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem);
|
308
317
|
}
|
309
318
|
|
310
|
-
POOL_ctx*
|
319
|
+
POOL_ctx*
|
320
|
+
POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem)
|
321
|
+
{
|
311
322
|
(void)numThreads;
|
312
323
|
(void)queueSize;
|
313
324
|
(void)customMem;
|
314
|
-
return &
|
325
|
+
return &g_poolCtx;
|
315
326
|
}
|
316
327
|
|
317
328
|
void POOL_free(POOL_ctx* ctx) {
|
318
|
-
assert(!ctx || ctx == &
|
329
|
+
assert(!ctx || ctx == &g_poolCtx);
|
319
330
|
(void)ctx;
|
320
331
|
}
|
321
332
|
|
@@ -335,9 +346,9 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) {
|
|
335
346
|
return 1;
|
336
347
|
}
|
337
348
|
|
338
|
-
size_t POOL_sizeof(POOL_ctx* ctx) {
|
349
|
+
size_t POOL_sizeof(const POOL_ctx* ctx) {
|
339
350
|
if (ctx==NULL) return 0; /* supports sizeof NULL */
|
340
|
-
assert(ctx == &
|
351
|
+
assert(ctx == &g_poolCtx);
|
341
352
|
return sizeof(*ctx);
|
342
353
|
}
|
343
354
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c)
|
2
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -16,7 +16,7 @@ extern "C" {
|
|
16
16
|
#endif
|
17
17
|
|
18
18
|
|
19
|
-
#include
|
19
|
+
#include "zstd_deps.h"
|
20
20
|
#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_customMem */
|
21
21
|
#include "../zstd.h"
|
22
22
|
|
@@ -53,7 +53,7 @@ int POOL_resize(POOL_ctx* ctx, size_t numThreads);
|
|
53
53
|
* @return threadpool memory usage
|
54
54
|
* note : compatible with NULL (returns 0 in this case)
|
55
55
|
*/
|
56
|
-
size_t POOL_sizeof(POOL_ctx* ctx);
|
56
|
+
size_t POOL_sizeof(const POOL_ctx* ctx);
|
57
57
|
|
58
58
|
/*! POOL_function :
|
59
59
|
* The function type that can be added to a thread pool.
|
@@ -70,7 +70,7 @@ void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque);
|
|
70
70
|
|
71
71
|
|
72
72
|
/*! POOL_tryAdd() :
|
73
|
-
* Add the job `function(opaque)` to thread pool _if_ a
|
73
|
+
* Add the job `function(opaque)` to thread pool _if_ a queue slot is available.
|
74
74
|
* Returns immediately even if not (does not block).
|
75
75
|
* @return : 1 if successful, 0 if not.
|
76
76
|
*/
|
@@ -0,0 +1,137 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) Facebook, Inc.
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* This source code is licensed under both the BSD-style license (found in the
|
6
|
+
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
7
|
+
* in the COPYING file in the root directory of this source tree).
|
8
|
+
* You may select, at your option, one of the above-listed licenses.
|
9
|
+
*/
|
10
|
+
|
11
|
+
#ifndef ZSTD_PORTABILITY_MACROS_H
|
12
|
+
#define ZSTD_PORTABILITY_MACROS_H
|
13
|
+
|
14
|
+
/**
|
15
|
+
* This header file contains macro defintions to support portability.
|
16
|
+
* This header is shared between C and ASM code, so it MUST only
|
17
|
+
* contain macro definitions. It MUST not contain any C code.
|
18
|
+
*
|
19
|
+
* This header ONLY defines macros to detect platforms/feature support.
|
20
|
+
*
|
21
|
+
*/
|
22
|
+
|
23
|
+
|
24
|
+
/* compat. with non-clang compilers */
|
25
|
+
#ifndef __has_attribute
|
26
|
+
#define __has_attribute(x) 0
|
27
|
+
#endif
|
28
|
+
|
29
|
+
/* compat. with non-clang compilers */
|
30
|
+
#ifndef __has_builtin
|
31
|
+
# define __has_builtin(x) 0
|
32
|
+
#endif
|
33
|
+
|
34
|
+
/* compat. with non-clang compilers */
|
35
|
+
#ifndef __has_feature
|
36
|
+
# define __has_feature(x) 0
|
37
|
+
#endif
|
38
|
+
|
39
|
+
/* detects whether we are being compiled under msan */
|
40
|
+
#ifndef ZSTD_MEMORY_SANITIZER
|
41
|
+
# if __has_feature(memory_sanitizer)
|
42
|
+
# define ZSTD_MEMORY_SANITIZER 1
|
43
|
+
# else
|
44
|
+
# define ZSTD_MEMORY_SANITIZER 0
|
45
|
+
# endif
|
46
|
+
#endif
|
47
|
+
|
48
|
+
/* detects whether we are being compiled under asan */
|
49
|
+
#ifndef ZSTD_ADDRESS_SANITIZER
|
50
|
+
# if __has_feature(address_sanitizer)
|
51
|
+
# define ZSTD_ADDRESS_SANITIZER 1
|
52
|
+
# elif defined(__SANITIZE_ADDRESS__)
|
53
|
+
# define ZSTD_ADDRESS_SANITIZER 1
|
54
|
+
# else
|
55
|
+
# define ZSTD_ADDRESS_SANITIZER 0
|
56
|
+
# endif
|
57
|
+
#endif
|
58
|
+
|
59
|
+
/* detects whether we are being compiled under dfsan */
|
60
|
+
#ifndef ZSTD_DATAFLOW_SANITIZER
|
61
|
+
# if __has_feature(dataflow_sanitizer)
|
62
|
+
# define ZSTD_DATAFLOW_SANITIZER 1
|
63
|
+
# else
|
64
|
+
# define ZSTD_DATAFLOW_SANITIZER 0
|
65
|
+
# endif
|
66
|
+
#endif
|
67
|
+
|
68
|
+
/* Mark the internal assembly functions as hidden */
|
69
|
+
#ifdef __ELF__
|
70
|
+
# define ZSTD_HIDE_ASM_FUNCTION(func) .hidden func
|
71
|
+
#else
|
72
|
+
# define ZSTD_HIDE_ASM_FUNCTION(func)
|
73
|
+
#endif
|
74
|
+
|
75
|
+
/* Enable runtime BMI2 dispatch based on the CPU.
|
76
|
+
* Enabled for clang & gcc >=4.8 on x86 when BMI2 isn't enabled by default.
|
77
|
+
*/
|
78
|
+
#ifndef DYNAMIC_BMI2
|
79
|
+
#if ((defined(__clang__) && __has_attribute(__target__)) \
|
80
|
+
|| (defined(__GNUC__) \
|
81
|
+
&& (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))) \
|
82
|
+
&& (defined(__x86_64__) || defined(_M_X64)) \
|
83
|
+
&& !defined(__BMI2__)
|
84
|
+
# define DYNAMIC_BMI2 1
|
85
|
+
#else
|
86
|
+
# define DYNAMIC_BMI2 0
|
87
|
+
#endif
|
88
|
+
#endif
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Only enable assembly for GNUC comptabile compilers,
|
92
|
+
* because other platforms may not support GAS assembly syntax.
|
93
|
+
*
|
94
|
+
* Only enable assembly for Linux / MacOS, other platforms may
|
95
|
+
* work, but they haven't been tested. This could likely be
|
96
|
+
* extended to BSD systems.
|
97
|
+
*
|
98
|
+
* Disable assembly when MSAN is enabled, because MSAN requires
|
99
|
+
* 100% of code to be instrumented to work.
|
100
|
+
*/
|
101
|
+
#if defined(__GNUC__)
|
102
|
+
# if defined(__linux__) || defined(__linux) || defined(__APPLE__)
|
103
|
+
# if ZSTD_MEMORY_SANITIZER
|
104
|
+
# define ZSTD_ASM_SUPPORTED 0
|
105
|
+
# elif ZSTD_DATAFLOW_SANITIZER
|
106
|
+
# define ZSTD_ASM_SUPPORTED 0
|
107
|
+
# else
|
108
|
+
# define ZSTD_ASM_SUPPORTED 1
|
109
|
+
# endif
|
110
|
+
# else
|
111
|
+
# define ZSTD_ASM_SUPPORTED 0
|
112
|
+
# endif
|
113
|
+
#else
|
114
|
+
# define ZSTD_ASM_SUPPORTED 0
|
115
|
+
#endif
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Determines whether we should enable assembly for x86-64
|
119
|
+
* with BMI2.
|
120
|
+
*
|
121
|
+
* Enable if all of the following conditions hold:
|
122
|
+
* - ASM hasn't been explicitly disabled by defining ZSTD_DISABLE_ASM
|
123
|
+
* - Assembly is supported
|
124
|
+
* - We are compiling for x86-64 and either:
|
125
|
+
* - DYNAMIC_BMI2 is enabled
|
126
|
+
* - BMI2 is supported at compile time
|
127
|
+
*/
|
128
|
+
#if !defined(ZSTD_DISABLE_ASM) && \
|
129
|
+
ZSTD_ASM_SUPPORTED && \
|
130
|
+
defined(__x86_64__) && \
|
131
|
+
(DYNAMIC_BMI2 || defined(__BMI2__))
|
132
|
+
# define ZSTD_ENABLE_ASM_X86_64_BMI2 1
|
133
|
+
#else
|
134
|
+
# define ZSTD_ENABLE_ASM_X86_64_BMI2 0
|
135
|
+
#endif
|
136
|
+
|
137
|
+
#endif /* ZSTD_PORTABILITY_MACROS_H */
|
@@ -78,11 +78,12 @@ int ZSTD_pthread_join(ZSTD_pthread_t thread, void **value_ptr)
|
|
78
78
|
|
79
79
|
#if defined(ZSTD_MULTITHREAD) && DEBUGLEVEL >= 1 && !defined(_WIN32)
|
80
80
|
|
81
|
-
#
|
81
|
+
#define ZSTD_DEPS_NEED_MALLOC
|
82
|
+
#include "zstd_deps.h"
|
82
83
|
|
83
84
|
int ZSTD_pthread_mutex_init(ZSTD_pthread_mutex_t* mutex, pthread_mutexattr_t const* attr)
|
84
85
|
{
|
85
|
-
*mutex = (pthread_mutex_t*)
|
86
|
+
*mutex = (pthread_mutex_t*)ZSTD_malloc(sizeof(pthread_mutex_t));
|
86
87
|
if (!*mutex)
|
87
88
|
return 1;
|
88
89
|
return pthread_mutex_init(*mutex, attr);
|
@@ -94,14 +95,14 @@ int ZSTD_pthread_mutex_destroy(ZSTD_pthread_mutex_t* mutex)
|
|
94
95
|
return 0;
|
95
96
|
{
|
96
97
|
int const ret = pthread_mutex_destroy(*mutex);
|
97
|
-
|
98
|
+
ZSTD_free(*mutex);
|
98
99
|
return ret;
|
99
100
|
}
|
100
101
|
}
|
101
102
|
|
102
103
|
int ZSTD_pthread_cond_init(ZSTD_pthread_cond_t* cond, pthread_condattr_t const* attr)
|
103
104
|
{
|
104
|
-
*cond = (pthread_cond_t*)
|
105
|
+
*cond = (pthread_cond_t*)ZSTD_malloc(sizeof(pthread_cond_t));
|
105
106
|
if (!*cond)
|
106
107
|
return 1;
|
107
108
|
return pthread_cond_init(*cond, attr);
|
@@ -113,7 +114,7 @@ int ZSTD_pthread_cond_destroy(ZSTD_pthread_cond_t* cond)
|
|
113
114
|
return 0;
|
114
115
|
{
|
115
116
|
int const ret = pthread_cond_destroy(*cond);
|
116
|
-
|
117
|
+
ZSTD_free(*cond);
|
117
118
|
return ret;
|
118
119
|
}
|
119
120
|
}
|
File without changes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
/*
|
2
|
+
* xxHash - Fast Hash algorithm
|
3
|
+
* Copyright (c) Yann Collet, Facebook, Inc.
|
4
|
+
*
|
5
|
+
* You can contact the author at :
|
6
|
+
* - xxHash homepage: http://www.xxhash.com
|
7
|
+
* - xxHash source repository : https://github.com/Cyan4973/xxHash
|
8
|
+
*
|
9
|
+
* This source code is licensed under both the BSD-style license (found in the
|
10
|
+
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
11
|
+
* in the COPYING file in the root directory of this source tree).
|
12
|
+
* You may select, at your option, one of the above-listed licenses.
|
13
|
+
*/
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
/*
|
18
|
+
* xxhash.c instantiates functions defined in xxhash.h
|
19
|
+
*/
|
20
|
+
|
21
|
+
#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */
|
22
|
+
#define XXH_IMPLEMENTATION /* access definitions */
|
23
|
+
|
24
|
+
#include "xxhash.h"
|