zstdlib 0.7.0-x86-mingw32 → 0.10.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- 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/2.4/zstdlib_c.so +0 -0
- data/lib/2.5/zstdlib_c.so +0 -0
- data/lib/2.6/zstdlib_c.so +0 -0
- data/lib/2.7/zstdlib_c.so +0 -0
- data/lib/3.0/zstdlib_c.so +0 -0
- data/lib/3.1/zstdlib_c.so +0 -0
- data/lib/zstdlib.rb +2 -2
- metadata +125 -116
- 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
- data/lib/2.2/zstdlib.so +0 -0
- data/lib/2.3/zstdlib.so +0 -0
- data/lib/2.4/zstdlib.so +0 -0
- data/lib/2.5/zstdlib.so +0 -0
- data/lib/2.6/zstdlib.so +0 -0
- data/lib/2.7/zstdlib.so +0 -0
@@ -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"
|