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.
- package/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- 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 =
|
|
81
|
+
a = absl::rotr(a, 17);
|
|
87
82
|
a *= c2;
|
|
88
83
|
h ^= a;
|
|
89
|
-
h =
|
|
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 =
|
|
135
|
-
uint32_t a1 =
|
|
136
|
-
uint32_t a2 =
|
|
137
|
-
uint32_t a3 =
|
|
138
|
-
uint32_t a4 =
|
|
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 =
|
|
135
|
+
h = absl::rotr(h, 19);
|
|
141
136
|
h = h * 5 + 0xe6546b64;
|
|
142
137
|
h ^= a2;
|
|
143
|
-
h =
|
|
138
|
+
h = absl::rotr(h, 19);
|
|
144
139
|
h = h * 5 + 0xe6546b64;
|
|
145
140
|
g ^= a1;
|
|
146
|
-
g =
|
|
141
|
+
g = absl::rotr(g, 19);
|
|
147
142
|
g = g * 5 + 0xe6546b64;
|
|
148
143
|
g ^= a3;
|
|
149
|
-
g =
|
|
144
|
+
g = absl::rotr(g, 19);
|
|
150
145
|
g = g * 5 + 0xe6546b64;
|
|
151
146
|
f += a4;
|
|
152
|
-
f =
|
|
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 =
|
|
151
|
+
uint32_t b0 = absl::rotr(Fetch32(s) * c1, 17) * c2;
|
|
157
152
|
uint32_t b1 = Fetch32(s + 4);
|
|
158
|
-
uint32_t b2 =
|
|
159
|
-
uint32_t b3 =
|
|
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 =
|
|
157
|
+
h = absl::rotr(h, 18);
|
|
163
158
|
h = h * 5 + 0xe6546b64;
|
|
164
159
|
f += b1;
|
|
165
|
-
f =
|
|
160
|
+
f = absl::rotr(f, 19);
|
|
166
161
|
f = f * c1;
|
|
167
162
|
g += b2;
|
|
168
|
-
g =
|
|
163
|
+
g = absl::rotr(g, 18);
|
|
169
164
|
g = g * 5 + 0xe6546b64;
|
|
170
165
|
h ^= b3 + b1;
|
|
171
|
-
h =
|
|
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 =
|
|
182
|
-
g =
|
|
183
|
-
f =
|
|
184
|
-
f =
|
|
185
|
-
h =
|
|
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 =
|
|
188
|
-
h =
|
|
182
|
+
h = absl::rotr(h, 17) * c1;
|
|
183
|
+
h = absl::rotr(h + f, 19);
|
|
189
184
|
h = h * 5 + 0xe6546b64;
|
|
190
|
-
h =
|
|
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 =
|
|
224
|
-
uint64_t d = (
|
|
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(
|
|
252
|
-
a +
|
|
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 =
|
|
248
|
+
b = absl::rotr(b + a + z, 21);
|
|
261
249
|
uint64_t c = a;
|
|
262
250
|
a += x;
|
|
263
251
|
a += y;
|
|
264
|
-
b +=
|
|
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 =
|
|
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 =
|
|
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 =
|
|
324
|
-
y =
|
|
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 =
|
|
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
|
-
#
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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 {
|