react-native-quick-crypto 1.0.18 → 1.1.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/QuickCrypto.podspec +12 -38
- package/README.md +2 -0
- package/android/CMakeLists.txt +3 -0
- package/cpp/utils/HybridUtils.cpp +39 -77
- package/deps/simdutf/.clang-format +4 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
- package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
- package/deps/simdutf/.github/pull_request_template.md +51 -0
- package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
- package/deps/simdutf/.github/workflows/alpine.yml +27 -0
- package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
- package/deps/simdutf/.github/workflows/armv7.yml +32 -0
- package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
- package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
- package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
- package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
- package/deps/simdutf/.github/workflows/debian.yml +33 -0
- package/deps/simdutf/.github/workflows/documentation.yml +36 -0
- package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
- package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
- package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
- package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
- package/deps/simdutf/.github/workflows/msys2.yml +50 -0
- package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
- package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
- package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
- package/deps/simdutf/.github/workflows/s390x.yml +29 -0
- package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
- package/deps/simdutf/.github/workflows/typos.yml +19 -0
- package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
- package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
- package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
- package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
- package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
- package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
- package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
- package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
- package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
- package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
- package/deps/simdutf/AUTHORS +6 -0
- package/deps/simdutf/CMakeLists.txt +231 -0
- package/deps/simdutf/CONTRIBUTING.md +214 -0
- package/deps/simdutf/CONTRIBUTORS +1 -0
- package/deps/simdutf/Doxyfile +2584 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/Makefile.crosscompile +54 -0
- package/deps/simdutf/README-RVV.md +16 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/SECURITY.md +8 -0
- package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
- package/deps/simdutf/benchmarks/alignment.cpp +150 -0
- package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
- package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
- package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
- package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
- package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
- package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
- package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
- package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
- package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
- package/deps/simdutf/benchmarks/competition/README.md +7 -0
- package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
- package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
- package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
- package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
- package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
- package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
- package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
- package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
- package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
- package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
- package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
- package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
- package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
- package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
- package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
- package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
- package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
- package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
- package/deps/simdutf/benchmarks/dataset/README.md +155 -0
- package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
- package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
- package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
- package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
- package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
- package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
- package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
- package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
- package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
- package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
- package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
- package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
- package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
- package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
- package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
- package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
- package/deps/simdutf/benchmarks/stream.cpp +209 -0
- package/deps/simdutf/benchmarks/threaded.cpp +123 -0
- package/deps/simdutf/cmake/CPM.cmake +1363 -0
- package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
- package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
- package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
- package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
- package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
- package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
- package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
- package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
- package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
- package/deps/simdutf/doc/avx512.png +0 -0
- package/deps/simdutf/doc/logo.png +0 -0
- package/deps/simdutf/doc/logo.svg +165 -0
- package/deps/simdutf/doc/node2023.png +0 -0
- package/deps/simdutf/doc/shortinput.md +78 -0
- package/deps/simdutf/doc/utf16utf8.png +0 -0
- package/deps/simdutf/doc/utf8utf16.png +0 -0
- package/deps/simdutf/doc/widelogo.png +0 -0
- package/deps/simdutf/doxygen.py +50 -0
- package/deps/simdutf/fuzz/.clang-format +9 -0
- package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
- package/deps/simdutf/fuzz/README.md +168 -0
- package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
- package/deps/simdutf/fuzz/base64.cpp +278 -0
- package/deps/simdutf/fuzz/build.sh +83 -0
- package/deps/simdutf/fuzz/conversion.cpp +669 -0
- package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
- package/deps/simdutf/fuzz/helpers/common.h +135 -0
- package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
- package/deps/simdutf/fuzz/main.cpp +72 -0
- package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
- package/deps/simdutf/fuzz/misc.cpp +216 -0
- package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
- package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
- package/deps/simdutf/fuzz/safe_conversion.cpp +104 -0
- package/deps/simdutf/include/simdutf/avx512.h +79 -0
- package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
- package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
- package/deps/simdutf/include/simdutf/common_defs.h +186 -0
- package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
- package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
- package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
- package/deps/simdutf/include/simdutf/error.h +126 -0
- package/deps/simdutf/include/simdutf/implementation.h +7081 -0
- package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
- package/deps/simdutf/include/simdutf/portability.h +285 -0
- package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
- package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
- package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
- package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
- package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
- package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
- package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
- package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
- package/deps/simdutf/include/simdutf.h +26 -0
- package/deps/simdutf/include/simdutf_c.h +342 -0
- package/deps/simdutf/riscv/Dockerfile +16 -0
- package/deps/simdutf/riscv/README.md +24 -0
- package/deps/simdutf/riscv/remove-docker-station +8 -0
- package/deps/simdutf/riscv/run-docker-station +31 -0
- package/deps/simdutf/scripts/.flake8 +2 -0
- package/deps/simdutf/scripts/Makefile +2 -0
- package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
- package/deps/simdutf/scripts/add_function.py +330 -0
- package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
- package/deps/simdutf/scripts/base64/Makefile +2 -0
- package/deps/simdutf/scripts/base64/README.md +2 -0
- package/deps/simdutf/scripts/base64/avx512.py +76 -0
- package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
- package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
- package/deps/simdutf/scripts/base64/sse.py +252 -0
- package/deps/simdutf/scripts/base64/sseregular.py +160 -0
- package/deps/simdutf/scripts/base64/sseurl.py +283 -0
- package/deps/simdutf/scripts/base64/table.py +59 -0
- package/deps/simdutf/scripts/base64bench_print.py +145 -0
- package/deps/simdutf/scripts/benchmark-all.py +119 -0
- package/deps/simdutf/scripts/benchmark_print.py +324 -0
- package/deps/simdutf/scripts/check_feature_macros.py +156 -0
- package/deps/simdutf/scripts/check_typos.sh +13 -0
- package/deps/simdutf/scripts/clang_format.sh +35 -0
- package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
- package/deps/simdutf/scripts/common.py +24 -0
- package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
- package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
- package/deps/simdutf/scripts/create_latex_table.py +62 -0
- package/deps/simdutf/scripts/docker/Dockerfile +14 -0
- package/deps/simdutf/scripts/docker/Makefile +9 -0
- package/deps/simdutf/scripts/docker/README.md +30 -0
- package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
- package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
- package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
- package/deps/simdutf/scripts/release.py +197 -0
- package/deps/simdutf/scripts/shortinputplots.py +97 -0
- package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
- package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
- package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
- package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
- package/deps/simdutf/scripts/table.py +207 -0
- package/deps/simdutf/scripts/tests/new.txt +33 -0
- package/deps/simdutf/scripts/tests/old.txt +33 -0
- package/deps/simdutf/scripts/tests/results.txt +272 -0
- package/deps/simdutf/simdutf.pc.in +11 -0
- package/deps/simdutf/singleheader/.flake8 +2 -0
- package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
- package/deps/simdutf/singleheader/README-dev.md +81 -0
- package/deps/simdutf/singleheader/README.md +19 -0
- package/deps/simdutf/singleheader/amalgamate.py +513 -0
- package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
- package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
- package/deps/simdutf/singleheader/test-features.py +262 -0
- package/deps/simdutf/src/CMakeLists.txt +78 -0
- package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
- package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
- package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
- package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
- package/deps/simdutf/src/encoding_types.cpp +67 -0
- package/deps/simdutf/src/error.cpp +3 -0
- package/deps/simdutf/src/fallback/implementation.cpp +589 -0
- package/deps/simdutf/src/generic/ascii_validation.h +50 -0
- package/deps/simdutf/src/generic/base64.h +233 -0
- package/deps/simdutf/src/generic/base64lengths.h +63 -0
- package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
- package/deps/simdutf/src/generic/find.h +75 -0
- package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
- package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
- package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
- package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
- package/deps/simdutf/src/generic/utf16.h +73 -0
- package/deps/simdutf/src/generic/utf32.h +136 -0
- package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
- package/deps/simdutf/src/generic/utf8.h +92 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
- package/deps/simdutf/src/generic/validate_utf16.h +164 -0
- package/deps/simdutf/src/generic/validate_utf32.h +99 -0
- package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
- package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
- package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
- package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
- package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
- package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
- package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
- package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
- package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
- package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
- package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
- package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
- package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
- package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
- package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
- package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
- package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
- package/deps/simdutf/src/implementation.cpp +2526 -0
- package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
- package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
- package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
- package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
- package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
- package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
- package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
- package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
- package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
- package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
- package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
- package/deps/simdutf/src/ppc64/templates.cpp +91 -0
- package/deps/simdutf/src/rvv/implementation.cpp +138 -0
- package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
- package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
- package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
- package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
- package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
- package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
- package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
- package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
- package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
- package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
- package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
- package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
- package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
- package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
- package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
- package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
- package/deps/simdutf/src/simdutf/arm64.h +43 -0
- package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
- package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
- package/deps/simdutf/src/simdutf/fallback.h +42 -0
- package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
- package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
- package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
- package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
- package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
- package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
- package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
- package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
- package/deps/simdutf/src/simdutf/haswell.h +63 -0
- package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
- package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
- package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
- package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
- package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
- package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
- package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
- package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
- package/deps/simdutf/src/simdutf/icelake.h +81 -0
- package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
- package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
- package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
- package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
- package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
- package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
- package/deps/simdutf/src/simdutf/lasx.h +49 -0
- package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
- package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
- package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
- package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
- package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
- package/deps/simdutf/src/simdutf/lsx.h +52 -0
- package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
- package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
- package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
- package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
- package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
- package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
- package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
- package/deps/simdutf/src/simdutf/ppc64.h +40 -0
- package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
- package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
- package/deps/simdutf/src/simdutf/rvv.h +41 -0
- package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
- package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
- package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
- package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
- package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
- package/deps/simdutf/src/simdutf/westmere.h +59 -0
- package/deps/simdutf/src/simdutf.cpp +152 -0
- package/deps/simdutf/src/simdutf_c.cpp +525 -0
- package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
- package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
- package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
- package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
- package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
- package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
- package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
- package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
- package/deps/simdutf/tests/CMakeLists.txt +483 -0
- package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
- package/deps/simdutf/tests/base64_tests.cpp +3617 -0
- package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
- package/deps/simdutf/tests/bele_tests.cpp +182 -0
- package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
- package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
- package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
- package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
- package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
- package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
- package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
- package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
- package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
- package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
- package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
- package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
- package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
- package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
- package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
- package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
- package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
- package/deps/simdutf/tests/count_utf16be.cpp +64 -0
- package/deps/simdutf/tests/count_utf16le.cpp +61 -0
- package/deps/simdutf/tests/count_utf8.cpp +87 -0
- package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
- package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
- package/deps/simdutf/tests/embed_tests.cpp +22 -0
- package/deps/simdutf/tests/find_tests.cpp +77 -0
- package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
- package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
- package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
- package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
- package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
- package/deps/simdutf/tests/helpers/random_int.h +39 -0
- package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
- package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
- package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
- package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
- package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
- package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
- package/deps/simdutf/tests/helpers/test.cpp +231 -0
- package/deps/simdutf/tests/helpers/test.h +193 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
- package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
- package/deps/simdutf/tests/helpers/utf16.h +27 -0
- package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
- package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
- package/deps/simdutf/tests/internal_tests.cpp +27 -0
- package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
- package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
- package/deps/simdutf/tests/readme_tests.cpp +274 -0
- package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
- package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
- package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
- package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
- package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
- package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
- package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
- package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
- package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
- package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
- package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
- package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
- package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
- package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
- package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
- package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
- package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
- package/deps/simdutf/tests/select_implementation.cpp +43 -0
- package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
- package/deps/simdutf/tests/span_tests.cpp +401 -0
- package/deps/simdutf/tests/special_tests.cpp +559 -0
- package/deps/simdutf/tests/straight_c_test.c +187 -0
- package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
- package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
- package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
- package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
- package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
- package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
- package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
- package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
- package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
- package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
- package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
- package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
- package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
- package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
- package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
- package/deps/simdutf/tools/CMakeLists.txt +85 -0
- package/deps/simdutf/tools/fastbase64.cpp +250 -0
- package/deps/simdutf/tools/sutf.cpp +556 -0
- package/deps/simdutf/tools/sutf.h +40 -0
- package/lib/commonjs/blake3.js +2 -1
- package/lib/commonjs/blake3.js.map +1 -1
- package/lib/commonjs/diffie-hellman.js +5 -4
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/ecdh.js +5 -4
- package/lib/commonjs/ecdh.js.map +1 -1
- package/lib/module/blake3.js +2 -1
- package/lib/module/blake3.js.map +1 -1
- package/lib/module/diffie-hellman.js +5 -4
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/ecdh.js +5 -4
- package/lib/module/ecdh.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/blake3.d.ts.map +1 -1
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/blake3.ts +2 -1
- package/src/diffie-hellman.ts +5 -7
- package/src/ecdh.ts +5 -8
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
simdutf_really_inline const char *util_find(const char *start, const char *end,
|
|
2
|
+
char character) noexcept {
|
|
3
|
+
// Handle empty or invalid range
|
|
4
|
+
if (start >= end)
|
|
5
|
+
return end;
|
|
6
|
+
|
|
7
|
+
const size_t widestep = 64;
|
|
8
|
+
const size_t step = 16;
|
|
9
|
+
uint8x16_t char_vec = vdupq_n_u8(static_cast<uint8_t>(character));
|
|
10
|
+
|
|
11
|
+
// Handle unaligned beginning
|
|
12
|
+
uintptr_t misalignment = reinterpret_cast<uintptr_t>(start) % step;
|
|
13
|
+
if (misalignment != 0) {
|
|
14
|
+
size_t adjustment = step - misalignment;
|
|
15
|
+
if (size_t(end - start) < adjustment) {
|
|
16
|
+
adjustment = end - start;
|
|
17
|
+
}
|
|
18
|
+
for (size_t i = 0; i < adjustment; ++i) {
|
|
19
|
+
if (start[i] == character) {
|
|
20
|
+
return start + i;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
start += adjustment;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Main loop for full 64-byte chunks
|
|
27
|
+
while (size_t(end - start) >= widestep) {
|
|
28
|
+
uint8x16_t data1 = vld1q_u8(reinterpret_cast<const uint8_t *>(start));
|
|
29
|
+
uint8x16_t data2 = vld1q_u8(reinterpret_cast<const uint8_t *>(start) + 16);
|
|
30
|
+
uint8x16_t data3 = vld1q_u8(reinterpret_cast<const uint8_t *>(start) + 32);
|
|
31
|
+
uint8x16_t data4 = vld1q_u8(reinterpret_cast<const uint8_t *>(start) + 48);
|
|
32
|
+
|
|
33
|
+
uint8x16_t cmp1 = vceqq_u8(data1, char_vec);
|
|
34
|
+
uint8x16_t cmp2 = vceqq_u8(data2, char_vec);
|
|
35
|
+
uint8x16_t cmp3 = vceqq_u8(data3, char_vec);
|
|
36
|
+
uint8x16_t cmp4 = vceqq_u8(data4, char_vec);
|
|
37
|
+
uint8x16_t cmpall = vorrq_u8(vorrq_u8(cmp1, cmp2), vorrq_u8(cmp3, cmp4));
|
|
38
|
+
|
|
39
|
+
uint64_t mask = vget_lane_u64(
|
|
40
|
+
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(cmpall), 4)), 0);
|
|
41
|
+
|
|
42
|
+
if (mask != 0) {
|
|
43
|
+
// Found a match, return the first one
|
|
44
|
+
uint64_t mask1 = vget_lane_u64(
|
|
45
|
+
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(cmp1), 4)), 0);
|
|
46
|
+
if (mask1 != 0) {
|
|
47
|
+
// Found a match in the first chunk
|
|
48
|
+
int index = trailing_zeroes(mask1) / 4; // Each character maps to 4 bits
|
|
49
|
+
return start + index;
|
|
50
|
+
}
|
|
51
|
+
uint64_t mask2 = vget_lane_u64(
|
|
52
|
+
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(cmp2), 4)), 0);
|
|
53
|
+
if (mask2 != 0) {
|
|
54
|
+
// Found a match in the second chunk
|
|
55
|
+
int index = trailing_zeroes(mask2) / 4; // Each character maps to 4 bits
|
|
56
|
+
return start + index + 16;
|
|
57
|
+
}
|
|
58
|
+
uint64_t mask3 = vget_lane_u64(
|
|
59
|
+
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(cmp3), 4)), 0);
|
|
60
|
+
if (mask3 != 0) {
|
|
61
|
+
// Found a match in the third chunk
|
|
62
|
+
int index = trailing_zeroes(mask3) / 4; // Each character maps to 4 bits
|
|
63
|
+
return start + index + 32;
|
|
64
|
+
}
|
|
65
|
+
uint64_t mask4 = vget_lane_u64(
|
|
66
|
+
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(cmp4), 4)), 0);
|
|
67
|
+
if (mask4 != 0) {
|
|
68
|
+
// Found a match in the fourth chunk
|
|
69
|
+
int index = trailing_zeroes(mask4) / 4; // Each character maps to 4 bits
|
|
70
|
+
return start + index + 48;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
start += widestep;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Main loop for full 16-byte chunks
|
|
78
|
+
while (size_t(end - start) >= step) {
|
|
79
|
+
uint8x16_t data = vld1q_u8(reinterpret_cast<const uint8_t *>(start));
|
|
80
|
+
uint8x16_t cmp = vceqq_u8(data, char_vec);
|
|
81
|
+
uint64_t mask = vget_lane_u64(
|
|
82
|
+
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(cmp), 4)), 0);
|
|
83
|
+
|
|
84
|
+
if (mask != 0) {
|
|
85
|
+
// Found a match, return the first one
|
|
86
|
+
int index = trailing_zeroes(mask) / 4; // Each character maps to 4 bits
|
|
87
|
+
return start + index;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
start += step;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Handle remaining bytes with scalar loop
|
|
94
|
+
for (; start < end; ++start) {
|
|
95
|
+
if (*start == character) {
|
|
96
|
+
return start;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return end;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
simdutf_really_inline const char16_t *util_find(const char16_t *start,
|
|
104
|
+
const char16_t *end,
|
|
105
|
+
char16_t character) noexcept {
|
|
106
|
+
// Handle empty or invalid range
|
|
107
|
+
if (start >= end)
|
|
108
|
+
return end;
|
|
109
|
+
|
|
110
|
+
const size_t step = 8;
|
|
111
|
+
uint16x8_t char_vec = vdupq_n_u16(character);
|
|
112
|
+
|
|
113
|
+
// Handle unaligned beginning
|
|
114
|
+
uintptr_t misalignment =
|
|
115
|
+
reinterpret_cast<uintptr_t>(start) % (step * sizeof(char16_t));
|
|
116
|
+
if (misalignment != 0 && misalignment % 2 == 0) {
|
|
117
|
+
size_t adjustment =
|
|
118
|
+
(step * sizeof(char16_t) - misalignment) / sizeof(char16_t);
|
|
119
|
+
if (size_t(end - start) < adjustment) {
|
|
120
|
+
adjustment = end - start;
|
|
121
|
+
}
|
|
122
|
+
for (size_t i = 0; i < adjustment; ++i) {
|
|
123
|
+
if (start[i] == character) {
|
|
124
|
+
return start + i;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
start += adjustment;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Main loop for full 8-element chunks with unrolling
|
|
131
|
+
while (size_t(end - start) >= 4 * step) {
|
|
132
|
+
uint16x8_t data1 = vld1q_u16(reinterpret_cast<const uint16_t *>(start));
|
|
133
|
+
uint16x8_t data2 =
|
|
134
|
+
vld1q_u16(reinterpret_cast<const uint16_t *>(start) + step);
|
|
135
|
+
uint16x8_t data3 =
|
|
136
|
+
vld1q_u16(reinterpret_cast<const uint16_t *>(start) + 2 * step);
|
|
137
|
+
uint16x8_t data4 =
|
|
138
|
+
vld1q_u16(reinterpret_cast<const uint16_t *>(start) + 3 * step);
|
|
139
|
+
|
|
140
|
+
uint16x8_t cmp1 = vceqq_u16(data1, char_vec);
|
|
141
|
+
uint16x8_t cmp2 = vceqq_u16(data2, char_vec);
|
|
142
|
+
uint16x8_t cmp3 = vceqq_u16(data3, char_vec);
|
|
143
|
+
uint16x8_t cmp4 = vceqq_u16(data4, char_vec);
|
|
144
|
+
|
|
145
|
+
uint64_t mask1 = vget_lane_u64(
|
|
146
|
+
vreinterpret_u64_u16(vshrn_n_u32(vreinterpretq_u32_u16(cmp1), 4)), 0);
|
|
147
|
+
if (mask1 != 0) {
|
|
148
|
+
int index = trailing_zeroes(mask1) / 8;
|
|
149
|
+
return start + index;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
uint64_t mask2 = vget_lane_u64(
|
|
153
|
+
vreinterpret_u64_u16(vshrn_n_u32(vreinterpretq_u32_u16(cmp2), 4)), 0);
|
|
154
|
+
if (mask2 != 0) {
|
|
155
|
+
int index = trailing_zeroes(mask2) / 8;
|
|
156
|
+
return start + index + step;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
uint64_t mask3 = vget_lane_u64(
|
|
160
|
+
vreinterpret_u64_u16(vshrn_n_u32(vreinterpretq_u32_u16(cmp3), 4)), 0);
|
|
161
|
+
if (mask3 != 0) {
|
|
162
|
+
int index = trailing_zeroes(mask3) / 8;
|
|
163
|
+
return start + index + 2 * step;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
uint64_t mask4 = vget_lane_u64(
|
|
167
|
+
vreinterpret_u64_u16(vshrn_n_u32(vreinterpretq_u32_u16(cmp4), 4)), 0);
|
|
168
|
+
if (mask4 != 0) {
|
|
169
|
+
int index = trailing_zeroes(mask4) / 8;
|
|
170
|
+
return start + index + 3 * step;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
start += 4 * step;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Main loop for full 8-element chunks
|
|
177
|
+
while (size_t(end - start) >= step) {
|
|
178
|
+
uint16x8_t data = vld1q_u16(reinterpret_cast<const uint16_t *>(start));
|
|
179
|
+
uint16x8_t cmp = vceqq_u16(data, char_vec);
|
|
180
|
+
uint64_t mask = vget_lane_u64(
|
|
181
|
+
vreinterpret_u64_u16(vshrn_n_u32(vreinterpretq_u32_u16(cmp), 4)), 0);
|
|
182
|
+
|
|
183
|
+
if (mask != 0) {
|
|
184
|
+
int index = trailing_zeroes(mask) / 8;
|
|
185
|
+
return start + index;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
start += step;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Handle remaining elements with scalar loop
|
|
192
|
+
for (; start < end; ++start) {
|
|
193
|
+
if (*start == character) {
|
|
194
|
+
return start;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return end;
|
|
199
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
|
|
2
|
+
/*
|
|
3
|
+
* Returns if a vector of type uint8x16_t is all zero.
|
|
4
|
+
*/
|
|
5
|
+
simdutf_really_inline int veq_non_zero(uint8x16_t v) {
|
|
6
|
+
// might compile to two instructions:
|
|
7
|
+
// umaxv s0, v0.4s
|
|
8
|
+
// fmov w0, s0
|
|
9
|
+
// On Apple hardware, they both have a latency of 3 cycles, with a throughput
|
|
10
|
+
// of four instructions per cycle. So that's 6 cycles of latency (!!!) for the
|
|
11
|
+
// two instructions. A narrowing shift has the same latency and throughput.
|
|
12
|
+
return vmaxvq_u32(vreinterpretq_u32_u8(v));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* Process one block of 16 characters. If in_place is false,
|
|
17
|
+
* copy the block from in to out. If there is a sequencing
|
|
18
|
+
* error in the block, overwrite the illsequenced characters
|
|
19
|
+
* with the replacement character. This function reads one
|
|
20
|
+
* character before the beginning of the buffer as a lookback.
|
|
21
|
+
* If that character is illsequenced, it too is overwritten.
|
|
22
|
+
*/
|
|
23
|
+
template <endianness big_endian, bool inplace>
|
|
24
|
+
void utf16fix_block(char16_t *out, const char16_t *in) {
|
|
25
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
26
|
+
uint8x16x2_t lb, block;
|
|
27
|
+
uint8x16_t lb_masked, block_masked, lb_is_high, block_is_low;
|
|
28
|
+
uint8x16_t illseq;
|
|
29
|
+
|
|
30
|
+
constexpr int idx = !match_system(big_endian) ? 0 : 1;
|
|
31
|
+
|
|
32
|
+
/* TODO: compute lookback using shifts */
|
|
33
|
+
lb = vld2q_u8((const uint8_t *)(in - 1));
|
|
34
|
+
block = vld2q_u8((const uint8_t *)in);
|
|
35
|
+
lb_masked = vandq_u8(lb.val[idx], vdupq_n_u8(0xfc));
|
|
36
|
+
block_masked = vandq_u8(block.val[idx], vdupq_n_u8(0xfc));
|
|
37
|
+
lb_is_high = vceqq_u8(lb_masked, vdupq_n_u8(0xd8));
|
|
38
|
+
block_is_low = vceqq_u8(block_masked, vdupq_n_u8(0xdc));
|
|
39
|
+
|
|
40
|
+
illseq = veorq_u8(lb_is_high, block_is_low);
|
|
41
|
+
if (veq_non_zero(illseq)) {
|
|
42
|
+
uint8x16_t lb_illseq, block_illseq;
|
|
43
|
+
char16_t lbc;
|
|
44
|
+
int ill;
|
|
45
|
+
|
|
46
|
+
/* compute the cause of the illegal sequencing */
|
|
47
|
+
lb_illseq = vbicq_u8(lb_is_high, block_is_low);
|
|
48
|
+
block_illseq = vorrq_u8(vbicq_u8(block_is_low, lb_is_high),
|
|
49
|
+
vextq_u8(lb_illseq, vdupq_n_u8(0), 1));
|
|
50
|
+
|
|
51
|
+
/* fix illegal sequencing in the lookback */
|
|
52
|
+
ill = vgetq_lane_u8(lb_illseq, 0);
|
|
53
|
+
lbc = out[-1];
|
|
54
|
+
out[-1] = ill ? replacement : lbc;
|
|
55
|
+
|
|
56
|
+
/* fix illegal sequencing in the main block */
|
|
57
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
58
|
+
block.val[1] = vbslq_u8(block_illseq, vdupq_n_u8(0xfd), block.val[1]);
|
|
59
|
+
block.val[0] = vorrq_u8(block_illseq, block.val[0]);
|
|
60
|
+
} else {
|
|
61
|
+
block.val[0] = vbslq_u8(block_illseq, vdupq_n_u8(0xfd), block.val[0]);
|
|
62
|
+
block.val[1] = vorrq_u8(block_illseq, block.val[1]);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
vst2q_u8((uint8_t *)out, block);
|
|
66
|
+
} else if (!inplace) {
|
|
67
|
+
vst2q_u8((uint8_t *)out, block);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
template <endianness big_endian, bool inplace>
|
|
72
|
+
uint8x16_t get_mismatch_copy(const char16_t *in, char16_t *out) {
|
|
73
|
+
constexpr int idx = !match_system(big_endian) ? 0 : 1;
|
|
74
|
+
uint8x16x2_t lb = vld2q_u8((const uint8_t *)(in - 1));
|
|
75
|
+
uint8x16x2_t block = vld2q_u8((const uint8_t *)in);
|
|
76
|
+
uint8x16_t lb_masked = vandq_u8(lb.val[idx], vdupq_n_u8(0xfc));
|
|
77
|
+
uint8x16_t block_masked = vandq_u8(block.val[idx], vdupq_n_u8(0xfc));
|
|
78
|
+
uint8x16_t lb_is_high = vceqq_u8(lb_masked, vdupq_n_u8(0xd8));
|
|
79
|
+
uint8x16_t block_is_low = vceqq_u8(block_masked, vdupq_n_u8(0xdc));
|
|
80
|
+
uint8x16_t illseq = veorq_u8(lb_is_high, block_is_low);
|
|
81
|
+
if (!inplace) {
|
|
82
|
+
vst2q_u8((uint8_t *)out, block);
|
|
83
|
+
}
|
|
84
|
+
return illseq;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
simdutf_really_inline uint64_t get_mask(uint8x16_t illse0, uint8x16_t illse1,
|
|
88
|
+
uint8x16_t illse2, uint8x16_t illse3) {
|
|
89
|
+
#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO
|
|
90
|
+
uint8x16_t bit_mask =
|
|
91
|
+
simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
|
|
92
|
+
0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80);
|
|
93
|
+
#else
|
|
94
|
+
uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
|
|
95
|
+
0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
|
|
96
|
+
#endif
|
|
97
|
+
uint8x16_t sum0 =
|
|
98
|
+
vpaddq_u8(vandq_u8(illse0, bit_mask), vandq_u8(illse1, bit_mask));
|
|
99
|
+
uint8x16_t sum1 =
|
|
100
|
+
vpaddq_u8(vandq_u8(illse2, bit_mask), vandq_u8(illse3, bit_mask));
|
|
101
|
+
sum0 = vpaddq_u8(sum0, sum1);
|
|
102
|
+
sum0 = vpaddq_u8(sum0, sum0);
|
|
103
|
+
return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// The idea is to process 64 characters at a time, and if there is a mismatch
|
|
107
|
+
// we can fix it with a bit of scalar code. When the input is correct, this
|
|
108
|
+
// function might be faster than alternative implementations working on small
|
|
109
|
+
// blocks of input.
|
|
110
|
+
template <endianness big_endian, bool inplace>
|
|
111
|
+
bool utf16fix_block64(char16_t *out, const char16_t *in) {
|
|
112
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
113
|
+
|
|
114
|
+
uint8x16_t illse0 = inplace ? get_mismatch_copy<big_endian, true>(in, out)
|
|
115
|
+
: get_mismatch_copy<big_endian, false>(in, out);
|
|
116
|
+
uint8x16_t illse1 =
|
|
117
|
+
inplace ? get_mismatch_copy<big_endian, true>(in + 16, out + 16)
|
|
118
|
+
: get_mismatch_copy<big_endian, false>(in + 16, out + 16);
|
|
119
|
+
uint8x16_t illse2 =
|
|
120
|
+
inplace ? get_mismatch_copy<big_endian, true>(in + 32, out + 32)
|
|
121
|
+
: get_mismatch_copy<big_endian, false>(in + 32, out + 32);
|
|
122
|
+
uint8x16_t illse3 =
|
|
123
|
+
inplace ? get_mismatch_copy<big_endian, true>(in + 48, out + 48)
|
|
124
|
+
: get_mismatch_copy<big_endian, false>(in + 48, out + 48);
|
|
125
|
+
// this branch could be marked as unlikely:
|
|
126
|
+
if (veq_non_zero(
|
|
127
|
+
vorrq_u8(vorrq_u8(illse0, illse1), vorrq_u8(illse2, illse3)))) {
|
|
128
|
+
uint64_t matches = get_mask(illse0, illse1, illse2, illse3);
|
|
129
|
+
// Given that ARM has a fast bitreverse instruction, we can
|
|
130
|
+
// reverse once and then use clz to find the first bit set.
|
|
131
|
+
// It is how it is done in simdjson and *might* be beneficial.
|
|
132
|
+
//
|
|
133
|
+
// We might also proceed in reverse to reduce the RAW hazard,
|
|
134
|
+
// but it might require more instructions.
|
|
135
|
+
|
|
136
|
+
while (matches != 0) {
|
|
137
|
+
int r = trailing_zeroes(matches); // generates rbit + clz
|
|
138
|
+
// Either we have a high surrogate followed by a non-low surrogate
|
|
139
|
+
// or we have a low surrogate not preceded by a high surrogate.
|
|
140
|
+
bool is_high = scalar::utf16::is_high_surrogate<big_endian>(in[r - 1]);
|
|
141
|
+
out[r - is_high] = replacement;
|
|
142
|
+
matches = clear_least_significant_bit(matches);
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
template <endianness big_endian>
|
|
150
|
+
void utf16fix_neon_64bits(const char16_t *in, size_t n, char16_t *out) {
|
|
151
|
+
size_t i;
|
|
152
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
153
|
+
if (n < 17) {
|
|
154
|
+
return scalar::utf16::to_well_formed_utf16<big_endian>(in, n, out);
|
|
155
|
+
}
|
|
156
|
+
out[0] =
|
|
157
|
+
scalar::utf16::is_low_surrogate<big_endian>(in[0]) ? replacement : in[0];
|
|
158
|
+
i = 1;
|
|
159
|
+
|
|
160
|
+
/* duplicate code to have the compiler specialise utf16fix_block() */
|
|
161
|
+
if (in == out) {
|
|
162
|
+
for (i = 1; i + 64 < n; i += 64) {
|
|
163
|
+
utf16fix_block64<big_endian, true>(out + i, in + i);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
for (; i + 16 < n; i += 16) {
|
|
167
|
+
utf16fix_block<big_endian, true>(out + i, in + i);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* tbd: find carry */
|
|
171
|
+
utf16fix_block<big_endian, true>(out + n - 16, in + n - 16);
|
|
172
|
+
} else {
|
|
173
|
+
for (i = 1; i + 64 < n; i += 64) {
|
|
174
|
+
utf16fix_block64<big_endian, false>(out + i, in + i);
|
|
175
|
+
}
|
|
176
|
+
for (; i + 16 < n; i += 16) {
|
|
177
|
+
utf16fix_block<big_endian, false>(out + i, in + i);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
utf16fix_block<big_endian, false>(out + n - 16, in + n - 16);
|
|
181
|
+
}
|
|
182
|
+
out[n - 1] = scalar::utf16::is_high_surrogate<big_endian>(out[n - 1])
|
|
183
|
+
? replacement
|
|
184
|
+
: out[n - 1];
|
|
185
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
template <endianness big_endian>
|
|
2
|
+
const char16_t *arm_validate_utf16(const char16_t *input, size_t size) {
|
|
3
|
+
const char16_t *end = input + size;
|
|
4
|
+
const auto v_d8 = simd8<uint8_t>::splat(0xd8);
|
|
5
|
+
const auto v_f8 = simd8<uint8_t>::splat(0xf8);
|
|
6
|
+
const auto v_fc = simd8<uint8_t>::splat(0xfc);
|
|
7
|
+
const auto v_dc = simd8<uint8_t>::splat(0xdc);
|
|
8
|
+
while (end - input >= 16) {
|
|
9
|
+
// 0. Load data: since the validation takes into account only higher
|
|
10
|
+
// byte of each word, we compress the two vectors into one which
|
|
11
|
+
// consists only the higher bytes.
|
|
12
|
+
auto in0 = simd16<uint16_t>(input);
|
|
13
|
+
auto in1 =
|
|
14
|
+
simd16<uint16_t>(input + simd16<uint16_t>::SIZE / sizeof(char16_t));
|
|
15
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
16
|
+
in0 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in0)));
|
|
17
|
+
in1 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in1)));
|
|
18
|
+
}
|
|
19
|
+
const auto t0 = in0.shr<8>();
|
|
20
|
+
const auto t1 = in1.shr<8>();
|
|
21
|
+
const simd8<uint8_t> in = simd16<uint16_t>::pack(t0, t1);
|
|
22
|
+
// 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy).
|
|
23
|
+
const uint64_t surrogates_wordmask = ((in & v_f8) == v_d8).to_bitmask64();
|
|
24
|
+
if (surrogates_wordmask == 0) {
|
|
25
|
+
input += 16;
|
|
26
|
+
} else {
|
|
27
|
+
// 2. We have some surrogates that have to be distinguished:
|
|
28
|
+
// - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF)
|
|
29
|
+
// - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF)
|
|
30
|
+
//
|
|
31
|
+
// Fact: high surrogate has 11th bit set (3rd bit in the higher word)
|
|
32
|
+
|
|
33
|
+
// V - non-surrogate code units
|
|
34
|
+
// V = not surrogates_wordmask
|
|
35
|
+
const uint64_t V = ~surrogates_wordmask;
|
|
36
|
+
|
|
37
|
+
// H - word-mask for high surrogates: the six highest bits are 0b1101'11
|
|
38
|
+
const auto vH = ((in & v_fc) == v_dc);
|
|
39
|
+
const uint64_t H = vH.to_bitmask64();
|
|
40
|
+
|
|
41
|
+
// L - word mask for low surrogates
|
|
42
|
+
// L = not H and surrogates_wordmask
|
|
43
|
+
const uint64_t L = ~H & surrogates_wordmask;
|
|
44
|
+
|
|
45
|
+
const uint64_t a =
|
|
46
|
+
L & (H >> 4); // A low surrogate must be followed by high one.
|
|
47
|
+
// (A low surrogate placed in the 7th register's word
|
|
48
|
+
// is an exception we handle.)
|
|
49
|
+
const uint64_t b =
|
|
50
|
+
a << 4; // Just mark that the opposite fact is hold,
|
|
51
|
+
// thanks to that we have only two masks for valid case.
|
|
52
|
+
const uint64_t c = V | a | b; // Combine all the masks into the final one.
|
|
53
|
+
if (c == ~0ull) {
|
|
54
|
+
// The whole input register contains valid UTF-16, i.e.,
|
|
55
|
+
// either single code units or proper surrogate pairs.
|
|
56
|
+
input += 16;
|
|
57
|
+
} else if (c == 0xfffffffffffffffull) {
|
|
58
|
+
// The 15 lower code units of the input register contains valid UTF-16.
|
|
59
|
+
// The 15th word may be either a low or high surrogate. It the next
|
|
60
|
+
// iteration we 1) check if the low surrogate is followed by a high
|
|
61
|
+
// one, 2) reject sole high surrogate.
|
|
62
|
+
input += 15;
|
|
63
|
+
} else {
|
|
64
|
+
return nullptr;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return input;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
template <endianness big_endian>
|
|
72
|
+
const char16_t *arm_validate_utf16_as_ascii(const char16_t *input,
|
|
73
|
+
size_t size) {
|
|
74
|
+
const char16_t *end = input + size;
|
|
75
|
+
while (end - input >= 16) {
|
|
76
|
+
uint16x8_t in1 = vld1q_u16(reinterpret_cast<const uint16_t *>(input));
|
|
77
|
+
uint16x8_t in2 = vld1q_u16(reinterpret_cast<const uint16_t *>(input + 8));
|
|
78
|
+
uint16x8_t inor = vorrq_u16(in1, in2);
|
|
79
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
80
|
+
inor = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(inor)));
|
|
81
|
+
}
|
|
82
|
+
// next we compute inor > 0x7f
|
|
83
|
+
uint16x8_t cmp = vcgtq_u16(inor, vdupq_n_u16(0x7f));
|
|
84
|
+
uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(cmp, 4)), 0);
|
|
85
|
+
if (mask) {
|
|
86
|
+
return nullptr;
|
|
87
|
+
}
|
|
88
|
+
input += 16;
|
|
89
|
+
}
|
|
90
|
+
return input;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
template <endianness big_endian>
|
|
94
|
+
const result arm_validate_utf16_with_errors(const char16_t *input,
|
|
95
|
+
size_t size) {
|
|
96
|
+
const char16_t *start = input;
|
|
97
|
+
const char16_t *end = input + size;
|
|
98
|
+
|
|
99
|
+
const auto v_d8 = simd8<uint8_t>::splat(0xd8);
|
|
100
|
+
const auto v_f8 = simd8<uint8_t>::splat(0xf8);
|
|
101
|
+
const auto v_fc = simd8<uint8_t>::splat(0xfc);
|
|
102
|
+
const auto v_dc = simd8<uint8_t>::splat(0xdc);
|
|
103
|
+
while (input + 16 < end) {
|
|
104
|
+
// 0. Load data: since the validation takes into account only higher
|
|
105
|
+
// byte of each word, we compress the two vectors into one which
|
|
106
|
+
// consists only the higher bytes.
|
|
107
|
+
auto in0 = simd16<uint16_t>(input);
|
|
108
|
+
auto in1 =
|
|
109
|
+
simd16<uint16_t>(input + simd16<uint16_t>::SIZE / sizeof(char16_t));
|
|
110
|
+
|
|
111
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
112
|
+
in0 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in0)));
|
|
113
|
+
in1 = vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(in1)));
|
|
114
|
+
}
|
|
115
|
+
const auto t0 = in0.shr<8>();
|
|
116
|
+
const auto t1 = in1.shr<8>();
|
|
117
|
+
const simd8<uint8_t> in = simd16<uint16_t>::pack(t0, t1);
|
|
118
|
+
// 1. Check whether we have any 0xD800..DFFF word (0b1101'1xxx'yyyy'yyyy).
|
|
119
|
+
const uint64_t surrogates_wordmask = ((in & v_f8) == v_d8).to_bitmask64();
|
|
120
|
+
if (surrogates_wordmask == 0) {
|
|
121
|
+
input += 16;
|
|
122
|
+
} else {
|
|
123
|
+
// 2. We have some surrogates that have to be distinguished:
|
|
124
|
+
// - low surrogates: 0b1101'10xx'yyyy'yyyy (0xD800..0xDBFF)
|
|
125
|
+
// - high surrogates: 0b1101'11xx'yyyy'yyyy (0xDC00..0xDFFF)
|
|
126
|
+
//
|
|
127
|
+
// Fact: high surrogate has 11th bit set (3rd bit in the higher word)
|
|
128
|
+
|
|
129
|
+
// V - non-surrogate code units
|
|
130
|
+
// V = not surrogates_wordmask
|
|
131
|
+
const uint64_t V = ~surrogates_wordmask;
|
|
132
|
+
|
|
133
|
+
// H - word-mask for high surrogates: the six highest bits are 0b1101'11
|
|
134
|
+
const auto vH = ((in & v_fc) == v_dc);
|
|
135
|
+
const uint64_t H = vH.to_bitmask64();
|
|
136
|
+
|
|
137
|
+
// L - word mask for low surrogates
|
|
138
|
+
// L = not H and surrogates_wordmask
|
|
139
|
+
const uint64_t L = ~H & surrogates_wordmask;
|
|
140
|
+
|
|
141
|
+
const uint64_t a =
|
|
142
|
+
L & (H >> 4); // A low surrogate must be followed by high one.
|
|
143
|
+
// (A low surrogate placed in the 7th register's word
|
|
144
|
+
// is an exception we handle.)
|
|
145
|
+
const uint64_t b =
|
|
146
|
+
a << 4; // Just mark that the opposite fact is hold,
|
|
147
|
+
// thanks to that we have only two masks for valid case.
|
|
148
|
+
const uint64_t c = V | a | b; // Combine all the masks into the final one.
|
|
149
|
+
if (c == ~0ull) {
|
|
150
|
+
// The whole input register contains valid UTF-16, i.e.,
|
|
151
|
+
// either single code units or proper surrogate pairs.
|
|
152
|
+
input += 16;
|
|
153
|
+
} else if (c == 0xfffffffffffffffull) {
|
|
154
|
+
// The 15 lower code units of the input register contains valid UTF-16.
|
|
155
|
+
// The 15th word may be either a low or high surrogate. It the next
|
|
156
|
+
// iteration we 1) check if the low surrogate is followed by a high
|
|
157
|
+
// one, 2) reject sole high surrogate.
|
|
158
|
+
input += 15;
|
|
159
|
+
} else {
|
|
160
|
+
return result(error_code::SURROGATE, input - start);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return result(error_code::SUCCESS, input - start);
|
|
165
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
const char32_t *arm_validate_utf32le(const char32_t *input, size_t size) {
|
|
3
|
+
const char32_t *end = input + size;
|
|
4
|
+
|
|
5
|
+
const uint32x4_t standardmax = vmovq_n_u32(0x10ffff);
|
|
6
|
+
const uint32x4_t offset = vmovq_n_u32(0xffff2000);
|
|
7
|
+
const uint32x4_t standardoffsetmax = vmovq_n_u32(0xfffff7ff);
|
|
8
|
+
uint32x4_t currentmax = vmovq_n_u32(0x0);
|
|
9
|
+
uint32x4_t currentoffsetmax = vmovq_n_u32(0x0);
|
|
10
|
+
|
|
11
|
+
while (end - input >= 4) {
|
|
12
|
+
const uint32x4_t in = vld1q_u32(reinterpret_cast<const uint32_t *>(input));
|
|
13
|
+
currentmax = vmaxq_u32(in, currentmax);
|
|
14
|
+
currentoffsetmax = vmaxq_u32(vaddq_u32(in, offset), currentoffsetmax);
|
|
15
|
+
input += 4;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
uint32x4_t is_zero =
|
|
19
|
+
veorq_u32(vmaxq_u32(currentmax, standardmax), standardmax);
|
|
20
|
+
if (vmaxvq_u32(is_zero) != 0) {
|
|
21
|
+
return nullptr;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
is_zero = veorq_u32(vmaxq_u32(currentoffsetmax, standardoffsetmax),
|
|
25
|
+
standardoffsetmax);
|
|
26
|
+
if (vmaxvq_u32(is_zero) != 0) {
|
|
27
|
+
return nullptr;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return input;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const result arm_validate_utf32le_with_errors(const char32_t *input,
|
|
34
|
+
size_t size) {
|
|
35
|
+
const char32_t *start = input;
|
|
36
|
+
const char32_t *end = input + size;
|
|
37
|
+
|
|
38
|
+
const uint32x4_t standardmax = vmovq_n_u32(0x10ffff);
|
|
39
|
+
const uint32x4_t offset = vmovq_n_u32(0xffff2000);
|
|
40
|
+
const uint32x4_t standardoffsetmax = vmovq_n_u32(0xfffff7ff);
|
|
41
|
+
uint32x4_t currentmax = vmovq_n_u32(0x0);
|
|
42
|
+
uint32x4_t currentoffsetmax = vmovq_n_u32(0x0);
|
|
43
|
+
|
|
44
|
+
while (end - input >= 4) {
|
|
45
|
+
const uint32x4_t in = vld1q_u32(reinterpret_cast<const uint32_t *>(input));
|
|
46
|
+
currentmax = vmaxq_u32(in, currentmax);
|
|
47
|
+
currentoffsetmax = vmaxq_u32(vaddq_u32(in, offset), currentoffsetmax);
|
|
48
|
+
|
|
49
|
+
uint32x4_t is_zero =
|
|
50
|
+
veorq_u32(vmaxq_u32(currentmax, standardmax), standardmax);
|
|
51
|
+
if (vmaxvq_u32(is_zero) != 0) {
|
|
52
|
+
return result(error_code::TOO_LARGE, input - start);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
is_zero = veorq_u32(vmaxq_u32(currentoffsetmax, standardoffsetmax),
|
|
56
|
+
standardoffsetmax);
|
|
57
|
+
if (vmaxvq_u32(is_zero) != 0) {
|
|
58
|
+
return result(error_code::SURROGATE, input - start);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
input += 4;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return result(error_code::SUCCESS, input - start);
|
|
65
|
+
}
|