re2 1.24.0 → 1.25.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.
Files changed (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -21,13 +21,13 @@
21
21
 
22
22
  #include "absl/hash/internal/city.h"
23
23
 
24
- #include <string.h> // for memcpy and memset
25
24
  #include <algorithm>
26
25
 
27
26
  #include "absl/base/config.h"
28
27
  #include "absl/base/internal/endian.h"
29
28
  #include "absl/base/internal/unaligned_access.h"
30
29
  #include "absl/base/optimization.h"
30
+ #include "absl/numeric/bits.h"
31
31
 
32
32
  namespace absl {
33
33
  ABSL_NAMESPACE_BEGIN
@@ -68,11 +68,6 @@ static uint32_t fmix(uint32_t h) {
68
68
  return h;
69
69
  }
70
70
 
71
- static uint32_t Rotate32(uint32_t val, int shift) {
72
- // Avoid shifting by 32: doing so yields an undefined result.
73
- return shift == 0 ? val : ((val >> shift) | (val << (32 - shift)));
74
- }
75
-
76
71
  #undef PERMUTE3
77
72
  #define PERMUTE3(a, b, c) \
78
73
  do { \
@@ -83,10 +78,10 @@ static uint32_t Rotate32(uint32_t val, int shift) {
83
78
  static uint32_t Mur(uint32_t a, uint32_t h) {
84
79
  // Helper from Murmur3 for combining two 32-bit values.
85
80
  a *= c1;
86
- a = Rotate32(a, 17);
81
+ a = absl::rotr(a, 17);
87
82
  a *= c2;
88
83
  h ^= a;
89
- h = Rotate32(h, 19);
84
+ h = absl::rotr(h, 19);
90
85
  return h * 5 + 0xe6546b64;
91
86
  }
92
87
 
@@ -131,44 +126,44 @@ uint32_t CityHash32(const char *s, size_t len) {
131
126
  // len > 24
132
127
  uint32_t h = static_cast<uint32_t>(len), g = c1 * h, f = g;
133
128
 
134
- uint32_t a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2;
135
- uint32_t a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2;
136
- uint32_t a2 = Rotate32(Fetch32(s + len - 16) * c1, 17) * c2;
137
- uint32_t a3 = Rotate32(Fetch32(s + len - 12) * c1, 17) * c2;
138
- uint32_t a4 = Rotate32(Fetch32(s + len - 20) * c1, 17) * c2;
129
+ uint32_t a0 = absl::rotr(Fetch32(s + len - 4) * c1, 17) * c2;
130
+ uint32_t a1 = absl::rotr(Fetch32(s + len - 8) * c1, 17) * c2;
131
+ uint32_t a2 = absl::rotr(Fetch32(s + len - 16) * c1, 17) * c2;
132
+ uint32_t a3 = absl::rotr(Fetch32(s + len - 12) * c1, 17) * c2;
133
+ uint32_t a4 = absl::rotr(Fetch32(s + len - 20) * c1, 17) * c2;
139
134
  h ^= a0;
140
- h = Rotate32(h, 19);
135
+ h = absl::rotr(h, 19);
141
136
  h = h * 5 + 0xe6546b64;
142
137
  h ^= a2;
143
- h = Rotate32(h, 19);
138
+ h = absl::rotr(h, 19);
144
139
  h = h * 5 + 0xe6546b64;
145
140
  g ^= a1;
146
- g = Rotate32(g, 19);
141
+ g = absl::rotr(g, 19);
147
142
  g = g * 5 + 0xe6546b64;
148
143
  g ^= a3;
149
- g = Rotate32(g, 19);
144
+ g = absl::rotr(g, 19);
150
145
  g = g * 5 + 0xe6546b64;
151
146
  f += a4;
152
- f = Rotate32(f, 19);
147
+ f = absl::rotr(f, 19);
153
148
  f = f * 5 + 0xe6546b64;
154
149
  size_t iters = (len - 1) / 20;
155
150
  do {
156
- uint32_t b0 = Rotate32(Fetch32(s) * c1, 17) * c2;
151
+ uint32_t b0 = absl::rotr(Fetch32(s) * c1, 17) * c2;
157
152
  uint32_t b1 = Fetch32(s + 4);
158
- uint32_t b2 = Rotate32(Fetch32(s + 8) * c1, 17) * c2;
159
- uint32_t b3 = Rotate32(Fetch32(s + 12) * c1, 17) * c2;
153
+ uint32_t b2 = absl::rotr(Fetch32(s + 8) * c1, 17) * c2;
154
+ uint32_t b3 = absl::rotr(Fetch32(s + 12) * c1, 17) * c2;
160
155
  uint32_t b4 = Fetch32(s + 16);
161
156
  h ^= b0;
162
- h = Rotate32(h, 18);
157
+ h = absl::rotr(h, 18);
163
158
  h = h * 5 + 0xe6546b64;
164
159
  f += b1;
165
- f = Rotate32(f, 19);
160
+ f = absl::rotr(f, 19);
166
161
  f = f * c1;
167
162
  g += b2;
168
- g = Rotate32(g, 18);
163
+ g = absl::rotr(g, 18);
169
164
  g = g * 5 + 0xe6546b64;
170
165
  h ^= b3 + b1;
171
- h = Rotate32(h, 19);
166
+ h = absl::rotr(h, 19);
172
167
  h = h * 5 + 0xe6546b64;
173
168
  g ^= b4;
174
169
  g = absl::gbswap_32(g) * 5;
@@ -178,26 +173,19 @@ uint32_t CityHash32(const char *s, size_t len) {
178
173
  PERMUTE3(f, h, g);
179
174
  s += 20;
180
175
  } while (--iters != 0);
181
- g = Rotate32(g, 11) * c1;
182
- g = Rotate32(g, 17) * c1;
183
- f = Rotate32(f, 11) * c1;
184
- f = Rotate32(f, 17) * c1;
185
- h = Rotate32(h + g, 19);
176
+ g = absl::rotr(g, 11) * c1;
177
+ g = absl::rotr(g, 17) * c1;
178
+ f = absl::rotr(f, 11) * c1;
179
+ f = absl::rotr(f, 17) * c1;
180
+ h = absl::rotr(h + g, 19);
186
181
  h = h * 5 + 0xe6546b64;
187
- h = Rotate32(h, 17) * c1;
188
- h = Rotate32(h + f, 19);
182
+ h = absl::rotr(h, 17) * c1;
183
+ h = absl::rotr(h + f, 19);
189
184
  h = h * 5 + 0xe6546b64;
190
- h = Rotate32(h, 17) * c1;
185
+ h = absl::rotr(h, 17) * c1;
191
186
  return h;
192
187
  }
193
188
 
194
- // Bitwise right rotate. Normally this will compile to a single
195
- // instruction, especially if the shift is a manifest constant.
196
- static uint64_t Rotate(uint64_t val, int shift) {
197
- // Avoid shifting by 64: doing so yields an undefined result.
198
- return shift == 0 ? val : ((val >> shift) | (val << (64 - shift)));
199
- }
200
-
201
189
  static uint64_t ShiftMix(uint64_t val) { return val ^ (val >> 47); }
202
190
 
203
191
  static uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) {
@@ -220,8 +208,8 @@ static uint64_t HashLen0to16(const char *s, size_t len) {
220
208
  uint64_t mul = k2 + len * 2;
221
209
  uint64_t a = Fetch64(s) + k2;
222
210
  uint64_t b = Fetch64(s + len - 8);
223
- uint64_t c = Rotate(b, 37) * mul + a;
224
- uint64_t d = (Rotate(a, 25) + b) * mul;
211
+ uint64_t c = absl::rotr(b, 37) * mul + a;
212
+ uint64_t d = (absl::rotr(a, 25) + b) * mul;
225
213
  return HashLen16(c, d, mul);
226
214
  }
227
215
  if (len >= 4) {
@@ -248,8 +236,8 @@ static uint64_t HashLen17to32(const char *s, size_t len) {
248
236
  uint64_t b = Fetch64(s + 8);
249
237
  uint64_t c = Fetch64(s + len - 8) * mul;
250
238
  uint64_t d = Fetch64(s + len - 16) * k2;
251
- return HashLen16(Rotate(a + b, 43) + Rotate(c, 30) + d,
252
- a + Rotate(b + k2, 18) + c, mul);
239
+ return HashLen16(absl::rotr(a + b, 43) + absl::rotr(c, 30) + d,
240
+ a + absl::rotr(b + k2, 18) + c, mul);
253
241
  }
254
242
 
255
243
  // Return a 16-byte hash for 48 bytes. Quick and dirty.
@@ -257,11 +245,11 @@ static uint64_t HashLen17to32(const char *s, size_t len) {
257
245
  static std::pair<uint64_t, uint64_t> WeakHashLen32WithSeeds(
258
246
  uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) {
259
247
  a += w;
260
- b = Rotate(b + a + z, 21);
248
+ b = absl::rotr(b + a + z, 21);
261
249
  uint64_t c = a;
262
250
  a += x;
263
251
  a += y;
264
- b += Rotate(a, 44);
252
+ b += absl::rotr(a, 44);
265
253
  return std::make_pair(a + z, b + c);
266
254
  }
267
255
 
@@ -284,10 +272,10 @@ static uint64_t HashLen33to64(const char *s, size_t len) {
284
272
  uint64_t f = Fetch64(s + 24) * 9;
285
273
  uint64_t g = Fetch64(s + len - 8);
286
274
  uint64_t h = Fetch64(s + len - 16) * mul;
287
- uint64_t u = Rotate(a + g, 43) + (Rotate(b, 30) + c) * 9;
275
+ uint64_t u = absl::rotr(a + g, 43) + (absl::rotr(b, 30) + c) * 9;
288
276
  uint64_t v = ((a + g) ^ d) + f + 1;
289
277
  uint64_t w = absl::gbswap_64((u + v) * mul) + h;
290
- uint64_t x = Rotate(e + f, 42) + c;
278
+ uint64_t x = absl::rotr(e + f, 42) + c;
291
279
  uint64_t y = (absl::gbswap_64((v + w) * mul) + g) * mul;
292
280
  uint64_t z = e + f + c;
293
281
  a = absl::gbswap_64((x + z) * mul + y) + b;
@@ -320,11 +308,11 @@ uint64_t CityHash64(const char *s, size_t len) {
320
308
  // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
321
309
  len = (len - 1) & ~static_cast<size_t>(63);
322
310
  do {
323
- x = Rotate(x + y + v.first + Fetch64(s + 8), 37) * k1;
324
- y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1;
311
+ x = absl::rotr(x + y + v.first + Fetch64(s + 8), 37) * k1;
312
+ y = absl::rotr(y + v.second + Fetch64(s + 48), 42) * k1;
325
313
  x ^= w.second;
326
314
  y += v.first + Fetch64(s + 40);
327
- z = Rotate(z + w.first, 33) * k1;
315
+ z = absl::rotr(z + w.first, 33) * k1;
328
316
  v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
329
317
  w = WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch64(s + 16));
330
318
  std::swap(z, x);
@@ -39,6 +39,13 @@
39
39
  #include <xmmintrin.h>
40
40
  #endif // ABSL_AES_INTERNAL_HAVE_X86_SIMD
41
41
 
42
+ #ifdef ABSL_AES_INTERNAL_HAVE_ARM_SIMD
43
+ #error ABSL_AES_INTERNAL_HAVE_ARM_SIMD cannot be directly set
44
+ #elif defined(ABSL_INTERNAL_HAVE_ARM_NEON) && defined(__ARM_FEATURE_CRYPTO)
45
+ #include <arm_neon.h>
46
+ #define ABSL_AES_INTERNAL_HAVE_ARM_SIMD
47
+ #endif // ABSL_INTERNAL_HAVE_ARM_NEON
48
+
42
49
  namespace absl {
43
50
  ABSL_NAMESPACE_BEGIN
44
51
  namespace hash_internal {
@@ -49,39 +56,159 @@ void PrefetchFutureDataToLocalCache(const uint8_t* ptr) {
49
56
  PrefetchToLocalCache(ptr + 5 * ABSL_CACHELINE_SIZE);
50
57
  }
51
58
 
52
- #ifdef ABSL_AES_INTERNAL_HAVE_X86_SIMD
53
- uint64_t Mix4x16Vectors(__m128i a, __m128i b, __m128i c, __m128i d) {
54
- // res128 = encrypt(a + c, d) + decrypt(b - d, a)
55
- auto res128 = _mm_add_epi64(_mm_aesenc_si128(_mm_add_epi64(a, c), d),
56
- _mm_aesdec_si128(_mm_sub_epi64(b, d), a));
57
- auto x64 = static_cast<uint64_t>(_mm_cvtsi128_si64(res128));
58
- auto y64 = static_cast<uint64_t>(_mm_extract_epi64(res128, 1));
59
+ #if defined(ABSL_AES_INTERNAL_HAVE_X86_SIMD) || \
60
+ defined(ABSL_AES_INTERNAL_HAVE_ARM_SIMD)
61
+
62
+ #if defined(ABSL_AES_INTERNAL_HAVE_X86_SIMD)
63
+ using Vector128 = __m128i;
64
+
65
+ inline Vector128 Load128(const uint8_t* ptr) {
66
+ return _mm_loadu_si128(reinterpret_cast<const Vector128*>(ptr));
67
+ }
68
+
69
+ inline Vector128 Set128(uint64_t a, uint64_t b) {
70
+ return _mm_set_epi64x(static_cast<int64_t>(a), static_cast<int64_t>(b));
71
+ }
72
+
73
+ inline Vector128 Add128(Vector128 a, Vector128 b) {
74
+ return _mm_add_epi64(a, b);
75
+ }
76
+
77
+ inline Vector128 Sub128(Vector128 a, Vector128 b) {
78
+ return _mm_sub_epi64(a, b);
79
+ }
80
+
81
+ // Bits of the second argument to Encrypt128/Decrypt128 are XORed with the
82
+ // first argument after encryption/decryption.
83
+
84
+ inline Vector128 Encrypt128(Vector128 data, Vector128 key) {
85
+ return _mm_aesenc_si128(data, key);
86
+ }
87
+
88
+ inline Vector128 Decrypt128(Vector128 data, Vector128 key) {
89
+ return _mm_aesdec_si128(data, key);
90
+ }
91
+
92
+ // We use each value as the first argument to shuffle all the bits around. We do
93
+ // not add any salt to the state or loaded data, instead we vary instructions
94
+ // used to mix bits Encrypt128/Decrypt128 and Add128/Sub128. On x86,
95
+ // Add128/Sub128 are combined to one instruction with data loading like
96
+ // `vpaddq xmm1, xmm0, xmmword ptr [rdi]`.
97
+
98
+ inline Vector128 MixA(Vector128 a, Vector128 state) {
99
+ return Decrypt128(Add128(state, a), state);
100
+ }
101
+
102
+ inline Vector128 MixB(Vector128 b, Vector128 state) {
103
+ return Decrypt128(Sub128(state, b), state);
104
+ }
105
+
106
+ inline Vector128 MixC(Vector128 c, Vector128 state) {
107
+ return Encrypt128(Add128(state, c), state);
108
+ }
109
+
110
+ inline Vector128 MixD(Vector128 d, Vector128 state) {
111
+ return Encrypt128(Sub128(state, d), state);
112
+ }
113
+
114
+ inline uint64_t ExtractLow64(Vector128 v) {
115
+ return static_cast<uint64_t>(_mm_cvtsi128_si64(v));
116
+ }
117
+
118
+ inline uint64_t ExtractHigh64(Vector128 v) {
119
+ return static_cast<uint64_t>(_mm_extract_epi64(v, 1));
120
+ }
121
+
122
+ inline uint64_t Mix4x16Vectors(Vector128 a, Vector128 b, Vector128 c,
123
+ Vector128 d) {
124
+ Vector128 res128 =
125
+ Add128(Encrypt128(Add128(a, c), d), Decrypt128(Sub128(b, d), a));
126
+ uint64_t x64 = ExtractLow64(res128);
127
+ uint64_t y64 = ExtractHigh64(res128);
59
128
  return x64 ^ y64;
60
129
  }
61
130
 
131
+ #else // ABSL_AES_INTERNAL_HAVE_ARM_SIMD
132
+
133
+ using Vector128 = uint8x16_t;
134
+
135
+ inline Vector128 Load128(const uint8_t* ptr) { return vld1q_u8(ptr); }
136
+
137
+ inline Vector128 Set128(uint64_t a, uint64_t b) {
138
+ return vreinterpretq_u8_u64(vsetq_lane_u64(a, vdupq_n_u64(b), 1));
139
+ }
140
+
141
+ inline Vector128 Add128(Vector128 a, Vector128 b) {
142
+ return vreinterpretq_u8_u64(
143
+ vaddq_u64(vreinterpretq_u64_u8(a), vreinterpretq_u64_u8(b)));
144
+ }
145
+
146
+ // Bits of the second argument to Decrypt128/Encrypt128 are XORed with the
147
+ // state argument BEFORE encryption (in x86 version they are XORed after).
148
+
149
+ inline Vector128 Encrypt128(Vector128 data, Vector128 key) {
150
+ return vaesmcq_u8(vaeseq_u8(data, key));
151
+ }
152
+
153
+ inline Vector128 Decrypt128(Vector128 data, Vector128 key) {
154
+ return vaesimcq_u8(vaesdq_u8(data, key));
155
+ }
156
+
157
+ // We use decryption for a, b and encryption for c, d. That helps us to avoid
158
+ // collisions for trivial byte rotations. Mix4x16Vectors later uses
159
+ // encrypted/decrypted pairs differently to ensure that the order of blocks is
160
+ // important for the hash value.
161
+ // We also avoid using Add128/Sub128 instructions because state is being mixed
162
+ // before encryption/decryption. On ARM, there is no fusion of load and add/sub
163
+ // instructions so it is more expensive to use them.
164
+
165
+ inline Vector128 MixA(Vector128 a, Vector128 state) {
166
+ return Decrypt128(a, state);
167
+ }
168
+
169
+ inline Vector128 MixB(Vector128 b, Vector128 state) {
170
+ return Decrypt128(b, state);
171
+ }
172
+
173
+ inline Vector128 MixC(Vector128 c, Vector128 state) {
174
+ return Encrypt128(c, state);
175
+ }
176
+
177
+ inline Vector128 MixD(Vector128 d, Vector128 state) {
178
+ return Encrypt128(d, state);
179
+ }
180
+
181
+ inline uint64_t ExtractLow64(Vector128 v) {
182
+ return vgetq_lane_u64(vreinterpretq_u64_u8(v), 0);
183
+ }
184
+
185
+ inline uint64_t ExtractHigh64(Vector128 v) {
186
+ return vgetq_lane_u64(vreinterpretq_u64_u8(v), 1);
187
+ }
188
+
189
+ uint64_t Mix4x16Vectors(Vector128 a, Vector128 b, Vector128 c, Vector128 d) {
190
+ Vector128 res128 = Add128(Encrypt128(a, c), Decrypt128(b, d));
191
+ uint64_t x64 = ExtractLow64(res128);
192
+ uint64_t y64 = ExtractHigh64(res128);
193
+ return x64 ^ y64;
194
+ }
195
+
196
+ #endif // ABSL_AES_INTERNAL_HAVE_X86_SIMD
197
+
62
198
  uint64_t LowLevelHash33To64(uint64_t seed, const uint8_t* ptr, size_t len) {
63
199
  assert(len > 32);
64
200
  assert(len <= 64);
65
- __m128i state =
66
- _mm_set_epi64x(static_cast<int64_t>(seed), static_cast<int64_t>(len));
67
- auto a = _mm_loadu_si128(reinterpret_cast<const __m128i*>(ptr));
68
- auto b = _mm_loadu_si128(reinterpret_cast<const __m128i*>(ptr + 16));
201
+ Vector128 state = Set128(seed, len);
202
+ Vector128 a = Load128(ptr);
203
+ Vector128 b = Load128(ptr + 16);
69
204
  auto* last32_ptr = ptr + len - 32;
70
- auto c = _mm_loadu_si128(reinterpret_cast<const __m128i*>(last32_ptr));
71
- auto d = _mm_loadu_si128(reinterpret_cast<const __m128i*>(last32_ptr + 16));
72
-
73
- // Bits of the second argument to _mm_aesdec_si128/_mm_aesenc_si128 are
74
- // XORed with the state argument after encryption.
75
- // We use each value as the first argument to shuffle all the bits around.
76
- // We do not add any salt to the state or loaded data, instead we vary
77
- // instructions used to mix bits _mm_aesdec_si128/_mm_aesenc_si128 and
78
- // _mm_add_epi64/_mm_sub_epi64.
79
- // _mm_add_epi64/_mm_sub_epi64 are combined to one instruction with data
80
- // loading like `vpaddq xmm1, xmm0, xmmword ptr [rdi]`.
81
- auto na = _mm_aesdec_si128(_mm_add_epi64(state, a), state);
82
- auto nb = _mm_aesdec_si128(_mm_sub_epi64(state, b), state);
83
- auto nc = _mm_aesenc_si128(_mm_add_epi64(state, c), state);
84
- auto nd = _mm_aesenc_si128(_mm_sub_epi64(state, d), state);
205
+ Vector128 c = Load128(last32_ptr);
206
+ Vector128 d = Load128(last32_ptr + 16);
207
+
208
+ Vector128 na = MixA(a, state);
209
+ Vector128 nb = MixB(b, state);
210
+ Vector128 nc = MixC(c, state);
211
+ Vector128 nd = MixD(d, state);
85
212
 
86
213
  // We perform another round of encryption to mix bits between two halves of
87
214
  // the input.
@@ -97,11 +224,10 @@ LowLevelHashLenGt64(uint64_t seed, const void* data, size_t len) {
97
224
  // If we have more than 64 bytes, we're going to handle chunks of 64
98
225
  // bytes at a time. We're going to build up four separate hash states
99
226
  // which we will then hash together. This avoids short dependency chains.
100
- __m128i state0 =
101
- _mm_set_epi64x(static_cast<int64_t>(seed), static_cast<int64_t>(len));
102
- __m128i state1 = state0;
103
- __m128i state2 = state1;
104
- __m128i state3 = state2;
227
+ Vector128 state0 = Set128(seed, len);
228
+ Vector128 state1 = state0;
229
+ Vector128 state2 = state1;
230
+ Vector128 state3 = state2;
105
231
 
106
232
  // Mixing two 128-bit vectors at a time with corresponding states.
107
233
  // All variables are mixed slightly differently to avoid hash collision
@@ -111,25 +237,17 @@ LowLevelHashLenGt64(uint64_t seed, const void* data, size_t len) {
111
237
  // See comments in LowLevelHash33To64 for more considerations.
112
238
  auto mix_ab = [&state0,
113
239
  &state1](const uint8_t* p) ABSL_ATTRIBUTE_ALWAYS_INLINE {
114
- // i128 a = *p;
115
- // i128 b = *(p + 16);
116
- // state0 = decrypt(state0 + a, state0);
117
- // state1 = decrypt(state1 - b, state1);
118
- auto a = _mm_loadu_si128(reinterpret_cast<const __m128i*>(p));
119
- auto b = _mm_loadu_si128(reinterpret_cast<const __m128i*>(p + 16));
120
- state0 = _mm_aesdec_si128(_mm_add_epi64(state0, a), state0);
121
- state1 = _mm_aesdec_si128(_mm_sub_epi64(state1, b), state1);
240
+ Vector128 a = Load128(p);
241
+ Vector128 b = Load128(p + 16);
242
+ state0 = MixA(a, state0);
243
+ state1 = MixB(b, state1);
122
244
  };
123
245
  auto mix_cd = [&state2,
124
246
  &state3](const uint8_t* p) ABSL_ATTRIBUTE_ALWAYS_INLINE {
125
- // i128 c = *p;
126
- // i128 d = *(p + 16);
127
- // state2 = encrypt(state2 + c, state2);
128
- // state3 = encrypt(state3 - d, state3);
129
- auto c = _mm_loadu_si128(reinterpret_cast<const __m128i*>(p));
130
- auto d = _mm_loadu_si128(reinterpret_cast<const __m128i*>(p + 16));
131
- state2 = _mm_aesenc_si128(_mm_add_epi64(state2, c), state2);
132
- state3 = _mm_aesenc_si128(_mm_sub_epi64(state3, d), state3);
247
+ Vector128 c = Load128(p);
248
+ Vector128 d = Load128(p + 16);
249
+ state2 = MixC(c, state2);
250
+ state3 = MixD(d, state3);
133
251
  };
134
252
 
135
253
  do {