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,296 @@
|
|
|
1
|
+
// Convert up to 16 bytes from utf8 to utf16 using a mask indicating the
|
|
2
|
+
// end of the code points. Only the least significant 12 bits of the mask
|
|
3
|
+
// are accessed.
|
|
4
|
+
// It returns how many bytes were consumed (up to 16, usually 12).
|
|
5
|
+
template <endianness big_endian>
|
|
6
|
+
size_t convert_masked_utf8_to_utf16(const char *input,
|
|
7
|
+
uint64_t utf8_end_of_code_point_mask,
|
|
8
|
+
char16_t *&utf16_output) {
|
|
9
|
+
// we use an approach where we try to process up to 12 input bytes.
|
|
10
|
+
// Why 12 input bytes and not 16? Because we are concerned with the size of
|
|
11
|
+
// the lookup tables. Also 12 is nicely divisible by two and three.
|
|
12
|
+
//
|
|
13
|
+
__m128i in = __lsx_vld(reinterpret_cast<const uint8_t *>(input), 0);
|
|
14
|
+
const uint16_t input_utf8_end_of_code_point_mask =
|
|
15
|
+
utf8_end_of_code_point_mask & 0xfff;
|
|
16
|
+
//
|
|
17
|
+
// Optimization note: our main path below is load-latency dependent. Thus it
|
|
18
|
+
// is maybe beneficial to have fast paths that depend on branch prediction but
|
|
19
|
+
// have less latency. This results in more instructions but, potentially, also
|
|
20
|
+
// higher speeds.
|
|
21
|
+
|
|
22
|
+
// We first try a few fast paths.
|
|
23
|
+
// The obvious first test is ASCII, which actually consumes the full 16.
|
|
24
|
+
if ((utf8_end_of_code_point_mask & 0xFFFF) == 0xFFFF) {
|
|
25
|
+
__m128i zero = __lsx_vldi(0);
|
|
26
|
+
if simdutf_constexpr (match_system(big_endian)) {
|
|
27
|
+
__lsx_vst(__lsx_vilvl_b(zero, in),
|
|
28
|
+
reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
29
|
+
__lsx_vst(__lsx_vilvh_b(zero, in),
|
|
30
|
+
reinterpret_cast<uint16_t *>(utf16_output), 16);
|
|
31
|
+
} else {
|
|
32
|
+
__lsx_vst(__lsx_vilvl_b(in, zero),
|
|
33
|
+
reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
34
|
+
__lsx_vst(__lsx_vilvh_b(in, zero),
|
|
35
|
+
reinterpret_cast<uint16_t *>(utf16_output), 16);
|
|
36
|
+
}
|
|
37
|
+
utf16_output += 16; // We wrote 16 16-bit characters.
|
|
38
|
+
return 16; // We consumed 16 bytes.
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// 3 byte sequences are the next most common, as seen in CJK, which has long
|
|
42
|
+
// sequences of these.
|
|
43
|
+
if (input_utf8_end_of_code_point_mask == 0x924) {
|
|
44
|
+
// We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte
|
|
45
|
+
// UTF-16 code units.
|
|
46
|
+
__m128i composed = convert_utf8_3_byte_to_utf16(in);
|
|
47
|
+
// Byte swap if necessary
|
|
48
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
49
|
+
composed = lsx_swap_bytes(composed);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
__lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
53
|
+
utf16_output += 4; // We wrote 4 16-bit characters.
|
|
54
|
+
return 12; // We consumed 12 bytes.
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// 2 byte sequences occur in short bursts in languages like Greek and Russian.
|
|
58
|
+
if ((utf8_end_of_code_point_mask & 0xFFFF) == 0xAAAA) {
|
|
59
|
+
// We want to take 6 2-byte UTF-8 code units and turn them into 6 2-byte
|
|
60
|
+
// UTF-16 code units.
|
|
61
|
+
__m128i composed = convert_utf8_2_byte_to_utf16(in);
|
|
62
|
+
// Byte swap if necessary
|
|
63
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
64
|
+
composed = lsx_swap_bytes(composed);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
__lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
68
|
+
utf16_output += 8; // We wrote 6 16-bit characters.
|
|
69
|
+
return 16; // We consumed 12 bytes.
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/// We do not have a fast path available, or the fast path is unimportant, so
|
|
73
|
+
/// we fallback.
|
|
74
|
+
const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex
|
|
75
|
+
[input_utf8_end_of_code_point_mask][0];
|
|
76
|
+
|
|
77
|
+
const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex
|
|
78
|
+
[input_utf8_end_of_code_point_mask][1];
|
|
79
|
+
const __m128i zero = __lsx_vldi(0);
|
|
80
|
+
if (idx < 64) {
|
|
81
|
+
// SIX (6) input code-code units
|
|
82
|
+
// Convert to UTF-16
|
|
83
|
+
__m128i composed = convert_utf8_1_to_2_byte_to_utf16(in, idx);
|
|
84
|
+
// Byte swap if necessary
|
|
85
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
86
|
+
composed = lsx_swap_bytes(composed);
|
|
87
|
+
}
|
|
88
|
+
// Store
|
|
89
|
+
__lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
90
|
+
utf16_output += 6; // We wrote 6 16-bit characters.
|
|
91
|
+
return consumed;
|
|
92
|
+
} else if (idx < 145) {
|
|
93
|
+
// FOUR (4) input code-code units
|
|
94
|
+
// UTF-16 and UTF-32 use similar algorithms, but UTF-32 skips the narrowing.
|
|
95
|
+
__m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
|
|
96
|
+
simdutf::tables::utf8_to_utf16::shufutf8[idx]),
|
|
97
|
+
0);
|
|
98
|
+
// XXX: depending on the system scalar instructions might be faster.
|
|
99
|
+
// 1 byte: 00000000 00000000 0ccccccc
|
|
100
|
+
// 2 byte: 00000000 110bbbbb 10cccccc
|
|
101
|
+
// 3 byte: 1110aaaa 10bbbbbb 10cccccc
|
|
102
|
+
sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
|
|
103
|
+
__m128i perm = __lsx_vshuf_b(zero, in, sh);
|
|
104
|
+
// 1 byte: 00000000 0ccccccc
|
|
105
|
+
// 2 byte: xx0bbbbb x0cccccc
|
|
106
|
+
// 3 byte: xxbbbbbb x0cccccc
|
|
107
|
+
__m128i lowperm = __lsx_vpickev_h(perm, perm);
|
|
108
|
+
// 1 byte: 00000000 00000000
|
|
109
|
+
// 2 byte: 00000000 00000000
|
|
110
|
+
// 3 byte: 00000000 1110aaaa
|
|
111
|
+
__m128i highperm = __lsx_vpickod_h(perm, perm);
|
|
112
|
+
// 3 byte: aaaa0000 00000000
|
|
113
|
+
highperm = __lsx_vslli_h(highperm, 12);
|
|
114
|
+
// ASCII
|
|
115
|
+
// 1 byte: 00000000 0ccccccc
|
|
116
|
+
// 2+byte: 00000000 00cccccc
|
|
117
|
+
__m128i ascii = __lsx_vand_v(lowperm, __lsx_vrepli_h(0x7f));
|
|
118
|
+
// 1 byte: 00000000 00000000
|
|
119
|
+
// 2 byte: xx0bbbbb 00000000
|
|
120
|
+
// 3 byte: xxbbbbbb 00000000
|
|
121
|
+
__m128i middlebyte = __lsx_vand_v(lowperm, lsx_splat_u16(0xFF00));
|
|
122
|
+
// 1 byte: 00000000 0ccccccc
|
|
123
|
+
// 2 byte: 0010bbbb bbcccccc
|
|
124
|
+
// 3 byte: 0010bbbb bbcccccc
|
|
125
|
+
__m128i composed = __lsx_vor_v(__lsx_vsrli_h(middlebyte, 2), ascii);
|
|
126
|
+
|
|
127
|
+
__m128i v0fff = __lsx_vreplgr2vr_h(uint16_t(0xfff));
|
|
128
|
+
// aaaabbbb bbcccccc
|
|
129
|
+
composed = __lsx_vbitsel_v(highperm, composed, v0fff);
|
|
130
|
+
|
|
131
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
132
|
+
composed = lsx_swap_bytes(composed);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
__lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
136
|
+
utf16_output += 4; // We wrote 4 16-bit codepoints
|
|
137
|
+
return consumed;
|
|
138
|
+
} else if (idx < 209) {
|
|
139
|
+
// THREE (3) input code-code units
|
|
140
|
+
if (input_utf8_end_of_code_point_mask == 0x888) {
|
|
141
|
+
__m128i expected_mask =
|
|
142
|
+
(__m128i)v16u8{0xf8, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0,
|
|
143
|
+
0xf8, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0};
|
|
144
|
+
__m128i expected =
|
|
145
|
+
(__m128i)v16u8{0xf0, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80,
|
|
146
|
+
0xf0, 0x80, 0x80, 0x80, 0x0, 0x0, 0x0, 0x0};
|
|
147
|
+
__m128i check = __lsx_vseq_b(__lsx_vand_v(in, expected_mask), expected);
|
|
148
|
+
if (__lsx_bz_b(check))
|
|
149
|
+
return 12;
|
|
150
|
+
// We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte
|
|
151
|
+
// UTF-16 pairs. Generating surrogate pairs is a little tricky though, but
|
|
152
|
+
// it is easier when we can assume they are all pairs. This version does
|
|
153
|
+
// not use the LUT, but 4 byte sequences are less common and the overhead
|
|
154
|
+
// of the extra memory access is less important than the early branch
|
|
155
|
+
// overhead in shorter sequences.
|
|
156
|
+
|
|
157
|
+
// Swap byte pairs
|
|
158
|
+
// 10dddddd 10cccccc|10bbbbbb 11110aaa
|
|
159
|
+
// 10cccccc 10dddddd|11110aaa 10bbbbbb
|
|
160
|
+
__m128i swap = lsx_swap_bytes(in);
|
|
161
|
+
// Shift left 2 bits
|
|
162
|
+
// cccccc00 dddddd00 xxxxxxxx bbbbbb00
|
|
163
|
+
__m128i shift = __lsx_vslli_b(swap, 2);
|
|
164
|
+
// Create a magic number containing the low 2 bits of the trail surrogate
|
|
165
|
+
// and all the corrections needed to create the pair. UTF-8 4b prefix =
|
|
166
|
+
// -0x0000|0xF000 surrogate offset = -0x0000|0x0040 (0x10000 << 6)
|
|
167
|
+
// surrogate high = +0x0000|0xD800
|
|
168
|
+
// surrogate low = +0xDC00|0x0000
|
|
169
|
+
// -------------------------------
|
|
170
|
+
// = +0xDC00|0xE7C0
|
|
171
|
+
__m128i magic = __lsx_vreplgr2vr_w(uint32_t(0xDC00E7C0));
|
|
172
|
+
// Generate unadjusted trail surrogate minus lowest 2 bits
|
|
173
|
+
// xxxxxxxx xxxxxxxx|11110aaa bbbbbb00
|
|
174
|
+
__m128i trail = __lsx_vbitsel_v(shift, swap, lsx_splat_u32(0x0000FF00));
|
|
175
|
+
// Insert low 2 bits of trail surrogate to magic number for later
|
|
176
|
+
// 11011100 00000000 11100111 110000cc
|
|
177
|
+
__m128i magic_with_low_2 = __lsx_vor_v(__lsx_vsrli_w(shift, 30), magic);
|
|
178
|
+
|
|
179
|
+
// Generate lead surrogate
|
|
180
|
+
// xxxxcccc ccdddddd|xxxxxxxx xxxxxxxx
|
|
181
|
+
// 000000cc ccdddddd|xxxxxxxx xxxxxxxx
|
|
182
|
+
__m128i lead = __lsx_vbitsel_v(
|
|
183
|
+
__lsx_vsrli_h(__lsx_vand_v(shift, __lsx_vldi(0x3F)), 4), swap,
|
|
184
|
+
__lsx_vrepli_h(0x3f /* 0x003f*/));
|
|
185
|
+
|
|
186
|
+
// Blend pairs
|
|
187
|
+
// 000000cc ccdddddd|11110aaa bbbbbb00
|
|
188
|
+
__m128i blend = __lsx_vbitsel_v(lead, trail, lsx_splat_u32(0x0000FFFF));
|
|
189
|
+
|
|
190
|
+
// Add magic number to finish the result
|
|
191
|
+
// 110111CC CCDDDDDD|110110AA BBBBBBCC
|
|
192
|
+
__m128i composed = __lsx_vadd_h(blend, magic_with_low_2);
|
|
193
|
+
// Byte swap if necessary
|
|
194
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
195
|
+
composed = lsx_swap_bytes(composed);
|
|
196
|
+
}
|
|
197
|
+
__lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
|
|
198
|
+
utf16_output += 6; // We 3 32-bit surrogate pairs.
|
|
199
|
+
return 12; // We consumed 12 bytes.
|
|
200
|
+
}
|
|
201
|
+
// 3 1-4 byte sequences
|
|
202
|
+
__m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
|
|
203
|
+
simdutf::tables::utf8_to_utf16::shufutf8[idx]),
|
|
204
|
+
0);
|
|
205
|
+
// 1 byte: 00000000 00000000 00000000 0ddddddd
|
|
206
|
+
// 3 byte: 00000000 00000000 110ccccc 10dddddd
|
|
207
|
+
// 3 byte: 00000000 1110bbbb 10cccccc 10dddddd
|
|
208
|
+
// 4 byte: 11110aaa 10bbbbbb 10cccccc 10dddddd
|
|
209
|
+
sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
|
|
210
|
+
__m128i perm = __lsx_vshuf_b(zero, in, sh);
|
|
211
|
+
// added to fix issue https://github.com/simdutf/simdutf/issues/514
|
|
212
|
+
// We only want to write 2 * 16-bit code units when that is actually what we
|
|
213
|
+
// have. Unfortunately, we cannot trust the input. So it is possible to get
|
|
214
|
+
// 0xff as an input byte and it should not result in a surrogate pair. We
|
|
215
|
+
// need to check for that.
|
|
216
|
+
uint32_t permbuffer[4];
|
|
217
|
+
__lsx_vst(perm, permbuffer, 0);
|
|
218
|
+
// Mask the low and middle bytes
|
|
219
|
+
// 00000000 00000000 00000000 0ddddddd
|
|
220
|
+
__m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_w(0x7f));
|
|
221
|
+
// Because the surrogates need more work, the high surrogate is computed
|
|
222
|
+
// first.
|
|
223
|
+
__m128i middlehigh = __lsx_vslli_w(perm, 2);
|
|
224
|
+
// 00000000 00000000 00cccccc 00000000
|
|
225
|
+
__m128i middlebyte = __lsx_vand_v(perm, lsx_splat_u32(0x00003F00));
|
|
226
|
+
// Start assembling the sequence. Since the 4th byte is in the same position
|
|
227
|
+
// as it would be in a surrogate and there is no dependency, shift left
|
|
228
|
+
// instead of right. 3 byte: 00000000 10bbbbxx xxxxxxxx xxxxxxxx 4 byte:
|
|
229
|
+
// 11110aaa bbbbbbxx xxxxxxxx xxxxxxxx
|
|
230
|
+
__m128i ab = __lsx_vbitsel_v(middlehigh, perm, lsx_splat_u32(0xFF000000));
|
|
231
|
+
// Top 16 bits contains the high ten bits of the surrogate pair before
|
|
232
|
+
// correction 3 byte: 00000000 10bbbbcc|cccc0000 00000000 4 byte: 11110aaa
|
|
233
|
+
// bbbbbbcc|cccc0000 00000000 - high 10 bits correct w/o correction
|
|
234
|
+
__m128i v_fffc0000 = __lsx_vreplgr2vr_w(uint32_t(0xFFFC0000));
|
|
235
|
+
__m128i abc = __lsx_vbitsel_v(__lsx_vslli_w(middlebyte, 4), ab, v_fffc0000);
|
|
236
|
+
// Combine the low 6 or 7 bits by a shift right accumulate
|
|
237
|
+
// 3 byte: 00000000 00000010|bbbbcccc ccdddddd - low 16 bits correct
|
|
238
|
+
// 4 byte: 00000011 110aaabb|bbbbcccc ccdddddd - low 10 bits correct w/o
|
|
239
|
+
// correction
|
|
240
|
+
__m128i composed = __lsx_vor_v(ascii, __lsx_vsrli_w(abc, 6));
|
|
241
|
+
// After this is for surrogates
|
|
242
|
+
// Blend the low and high surrogates
|
|
243
|
+
// 4 byte: 11110aaa bbbbbbcc|bbbbcccc ccdddddd
|
|
244
|
+
__m128i mixed = __lsx_vbitsel_v(abc, composed, lsx_splat_u32(0x0000FFFF));
|
|
245
|
+
// Clear the upper 6 bits of the low surrogate. Don't clear the upper bits
|
|
246
|
+
// yet as 0x10000 was not subtracted from the codepoint yet. 4 byte:
|
|
247
|
+
// 11110aaa bbbbbbcc|000000cc ccdddddd
|
|
248
|
+
__m128i v_ffff03ff = __lsx_vreplgr2vr_w(uint32_t(0xFFFF03FF));
|
|
249
|
+
__m128i masked_pair = __lsx_vand_v(mixed, v_ffff03ff);
|
|
250
|
+
// Correct the remaining UTF-8 prefix, surrogate offset, and add the
|
|
251
|
+
// surrogate prefixes in one magic 16-bit addition. similar magic number but
|
|
252
|
+
// without the continue byte adjust and halfword swapped UTF-8 4b prefix =
|
|
253
|
+
// -0xF000|0x0000 surrogate offset = -0x0040|0x0000 (0x10000 << 6)
|
|
254
|
+
// surrogate high = +0xD800|0x0000
|
|
255
|
+
// surrogate low = +0x0000|0xDC00
|
|
256
|
+
// -----------------------------------
|
|
257
|
+
// = +0xE7C0|0xDC00
|
|
258
|
+
__m128i magic = __lsx_vreplgr2vr_w(uint32_t(0xE7C0DC00));
|
|
259
|
+
// 4 byte: 110110AA BBBBBBCC|110111CC CCDDDDDD - surrogate pair complete
|
|
260
|
+
__m128i surrogates = __lsx_vadd_w(masked_pair, magic);
|
|
261
|
+
// If the high bit is 1 (s32 less than zero), this needs a surrogate pair
|
|
262
|
+
__m128i is_pair = __lsx_vslt_w(perm, zero);
|
|
263
|
+
// Select either the 4 byte surrogate pair or the 2 byte solo codepoint
|
|
264
|
+
// 3 byte: 0xxxxxxx xxxxxxxx|bbbbcccc ccdddddd
|
|
265
|
+
// 4 byte: 110110AA BBBBBBCC|110111CC CCDDDDDD
|
|
266
|
+
__m128i selected = __lsx_vbitsel_v(composed, surrogates, is_pair);
|
|
267
|
+
// Byte swap if necessary
|
|
268
|
+
if simdutf_constexpr (!match_system(big_endian)) {
|
|
269
|
+
selected = lsx_swap_bytes(selected);
|
|
270
|
+
}
|
|
271
|
+
// Attempting to shuffle and store would be complex, just scalarize.
|
|
272
|
+
uint32_t buffer_tmp[4];
|
|
273
|
+
__lsx_vst(selected, buffer_tmp, 0);
|
|
274
|
+
// Test for the top bit of the surrogate mask. Remove due to issue 514
|
|
275
|
+
// const uint32_t SURROGATE_MASK = match_system(big_endian) ? 0x80000000 :
|
|
276
|
+
// 0x00800000;
|
|
277
|
+
for (size_t i = 0; i < 3; i++) {
|
|
278
|
+
// Surrogate
|
|
279
|
+
// Used to be if (buffer[i] & SURROGATE_MASK) {
|
|
280
|
+
// See discussion above.
|
|
281
|
+
// patch for issue https://github.com/simdutf/simdutf/issues/514
|
|
282
|
+
if ((permbuffer[i] & 0xf8000000) == 0xf0000000) {
|
|
283
|
+
utf16_output[0] = uint16_t(buffer_tmp[i] >> 16);
|
|
284
|
+
utf16_output[1] = uint16_t(buffer_tmp[i] & 0xFFFF);
|
|
285
|
+
utf16_output += 2;
|
|
286
|
+
} else {
|
|
287
|
+
utf16_output[0] = uint16_t(buffer_tmp[i] & 0xFFFF);
|
|
288
|
+
utf16_output++;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return consumed;
|
|
292
|
+
} else {
|
|
293
|
+
// here we know that there is an error but we do not handle errors
|
|
294
|
+
return 12;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// Convert up to 12 bytes from utf8 to utf32 using a mask indicating the
|
|
2
|
+
// end of the code points. Only the least significant 12 bits of the mask
|
|
3
|
+
// are accessed.
|
|
4
|
+
// It returns how many bytes were consumed (up to 12).
|
|
5
|
+
size_t convert_masked_utf8_to_utf32(const char *input,
|
|
6
|
+
uint64_t utf8_end_of_code_point_mask,
|
|
7
|
+
char32_t *&utf32_out) {
|
|
8
|
+
// we use an approach where we try to process up to 12 input bytes.
|
|
9
|
+
// Why 12 input bytes and not 16? Because we are concerned with the size of
|
|
10
|
+
// the lookup tables. Also 12 is nicely divisible by two and three.
|
|
11
|
+
//
|
|
12
|
+
uint32_t *&utf32_output = reinterpret_cast<uint32_t *&>(utf32_out);
|
|
13
|
+
__m128i in = __lsx_vld(reinterpret_cast<const uint8_t *>(input), 0);
|
|
14
|
+
const uint16_t input_utf8_end_of_code_point_mask =
|
|
15
|
+
utf8_end_of_code_point_mask & 0xFFF;
|
|
16
|
+
//
|
|
17
|
+
// Optimization note: our main path below is load-latency dependent. Thus it
|
|
18
|
+
// is maybe beneficial to have fast paths that depend on branch prediction but
|
|
19
|
+
// have less latency. This results in more instructions but, potentially, also
|
|
20
|
+
// higher speeds.
|
|
21
|
+
//
|
|
22
|
+
// We first try a few fast paths.
|
|
23
|
+
if ((utf8_end_of_code_point_mask & 0xffff) == 0xffff) {
|
|
24
|
+
// We process in chunks of 16 bytes.
|
|
25
|
+
// use fast implementation in src/simdutf/arm64/simd.h
|
|
26
|
+
// Ideally the compiler can keep the tables in registers.
|
|
27
|
+
__m128i zero = __lsx_vldi(0);
|
|
28
|
+
__m128i in16low = __lsx_vilvl_b(zero, in);
|
|
29
|
+
__m128i in16high = __lsx_vilvh_b(zero, in);
|
|
30
|
+
__m128i in32_0 = __lsx_vilvl_h(zero, in16low);
|
|
31
|
+
__m128i in32_1 = __lsx_vilvh_h(zero, in16low);
|
|
32
|
+
__m128i in32_2 = __lsx_vilvl_h(zero, in16high);
|
|
33
|
+
__m128i in32_3 = __lsx_vilvh_h(zero, in16high);
|
|
34
|
+
|
|
35
|
+
__lsx_vst(in32_0, reinterpret_cast<uint32_t *>(utf32_output), 0);
|
|
36
|
+
__lsx_vst(in32_1, reinterpret_cast<uint32_t *>(utf32_output), 16);
|
|
37
|
+
__lsx_vst(in32_2, reinterpret_cast<uint32_t *>(utf32_output), 32);
|
|
38
|
+
__lsx_vst(in32_3, reinterpret_cast<uint32_t *>(utf32_output), 48);
|
|
39
|
+
|
|
40
|
+
utf32_output += 16; // We wrote 16 32-bit characters.
|
|
41
|
+
return 16; // We consumed 16 bytes.
|
|
42
|
+
}
|
|
43
|
+
__m128i zero = __lsx_vldi(0);
|
|
44
|
+
if (input_utf8_end_of_code_point_mask == 0x924) {
|
|
45
|
+
// We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte
|
|
46
|
+
// UTF-32 code units. Convert to UTF-16
|
|
47
|
+
__m128i composed_utf16 = convert_utf8_3_byte_to_utf16(in);
|
|
48
|
+
__m128i utf32_low = __lsx_vilvl_h(zero, composed_utf16);
|
|
49
|
+
|
|
50
|
+
__lsx_vst(utf32_low, reinterpret_cast<uint32_t *>(utf32_output), 0);
|
|
51
|
+
utf32_output += 4; // We wrote 4 32-bit characters.
|
|
52
|
+
return 12; // We consumed 12 bytes.
|
|
53
|
+
}
|
|
54
|
+
// 2 byte sequences occur in short bursts in languages like Greek and Russian.
|
|
55
|
+
if (input_utf8_end_of_code_point_mask == 0xaaa) {
|
|
56
|
+
// We want to take 6 2-byte UTF-8 code units and turn them into 6 4-byte
|
|
57
|
+
// UTF-32 code units. Convert to UTF-16
|
|
58
|
+
__m128i composed_utf16 = convert_utf8_2_byte_to_utf16(in);
|
|
59
|
+
|
|
60
|
+
__m128i utf32_low = __lsx_vilvl_h(zero, composed_utf16);
|
|
61
|
+
__m128i utf32_high = __lsx_vilvh_h(zero, composed_utf16);
|
|
62
|
+
|
|
63
|
+
__lsx_vst(utf32_low, reinterpret_cast<uint32_t *>(utf32_output), 0);
|
|
64
|
+
__lsx_vst(utf32_high, reinterpret_cast<uint32_t *>(utf32_output), 16);
|
|
65
|
+
utf32_output += 6;
|
|
66
|
+
return 12; // We consumed 12 bytes.
|
|
67
|
+
}
|
|
68
|
+
// Either no fast path or an unimportant fast path.
|
|
69
|
+
|
|
70
|
+
const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex
|
|
71
|
+
[input_utf8_end_of_code_point_mask][0];
|
|
72
|
+
const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex
|
|
73
|
+
[input_utf8_end_of_code_point_mask][1];
|
|
74
|
+
|
|
75
|
+
if (idx < 64) {
|
|
76
|
+
// SIX (6) input code-code units
|
|
77
|
+
// Convert to UTF-16
|
|
78
|
+
__m128i composed_utf16 = convert_utf8_1_to_2_byte_to_utf16(in, idx);
|
|
79
|
+
__m128i utf32_low = __lsx_vilvl_h(zero, composed_utf16);
|
|
80
|
+
__m128i utf32_high = __lsx_vilvh_h(zero, composed_utf16);
|
|
81
|
+
|
|
82
|
+
__lsx_vst(utf32_low, reinterpret_cast<uint32_t *>(utf32_output), 0);
|
|
83
|
+
__lsx_vst(utf32_high, reinterpret_cast<uint32_t *>(utf32_output), 16);
|
|
84
|
+
utf32_output += 6;
|
|
85
|
+
return consumed;
|
|
86
|
+
} else if (idx < 145) {
|
|
87
|
+
// FOUR (4) input code-code units
|
|
88
|
+
// UTF-16 and UTF-32 use similar algorithms, but UTF-32 skips the narrowing.
|
|
89
|
+
__m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
|
|
90
|
+
simdutf::tables::utf8_to_utf16::shufutf8[idx]),
|
|
91
|
+
0);
|
|
92
|
+
// Shuffle
|
|
93
|
+
// 1 byte: 00000000 00000000 0ccccccc
|
|
94
|
+
// 2 byte: 00000000 110bbbbb 10cccccc
|
|
95
|
+
// 3 byte: 1110aaaa 10bbbbbb 10cccccc
|
|
96
|
+
sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
|
|
97
|
+
__m128i perm = __lsx_vshuf_b(zero, in, sh);
|
|
98
|
+
// Split
|
|
99
|
+
// 00000000 00000000 0ccccccc
|
|
100
|
+
__m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_w(0x7F)); // 6 or 7 bits
|
|
101
|
+
// Note: unmasked
|
|
102
|
+
// xxxxxxxx aaaaxxxx xxxxxxxx
|
|
103
|
+
__m128i high =
|
|
104
|
+
__lsx_vsrli_w(__lsx_vand_v(perm, __lsx_vldi(0xf)), 4); // 4 bits
|
|
105
|
+
// Use 16 bit bic instead of and.
|
|
106
|
+
// The top bits will be corrected later in the bsl
|
|
107
|
+
// 00000000 10bbbbbb 00000000
|
|
108
|
+
__m128i middle =
|
|
109
|
+
__lsx_vand_v(perm, lsx_splat_u32(0x0000FF00)); // 5 or 6 bits
|
|
110
|
+
// Combine low and middle with shift right accumulate
|
|
111
|
+
// 00000000 00xxbbbb bbcccccc
|
|
112
|
+
__m128i lowmid = __lsx_vor_v(ascii, __lsx_vsrli_w(middle, 2));
|
|
113
|
+
// Insert top 4 bits from high byte with bitwise select
|
|
114
|
+
// 00000000 aaaabbbb bbcccccc
|
|
115
|
+
__m128i composed = __lsx_vbitsel_v(lowmid, high, lsx_splat_u32(0x0000F000));
|
|
116
|
+
__lsx_vst(composed, utf32_output, 0);
|
|
117
|
+
utf32_output += 4; // We wrote 4 32-bit characters.
|
|
118
|
+
return consumed;
|
|
119
|
+
} else if (idx < 209) {
|
|
120
|
+
// THREE (3) input code-code units
|
|
121
|
+
if (input_utf8_end_of_code_point_mask == 0x888) {
|
|
122
|
+
// We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte
|
|
123
|
+
// UTF-32 code units. This uses the same method as the fixed 3 byte
|
|
124
|
+
// version, reversing and shift left insert. However, there is no need for
|
|
125
|
+
// a shuffle mask now, just rev16 and rev32.
|
|
126
|
+
//
|
|
127
|
+
// This version does not use the LUT, but 4 byte sequences are less common
|
|
128
|
+
// and the overhead of the extra memory access is less important than the
|
|
129
|
+
// early branch overhead in shorter sequences, so it comes last.
|
|
130
|
+
|
|
131
|
+
// Swap pairs of bytes
|
|
132
|
+
// 10dddddd|10cccccc|10bbbbbb|11110aaa
|
|
133
|
+
// 10cccccc 10dddddd|11110aaa 10bbbbbb
|
|
134
|
+
__m128i swap = lsx_swap_bytes(in);
|
|
135
|
+
// Shift left and insert
|
|
136
|
+
// xxxxcccc ccdddddd|xxxxxxxa aabbbbbb
|
|
137
|
+
__m128i merge1 = __lsx_vbitsel_v(__lsx_vsrli_h(swap, 2), swap,
|
|
138
|
+
__lsx_vrepli_h(0x3f /*0x003F*/));
|
|
139
|
+
// Shift insert again
|
|
140
|
+
// xxxxxxxx xxxaaabb bbbbcccc ccdddddd
|
|
141
|
+
__m128i merge2 =
|
|
142
|
+
__lsx_vbitsel_v(__lsx_vslli_w(merge1, 12), /* merge1 << 12 */
|
|
143
|
+
__lsx_vsrli_w(merge1, 16), /* merge1 >> 16 */
|
|
144
|
+
lsx_splat_u32(0x00000FFF));
|
|
145
|
+
// Clear the garbage
|
|
146
|
+
// 00000000 000aaabb bbbbcccc ccdddddd
|
|
147
|
+
__m128i composed = __lsx_vand_v(merge2, lsx_splat_u32(0x1FFFFF));
|
|
148
|
+
// Store
|
|
149
|
+
__lsx_vst(composed, utf32_output, 0);
|
|
150
|
+
utf32_output += 3; // We wrote 3 32-bit characters.
|
|
151
|
+
return 12; // We consumed 12 bytes.
|
|
152
|
+
}
|
|
153
|
+
// Unlike UTF-16, doing a fast codepath doesn't have nearly as much benefit
|
|
154
|
+
// due to surrogates no longer being involved.
|
|
155
|
+
__m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
|
|
156
|
+
simdutf::tables::utf8_to_utf16::shufutf8[idx]),
|
|
157
|
+
0);
|
|
158
|
+
// 1 byte: 00000000 00000000 00000000 0ddddddd
|
|
159
|
+
// 2 byte: 00000000 00000000 110ccccc 10dddddd
|
|
160
|
+
// 3 byte: 00000000 1110bbbb 10cccccc 10dddddd
|
|
161
|
+
// 4 byte: 11110aaa 10bbbbbb 10cccccc 10dddddd
|
|
162
|
+
sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
|
|
163
|
+
__m128i perm = __lsx_vshuf_b(zero, in, sh);
|
|
164
|
+
|
|
165
|
+
// Ascii
|
|
166
|
+
__m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_w(0x7F));
|
|
167
|
+
__m128i middle = __lsx_vand_v(perm, lsx_splat_u32(0x00003f00));
|
|
168
|
+
// 00000000 00000000 0000cccc ccdddddd
|
|
169
|
+
__m128i cd = __lsx_vor_v(__lsx_vsrli_w(middle, 2), ascii);
|
|
170
|
+
|
|
171
|
+
__m128i correction = __lsx_vand_v(perm, lsx_splat_u32(0x00400000));
|
|
172
|
+
__m128i corrected = __lsx_vadd_b(perm, __lsx_vsrli_w(correction, 1));
|
|
173
|
+
// Insert twice
|
|
174
|
+
// 00000000 000aaabb bbbbxxxx xxxxxxxx
|
|
175
|
+
__m128i corrected_srli2 =
|
|
176
|
+
__lsx_vsrli_w(__lsx_vand_v(corrected, __lsx_vrepli_b(0x7)), 2);
|
|
177
|
+
__m128i ab =
|
|
178
|
+
__lsx_vbitsel_v(corrected_srli2, corrected, __lsx_vrepli_h(0x3f));
|
|
179
|
+
ab = __lsx_vsrli_w(ab, 4);
|
|
180
|
+
// 00000000 000aaabb bbbbcccc ccdddddd
|
|
181
|
+
__m128i composed = __lsx_vbitsel_v(ab, cd, lsx_splat_u32(0x00000FFF));
|
|
182
|
+
// Store
|
|
183
|
+
__lsx_vst(composed, utf32_output, 0);
|
|
184
|
+
utf32_output += 3; // We wrote 3 32-bit characters.
|
|
185
|
+
return consumed;
|
|
186
|
+
} else {
|
|
187
|
+
// here we know that there is an error but we do not handle errors
|
|
188
|
+
return 12;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
simdutf_really_inline const char *util_find(const char *start, const char *end,
|
|
2
|
+
char character) noexcept {
|
|
3
|
+
if (start >= end)
|
|
4
|
+
return end;
|
|
5
|
+
|
|
6
|
+
const int step = 32;
|
|
7
|
+
__m256i char_vec = __lasx_xvreplgr2vr_b(static_cast<uint16_t>(character));
|
|
8
|
+
|
|
9
|
+
while (end - start >= step) {
|
|
10
|
+
__m256i data = __lasx_xvld(reinterpret_cast<const __m256i *>(start), 0);
|
|
11
|
+
__m256i cmp = __lasx_xvseq_b(data, char_vec);
|
|
12
|
+
if (__lasx_xbnz_v(cmp)) {
|
|
13
|
+
__m256i res = __lasx_xvmsknz_b(cmp);
|
|
14
|
+
uint32_t mask0 = __lasx_xvpickve2gr_wu(res, 0);
|
|
15
|
+
uint32_t mask1 = __lasx_xvpickve2gr_wu(res, 4);
|
|
16
|
+
uint32_t mask = (mask0 | (mask1 << 16));
|
|
17
|
+
return start + trailing_zeroes(mask);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
start += step;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Handle remaining bytes with scalar loop
|
|
24
|
+
for (; start < end; ++start) {
|
|
25
|
+
if (*start == character) {
|
|
26
|
+
return start;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return end;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
simdutf_really_inline const char16_t *util_find(const char16_t *start,
|
|
34
|
+
const char16_t *end,
|
|
35
|
+
char16_t character) noexcept {
|
|
36
|
+
if (start >= end)
|
|
37
|
+
return end;
|
|
38
|
+
|
|
39
|
+
const int step = 16;
|
|
40
|
+
__m256i char_vec = __lasx_xvreplgr2vr_h(static_cast<uint16_t>(character));
|
|
41
|
+
|
|
42
|
+
while (end - start >= step) {
|
|
43
|
+
__m256i data = __lasx_xvld(reinterpret_cast<const __m256i *>(start), 0);
|
|
44
|
+
__m256i cmp = __lasx_xvseq_h(data, char_vec);
|
|
45
|
+
if (__lasx_xbnz_v(cmp)) {
|
|
46
|
+
__m256i res = __lasx_xvmsknz_b(cmp);
|
|
47
|
+
uint32_t mask0 = __lasx_xvpickve2gr_wu(res, 0);
|
|
48
|
+
uint32_t mask1 = __lasx_xvpickve2gr_wu(res, 4);
|
|
49
|
+
uint32_t mask = (mask0 | (mask1 << 16));
|
|
50
|
+
return start + trailing_zeroes(mask) / 2;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
start += step;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Handle remaining elements with scalar loop
|
|
57
|
+
for (; start < end; ++start) {
|
|
58
|
+
if (*start == character) {
|
|
59
|
+
return start;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return end;
|
|
64
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
template <endianness big_endian>
|
|
2
|
+
simd8<uint8_t> utf16_gather_high_bytes(const simd16<uint16_t> in0,
|
|
3
|
+
const simd16<uint16_t> in1) {
|
|
4
|
+
if (big_endian) {
|
|
5
|
+
const auto mask = simd16<uint16_t>(0x00ff);
|
|
6
|
+
const auto t0 = in0 & mask;
|
|
7
|
+
const auto t1 = in1 & mask;
|
|
8
|
+
|
|
9
|
+
return simd16<uint16_t>::pack(t0, t1);
|
|
10
|
+
} else {
|
|
11
|
+
return simd16<uint16_t>::pack_shifted_right<8>(in0, in1);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const char32_t *lasx_validate_utf32le(const char32_t *input, size_t size) {
|
|
2
|
+
const char32_t *end = input + size;
|
|
3
|
+
|
|
4
|
+
// Performance degradation when memory address is not 32-byte aligned
|
|
5
|
+
while (((uint64_t)input & 0x1F) && input < end) {
|
|
6
|
+
uint32_t word = *input++;
|
|
7
|
+
if (word > 0x10FFFF || (word >= 0xD800 && word <= 0xDFFF)) {
|
|
8
|
+
return nullptr;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
__m256i offset = lasx_splat_u32(0xffff2000);
|
|
13
|
+
__m256i standardoffsetmax = lasx_splat_u32(0xfffff7ff);
|
|
14
|
+
__m256i standardmax = lasx_splat_u32(0x10ffff);
|
|
15
|
+
__m256i currentmax = __lasx_xvldi(0x0);
|
|
16
|
+
__m256i currentoffsetmax = __lasx_xvldi(0x0);
|
|
17
|
+
|
|
18
|
+
while (input + 8 < end) {
|
|
19
|
+
__m256i in = __lasx_xvld(reinterpret_cast<const uint32_t *>(input), 0);
|
|
20
|
+
currentmax = __lasx_xvmax_wu(in, currentmax);
|
|
21
|
+
// 0xD8__ + 0x2000 = 0xF8__ => 0xF8__ > 0xF7FF
|
|
22
|
+
currentoffsetmax =
|
|
23
|
+
__lasx_xvmax_wu(__lasx_xvadd_w(in, offset), currentoffsetmax);
|
|
24
|
+
input += 8;
|
|
25
|
+
}
|
|
26
|
+
__m256i is_zero =
|
|
27
|
+
__lasx_xvxor_v(__lasx_xvmax_wu(currentmax, standardmax), standardmax);
|
|
28
|
+
if (__lasx_xbnz_v(is_zero)) {
|
|
29
|
+
return nullptr;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
is_zero = __lasx_xvxor_v(__lasx_xvmax_wu(currentoffsetmax, standardoffsetmax),
|
|
33
|
+
standardoffsetmax);
|
|
34
|
+
if (__lasx_xbnz_v(is_zero)) {
|
|
35
|
+
return nullptr;
|
|
36
|
+
}
|
|
37
|
+
return input;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const result lasx_validate_utf32le_with_errors(const char32_t *input,
|
|
41
|
+
size_t size) {
|
|
42
|
+
const char32_t *start = input;
|
|
43
|
+
const char32_t *end = input + size;
|
|
44
|
+
|
|
45
|
+
// Performance degradation when memory address is not 32-byte aligned
|
|
46
|
+
while (((uint64_t)input & 0x1F) && input < end) {
|
|
47
|
+
uint32_t word = *input;
|
|
48
|
+
if (word > 0x10FFFF) {
|
|
49
|
+
return result(error_code::TOO_LARGE, input - start);
|
|
50
|
+
}
|
|
51
|
+
if (word >= 0xD800 && word <= 0xDFFF) {
|
|
52
|
+
return result(error_code::SURROGATE, input - start);
|
|
53
|
+
}
|
|
54
|
+
input++;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
__m256i offset = lasx_splat_u32(0xffff2000);
|
|
58
|
+
__m256i standardoffsetmax = lasx_splat_u32(0xfffff7ff);
|
|
59
|
+
__m256i standardmax = lasx_splat_u32(0x10ffff);
|
|
60
|
+
__m256i currentmax = __lasx_xvldi(0x0);
|
|
61
|
+
__m256i currentoffsetmax = __lasx_xvldi(0x0);
|
|
62
|
+
|
|
63
|
+
while (input + 8 < end) {
|
|
64
|
+
__m256i in = __lasx_xvld(reinterpret_cast<const uint32_t *>(input), 0);
|
|
65
|
+
currentmax = __lasx_xvmax_wu(in, currentmax);
|
|
66
|
+
currentoffsetmax =
|
|
67
|
+
__lasx_xvmax_wu(__lasx_xvadd_w(in, offset), currentoffsetmax);
|
|
68
|
+
|
|
69
|
+
__m256i is_zero =
|
|
70
|
+
__lasx_xvxor_v(__lasx_xvmax_wu(currentmax, standardmax), standardmax);
|
|
71
|
+
if (__lasx_xbnz_v(is_zero)) {
|
|
72
|
+
return result(error_code::TOO_LARGE, input - start);
|
|
73
|
+
}
|
|
74
|
+
is_zero =
|
|
75
|
+
__lasx_xvxor_v(__lasx_xvmax_wu(currentoffsetmax, standardoffsetmax),
|
|
76
|
+
standardoffsetmax);
|
|
77
|
+
if (__lasx_xbnz_v(is_zero)) {
|
|
78
|
+
return result(error_code::SURROGATE, input - start);
|
|
79
|
+
}
|
|
80
|
+
input += 8;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return result(error_code::SUCCESS, input - start);
|
|
84
|
+
}
|