multi_compress 0.3.2 → 0.3.4

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.
Files changed (212) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -3
  3. data/GET_STARTED.md +3 -3
  4. data/README.md +75 -66
  5. data/THIRD_PARTY_NOTICES.md +24 -0
  6. data/ext/multi_compress/brotli_dec_static_init.c +3 -0
  7. data/ext/multi_compress/brotli_enc_static_init.c +3 -0
  8. data/ext/multi_compress/extconf.rb +79 -3
  9. data/ext/multi_compress/multi_compress.c +199 -120
  10. data/ext/multi_compress/vendor/.vendored +2 -2
  11. data/ext/multi_compress/vendor/brotli/LICENSE +19 -0
  12. data/ext/multi_compress/vendor/brotli/c/common/constants.c +7 -7
  13. data/ext/multi_compress/vendor/brotli/c/common/constants.h +2 -5
  14. data/ext/multi_compress/vendor/brotli/c/common/context.c +2 -2
  15. data/ext/multi_compress/vendor/brotli/c/common/context.h +1 -2
  16. data/ext/multi_compress/vendor/brotli/c/common/dictionary.c +4 -5856
  17. data/ext/multi_compress/vendor/brotli/c/common/dictionary.h +1 -2
  18. data/ext/multi_compress/vendor/brotli/c/common/dictionary_inc.h +5847 -0
  19. data/ext/multi_compress/vendor/brotli/c/common/platform.c +0 -4
  20. data/ext/multi_compress/vendor/brotli/c/common/platform.h +182 -43
  21. data/ext/multi_compress/vendor/brotli/c/common/shared_dictionary.c +3 -7
  22. data/ext/multi_compress/vendor/brotli/c/common/shared_dictionary_internal.h +1 -1
  23. data/ext/multi_compress/vendor/brotli/c/common/static_init.h +56 -0
  24. data/ext/multi_compress/vendor/brotli/c/common/transform.c +6 -4
  25. data/ext/multi_compress/vendor/brotli/c/common/transform.h +1 -2
  26. data/ext/multi_compress/vendor/brotli/c/common/version.h +3 -3
  27. data/ext/multi_compress/vendor/brotli/c/dec/bit_reader.c +2 -3
  28. data/ext/multi_compress/vendor/brotli/c/dec/bit_reader.h +0 -4
  29. data/ext/multi_compress/vendor/brotli/c/dec/decode.c +128 -39
  30. data/ext/multi_compress/vendor/brotli/c/dec/huffman.c +2 -5
  31. data/ext/multi_compress/vendor/brotli/c/dec/huffman.h +0 -2
  32. data/ext/multi_compress/vendor/brotli/c/dec/prefix.c +67 -0
  33. data/ext/multi_compress/vendor/brotli/c/dec/prefix.h +18 -708
  34. data/ext/multi_compress/vendor/brotli/c/dec/prefix_inc.h +707 -0
  35. data/ext/multi_compress/vendor/brotli/c/dec/state.c +18 -15
  36. data/ext/multi_compress/vendor/brotli/c/dec/state.h +2 -6
  37. data/ext/multi_compress/vendor/brotli/c/dec/static_init.c +53 -0
  38. data/ext/multi_compress/vendor/brotli/c/dec/static_init.h +30 -0
  39. data/ext/multi_compress/vendor/brotli/c/enc/backward_references.c +32 -8
  40. data/ext/multi_compress/vendor/brotli/c/enc/backward_references.h +1 -5
  41. data/ext/multi_compress/vendor/brotli/c/enc/backward_references_hq.c +15 -15
  42. data/ext/multi_compress/vendor/brotli/c/enc/backward_references_hq.h +1 -5
  43. data/ext/multi_compress/vendor/brotli/c/enc/bit_cost.c +28 -4
  44. data/ext/multi_compress/vendor/brotli/c/enc/bit_cost.h +8 -40
  45. data/ext/multi_compress/vendor/brotli/c/enc/bit_cost_inc.h +1 -1
  46. data/ext/multi_compress/vendor/brotli/c/enc/block_splitter.c +9 -12
  47. data/ext/multi_compress/vendor/brotli/c/enc/block_splitter.h +0 -3
  48. data/ext/multi_compress/vendor/brotli/c/enc/block_splitter_inc.h +14 -8
  49. data/ext/multi_compress/vendor/brotli/c/enc/brotli_bit_stream.c +10 -9
  50. data/ext/multi_compress/vendor/brotli/c/enc/brotli_bit_stream.h +0 -6
  51. data/ext/multi_compress/vendor/brotli/c/enc/cluster.c +0 -2
  52. data/ext/multi_compress/vendor/brotli/c/enc/cluster.h +0 -2
  53. data/ext/multi_compress/vendor/brotli/c/enc/command.c +1 -1
  54. data/ext/multi_compress/vendor/brotli/c/enc/command.h +8 -10
  55. data/ext/multi_compress/vendor/brotli/c/enc/compound_dictionary.c +3 -5
  56. data/ext/multi_compress/vendor/brotli/c/enc/compound_dictionary.h +1 -4
  57. data/ext/multi_compress/vendor/brotli/c/enc/compress_fragment.c +3 -13
  58. data/ext/multi_compress/vendor/brotli/c/enc/compress_fragment.h +0 -2
  59. data/ext/multi_compress/vendor/brotli/c/enc/compress_fragment_two_pass.c +5 -15
  60. data/ext/multi_compress/vendor/brotli/c/enc/compress_fragment_two_pass.h +0 -2
  61. data/ext/multi_compress/vendor/brotli/c/enc/dictionary_hash.c +127 -1830
  62. data/ext/multi_compress/vendor/brotli/c/enc/dictionary_hash.h +23 -3
  63. data/ext/multi_compress/vendor/brotli/c/enc/dictionary_hash_inc.h +1829 -0
  64. data/ext/multi_compress/vendor/brotli/c/enc/encode.c +77 -52
  65. data/ext/multi_compress/vendor/brotli/c/enc/encoder_dict.c +9 -7
  66. data/ext/multi_compress/vendor/brotli/c/enc/encoder_dict.h +2 -4
  67. data/ext/multi_compress/vendor/brotli/c/enc/entropy_encode.c +3 -6
  68. data/ext/multi_compress/vendor/brotli/c/enc/entropy_encode.h +2 -4
  69. data/ext/multi_compress/vendor/brotli/c/enc/entropy_encode_static.h +18 -12
  70. data/ext/multi_compress/vendor/brotli/c/enc/fast_log.c +1 -1
  71. data/ext/multi_compress/vendor/brotli/c/enc/fast_log.h +2 -3
  72. data/ext/multi_compress/vendor/brotli/c/enc/find_match_length.h +0 -2
  73. data/ext/multi_compress/vendor/brotli/c/enc/hash.h +38 -31
  74. data/ext/multi_compress/vendor/brotli/c/enc/hash_base.h +38 -0
  75. data/ext/multi_compress/vendor/brotli/c/enc/hash_forgetful_chain_inc.h +11 -1
  76. data/ext/multi_compress/vendor/brotli/c/enc/hash_longest_match64_inc.h +24 -7
  77. data/ext/multi_compress/vendor/brotli/c/enc/hash_longest_match64_simd_inc.h +304 -0
  78. data/ext/multi_compress/vendor/brotli/c/enc/hash_longest_match_inc.h +30 -11
  79. data/ext/multi_compress/vendor/brotli/c/enc/hash_longest_match_quickly_inc.h +4 -0
  80. data/ext/multi_compress/vendor/brotli/c/enc/hash_longest_match_simd_inc.h +278 -0
  81. data/ext/multi_compress/vendor/brotli/c/enc/histogram.c +1 -0
  82. data/ext/multi_compress/vendor/brotli/c/enc/histogram.h +0 -4
  83. data/ext/multi_compress/vendor/brotli/c/enc/literal_cost.c +4 -6
  84. data/ext/multi_compress/vendor/brotli/c/enc/literal_cost.h +0 -2
  85. data/ext/multi_compress/vendor/brotli/c/enc/matching_tag_mask.h +69 -0
  86. data/ext/multi_compress/vendor/brotli/c/enc/memory.c +0 -5
  87. data/ext/multi_compress/vendor/brotli/c/enc/memory.h +0 -4
  88. data/ext/multi_compress/vendor/brotli/c/enc/metablock.c +7 -9
  89. data/ext/multi_compress/vendor/brotli/c/enc/metablock.h +3 -3
  90. data/ext/multi_compress/vendor/brotli/c/enc/metablock_inc.h +4 -4
  91. data/ext/multi_compress/vendor/brotli/c/enc/params.h +0 -1
  92. data/ext/multi_compress/vendor/brotli/c/enc/prefix.h +0 -2
  93. data/ext/multi_compress/vendor/brotli/c/enc/quality.h +17 -10
  94. data/ext/multi_compress/vendor/brotli/c/enc/ringbuffer.h +1 -4
  95. data/ext/multi_compress/vendor/brotli/c/enc/state.h +2 -2
  96. data/ext/multi_compress/vendor/brotli/c/enc/static_dict.c +5 -11
  97. data/ext/multi_compress/vendor/brotli/c/enc/static_dict.h +1 -3
  98. data/ext/multi_compress/vendor/brotli/c/enc/static_dict_lut.c +224 -0
  99. data/ext/multi_compress/vendor/brotli/c/enc/static_dict_lut.h +20 -5837
  100. data/ext/multi_compress/vendor/brotli/c/enc/static_dict_lut_inc.h +5830 -0
  101. data/ext/multi_compress/vendor/brotli/c/enc/static_init.c +59 -0
  102. data/ext/multi_compress/vendor/brotli/c/enc/static_init.h +30 -0
  103. data/ext/multi_compress/vendor/brotli/c/enc/static_init_lazy.cc +26 -0
  104. data/ext/multi_compress/vendor/brotli/c/enc/utf8_util.c +1 -1
  105. data/ext/multi_compress/vendor/brotli/c/enc/utf8_util.h +0 -2
  106. data/ext/multi_compress/vendor/brotli/c/enc/write_bits.h +0 -2
  107. data/ext/multi_compress/vendor/brotli/c/include/brotli/decode.h +1 -1
  108. data/ext/multi_compress/vendor/brotli/c/include/brotli/encode.h +5 -1
  109. data/ext/multi_compress/vendor/brotli/c/include/brotli/port.h +4 -7
  110. data/ext/multi_compress/vendor/brotli/c/include/brotli/types.h +2 -2
  111. data/ext/multi_compress/vendor/lz4/LICENSE +12 -0
  112. data/ext/multi_compress/vendor/zstd/COPYING +339 -0
  113. data/ext/multi_compress/vendor/zstd/LICENSE +30 -0
  114. data/ext/multi_compress/vendor/zstd/lib/Makefile +67 -35
  115. data/ext/multi_compress/vendor/zstd/lib/README.md +33 -2
  116. data/ext/multi_compress/vendor/zstd/lib/common/allocations.h +55 -0
  117. data/ext/multi_compress/vendor/zstd/lib/common/bits.h +205 -0
  118. data/ext/multi_compress/vendor/zstd/lib/common/bitstream.h +84 -108
  119. data/ext/multi_compress/vendor/zstd/lib/common/compiler.h +170 -41
  120. data/ext/multi_compress/vendor/zstd/lib/common/cpu.h +37 -1
  121. data/ext/multi_compress/vendor/zstd/lib/common/debug.c +7 -1
  122. data/ext/multi_compress/vendor/zstd/lib/common/debug.h +21 -21
  123. data/ext/multi_compress/vendor/zstd/lib/common/entropy_common.c +12 -40
  124. data/ext/multi_compress/vendor/zstd/lib/common/error_private.c +10 -2
  125. data/ext/multi_compress/vendor/zstd/lib/common/error_private.h +46 -47
  126. data/ext/multi_compress/vendor/zstd/lib/common/fse.h +8 -100
  127. data/ext/multi_compress/vendor/zstd/lib/common/fse_decompress.c +28 -116
  128. data/ext/multi_compress/vendor/zstd/lib/common/huf.h +79 -166
  129. data/ext/multi_compress/vendor/zstd/lib/common/mem.h +46 -66
  130. data/ext/multi_compress/vendor/zstd/lib/common/pool.c +27 -11
  131. data/ext/multi_compress/vendor/zstd/lib/common/pool.h +8 -11
  132. data/ext/multi_compress/vendor/zstd/lib/common/portability_macros.h +45 -11
  133. data/ext/multi_compress/vendor/zstd/lib/common/threading.c +74 -14
  134. data/ext/multi_compress/vendor/zstd/lib/common/threading.h +5 -18
  135. data/ext/multi_compress/vendor/zstd/lib/common/xxhash.c +5 -11
  136. data/ext/multi_compress/vendor/zstd/lib/common/xxhash.h +2411 -1003
  137. data/ext/multi_compress/vendor/zstd/lib/common/zstd_common.c +1 -36
  138. data/ext/multi_compress/vendor/zstd/lib/common/zstd_deps.h +13 -1
  139. data/ext/multi_compress/vendor/zstd/lib/common/zstd_internal.h +13 -182
  140. data/ext/multi_compress/vendor/zstd/lib/common/zstd_trace.h +6 -13
  141. data/ext/multi_compress/vendor/zstd/lib/compress/clevels.h +1 -1
  142. data/ext/multi_compress/vendor/zstd/lib/compress/fse_compress.c +15 -131
  143. data/ext/multi_compress/vendor/zstd/lib/compress/hist.c +11 -1
  144. data/ext/multi_compress/vendor/zstd/lib/compress/hist.h +8 -1
  145. data/ext/multi_compress/vendor/zstd/lib/compress/huf_compress.c +283 -189
  146. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress.c +2419 -903
  147. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_internal.h +423 -245
  148. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_literals.c +116 -40
  149. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_literals.h +16 -8
  150. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_sequences.c +10 -10
  151. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_sequences.h +8 -7
  152. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_superblock.c +254 -139
  153. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_compress_superblock.h +1 -1
  154. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_cwksp.h +184 -95
  155. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_double_fast.c +163 -81
  156. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_double_fast.h +18 -14
  157. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_fast.c +507 -197
  158. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_fast.h +7 -14
  159. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_lazy.c +579 -484
  160. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_lazy.h +133 -65
  161. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_ldm.c +61 -40
  162. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_ldm.h +7 -15
  163. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_ldm_geartab.h +1 -1
  164. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_opt.c +352 -218
  165. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_opt.h +37 -21
  166. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_preSplit.c +238 -0
  167. data/ext/multi_compress/vendor/zstd/lib/compress/zstd_preSplit.h +33 -0
  168. data/ext/multi_compress/vendor/zstd/lib/compress/zstdmt_compress.c +239 -175
  169. data/ext/multi_compress/vendor/zstd/lib/compress/zstdmt_compress.h +5 -16
  170. data/ext/multi_compress/vendor/zstd/lib/decompress/huf_decompress.c +543 -488
  171. data/ext/multi_compress/vendor/zstd/lib/decompress/huf_decompress_amd64.S +78 -61
  172. data/ext/multi_compress/vendor/zstd/lib/decompress/zstd_ddict.c +4 -4
  173. data/ext/multi_compress/vendor/zstd/lib/decompress/zstd_ddict.h +1 -1
  174. data/ext/multi_compress/vendor/zstd/lib/decompress/zstd_decompress.c +295 -115
  175. data/ext/multi_compress/vendor/zstd/lib/decompress/zstd_decompress_block.c +430 -293
  176. data/ext/multi_compress/vendor/zstd/lib/decompress/zstd_decompress_block.h +7 -2
  177. data/ext/multi_compress/vendor/zstd/lib/decompress/zstd_decompress_internal.h +11 -7
  178. data/ext/multi_compress/vendor/zstd/lib/deprecated/zbuff.h +1 -1
  179. data/ext/multi_compress/vendor/zstd/lib/deprecated/zbuff_common.c +1 -1
  180. data/ext/multi_compress/vendor/zstd/lib/deprecated/zbuff_compress.c +1 -1
  181. data/ext/multi_compress/vendor/zstd/lib/deprecated/zbuff_decompress.c +3 -1
  182. data/ext/multi_compress/vendor/zstd/lib/dictBuilder/cover.c +95 -46
  183. data/ext/multi_compress/vendor/zstd/lib/dictBuilder/cover.h +3 -9
  184. data/ext/multi_compress/vendor/zstd/lib/dictBuilder/divsufsort.h +0 -10
  185. data/ext/multi_compress/vendor/zstd/lib/dictBuilder/fastcover.c +4 -4
  186. data/ext/multi_compress/vendor/zstd/lib/dictBuilder/zdict.c +25 -97
  187. data/ext/multi_compress/vendor/zstd/lib/dll/example/Makefile +1 -1
  188. data/ext/multi_compress/vendor/zstd/lib/dll/example/README.md +1 -1
  189. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_legacy.h +38 -1
  190. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v01.c +19 -50
  191. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v01.h +1 -1
  192. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v02.c +27 -80
  193. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v02.h +1 -1
  194. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v03.c +28 -83
  195. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v03.h +1 -1
  196. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v04.c +25 -74
  197. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v04.h +1 -1
  198. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v05.c +31 -76
  199. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v05.h +1 -1
  200. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v06.c +44 -88
  201. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v06.h +1 -1
  202. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v07.c +33 -84
  203. data/ext/multi_compress/vendor/zstd/lib/legacy/zstd_v07.h +1 -1
  204. data/ext/multi_compress/vendor/zstd/lib/libzstd.mk +65 -33
  205. data/ext/multi_compress/vendor/zstd/lib/libzstd.pc.in +5 -5
  206. data/ext/multi_compress/vendor/zstd/lib/module.modulemap +13 -3
  207. data/ext/multi_compress/vendor/zstd/lib/zdict.h +65 -36
  208. data/ext/multi_compress/vendor/zstd/lib/zstd.h +890 -267
  209. data/ext/multi_compress/vendor/zstd/lib/zstd_errors.h +28 -16
  210. data/lib/multi_compress/version.rb +1 -1
  211. data/lib/multi_compress.rb +80 -41
  212. metadata +29 -2
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) Facebook, Inc.
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
@@ -10,34 +10,53 @@
10
10
 
11
11
  #include "../common/portability_macros.h"
12
12
 
13
+ #if defined(__ELF__) && defined(__GNUC__)
13
14
  /* Stack marking
14
15
  * ref: https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart
15
16
  */
16
- #if defined(__ELF__) && defined(__GNUC__)
17
17
  .section .note.GNU-stack,"",%progbits
18
+
19
+ #if defined(__aarch64__)
20
+ /* Mark that this assembly supports BTI & PAC, because it is empty for aarch64.
21
+ * See: https://github.com/facebook/zstd/issues/3841
22
+ * See: https://gcc.godbolt.org/z/sqr5T4ffK
23
+ * See: https://lore.kernel.org/linux-arm-kernel/20200429211641.9279-8-broonie@kernel.org/
24
+ * See: https://reviews.llvm.org/D62609
25
+ */
26
+ .pushsection .note.gnu.property, "a"
27
+ .p2align 3
28
+ .long 4 /* size of the name - "GNU\0" */
29
+ .long 0x10 /* size of descriptor */
30
+ .long 0x5 /* NT_GNU_PROPERTY_TYPE_0 */
31
+ .asciz "GNU"
32
+ .long 0xc0000000 /* pr_type - GNU_PROPERTY_AARCH64_FEATURE_1_AND */
33
+ .long 4 /* pr_datasz - 4 bytes */
34
+ .long 3 /* pr_data - GNU_PROPERTY_AARCH64_FEATURE_1_BTI | GNU_PROPERTY_AARCH64_FEATURE_1_PAC */
35
+ .p2align 3 /* pr_padding - bring everything to 8 byte alignment */
36
+ .popsection
37
+ #endif
38
+
18
39
  #endif
19
40
 
20
41
  #if ZSTD_ENABLE_ASM_X86_64_BMI2
21
42
 
22
43
  /* Calling convention:
23
44
  *
24
- * %rdi contains the first argument: HUF_DecompressAsmArgs*.
45
+ * %rdi (or %rcx on Windows) contains the first argument: HUF_DecompressAsmArgs*.
25
46
  * %rbp isn't maintained (no frame pointer).
26
47
  * %rsp contains the stack pointer that grows down.
27
48
  * No red-zone is assumed, only addresses >= %rsp are used.
28
49
  * All register contents are preserved.
29
- *
30
- * TODO: Support Windows calling convention.
31
50
  */
32
51
 
33
- ZSTD_HIDE_ASM_FUNCTION(HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop)
34
- ZSTD_HIDE_ASM_FUNCTION(HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop)
35
- ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop)
36
- ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop)
37
- .global HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop
38
- .global HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop
39
- .global _HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop
40
- .global _HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop
52
+ ZSTD_HIDE_ASM_FUNCTION(HUF_decompress4X1_usingDTable_internal_fast_asm_loop)
53
+ ZSTD_HIDE_ASM_FUNCTION(HUF_decompress4X2_usingDTable_internal_fast_asm_loop)
54
+ ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X2_usingDTable_internal_fast_asm_loop)
55
+ ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X1_usingDTable_internal_fast_asm_loop)
56
+ .global HUF_decompress4X1_usingDTable_internal_fast_asm_loop
57
+ .global HUF_decompress4X2_usingDTable_internal_fast_asm_loop
58
+ .global _HUF_decompress4X1_usingDTable_internal_fast_asm_loop
59
+ .global _HUF_decompress4X2_usingDTable_internal_fast_asm_loop
41
60
  .text
42
61
 
43
62
  /* Sets up register mappings for clarity.
@@ -95,8 +114,9 @@ ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop)
95
114
  /* Define both _HUF_* & HUF_* symbols because MacOS
96
115
  * C symbols are prefixed with '_' & Linux symbols aren't.
97
116
  */
98
- _HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
99
- HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
117
+ _HUF_decompress4X1_usingDTable_internal_fast_asm_loop:
118
+ HUF_decompress4X1_usingDTable_internal_fast_asm_loop:
119
+ ZSTD_CET_ENDBRANCH
100
120
  /* Save all registers - even if they are callee saved for simplicity. */
101
121
  push %rax
102
122
  push %rbx
@@ -115,7 +135,11 @@ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
115
135
  push %r15
116
136
 
117
137
  /* Read HUF_DecompressAsmArgs* args from %rax */
138
+ #if defined(_WIN32)
139
+ movq %rcx, %rax
140
+ #else
118
141
  movq %rdi, %rax
142
+ #endif
119
143
  movq 0(%rax), %ip0
120
144
  movq 8(%rax), %ip1
121
145
  movq 16(%rax), %ip2
@@ -130,7 +154,7 @@ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
130
154
  movq 88(%rax), %bits3
131
155
  movq 96(%rax), %dtable
132
156
  push %rax /* argument */
133
- push 104(%rax) /* ilimit */
157
+ push 104(%rax) /* ilowest */
134
158
  push 112(%rax) /* oend */
135
159
  push %olimit /* olimit space */
136
160
 
@@ -155,11 +179,11 @@ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
155
179
  shrq $2, %r15
156
180
 
157
181
  movq %ip0, %rax /* rax = ip0 */
158
- movq 40(%rsp), %rdx /* rdx = ilimit */
159
- subq %rdx, %rax /* rax = ip0 - ilimit */
160
- movq %rax, %rbx /* rbx = ip0 - ilimit */
182
+ movq 40(%rsp), %rdx /* rdx = ilowest */
183
+ subq %rdx, %rax /* rax = ip0 - ilowest */
184
+ movq %rax, %rbx /* rbx = ip0 - ilowest */
161
185
 
162
- /* rdx = (ip0 - ilimit) / 7 */
186
+ /* rdx = (ip0 - ilowest) / 7 */
163
187
  movabsq $2635249153387078803, %rdx
164
188
  mulq %rdx
165
189
  subq %rdx, %rbx
@@ -182,9 +206,8 @@ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
182
206
 
183
207
  /* If (op3 + 20 > olimit) */
184
208
  movq %op3, %rax /* rax = op3 */
185
- addq $20, %rax /* rax = op3 + 20 */
186
- cmpq %rax, %olimit /* op3 + 20 > olimit */
187
- jb .L_4X1_exit
209
+ cmpq %rax, %olimit /* op3 == olimit */
210
+ je .L_4X1_exit
188
211
 
189
212
  /* If (ip1 < ip0) go to exit */
190
213
  cmpq %ip0, %ip1
@@ -315,7 +338,7 @@ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
315
338
  /* Restore stack (oend & olimit) */
316
339
  pop %rax /* olimit */
317
340
  pop %rax /* oend */
318
- pop %rax /* ilimit */
341
+ pop %rax /* ilowest */
319
342
  pop %rax /* arg */
320
343
 
321
344
  /* Save ip / op / bits */
@@ -350,8 +373,9 @@ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
350
373
  pop %rax
351
374
  ret
352
375
 
353
- _HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
354
- HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
376
+ _HUF_decompress4X2_usingDTable_internal_fast_asm_loop:
377
+ HUF_decompress4X2_usingDTable_internal_fast_asm_loop:
378
+ ZSTD_CET_ENDBRANCH
355
379
  /* Save all registers - even if they are callee saved for simplicity. */
356
380
  push %rax
357
381
  push %rbx
@@ -369,7 +393,12 @@ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
369
393
  push %r14
370
394
  push %r15
371
395
 
396
+ /* Read HUF_DecompressAsmArgs* args from %rax */
397
+ #if defined(_WIN32)
398
+ movq %rcx, %rax
399
+ #else
372
400
  movq %rdi, %rax
401
+ #endif
373
402
  movq 0(%rax), %ip0
374
403
  movq 8(%rax), %ip1
375
404
  movq 16(%rax), %ip2
@@ -385,7 +414,7 @@ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
385
414
  movq 96(%rax), %dtable
386
415
  push %rax /* argument */
387
416
  push %rax /* olimit */
388
- push 104(%rax) /* ilimit */
417
+ push 104(%rax) /* ilowest */
389
418
 
390
419
  movq 112(%rax), %rax
391
420
  push %rax /* oend3 */
@@ -412,9 +441,9 @@ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
412
441
 
413
442
  /* We can consume up to 7 input bytes each iteration. */
414
443
  movq %ip0, %rax /* rax = ip0 */
415
- movq 40(%rsp), %rdx /* rdx = ilimit */
416
- subq %rdx, %rax /* rax = ip0 - ilimit */
417
- movq %rax, %r15 /* r15 = ip0 - ilimit */
444
+ movq 40(%rsp), %rdx /* rdx = ilowest */
445
+ subq %rdx, %rax /* rax = ip0 - ilowest */
446
+ movq %rax, %r15 /* r15 = ip0 - ilowest */
418
447
 
419
448
  /* rdx = rax / 7 */
420
449
  movabsq $2635249153387078803, %rdx
@@ -424,44 +453,33 @@ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
424
453
  addq %r15, %rdx
425
454
  shrq $2, %rdx
426
455
 
427
- /* r15 = (ip0 - ilimit) / 7 */
456
+ /* r15 = (ip0 - ilowest) / 7 */
428
457
  movq %rdx, %r15
429
458
 
430
- movabsq $-3689348814741910323, %rdx
431
- movq 8(%rsp), %rax /* rax = oend0 */
432
- subq %op0, %rax /* rax = oend0 - op0 */
433
- mulq %rdx
434
- shrq $3, %rdx /* rdx = rax / 10 */
435
-
436
- /* r15 = min(%rdx, %r15) */
437
- cmpq %rdx, %r15
438
- cmova %rdx, %r15
439
-
440
- movabsq $-3689348814741910323, %rdx
441
- movq 16(%rsp), %rax /* rax = oend1 */
442
- subq %op1, %rax /* rax = oend1 - op1 */
443
- mulq %rdx
444
- shrq $3, %rdx /* rdx = rax / 10 */
459
+ /* r15 = min(r15, min(oend0 - op0, oend1 - op1, oend2 - op2, oend3 - op3) / 10) */
460
+ movq 8(%rsp), %rax /* rax = oend0 */
461
+ subq %op0, %rax /* rax = oend0 - op0 */
462
+ movq 16(%rsp), %rdx /* rdx = oend1 */
463
+ subq %op1, %rdx /* rdx = oend1 - op1 */
445
464
 
446
- /* r15 = min(%rdx, %r15) */
447
- cmpq %rdx, %r15
448
- cmova %rdx, %r15
465
+ cmpq %rax, %rdx
466
+ cmova %rax, %rdx /* rdx = min(%rdx, %rax) */
449
467
 
450
- movabsq $-3689348814741910323, %rdx
451
468
  movq 24(%rsp), %rax /* rax = oend2 */
452
469
  subq %op2, %rax /* rax = oend2 - op2 */
453
- mulq %rdx
454
- shrq $3, %rdx /* rdx = rax / 10 */
455
470
 
456
- /* r15 = min(%rdx, %r15) */
457
- cmpq %rdx, %r15
458
- cmova %rdx, %r15
471
+ cmpq %rax, %rdx
472
+ cmova %rax, %rdx /* rdx = min(%rdx, %rax) */
459
473
 
460
- movabsq $-3689348814741910323, %rdx
461
474
  movq 32(%rsp), %rax /* rax = oend3 */
462
475
  subq %op3, %rax /* rax = oend3 - op3 */
476
+
477
+ cmpq %rax, %rdx
478
+ cmova %rax, %rdx /* rdx = min(%rdx, %rax) */
479
+
480
+ movabsq $-3689348814741910323, %rax
463
481
  mulq %rdx
464
- shrq $3, %rdx /* rdx = rax / 10 */
482
+ shrq $3, %rdx /* rdx = rdx / 10 */
465
483
 
466
484
  /* r15 = min(%rdx, %r15) */
467
485
  cmpq %rdx, %r15
@@ -476,9 +494,8 @@ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
476
494
 
477
495
  /* If (op3 + 10 > olimit) */
478
496
  movq %op3, %rax /* rax = op3 */
479
- addq $10, %rax /* rax = op3 + 10 */
480
- cmpq %rax, %olimit /* op3 + 10 > olimit */
481
- jb .L_4X2_exit
497
+ cmpq %rax, %olimit /* op3 == olimit */
498
+ je .L_4X2_exit
482
499
 
483
500
  /* If (ip1 < ip0) go to exit */
484
501
  cmpq %ip0, %ip1
@@ -546,7 +563,7 @@ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
546
563
  pop %rax /* oend1 */
547
564
  pop %rax /* oend2 */
548
565
  pop %rax /* oend3 */
549
- pop %rax /* ilimit */
566
+ pop %rax /* ilowest */
550
567
  pop %rax /* olimit */
551
568
  pop %rax /* arg */
552
569
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) Yann Collet, Facebook, Inc.
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
@@ -14,12 +14,12 @@
14
14
  /*-*******************************************************
15
15
  * Dependencies
16
16
  *********************************************************/
17
+ #include "../common/allocations.h" /* ZSTD_customMalloc, ZSTD_customFree */
17
18
  #include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */
18
19
  #include "../common/cpu.h" /* bmi2 */
19
20
  #include "../common/mem.h" /* low level memory routines */
20
21
  #define FSE_STATIC_LINKING_ONLY
21
22
  #include "../common/fse.h"
22
- #define HUF_STATIC_LINKING_ONLY
23
23
  #include "../common/huf.h"
24
24
  #include "zstd_decompress_internal.h"
25
25
  #include "zstd_ddict.h"
@@ -134,7 +134,7 @@ static size_t ZSTD_initDDict_internal(ZSTD_DDict* ddict,
134
134
  ZSTD_memcpy(internalBuffer, dict, dictSize);
135
135
  }
136
136
  ddict->dictSize = dictSize;
137
- ddict->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */
137
+ ddict->entropy.hufTable[0] = (HUF_DTable)((ZSTD_HUFFDTABLE_CAPACITY_LOG)*0x1000001); /* cover both little and big endian */
138
138
 
139
139
  /* parse dictionary content */
140
140
  FORWARD_IF_ERROR( ZSTD_loadEntropy_intoDDict(ddict, dictContentType) , "");
@@ -240,5 +240,5 @@ size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict)
240
240
  unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict)
241
241
  {
242
242
  if (ddict==NULL) return 0;
243
- return ZSTD_getDictID_fromDict(ddict->dictContent, ddict->dictSize);
243
+ return ddict->dictID;
244
244
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) Yann Collet, Facebook, Inc.
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