re2 1.22.2 → 1.23.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/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -99,19 +99,12 @@ V128 V128_PMul10(const V128 l, const V128 r);
|
|
|
99
99
|
// Produces a XOR operation of |l| and |r|.
|
|
100
100
|
V128 V128_Xor(const V128 l, const V128 r);
|
|
101
101
|
|
|
102
|
-
// Produces an AND operation of |l| and |r|.
|
|
103
|
-
V128 V128_And(const V128 l, const V128 r);
|
|
104
|
-
|
|
105
102
|
// Sets the lower half of a 128 bit register to the given 64-bit value and
|
|
106
103
|
// zeroes the upper half.
|
|
107
104
|
// dst[63:0] := |r|
|
|
108
105
|
// dst[127:64] := |0|
|
|
109
106
|
V128 V128_From64WithZeroFill(const uint64_t r);
|
|
110
107
|
|
|
111
|
-
// Shift |l| right by |imm| bytes while shifting in zeros.
|
|
112
|
-
template <int imm>
|
|
113
|
-
V128 V128_ShiftRight(const V128 l);
|
|
114
|
-
|
|
115
108
|
// Extracts a 32-bit integer from |l|, selected with |imm|.
|
|
116
109
|
template <int imm>
|
|
117
110
|
int V128_Extract32(const V128 l);
|
|
@@ -170,17 +163,10 @@ inline V128 V128_PMul10(const V128 l, const V128 r) {
|
|
|
170
163
|
|
|
171
164
|
inline V128 V128_Xor(const V128 l, const V128 r) { return _mm_xor_si128(l, r); }
|
|
172
165
|
|
|
173
|
-
inline V128 V128_And(const V128 l, const V128 r) { return _mm_and_si128(l, r); }
|
|
174
|
-
|
|
175
166
|
inline V128 V128_From64WithZeroFill(const uint64_t r) {
|
|
176
167
|
return _mm_set_epi64x(static_cast<int64_t>(0), static_cast<int64_t>(r));
|
|
177
168
|
}
|
|
178
169
|
|
|
179
|
-
template <int imm>
|
|
180
|
-
inline V128 V128_ShiftRight(const V128 l) {
|
|
181
|
-
return _mm_srli_si128(l, imm);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
170
|
template <int imm>
|
|
185
171
|
inline int V128_Extract32(const V128 l) {
|
|
186
172
|
return _mm_extract_epi32(l, imm);
|
|
@@ -261,20 +247,12 @@ inline V128 V128_PMul10(const V128 l, const V128 r) {
|
|
|
261
247
|
|
|
262
248
|
inline V128 V128_Xor(const V128 l, const V128 r) { return veorq_u64(l, r); }
|
|
263
249
|
|
|
264
|
-
inline V128 V128_And(const V128 l, const V128 r) { return vandq_u64(l, r); }
|
|
265
|
-
|
|
266
250
|
inline V128 V128_From64WithZeroFill(const uint64_t r){
|
|
267
251
|
constexpr uint64x2_t kZero = {0, 0};
|
|
268
252
|
return vsetq_lane_u64(r, kZero, 0);
|
|
269
253
|
}
|
|
270
254
|
|
|
271
255
|
|
|
272
|
-
template <int imm>
|
|
273
|
-
inline V128 V128_ShiftRight(const V128 l) {
|
|
274
|
-
return vreinterpretq_u64_s8(
|
|
275
|
-
vextq_s8(vreinterpretq_s8_u64(l), vdupq_n_s8(0), imm));
|
|
276
|
-
}
|
|
277
|
-
|
|
278
256
|
template <int imm>
|
|
279
257
|
inline int V128_Extract32(const V128 l) {
|
|
280
258
|
return vgetq_lane_s32(vreinterpretq_s32_u64(l), imm);
|
|
@@ -422,6 +422,11 @@ CrcMemcpy::ArchSpecificEngines CrcMemcpy::GetArchSpecificEngines() {
|
|
|
422
422
|
};
|
|
423
423
|
// INTEL_SANDYBRIDGE performs better with SSE than AVX.
|
|
424
424
|
case CpuType::kIntelSandybridge:
|
|
425
|
+
// Use SIMD memcpy on ARM cores.
|
|
426
|
+
case CpuType::kArmNeoverseN1:
|
|
427
|
+
case CpuType::kArmNeoverseN2:
|
|
428
|
+
case CpuType::kArmNeoverseV1:
|
|
429
|
+
case CpuType::kArmNeoverseV2:
|
|
425
430
|
return {
|
|
426
431
|
/*.temporal=*/new AcceleratedCrcMemcpyEngine<3, 0>(),
|
|
427
432
|
/*.non_temporal=*/new CrcNonTemporalMemcpyEngine(),
|
|
@@ -64,27 +64,27 @@ class CRC32AcceleratedX86ARMCombined : public CRC32 {
|
|
|
64
64
|
constexpr size_t kSmallCutoff = 256;
|
|
65
65
|
constexpr size_t kMediumCutoff = 2048;
|
|
66
66
|
|
|
67
|
-
#define ABSL_INTERNAL_STEP1(crc)
|
|
67
|
+
#define ABSL_INTERNAL_STEP1(crc, p) \
|
|
68
68
|
do { \
|
|
69
69
|
crc = CRC32_u8(static_cast<uint32_t>(crc), *p++); \
|
|
70
70
|
} while (0)
|
|
71
|
-
#define ABSL_INTERNAL_STEP2(crc)
|
|
71
|
+
#define ABSL_INTERNAL_STEP2(crc, p) \
|
|
72
72
|
do { \
|
|
73
73
|
crc = \
|
|
74
74
|
CRC32_u16(static_cast<uint32_t>(crc), absl::little_endian::Load16(p)); \
|
|
75
75
|
p += 2; \
|
|
76
76
|
} while (0)
|
|
77
|
-
#define ABSL_INTERNAL_STEP4(crc)
|
|
77
|
+
#define ABSL_INTERNAL_STEP4(crc, p) \
|
|
78
78
|
do { \
|
|
79
79
|
crc = \
|
|
80
80
|
CRC32_u32(static_cast<uint32_t>(crc), absl::little_endian::Load32(p)); \
|
|
81
81
|
p += 4; \
|
|
82
82
|
} while (0)
|
|
83
|
-
#define ABSL_INTERNAL_STEP8(crc,
|
|
84
|
-
do {
|
|
85
|
-
crc =
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
#define ABSL_INTERNAL_STEP8(crc, p) \
|
|
84
|
+
do { \
|
|
85
|
+
crc = \
|
|
86
|
+
CRC32_u64(static_cast<uint32_t>(crc), absl::little_endian::Load64(p)); \
|
|
87
|
+
p += 8; \
|
|
88
88
|
} while (0)
|
|
89
89
|
#define ABSL_INTERNAL_STEP8BY2(crc0, crc1, p0, p1) \
|
|
90
90
|
do { \
|
|
@@ -100,47 +100,67 @@ constexpr size_t kMediumCutoff = 2048;
|
|
|
100
100
|
|
|
101
101
|
namespace {
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
103
|
+
// Does polynomial multiplication a * b * x^33 mod G.
|
|
104
|
+
//
|
|
105
|
+
// One of the multiplicands needs to have an extra factor of x^-33 to cancel out
|
|
106
|
+
// the extra factor of x^33. The extra factor of x^33 comes from:
|
|
107
|
+
//
|
|
108
|
+
// - x^1 from the carry-less multiplication, due to the
|
|
109
|
+
// "least-significant-bit-first" convention of CRC-32C.
|
|
110
|
+
//
|
|
111
|
+
// - x^32 from using CRC32_u64() to reduce the carry-less product to 32 bits.
|
|
112
|
+
//
|
|
113
|
+
// Both could be avoided, but at the cost of extra instructions. It's more
|
|
114
|
+
// efficient to just drop a factor of x^33 from one of the multiplicands.
|
|
115
|
+
uint32_t MultiplyWithExtraX33(uint32_t a, uint32_t b) {
|
|
116
|
+
V128 a_vec = V128_From64WithZeroFill(a);
|
|
117
|
+
V128 b_vec = V128_From64WithZeroFill(b);
|
|
118
|
+
V128 res = V128_PMulLow(a_vec, b_vec);
|
|
119
|
+
|
|
120
|
+
return CRC32_u64(0, static_cast<uint64_t>(V128_Low64(res)));
|
|
117
121
|
}
|
|
118
122
|
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
123
|
+
// The number of low-order bits that ComputeZeroConstant() drops from the
|
|
124
|
+
// length, i.e. treats as zeroes
|
|
125
|
+
constexpr int kNumDroppedBits = 4;
|
|
126
|
+
|
|
127
|
+
// Precomputed constants for faster ExtendByZeroes(). This was generated by
|
|
128
|
+
// gen_crc32c_consts.py. The entry at index i is x^(2^(i + 3 + kNumDroppedBits)
|
|
129
|
+
// - 33) mod G. That is x^-33 times the polynomial by which the CRC value needs
|
|
130
|
+
// to be multiplied to extend it by 2^(i + 3 + kNumDroppedBits) zero bits, or
|
|
131
|
+
// equivalently 2^(i + kNumDroppedBits) zero bytes. The extra factor of x^-33
|
|
132
|
+
// cancels out the extra factor of x^33 that MultiplyWithExtraX33() introduces.
|
|
122
133
|
constexpr uint32_t kCRC32CPowers[] = {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
0x00800000, 0x00008000,
|
|
134
|
+
0x493c7d27, 0xba4fc28e, 0x9e4addf8, 0x0d3b6092, 0xb9e02b86, 0xdd7e3b0c,
|
|
135
|
+
0x170076fa, 0xa51b6135, 0x82f89c77, 0x54a86326, 0x1dc403cc, 0x5ae703ab,
|
|
136
|
+
0xc5013a36, 0xac2ac6dd, 0x9b4615a9, 0x688d1c61, 0xf6af14e6, 0xb6ffe386,
|
|
137
|
+
0xb717425b, 0x478b0d30, 0x54cc62e5, 0x7b2102ee, 0x8a99adef, 0xa7568c8f,
|
|
138
|
+
0xd610d67e, 0x6b086b3f, 0xd94f3c0b, 0xbf818109, 0x780d5a4d, 0x05ec76f1,
|
|
139
|
+
0x00000001, 0x493c7d27, 0xba4fc28e, 0x9e4addf8, 0x0d3b6092, 0xb9e02b86,
|
|
140
|
+
0xdd7e3b0c, 0x170076fa, 0xa51b6135, 0x82f89c77, 0x54a86326, 0x1dc403cc,
|
|
141
|
+
0x5ae703ab, 0xc5013a36, 0xac2ac6dd, 0x9b4615a9, 0x688d1c61, 0xf6af14e6,
|
|
142
|
+
0xb6ffe386, 0xb717425b, 0x478b0d30, 0x54cc62e5, 0x7b2102ee, 0x8a99adef,
|
|
143
|
+
0xa7568c8f, 0xd610d67e, 0x6b086b3f, 0xd94f3c0b, 0xbf818109, 0x780d5a4d,
|
|
134
144
|
};
|
|
145
|
+
// There must be an entry for each non-dropped bit in the size_t length.
|
|
146
|
+
static_assert(std::size(kCRC32CPowers) >= sizeof(size_t) * 8 - kNumDroppedBits);
|
|
135
147
|
|
|
136
148
|
} // namespace
|
|
137
149
|
|
|
138
|
-
// Compute a magic constant, so that multiplying by it is the same as
|
|
139
|
-
//
|
|
150
|
+
// Compute a magic constant, so that multiplying by it is the same as extending
|
|
151
|
+
// crc by length zeros. The lowest kNumDroppedBits of the length are ignored and
|
|
152
|
+
// treated as zeroes; the caller is assumed to handle any nonzero bits there.
|
|
153
|
+
#if defined(NDEBUG) && ABSL_HAVE_CPP_ATTRIBUTE(clang::no_sanitize)
|
|
154
|
+
// The array accesses in this are safe: `length >= size_t{1} <<
|
|
155
|
+
// kNumDroppedBits`, so `countr_zero(length >> kNumDroppedBits) < sizeof(size_t)
|
|
156
|
+
// * 8 - kNumDroppedBits`, and `length & (length - 1)` cannot introduce bits
|
|
157
|
+
// `>= sizeof(size_t) * 8 - kNumDroppedBits`. The compiler cannot prove this, so
|
|
158
|
+
// manually disable bounds checking.
|
|
159
|
+
[[clang::no_sanitize("array-bounds")]]
|
|
160
|
+
#endif
|
|
140
161
|
uint32_t CRC32AcceleratedX86ARMCombined::ComputeZeroConstant(
|
|
141
162
|
size_t length) const {
|
|
142
|
-
|
|
143
|
-
length >>= 2;
|
|
163
|
+
length >>= kNumDroppedBits;
|
|
144
164
|
|
|
145
165
|
int index = absl::countr_zero(length);
|
|
146
166
|
uint32_t prev = kCRC32CPowers[index];
|
|
@@ -149,7 +169,7 @@ uint32_t CRC32AcceleratedX86ARMCombined::ComputeZeroConstant(
|
|
|
149
169
|
while (length) {
|
|
150
170
|
// For each bit of length, extend by 2**n zeros.
|
|
151
171
|
index = absl::countr_zero(length);
|
|
152
|
-
prev =
|
|
172
|
+
prev = MultiplyWithExtraX33(prev, kCRC32CPowers[index]);
|
|
153
173
|
length &= length - 1;
|
|
154
174
|
}
|
|
155
175
|
return prev;
|
|
@@ -159,22 +179,13 @@ void CRC32AcceleratedX86ARMCombined::ExtendByZeroes(uint32_t* crc,
|
|
|
159
179
|
size_t length) const {
|
|
160
180
|
uint32_t val = *crc;
|
|
161
181
|
// Don't bother with multiplication for small length.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
val = CRC32_u16(val, 0);
|
|
170
|
-
break;
|
|
171
|
-
case 3:
|
|
172
|
-
val = CRC32_u8(val, 0);
|
|
173
|
-
val = CRC32_u16(val, 0);
|
|
174
|
-
break;
|
|
175
|
-
}
|
|
176
|
-
if (length > 3) {
|
|
177
|
-
val = multiply(val, ComputeZeroConstant(length));
|
|
182
|
+
if (length & 1) val = CRC32_u8(val, 0);
|
|
183
|
+
if (length & 2) val = CRC32_u16(val, 0);
|
|
184
|
+
if (length & 4) val = CRC32_u32(val, 0);
|
|
185
|
+
if (length & 8) val = CRC32_u64(val, 0);
|
|
186
|
+
static_assert(kNumDroppedBits == 4);
|
|
187
|
+
if (length >= size_t{1} << kNumDroppedBits) {
|
|
188
|
+
val = MultiplyWithExtraX33(val, ComputeZeroConstant(length));
|
|
178
189
|
}
|
|
179
190
|
*crc = val;
|
|
180
191
|
}
|
|
@@ -221,7 +232,8 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
|
|
|
221
232
|
// We are applying it to CRC32C polynomial.
|
|
222
233
|
ABSL_ATTRIBUTE_ALWAYS_INLINE void Process64BytesPclmul(
|
|
223
234
|
const uint8_t* p, V128* partialCRC) const {
|
|
224
|
-
V128 loopMultiplicands =
|
|
235
|
+
V128 loopMultiplicands =
|
|
236
|
+
V128_Load(reinterpret_cast<const V128*>(kFoldAcross512Bits));
|
|
225
237
|
|
|
226
238
|
V128 partialCRC1 = partialCRC[0];
|
|
227
239
|
V128 partialCRC2 = partialCRC[1];
|
|
@@ -265,53 +277,33 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
|
|
|
265
277
|
|
|
266
278
|
// Combine 4 vectors of partial crc into a single vector.
|
|
267
279
|
V128 reductionMultiplicands =
|
|
268
|
-
V128_Load(reinterpret_cast<const V128*>(
|
|
280
|
+
V128_Load(reinterpret_cast<const V128*>(kFoldAcross256Bits));
|
|
269
281
|
|
|
270
282
|
V128 low = V128_PMulLow(reductionMultiplicands, partialCRC1);
|
|
271
283
|
V128 high = V128_PMulHi(reductionMultiplicands, partialCRC1);
|
|
272
284
|
|
|
273
285
|
partialCRC1 = V128_Xor(low, high);
|
|
274
|
-
partialCRC1 = V128_Xor(partialCRC1,
|
|
286
|
+
partialCRC1 = V128_Xor(partialCRC1, partialCRC3);
|
|
275
287
|
|
|
276
|
-
low = V128_PMulLow(reductionMultiplicands,
|
|
277
|
-
high = V128_PMulHi(reductionMultiplicands,
|
|
288
|
+
low = V128_PMulLow(reductionMultiplicands, partialCRC2);
|
|
289
|
+
high = V128_PMulHi(reductionMultiplicands, partialCRC2);
|
|
278
290
|
|
|
279
|
-
|
|
280
|
-
|
|
291
|
+
partialCRC2 = V128_Xor(low, high);
|
|
292
|
+
partialCRC2 = V128_Xor(partialCRC2, partialCRC4);
|
|
281
293
|
|
|
282
|
-
reductionMultiplicands =
|
|
294
|
+
reductionMultiplicands =
|
|
295
|
+
V128_Load(reinterpret_cast<const V128*>(kFoldAcross128Bits));
|
|
283
296
|
|
|
284
297
|
low = V128_PMulLow(reductionMultiplicands, partialCRC1);
|
|
285
298
|
high = V128_PMulHi(reductionMultiplicands, partialCRC1);
|
|
286
299
|
V128 fullCRC = V128_Xor(low, high);
|
|
287
|
-
fullCRC = V128_Xor(fullCRC,
|
|
300
|
+
fullCRC = V128_Xor(fullCRC, partialCRC2);
|
|
288
301
|
|
|
289
302
|
// Reduce fullCRC into scalar value.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
V128 tmp = V128_PMul01(reductionMultiplicands, fullCRC);
|
|
295
|
-
fullCRC = V128_ShiftRight<8>(fullCRC);
|
|
296
|
-
fullCRC = V128_Xor(fullCRC, tmp);
|
|
297
|
-
|
|
298
|
-
reductionMultiplicands = V128_Load(reinterpret_cast<const V128*>(k7k0));
|
|
299
|
-
|
|
300
|
-
tmp = V128_ShiftRight<4>(fullCRC);
|
|
301
|
-
fullCRC = V128_And(fullCRC, mask);
|
|
302
|
-
fullCRC = V128_PMulLow(reductionMultiplicands, fullCRC);
|
|
303
|
-
fullCRC = V128_Xor(tmp, fullCRC);
|
|
304
|
-
|
|
305
|
-
reductionMultiplicands = V128_Load(reinterpret_cast<const V128*>(kPoly));
|
|
306
|
-
|
|
307
|
-
tmp = V128_And(fullCRC, mask);
|
|
308
|
-
tmp = V128_PMul01(reductionMultiplicands, tmp);
|
|
309
|
-
tmp = V128_And(tmp, mask);
|
|
310
|
-
tmp = V128_PMulLow(reductionMultiplicands, tmp);
|
|
311
|
-
|
|
312
|
-
fullCRC = V128_Xor(tmp, fullCRC);
|
|
313
|
-
|
|
314
|
-
return static_cast<uint64_t>(V128_Extract32<1>(fullCRC));
|
|
303
|
+
uint32_t crc = 0;
|
|
304
|
+
crc = CRC32_u64(crc, V128_Extract64<0>(fullCRC));
|
|
305
|
+
crc = CRC32_u64(crc, V128_Extract64<1>(fullCRC));
|
|
306
|
+
return crc;
|
|
315
307
|
}
|
|
316
308
|
|
|
317
309
|
// Update crc with 64 bytes of data from p.
|
|
@@ -325,15 +317,23 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
|
|
|
325
317
|
return crc;
|
|
326
318
|
}
|
|
327
319
|
|
|
328
|
-
//
|
|
329
|
-
//
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
alignas(16) static constexpr uint64_t
|
|
336
|
-
|
|
320
|
+
// Constants generated by './scripts/gen-crc-consts.py x86_pclmul
|
|
321
|
+
// crc32_lsb_0x82f63b78' from the Linux kernel.
|
|
322
|
+
alignas(16) static constexpr uint64_t kFoldAcross512Bits[2] = {
|
|
323
|
+
// (x^543 mod G) * x^32
|
|
324
|
+
0x00000000740eef02,
|
|
325
|
+
// (x^479 mod G) * x^32
|
|
326
|
+
0x000000009e4addf8};
|
|
327
|
+
alignas(16) static constexpr uint64_t kFoldAcross256Bits[2] = {
|
|
328
|
+
// (x^287 mod G) * x^32
|
|
329
|
+
0x000000003da6d0cb,
|
|
330
|
+
// (x^223 mod G) * x^32
|
|
331
|
+
0x00000000ba4fc28e};
|
|
332
|
+
alignas(16) static constexpr uint64_t kFoldAcross128Bits[2] = {
|
|
333
|
+
// (x^159 mod G) * x^32
|
|
334
|
+
0x00000000f20c0dfe,
|
|
335
|
+
// (x^95 mod G) * x^32
|
|
336
|
+
0x00000000493c7d27};
|
|
337
337
|
|
|
338
338
|
// Medium runs of bytes are broken into groups of kGroupsSmall blocks of same
|
|
339
339
|
// size. Each group is CRCed in parallel then combined at the end of the
|
|
@@ -345,30 +345,13 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
|
|
|
345
345
|
static constexpr size_t kMaxStreams = 3;
|
|
346
346
|
};
|
|
347
347
|
|
|
348
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
|
349
|
-
alignas(16) constexpr uint64_t
|
|
350
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k1k2[2];
|
|
351
|
-
alignas(16) constexpr uint64_t
|
|
352
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k3k4[2];
|
|
353
|
-
alignas(16) constexpr uint64_t
|
|
354
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k5k6[2];
|
|
355
|
-
alignas(16) constexpr uint64_t
|
|
356
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::k7k0[2];
|
|
357
|
-
alignas(16) constexpr uint64_t
|
|
358
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kPoly[2];
|
|
359
|
-
alignas(16) constexpr uint32_t
|
|
360
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kMask[4];
|
|
361
|
-
constexpr size_t
|
|
362
|
-
CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kGroupsSmall;
|
|
363
|
-
constexpr size_t CRC32AcceleratedX86ARMCombinedMultipleStreamsBase::kMaxStreams;
|
|
364
|
-
#endif // ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
|
365
|
-
|
|
366
348
|
template <size_t num_crc_streams, size_t num_pclmul_streams,
|
|
367
349
|
CutoffStrategy strategy>
|
|
368
350
|
class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
369
351
|
: public CRC32AcceleratedX86ARMCombinedMultipleStreamsBase {
|
|
370
352
|
ABSL_ATTRIBUTE_HOT
|
|
371
|
-
void Extend(uint32_t* crc, const void* bytes,
|
|
353
|
+
void Extend(uint32_t* crc, const void* bytes,
|
|
354
|
+
const size_t length) const override {
|
|
372
355
|
static_assert(num_crc_streams >= 1 && num_crc_streams <= kMaxStreams,
|
|
373
356
|
"Invalid number of crc streams");
|
|
374
357
|
static_assert(num_pclmul_streams >= 0 && num_pclmul_streams <= kMaxStreams,
|
|
@@ -378,47 +361,15 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
378
361
|
uint32_t l = *crc;
|
|
379
362
|
uint64_t l64;
|
|
380
363
|
|
|
381
|
-
// We have dedicated instruction for 1,2,4 and 8 bytes.
|
|
382
|
-
if (length & 8) {
|
|
383
|
-
ABSL_INTERNAL_STEP8(l, p);
|
|
384
|
-
length &= ~size_t{8};
|
|
385
|
-
}
|
|
386
|
-
if (length & 4) {
|
|
387
|
-
ABSL_INTERNAL_STEP4(l);
|
|
388
|
-
length &= ~size_t{4};
|
|
389
|
-
}
|
|
390
|
-
if (length & 2) {
|
|
391
|
-
ABSL_INTERNAL_STEP2(l);
|
|
392
|
-
length &= ~size_t{2};
|
|
393
|
-
}
|
|
394
|
-
if (length & 1) {
|
|
395
|
-
ABSL_INTERNAL_STEP1(l);
|
|
396
|
-
length &= ~size_t{1};
|
|
397
|
-
}
|
|
398
|
-
if (length == 0) {
|
|
399
|
-
*crc = l;
|
|
400
|
-
return;
|
|
401
|
-
}
|
|
402
|
-
// length is now multiple of 16.
|
|
403
|
-
|
|
404
364
|
// For small blocks just run simple loop, because cost of combining multiple
|
|
405
365
|
// streams is significant.
|
|
406
|
-
if (strategy != CutoffStrategy::Unroll64CRC) {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
*crc = l;
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
// For medium blocks we run 3 crc streams and combine them as described in
|
|
419
|
-
// Intel paper above. Running 4th stream doesn't help, because crc
|
|
420
|
-
// instruction has latency 3 and throughput 1.
|
|
421
|
-
if (length < kMediumCutoff) {
|
|
366
|
+
if (strategy != CutoffStrategy::Unroll64CRC && (length < kSmallCutoff)) {
|
|
367
|
+
// fallthrough; Use the same strategy as we do for processing the
|
|
368
|
+
// remaining bytes after any other strategy.
|
|
369
|
+
} else if (length < kMediumCutoff) {
|
|
370
|
+
// For medium blocks we run 3 crc streams and combine them as described in
|
|
371
|
+
// Intel paper above. Running 4th stream doesn't help, because crc
|
|
372
|
+
// instruction has latency 3 and throughput 1.
|
|
422
373
|
l64 = l;
|
|
423
374
|
if (strategy == CutoffStrategy::Fold3) {
|
|
424
375
|
uint64_t l641 = 0;
|
|
@@ -467,6 +418,7 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
467
418
|
p += 64;
|
|
468
419
|
}
|
|
469
420
|
}
|
|
421
|
+
l = static_cast<uint32_t>(l64);
|
|
470
422
|
} else {
|
|
471
423
|
// There is a lot of data, we can ignore combine costs and run all
|
|
472
424
|
// requested streams (num_crc_streams + num_pclmul_streams),
|
|
@@ -478,7 +430,7 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
478
430
|
const uint8_t* x = RoundUp<8>(p);
|
|
479
431
|
// Process bytes until p is 8-byte aligned, if that isn't past the end.
|
|
480
432
|
while (p != x) {
|
|
481
|
-
ABSL_INTERNAL_STEP1(l);
|
|
433
|
+
ABSL_INTERNAL_STEP1(l, p);
|
|
482
434
|
}
|
|
483
435
|
|
|
484
436
|
size_t bs = static_cast<size_t>(e - p) /
|
|
@@ -571,14 +523,15 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
571
523
|
}
|
|
572
524
|
|
|
573
525
|
// Combine all streams into single result.
|
|
526
|
+
static_assert(64 % (1 << kNumDroppedBits) == 0);
|
|
574
527
|
uint32_t magic = ComputeZeroConstant(bs * 64);
|
|
575
528
|
l64 = l64_crc[0];
|
|
576
529
|
for (size_t i = 1; i < num_crc_streams; i++) {
|
|
577
|
-
l64 =
|
|
530
|
+
l64 = MultiplyWithExtraX33(static_cast<uint32_t>(l64), magic);
|
|
578
531
|
l64 ^= l64_crc[i];
|
|
579
532
|
}
|
|
580
533
|
for (size_t i = 0; i < num_pclmul_streams; i++) {
|
|
581
|
-
l64 =
|
|
534
|
+
l64 = MultiplyWithExtraX33(static_cast<uint32_t>(l64), magic);
|
|
582
535
|
l64 ^= l64_pclmul[i];
|
|
583
536
|
}
|
|
584
537
|
|
|
@@ -588,16 +541,27 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
|
|
|
588
541
|
} else {
|
|
589
542
|
p = crc_streams[num_crc_streams - 1];
|
|
590
543
|
}
|
|
544
|
+
l = static_cast<uint32_t>(l64);
|
|
591
545
|
}
|
|
592
|
-
l = static_cast<uint32_t>(l64);
|
|
593
546
|
|
|
547
|
+
uint64_t remaining_bytes = static_cast<uint64_t>(e - p);
|
|
548
|
+
// Process the remaining bytes.
|
|
594
549
|
while ((e - p) >= 16) {
|
|
595
550
|
ABSL_INTERNAL_STEP8(l, p);
|
|
596
551
|
ABSL_INTERNAL_STEP8(l, p);
|
|
597
552
|
}
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
553
|
+
|
|
554
|
+
if (remaining_bytes & 8) {
|
|
555
|
+
ABSL_INTERNAL_STEP8(l, p);
|
|
556
|
+
}
|
|
557
|
+
if (remaining_bytes & 4) {
|
|
558
|
+
ABSL_INTERNAL_STEP4(l, p);
|
|
559
|
+
}
|
|
560
|
+
if (remaining_bytes & 2) {
|
|
561
|
+
ABSL_INTERNAL_STEP2(l, p);
|
|
562
|
+
}
|
|
563
|
+
if (remaining_bytes & 1) {
|
|
564
|
+
ABSL_INTERNAL_STEP1(l, p);
|
|
601
565
|
}
|
|
602
566
|
|
|
603
567
|
#undef ABSL_INTERNAL_STEP8BY3
|
|
@@ -622,6 +586,8 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
|
|
|
622
586
|
case CpuType::kAmdRome:
|
|
623
587
|
case CpuType::kAmdNaples:
|
|
624
588
|
case CpuType::kAmdMilan:
|
|
589
|
+
case CpuType::kAmdGenoa:
|
|
590
|
+
case CpuType::kAmdTurin:
|
|
625
591
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
626
592
|
3, 1, CutoffStrategy::Fold3>();
|
|
627
593
|
// PCLMULQDQ is fast, use combined PCLMULQDQ + CRC implementation.
|
|
@@ -629,6 +595,10 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
|
|
|
629
595
|
case CpuType::kIntelSkylakeXeon:
|
|
630
596
|
case CpuType::kIntelBroadwell:
|
|
631
597
|
case CpuType::kIntelSkylake:
|
|
598
|
+
case CpuType::kIntelIcelake:
|
|
599
|
+
case CpuType::kIntelSapphirerapids:
|
|
600
|
+
case CpuType::kIntelEmeraldrapids:
|
|
601
|
+
case CpuType::kIntelGraniterapidsap:
|
|
632
602
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
633
603
|
3, 2, CutoffStrategy::Fold3>();
|
|
634
604
|
// PCLMULQDQ is slow, don't use it.
|
|
@@ -640,6 +610,7 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
|
|
|
640
610
|
case CpuType::kArmNeoverseN1:
|
|
641
611
|
case CpuType::kArmNeoverseN2:
|
|
642
612
|
case CpuType::kArmNeoverseV1:
|
|
613
|
+
case CpuType::kArmNeoverseN3:
|
|
643
614
|
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
|
|
644
615
|
1, 1, CutoffStrategy::Unroll64CRC>();
|
|
645
616
|
case CpuType::kAmpereSiryn:
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
#
|
|
3
|
+
# Copyright 2025 The Abseil Authors.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
"""This script generates kCRC32CPowers[]."""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def poly_mul(a, b):
|
|
21
|
+
"""Polynomial multiplication: a * b."""
|
|
22
|
+
product = 0
|
|
23
|
+
for i in range(b.bit_length()):
|
|
24
|
+
if (b & (1 << i)) != 0:
|
|
25
|
+
product ^= a << i
|
|
26
|
+
return product
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def poly_div(a, b):
|
|
30
|
+
"""Polynomial division: floor(a / b)."""
|
|
31
|
+
q = 0
|
|
32
|
+
while a.bit_length() >= b.bit_length():
|
|
33
|
+
q ^= 1 << (a.bit_length() - b.bit_length())
|
|
34
|
+
a ^= b << (a.bit_length() - b.bit_length())
|
|
35
|
+
return q
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def poly_reduce(a, b):
|
|
39
|
+
"""Polynomial reduction: a mod b."""
|
|
40
|
+
return a ^ poly_mul(poly_div(a, b), b)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def poly_exp(a, b, g):
|
|
44
|
+
"""Polynomial exponentiation: a^b mod g."""
|
|
45
|
+
if b == 1:
|
|
46
|
+
return poly_reduce(a, g)
|
|
47
|
+
c = poly_exp(a, b // 2, g)
|
|
48
|
+
c = poly_mul(c, c)
|
|
49
|
+
if b % 2 != 0:
|
|
50
|
+
c = poly_mul(c, a)
|
|
51
|
+
return poly_reduce(c, g)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def bitreflect(a, num_bits):
|
|
55
|
+
"""Reflects the bits of the given integer."""
|
|
56
|
+
if a.bit_length() > num_bits:
|
|
57
|
+
raise ValueError(f'Integer has more than {num_bits} bits')
|
|
58
|
+
return sum(((a >> i) & 1) << (num_bits - 1 - i) for i in range(num_bits))
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
G = 0x11EDC6F41 # The CRC-32C reducing polynomial, in the "natural" bit order
|
|
62
|
+
CRC_BITS = 32 # The degree of G, i.e. the 32 in "CRC-32C"
|
|
63
|
+
LSB_FIRST = True # CRC-32C is a least-significant-bit-first CRC
|
|
64
|
+
NUM_SIZE_BITS = 64 # The maximum number of bits in the length (size_t)
|
|
65
|
+
NUM_DROPPED_BITS = 4 # The number of bits dropped from the length
|
|
66
|
+
LOG2_BITS_PER_BYTE = 3 # log2 of the number of bits in a byte, i.e. log2(8)
|
|
67
|
+
X = 2 # The polynomial 'x', in the "natural" bit order
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def print_crc32c_powers():
|
|
71
|
+
"""Generates kCRC32CPowers[].
|
|
72
|
+
|
|
73
|
+
kCRC32CPowers[] is an array of length NUM_SIZE_BITS - NUM_DROPPED_BITS,
|
|
74
|
+
whose i'th entry is x^(2^(i + LOG2_BITS_PER_BYTE + NUM_DROPPED_BITS) -
|
|
75
|
+
CRC_BITS - 1) mod G. See kCRC32CPowers[] in the C++ source for more info.
|
|
76
|
+
"""
|
|
77
|
+
for i in range(NUM_SIZE_BITS - NUM_DROPPED_BITS):
|
|
78
|
+
poly = poly_exp(
|
|
79
|
+
X,
|
|
80
|
+
2 ** (i + LOG2_BITS_PER_BYTE + NUM_DROPPED_BITS)
|
|
81
|
+
- CRC_BITS
|
|
82
|
+
- (1 if LSB_FIRST else 0),
|
|
83
|
+
G,
|
|
84
|
+
)
|
|
85
|
+
poly = bitreflect(poly, CRC_BITS)
|
|
86
|
+
print(f'0x{poly:0{2*CRC_BITS//8}x}, ', end='')
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == '__main__':
|
|
90
|
+
print_crc32c_powers()
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
#
|
|
16
16
|
|
|
17
|
+
load("@rules_cc//cc:cc_binary.bzl", "cc_binary")
|
|
18
|
+
load("@rules_cc//cc:cc_library.bzl", "cc_library")
|
|
19
|
+
load("@rules_cc//cc:cc_test.bzl", "cc_test")
|
|
17
20
|
load(
|
|
18
21
|
"//absl:copts/configure_copts.bzl",
|
|
19
22
|
"ABSL_DEFAULT_COPTS",
|
|
@@ -55,6 +58,7 @@ cc_library(
|
|
|
55
58
|
"//absl/base:config",
|
|
56
59
|
"//absl/base:core_headers",
|
|
57
60
|
"//absl/base:dynamic_annotations",
|
|
61
|
+
"//absl/base:malloc_internal",
|
|
58
62
|
"//absl/base:raw_logging_internal",
|
|
59
63
|
],
|
|
60
64
|
)
|
|
@@ -66,7 +70,9 @@ cc_test(
|
|
|
66
70
|
linkopts = ABSL_DEFAULT_LINKOPTS,
|
|
67
71
|
deps = [
|
|
68
72
|
":stacktrace",
|
|
73
|
+
"//absl/base:config",
|
|
69
74
|
"//absl/base:core_headers",
|
|
75
|
+
"//absl/types:span",
|
|
70
76
|
"@googletest//:gtest",
|
|
71
77
|
"@googletest//:gtest_main",
|
|
72
78
|
],
|
|
@@ -202,6 +208,7 @@ cc_library(
|
|
|
202
208
|
],
|
|
203
209
|
hdrs = [
|
|
204
210
|
"internal/address_is_readable.h",
|
|
211
|
+
"internal/addresses.h",
|
|
205
212
|
"internal/elf_mem_image.h",
|
|
206
213
|
"internal/vdso_support.h",
|
|
207
214
|
],
|