zstdlib 0.10.0-arm64-darwin → 0.11.0-arm64-darwin
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 +8 -0
- data/ext/zstdlib_c/extconf.rb +2 -2
- data/ext/zstdlib_c/ruby/zlib-3.2/zstdlib.c +5090 -0
- data/ext/zstdlib_c/zstd-1.5.5/lib/common/allocations.h +55 -0
- data/ext/zstdlib_c/zstd-1.5.5/lib/common/bits.h +200 -0
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/bitstream.h +19 -60
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/compiler.h +26 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/cpu.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/debug.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/debug.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/entropy_common.c +12 -40
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/error_private.c +9 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/error_private.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/fse.h +5 -83
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/fse_decompress.c +7 -99
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/huf.h +65 -156
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/mem.h +39 -46
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/pool.c +26 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/pool.h +7 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/portability_macros.h +22 -3
- data/ext/zstdlib_c/zstd-1.5.5/lib/common/threading.c +176 -0
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/threading.h +5 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/xxhash.c +2 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/xxhash.h +8 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_common.c +1 -36
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_deps.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_internal.h +17 -118
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/common/zstd_trace.h +3 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/clevels.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/fse_compress.c +7 -124
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/hist.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/hist.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/huf_compress.c +234 -169
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress.c +1243 -538
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_internal.h +225 -151
- data/ext/zstdlib_c/zstd-1.5.5/lib/compress/zstd_compress_literals.c +235 -0
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_literals.h +16 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_sequences.c +3 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_sequences.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_superblock.c +25 -21
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_compress_superblock.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_cwksp.h +128 -62
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_double_fast.c +95 -33
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_double_fast.h +3 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_fast.c +433 -148
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_fast.h +3 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_lazy.c +398 -345
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_lazy.h +4 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_ldm.c +5 -5
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_ldm.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_ldm_geartab.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_opt.c +106 -80
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstd_opt.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstdmt_compress.c +17 -9
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/compress/zstdmt_compress.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/huf_decompress.c +434 -441
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/huf_decompress_amd64.S +30 -39
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_ddict.c +4 -4
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_ddict.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress.c +205 -80
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress_block.c +201 -81
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress_block.h +6 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/decompress/zstd_decompress_internal.h +4 -2
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/zdict.h +53 -31
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/zstd.h +580 -135
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/lib/zstd_errors.h +27 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzclose.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzcompatibility.h +8 -8
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzguts.h +10 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzlib.c +3 -3
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzread.c +10 -10
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/gzwrite.c +5 -5
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/zstd_zlibwrapper.c +46 -44
- data/ext/zstdlib_c/{zstd-1.5.2 → zstd-1.5.5}/zlibWrapper/zstd_zlibwrapper.h +4 -1
- data/lib/2.4/zstdlib_c.bundle +0 -0
- data/lib/2.5/zstdlib_c.bundle +0 -0
- data/lib/2.6/zstdlib_c.bundle +0 -0
- data/lib/2.7/zstdlib_c.bundle +0 -0
- data/lib/3.0/zstdlib_c.bundle +0 -0
- data/lib/3.1/zstdlib_c.bundle +0 -0
- data/lib/3.2/zstdlib_c.bundle +0 -0
- metadata +82 -78
- data/ext/zstdlib_c/zstd-1.5.2/lib/common/threading.c +0 -122
- data/ext/zstdlib_c/zstd-1.5.2/lib/compress/zstd_compress_literals.c +0 -159
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c)
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -28,7 +28,6 @@
|
|
28
28
|
#include "../zstd.h"
|
29
29
|
#define FSE_STATIC_LINKING_ONLY
|
30
30
|
#include "fse.h"
|
31
|
-
#define HUF_STATIC_LINKING_ONLY
|
32
31
|
#include "huf.h"
|
33
32
|
#ifndef XXH_STATIC_LINKING_ONLY
|
34
33
|
# define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */
|
@@ -93,9 +92,9 @@ typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e;
|
|
93
92
|
#define ZSTD_FRAMECHECKSUMSIZE 4
|
94
93
|
|
95
94
|
#define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */
|
96
|
-
#define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */
|
95
|
+
#define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */) /* for a non-null block */
|
96
|
+
#define MIN_LITERALS_FOR_4_STREAMS 6
|
97
97
|
|
98
|
-
#define HufLog 12
|
99
98
|
typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingType_e;
|
100
99
|
|
101
100
|
#define LONGNBSEQ 0x7F00
|
@@ -103,6 +102,7 @@ typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingTy
|
|
103
102
|
#define MINMATCH 3
|
104
103
|
|
105
104
|
#define Litbits 8
|
105
|
+
#define LitHufLog 11
|
106
106
|
#define MaxLit ((1<<Litbits) - 1)
|
107
107
|
#define MaxML 52
|
108
108
|
#define MaxLL 35
|
@@ -113,6 +113,8 @@ typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingTy
|
|
113
113
|
#define LLFSELog 9
|
114
114
|
#define OffFSELog 8
|
115
115
|
#define MaxFSELog MAX(MAX(MLFSELog, LLFSELog), OffFSELog)
|
116
|
+
#define MaxMLBits 16
|
117
|
+
#define MaxLLBits 16
|
116
118
|
|
117
119
|
#define ZSTD_MAX_HUF_HEADER_SIZE 128 /* header + <= 127 byte tree description */
|
118
120
|
/* Each table cannot take more than #symbols * FSELog bits */
|
@@ -235,12 +237,6 @@ void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e
|
|
235
237
|
* one COPY16() in the first call. Then, do two calls per loop since
|
236
238
|
* at that point it is more likely to have a high trip count.
|
237
239
|
*/
|
238
|
-
#ifdef __aarch64__
|
239
|
-
do {
|
240
|
-
COPY16(op, ip);
|
241
|
-
}
|
242
|
-
while (op < oend);
|
243
|
-
#else
|
244
240
|
ZSTD_copy16(op, ip);
|
245
241
|
if (16 >= length) return;
|
246
242
|
op += 16;
|
@@ -250,7 +246,6 @@ void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e
|
|
250
246
|
COPY16(op, ip);
|
251
247
|
}
|
252
248
|
while (op < oend);
|
253
|
-
#endif
|
254
249
|
}
|
255
250
|
}
|
256
251
|
|
@@ -299,11 +294,11 @@ typedef enum {
|
|
299
294
|
typedef struct {
|
300
295
|
seqDef* sequencesStart;
|
301
296
|
seqDef* sequences; /* ptr to end of sequences */
|
302
|
-
BYTE*
|
303
|
-
BYTE*
|
304
|
-
BYTE*
|
305
|
-
BYTE*
|
306
|
-
BYTE*
|
297
|
+
BYTE* litStart;
|
298
|
+
BYTE* lit; /* ptr to end of literals */
|
299
|
+
BYTE* llCode;
|
300
|
+
BYTE* mlCode;
|
301
|
+
BYTE* ofCode;
|
307
302
|
size_t maxNbSeq;
|
308
303
|
size_t maxNbLit;
|
309
304
|
|
@@ -311,8 +306,8 @@ typedef struct {
|
|
311
306
|
* in the seqStore that has a value larger than U16 (if it exists). To do so, we increment
|
312
307
|
* the existing value of the litLength or matchLength by 0x10000.
|
313
308
|
*/
|
314
|
-
ZSTD_longLengthType_e
|
315
|
-
U32
|
309
|
+
ZSTD_longLengthType_e longLengthType;
|
310
|
+
U32 longLengthPos; /* Index of the sequence to apply long length modification to */
|
316
311
|
} seqStore_t;
|
317
312
|
|
318
313
|
typedef struct {
|
@@ -331,10 +326,10 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore
|
|
331
326
|
seqLen.matchLength = seq->mlBase + MINMATCH;
|
332
327
|
if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) {
|
333
328
|
if (seqStore->longLengthType == ZSTD_llt_literalLength) {
|
334
|
-
seqLen.litLength +=
|
329
|
+
seqLen.litLength += 0x10000;
|
335
330
|
}
|
336
331
|
if (seqStore->longLengthType == ZSTD_llt_matchLength) {
|
337
|
-
seqLen.matchLength +=
|
332
|
+
seqLen.matchLength += 0x10000;
|
338
333
|
}
|
339
334
|
}
|
340
335
|
return seqLen;
|
@@ -347,109 +342,13 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore
|
|
347
342
|
* `decompressedBound != ZSTD_CONTENTSIZE_ERROR`
|
348
343
|
*/
|
349
344
|
typedef struct {
|
345
|
+
size_t nbBlocks;
|
350
346
|
size_t compressedSize;
|
351
347
|
unsigned long long decompressedBound;
|
352
348
|
} ZSTD_frameSizeInfo; /* decompress & legacy */
|
353
349
|
|
354
350
|
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx); /* compress & dictBuilder */
|
355
|
-
|
356
|
-
|
357
|
-
/* custom memory allocation functions */
|
358
|
-
void* ZSTD_customMalloc(size_t size, ZSTD_customMem customMem);
|
359
|
-
void* ZSTD_customCalloc(size_t size, ZSTD_customMem customMem);
|
360
|
-
void ZSTD_customFree(void* ptr, ZSTD_customMem customMem);
|
361
|
-
|
362
|
-
|
363
|
-
MEM_STATIC U32 ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCorpus */
|
364
|
-
{
|
365
|
-
assert(val != 0);
|
366
|
-
{
|
367
|
-
# if defined(_MSC_VER) /* Visual */
|
368
|
-
# if STATIC_BMI2 == 1
|
369
|
-
return _lzcnt_u32(val)^31;
|
370
|
-
# else
|
371
|
-
if (val != 0) {
|
372
|
-
unsigned long r;
|
373
|
-
_BitScanReverse(&r, val);
|
374
|
-
return (unsigned)r;
|
375
|
-
} else {
|
376
|
-
/* Should not reach this code path */
|
377
|
-
__assume(0);
|
378
|
-
}
|
379
|
-
# endif
|
380
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */
|
381
|
-
return __builtin_clz (val) ^ 31;
|
382
|
-
# elif defined(__ICCARM__) /* IAR Intrinsic */
|
383
|
-
return 31 - __CLZ(val);
|
384
|
-
# else /* Software version */
|
385
|
-
static const U32 DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
386
|
-
U32 v = val;
|
387
|
-
v |= v >> 1;
|
388
|
-
v |= v >> 2;
|
389
|
-
v |= v >> 4;
|
390
|
-
v |= v >> 8;
|
391
|
-
v |= v >> 16;
|
392
|
-
return DeBruijnClz[(v * 0x07C4ACDDU) >> 27];
|
393
|
-
# endif
|
394
|
-
}
|
395
|
-
}
|
396
|
-
|
397
|
-
/**
|
398
|
-
* Counts the number of trailing zeros of a `size_t`.
|
399
|
-
* Most compilers should support CTZ as a builtin. A backup
|
400
|
-
* implementation is provided if the builtin isn't supported, but
|
401
|
-
* it may not be terribly efficient.
|
402
|
-
*/
|
403
|
-
MEM_STATIC unsigned ZSTD_countTrailingZeros(size_t val)
|
404
|
-
{
|
405
|
-
if (MEM_64bits()) {
|
406
|
-
# if defined(_MSC_VER) && defined(_WIN64)
|
407
|
-
# if STATIC_BMI2
|
408
|
-
return _tzcnt_u64(val);
|
409
|
-
# else
|
410
|
-
if (val != 0) {
|
411
|
-
unsigned long r;
|
412
|
-
_BitScanForward64(&r, (U64)val);
|
413
|
-
return (unsigned)r;
|
414
|
-
} else {
|
415
|
-
/* Should not reach this code path */
|
416
|
-
__assume(0);
|
417
|
-
}
|
418
|
-
# endif
|
419
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 4)
|
420
|
-
return __builtin_ctzll((U64)val);
|
421
|
-
# else
|
422
|
-
static const int DeBruijnBytePos[64] = { 0, 1, 2, 7, 3, 13, 8, 19,
|
423
|
-
4, 25, 14, 28, 9, 34, 20, 56,
|
424
|
-
5, 17, 26, 54, 15, 41, 29, 43,
|
425
|
-
10, 31, 38, 35, 21, 45, 49, 57,
|
426
|
-
63, 6, 12, 18, 24, 27, 33, 55,
|
427
|
-
16, 53, 40, 42, 30, 37, 44, 48,
|
428
|
-
62, 11, 23, 32, 52, 39, 36, 47,
|
429
|
-
61, 22, 51, 46, 60, 50, 59, 58 };
|
430
|
-
return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
|
431
|
-
# endif
|
432
|
-
} else { /* 32 bits */
|
433
|
-
# if defined(_MSC_VER)
|
434
|
-
if (val != 0) {
|
435
|
-
unsigned long r;
|
436
|
-
_BitScanForward(&r, (U32)val);
|
437
|
-
return (unsigned)r;
|
438
|
-
} else {
|
439
|
-
/* Should not reach this code path */
|
440
|
-
__assume(0);
|
441
|
-
}
|
442
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3)
|
443
|
-
return __builtin_ctz((U32)val);
|
444
|
-
# else
|
445
|
-
static const int DeBruijnBytePos[32] = { 0, 1, 28, 2, 29, 14, 24, 3,
|
446
|
-
30, 22, 20, 15, 25, 17, 4, 8,
|
447
|
-
31, 27, 13, 23, 21, 19, 16, 7,
|
448
|
-
26, 12, 18, 6, 11, 5, 10, 9 };
|
449
|
-
return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
|
450
|
-
# endif
|
451
|
-
}
|
452
|
-
}
|
351
|
+
int ZSTD_seqToCodes(const seqStore_t* seqStorePtr); /* compress, dictBuilder, decodeCorpus (shouldn't get its definition from here) */
|
453
352
|
|
454
353
|
|
455
354
|
/* ZSTD_invalidateRepCodes() :
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c)
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -21,13 +21,13 @@ extern "C" {
|
|
21
21
|
* For now, enable conservatively:
|
22
22
|
* - Only GNUC
|
23
23
|
* - Only ELF
|
24
|
-
* - Only x86-64 and
|
24
|
+
* - Only x86-64, i386 and aarch64
|
25
25
|
* Also, explicitly disable on platforms known not to work so they aren't
|
26
26
|
* forgotten in the future.
|
27
27
|
*/
|
28
28
|
#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && \
|
29
29
|
defined(__GNUC__) && defined(__ELF__) && \
|
30
|
-
(defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) && \
|
30
|
+
(defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) || defined(__aarch64__)) && \
|
31
31
|
!defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \
|
32
32
|
!defined(__CYGWIN__) && !defined(_AIX)
|
33
33
|
# define ZSTD_HAVE_WEAK_SYMBOLS 1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* FSE : Finite State Entropy encoder
|
3
|
-
* Copyright (c)
|
3
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
4
4
|
*
|
5
5
|
* You can contact the author at :
|
6
6
|
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#define ZSTD_DEPS_NEED_MALLOC
|
27
27
|
#define ZSTD_DEPS_NEED_MATH64
|
28
28
|
#include "../common/zstd_deps.h" /* ZSTD_malloc, ZSTD_free, ZSTD_memcpy, ZSTD_memset */
|
29
|
+
#include "../common/bits.h" /* ZSTD_highbit32 */
|
29
30
|
|
30
31
|
|
31
32
|
/* **************************************************************
|
@@ -90,7 +91,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
|
|
90
91
|
assert(tableLog < 16); /* required for threshold strategy to work */
|
91
92
|
|
92
93
|
/* For explanations on how to distribute symbol values over the table :
|
93
|
-
*
|
94
|
+
* https://fastcompression.blogspot.fr/2014/02/fse-distributing-symbol-values.html */
|
94
95
|
|
95
96
|
#ifdef __clang_analyzer__
|
96
97
|
ZSTD_memset(tableSymbol, 0, sizeof(*tableSymbol) * tableSize); /* useless initialization, just to keep scan-build happy */
|
@@ -191,7 +192,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
|
|
191
192
|
break;
|
192
193
|
default :
|
193
194
|
assert(normalizedCounter[s] > 1);
|
194
|
-
{ U32 const maxBitsOut = tableLog -
|
195
|
+
{ U32 const maxBitsOut = tableLog - ZSTD_highbit32 ((U32)normalizedCounter[s]-1);
|
195
196
|
U32 const minStatePlus = (U32)normalizedCounter[s] << maxBitsOut;
|
196
197
|
symbolTT[s].deltaNbBits = (maxBitsOut << 16) - minStatePlus;
|
197
198
|
symbolTT[s].deltaFindState = (int)(total - (unsigned)normalizedCounter[s]);
|
@@ -342,21 +343,11 @@ size_t FSE_writeNCount (void* buffer, size_t bufferSize,
|
|
342
343
|
* FSE Compression Code
|
343
344
|
****************************************************************/
|
344
345
|
|
345
|
-
FSE_CTable* FSE_createCTable (unsigned maxSymbolValue, unsigned tableLog)
|
346
|
-
{
|
347
|
-
size_t size;
|
348
|
-
if (tableLog > FSE_TABLELOG_ABSOLUTE_MAX) tableLog = FSE_TABLELOG_ABSOLUTE_MAX;
|
349
|
-
size = FSE_CTABLE_SIZE_U32 (tableLog, maxSymbolValue) * sizeof(U32);
|
350
|
-
return (FSE_CTable*)ZSTD_malloc(size);
|
351
|
-
}
|
352
|
-
|
353
|
-
void FSE_freeCTable (FSE_CTable* ct) { ZSTD_free(ct); }
|
354
|
-
|
355
346
|
/* provides the minimum logSize to safely represent a distribution */
|
356
347
|
static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue)
|
357
348
|
{
|
358
|
-
U32 minBitsSrc =
|
359
|
-
U32 minBitsSymbols =
|
349
|
+
U32 minBitsSrc = ZSTD_highbit32((U32)(srcSize)) + 1;
|
350
|
+
U32 minBitsSymbols = ZSTD_highbit32(maxSymbolValue) + 2;
|
360
351
|
U32 minBits = minBitsSrc < minBitsSymbols ? minBitsSrc : minBitsSymbols;
|
361
352
|
assert(srcSize > 1); /* Not supported, RLE should be used instead */
|
362
353
|
return minBits;
|
@@ -364,7 +355,7 @@ static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue)
|
|
364
355
|
|
365
356
|
unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus)
|
366
357
|
{
|
367
|
-
U32 maxBitsSrc =
|
358
|
+
U32 maxBitsSrc = ZSTD_highbit32((U32)(srcSize - 1)) - minus;
|
368
359
|
U32 tableLog = maxTableLog;
|
369
360
|
U32 minBits = FSE_minTableLog(srcSize, maxSymbolValue);
|
370
361
|
assert(srcSize > 1); /* Not supported, RLE should be used instead */
|
@@ -532,40 +523,6 @@ size_t FSE_normalizeCount (short* normalizedCounter, unsigned tableLog,
|
|
532
523
|
return tableLog;
|
533
524
|
}
|
534
525
|
|
535
|
-
|
536
|
-
/* fake FSE_CTable, for raw (uncompressed) input */
|
537
|
-
size_t FSE_buildCTable_raw (FSE_CTable* ct, unsigned nbBits)
|
538
|
-
{
|
539
|
-
const unsigned tableSize = 1 << nbBits;
|
540
|
-
const unsigned tableMask = tableSize - 1;
|
541
|
-
const unsigned maxSymbolValue = tableMask;
|
542
|
-
void* const ptr = ct;
|
543
|
-
U16* const tableU16 = ( (U16*) ptr) + 2;
|
544
|
-
void* const FSCT = ((U32*)ptr) + 1 /* header */ + (tableSize>>1); /* assumption : tableLog >= 1 */
|
545
|
-
FSE_symbolCompressionTransform* const symbolTT = (FSE_symbolCompressionTransform*) (FSCT);
|
546
|
-
unsigned s;
|
547
|
-
|
548
|
-
/* Sanity checks */
|
549
|
-
if (nbBits < 1) return ERROR(GENERIC); /* min size */
|
550
|
-
|
551
|
-
/* header */
|
552
|
-
tableU16[-2] = (U16) nbBits;
|
553
|
-
tableU16[-1] = (U16) maxSymbolValue;
|
554
|
-
|
555
|
-
/* Build table */
|
556
|
-
for (s=0; s<tableSize; s++)
|
557
|
-
tableU16[s] = (U16)(tableSize + s);
|
558
|
-
|
559
|
-
/* Build Symbol Transformation Table */
|
560
|
-
{ const U32 deltaNbBits = (nbBits << 16) - (1 << nbBits);
|
561
|
-
for (s=0; s<=maxSymbolValue; s++) {
|
562
|
-
symbolTT[s].deltaNbBits = deltaNbBits;
|
563
|
-
symbolTT[s].deltaFindState = s-1;
|
564
|
-
} }
|
565
|
-
|
566
|
-
return 0;
|
567
|
-
}
|
568
|
-
|
569
526
|
/* fake FSE_CTable, for rle input (always same symbol) */
|
570
527
|
size_t FSE_buildCTable_rle (FSE_CTable* ct, BYTE symbolValue)
|
571
528
|
{
|
@@ -664,78 +621,4 @@ size_t FSE_compress_usingCTable (void* dst, size_t dstSize,
|
|
664
621
|
|
665
622
|
size_t FSE_compressBound(size_t size) { return FSE_COMPRESSBOUND(size); }
|
666
623
|
|
667
|
-
#ifndef ZSTD_NO_UNUSED_FUNCTIONS
|
668
|
-
/* FSE_compress_wksp() :
|
669
|
-
* Same as FSE_compress2(), but using an externally allocated scratch buffer (`workSpace`).
|
670
|
-
* `wkspSize` size must be `(1<<tableLog)`.
|
671
|
-
*/
|
672
|
-
size_t FSE_compress_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize)
|
673
|
-
{
|
674
|
-
BYTE* const ostart = (BYTE*) dst;
|
675
|
-
BYTE* op = ostart;
|
676
|
-
BYTE* const oend = ostart + dstSize;
|
677
|
-
|
678
|
-
unsigned count[FSE_MAX_SYMBOL_VALUE+1];
|
679
|
-
S16 norm[FSE_MAX_SYMBOL_VALUE+1];
|
680
|
-
FSE_CTable* CTable = (FSE_CTable*)workSpace;
|
681
|
-
size_t const CTableSize = FSE_CTABLE_SIZE_U32(tableLog, maxSymbolValue);
|
682
|
-
void* scratchBuffer = (void*)(CTable + CTableSize);
|
683
|
-
size_t const scratchBufferSize = wkspSize - (CTableSize * sizeof(FSE_CTable));
|
684
|
-
|
685
|
-
/* init conditions */
|
686
|
-
if (wkspSize < FSE_COMPRESS_WKSP_SIZE_U32(tableLog, maxSymbolValue)) return ERROR(tableLog_tooLarge);
|
687
|
-
if (srcSize <= 1) return 0; /* Not compressible */
|
688
|
-
if (!maxSymbolValue) maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
|
689
|
-
if (!tableLog) tableLog = FSE_DEFAULT_TABLELOG;
|
690
|
-
|
691
|
-
/* Scan input and build symbol stats */
|
692
|
-
{ CHECK_V_F(maxCount, HIST_count_wksp(count, &maxSymbolValue, src, srcSize, scratchBuffer, scratchBufferSize) );
|
693
|
-
if (maxCount == srcSize) return 1; /* only a single symbol in src : rle */
|
694
|
-
if (maxCount == 1) return 0; /* each symbol present maximum once => not compressible */
|
695
|
-
if (maxCount < (srcSize >> 7)) return 0; /* Heuristic : not compressible enough */
|
696
|
-
}
|
697
|
-
|
698
|
-
tableLog = FSE_optimalTableLog(tableLog, srcSize, maxSymbolValue);
|
699
|
-
CHECK_F( FSE_normalizeCount(norm, tableLog, count, srcSize, maxSymbolValue, /* useLowProbCount */ srcSize >= 2048) );
|
700
|
-
|
701
|
-
/* Write table description header */
|
702
|
-
{ CHECK_V_F(nc_err, FSE_writeNCount(op, oend-op, norm, maxSymbolValue, tableLog) );
|
703
|
-
op += nc_err;
|
704
|
-
}
|
705
|
-
|
706
|
-
/* Compress */
|
707
|
-
CHECK_F( FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, scratchBuffer, scratchBufferSize) );
|
708
|
-
{ CHECK_V_F(cSize, FSE_compress_usingCTable(op, oend - op, src, srcSize, CTable) );
|
709
|
-
if (cSize == 0) return 0; /* not enough space for compressed data */
|
710
|
-
op += cSize;
|
711
|
-
}
|
712
|
-
|
713
|
-
/* check compressibility */
|
714
|
-
if ( (size_t)(op-ostart) >= srcSize-1 ) return 0;
|
715
|
-
|
716
|
-
return op-ostart;
|
717
|
-
}
|
718
|
-
|
719
|
-
typedef struct {
|
720
|
-
FSE_CTable CTable_max[FSE_CTABLE_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE)];
|
721
|
-
union {
|
722
|
-
U32 hist_wksp[HIST_WKSP_SIZE_U32];
|
723
|
-
BYTE scratchBuffer[1 << FSE_MAX_TABLELOG];
|
724
|
-
} workspace;
|
725
|
-
} fseWkspMax_t;
|
726
|
-
|
727
|
-
size_t FSE_compress2 (void* dst, size_t dstCapacity, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog)
|
728
|
-
{
|
729
|
-
fseWkspMax_t scratchBuffer;
|
730
|
-
DEBUG_STATIC_ASSERT(sizeof(scratchBuffer) >= FSE_COMPRESS_WKSP_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE)); /* compilation failures here means scratchBuffer is not large enough */
|
731
|
-
if (tableLog > FSE_MAX_TABLELOG) return ERROR(tableLog_tooLarge);
|
732
|
-
return FSE_compress_wksp(dst, dstCapacity, src, srcSize, maxSymbolValue, tableLog, &scratchBuffer, sizeof(scratchBuffer));
|
733
|
-
}
|
734
|
-
|
735
|
-
size_t FSE_compress (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
|
736
|
-
{
|
737
|
-
return FSE_compress2(dst, dstCapacity, src, srcSize, FSE_MAX_SYMBOL_VALUE, FSE_DEFAULT_TABLELOG);
|
738
|
-
}
|
739
|
-
#endif
|
740
|
-
|
741
624
|
#endif /* FSE_COMMONDEFS_ONLY */
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* hist : Histogram functions
|
3
3
|
* part of Finite State Entropy project
|
4
|
-
* Copyright (c)
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
5
5
|
*
|
6
6
|
* You can contact the author at :
|
7
7
|
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* hist : Histogram functions
|
3
3
|
* part of Finite State Entropy project
|
4
|
-
* Copyright (c)
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
5
5
|
*
|
6
6
|
* You can contact the author at :
|
7
7
|
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
|