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,197 @@
|
|
|
1
|
+
// depends on "tables/utf8_to_utf16_tables.h"
|
|
2
|
+
|
|
3
|
+
// Convert up to 12 bytes from utf8 to utf16 using a mask indicating the
|
|
4
|
+
// end of the code points. Only the least significant 12 bits of the mask
|
|
5
|
+
// are accessed.
|
|
6
|
+
// It returns how many bytes were consumed (up to 12).
|
|
7
|
+
template <endianness big_endian>
|
|
8
|
+
size_t convert_masked_utf8_to_utf16(const char *input,
|
|
9
|
+
uint64_t utf8_end_of_code_point_mask,
|
|
10
|
+
char16_t *&utf16_output) {
|
|
11
|
+
// we use an approach where we try to process up to 12 input bytes.
|
|
12
|
+
// Why 12 input bytes and not 16? Because we are concerned with the size of
|
|
13
|
+
// the lookup tables. Also 12 is nicely divisible by two and three.
|
|
14
|
+
//
|
|
15
|
+
//
|
|
16
|
+
// Optimization note: our main path below is load-latency dependent. Thus it
|
|
17
|
+
// is maybe beneficial to have fast paths that depend on branch prediction but
|
|
18
|
+
// have less latency. This results in more instructions but, potentially, also
|
|
19
|
+
// higher speeds.
|
|
20
|
+
//
|
|
21
|
+
// We first try a few fast paths.
|
|
22
|
+
const __m128i swap =
|
|
23
|
+
_mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
|
|
24
|
+
const __m128i in = _mm_loadu_si128((__m128i *)input);
|
|
25
|
+
const uint16_t input_utf8_end_of_code_point_mask =
|
|
26
|
+
utf8_end_of_code_point_mask & 0xfff;
|
|
27
|
+
if (utf8_end_of_code_point_mask == 0xfff) {
|
|
28
|
+
// We process the data in chunks of 12 bytes.
|
|
29
|
+
// Note: using 16 bytes is unsafe, see issue_ossfuzz_71218
|
|
30
|
+
__m128i ascii_first = _mm_cvtepu8_epi16(in);
|
|
31
|
+
__m128i ascii_second = _mm_cvtepu8_epi16(_mm_srli_si128(in, 8));
|
|
32
|
+
if (big_endian) {
|
|
33
|
+
ascii_first = _mm_shuffle_epi8(ascii_first, swap);
|
|
34
|
+
ascii_second = _mm_shuffle_epi8(ascii_second, swap);
|
|
35
|
+
}
|
|
36
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output), ascii_first);
|
|
37
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf16_output + 8),
|
|
38
|
+
ascii_second);
|
|
39
|
+
utf16_output += 12; // We wrote 12 16-bit characters.
|
|
40
|
+
return 12; // We consumed 12 bytes.
|
|
41
|
+
}
|
|
42
|
+
if (((utf8_end_of_code_point_mask & 0xFFFF) == 0xaaaa)) {
|
|
43
|
+
// We want to take 8 2-byte UTF-8 code units and turn them into 8 2-byte
|
|
44
|
+
// UTF-16 code units. There is probably a more efficient sequence, but the
|
|
45
|
+
// following might do.
|
|
46
|
+
const __m128i sh =
|
|
47
|
+
_mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
|
|
48
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
49
|
+
const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f));
|
|
50
|
+
const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00));
|
|
51
|
+
__m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2));
|
|
52
|
+
if (big_endian)
|
|
53
|
+
composed = _mm_shuffle_epi8(composed, swap);
|
|
54
|
+
_mm_storeu_si128((__m128i *)utf16_output, composed);
|
|
55
|
+
utf16_output += 8; // We wrote 16 bytes, 8 code points.
|
|
56
|
+
return 16;
|
|
57
|
+
}
|
|
58
|
+
if (input_utf8_end_of_code_point_mask == 0x924) {
|
|
59
|
+
// We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte
|
|
60
|
+
// UTF-16 code units. There is probably a more efficient sequence, but the
|
|
61
|
+
// following might do.
|
|
62
|
+
const __m128i sh =
|
|
63
|
+
_mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1);
|
|
64
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
65
|
+
const __m128i ascii =
|
|
66
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits
|
|
67
|
+
const __m128i middlebyte =
|
|
68
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x3f00)); // 5 or 6 bits
|
|
69
|
+
const __m128i middlebyte_shifted = _mm_srli_epi32(middlebyte, 2);
|
|
70
|
+
const __m128i highbyte =
|
|
71
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x0f0000)); // 4 bits
|
|
72
|
+
const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 4);
|
|
73
|
+
const __m128i composed =
|
|
74
|
+
_mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted);
|
|
75
|
+
__m128i composed_repacked = _mm_packus_epi32(composed, composed);
|
|
76
|
+
if (big_endian)
|
|
77
|
+
composed_repacked = _mm_shuffle_epi8(composed_repacked, swap);
|
|
78
|
+
_mm_storeu_si128((__m128i *)utf16_output, composed_repacked);
|
|
79
|
+
utf16_output += 4;
|
|
80
|
+
return 12;
|
|
81
|
+
}
|
|
82
|
+
/// We do not have a fast path available, so we fallback.
|
|
83
|
+
|
|
84
|
+
const uint8_t idx =
|
|
85
|
+
tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][0];
|
|
86
|
+
const uint8_t consumed =
|
|
87
|
+
tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1];
|
|
88
|
+
if (idx < 64) {
|
|
89
|
+
// SIX (6) input code-code units
|
|
90
|
+
// this is a relatively easy scenario
|
|
91
|
+
// we process SIX (6) input code-code units. The max length in bytes of six
|
|
92
|
+
// code code units spanning between 1 and 2 bytes each is 12 bytes. On
|
|
93
|
+
// processors where pdep/pext is fast, we might be able to use a small
|
|
94
|
+
// lookup table.
|
|
95
|
+
const __m128i sh =
|
|
96
|
+
_mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]);
|
|
97
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
98
|
+
const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f));
|
|
99
|
+
const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00));
|
|
100
|
+
__m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2));
|
|
101
|
+
if (big_endian)
|
|
102
|
+
composed = _mm_shuffle_epi8(composed, swap);
|
|
103
|
+
_mm_storeu_si128((__m128i *)utf16_output, composed);
|
|
104
|
+
utf16_output += 6; // We wrote 12 bytes, 6 code points.
|
|
105
|
+
} else if (idx < 145) {
|
|
106
|
+
// FOUR (4) input code-code units
|
|
107
|
+
const __m128i sh =
|
|
108
|
+
_mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]);
|
|
109
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
110
|
+
const __m128i ascii =
|
|
111
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits
|
|
112
|
+
const __m128i middlebyte =
|
|
113
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x3f00)); // 5 or 6 bits
|
|
114
|
+
const __m128i middlebyte_shifted = _mm_srli_epi32(middlebyte, 2);
|
|
115
|
+
const __m128i highbyte =
|
|
116
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x0f0000)); // 4 bits
|
|
117
|
+
const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 4);
|
|
118
|
+
const __m128i composed =
|
|
119
|
+
_mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted);
|
|
120
|
+
__m128i composed_repacked = _mm_packus_epi32(composed, composed);
|
|
121
|
+
if (big_endian)
|
|
122
|
+
composed_repacked = _mm_shuffle_epi8(composed_repacked, swap);
|
|
123
|
+
_mm_storeu_si128((__m128i *)utf16_output, composed_repacked);
|
|
124
|
+
utf16_output += 4;
|
|
125
|
+
} else if (idx < 209) {
|
|
126
|
+
// TWO (2) input code-code units
|
|
127
|
+
//////////////
|
|
128
|
+
// There might be garbage inputs where a leading byte mascarades as a
|
|
129
|
+
// four-byte leading byte (by being followed by 3 continuation byte), but is
|
|
130
|
+
// not greater than 0xf0. This could trigger a buffer overflow if we only
|
|
131
|
+
// counted leading bytes of the form 0xf0 as generating surrogate pairs,
|
|
132
|
+
// without further UTF-8 validation. Thus we must be careful to ensure that
|
|
133
|
+
// only leading bytes at least as large as 0xf0 generate surrogate pairs. We
|
|
134
|
+
// do as at the cost of an extra mask.
|
|
135
|
+
/////////////
|
|
136
|
+
const __m128i sh =
|
|
137
|
+
_mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]);
|
|
138
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
139
|
+
const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f));
|
|
140
|
+
const __m128i middlebyte = _mm_and_si128(perm, _mm_set1_epi32(0x3f00));
|
|
141
|
+
const __m128i middlebyte_shifted = _mm_srli_epi32(middlebyte, 2);
|
|
142
|
+
__m128i middlehighbyte = _mm_and_si128(perm, _mm_set1_epi32(0x3f0000));
|
|
143
|
+
// correct for spurious high bit
|
|
144
|
+
const __m128i correct =
|
|
145
|
+
_mm_srli_epi32(_mm_and_si128(perm, _mm_set1_epi32(0x400000)), 1);
|
|
146
|
+
middlehighbyte = _mm_xor_si128(correct, middlehighbyte);
|
|
147
|
+
const __m128i middlehighbyte_shifted = _mm_srli_epi32(middlehighbyte, 4);
|
|
148
|
+
// We deliberately carry the leading four bits in highbyte if they are
|
|
149
|
+
// present, we remove them later when computing hightenbits.
|
|
150
|
+
const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi32(0xff000000));
|
|
151
|
+
const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 6);
|
|
152
|
+
// When we need to generate a surrogate pair (leading byte > 0xF0), then
|
|
153
|
+
// the corresponding 32-bit value in 'composed' will be greater than
|
|
154
|
+
// > (0xff00000>>6) or > 0x3c00000. This can be used later to identify the
|
|
155
|
+
// location of the surrogate pairs.
|
|
156
|
+
const __m128i composed =
|
|
157
|
+
_mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted),
|
|
158
|
+
_mm_or_si128(highbyte_shifted, middlehighbyte_shifted));
|
|
159
|
+
const __m128i composedminus =
|
|
160
|
+
_mm_sub_epi32(composed, _mm_set1_epi32(0x10000));
|
|
161
|
+
const __m128i lowtenbits =
|
|
162
|
+
_mm_and_si128(composedminus, _mm_set1_epi32(0x3ff));
|
|
163
|
+
// Notice the 0x3ff mask:
|
|
164
|
+
const __m128i hightenbits =
|
|
165
|
+
_mm_and_si128(_mm_srli_epi32(composedminus, 10), _mm_set1_epi32(0x3ff));
|
|
166
|
+
const __m128i lowtenbitsadd =
|
|
167
|
+
_mm_add_epi32(lowtenbits, _mm_set1_epi32(0xDC00));
|
|
168
|
+
const __m128i hightenbitsadd =
|
|
169
|
+
_mm_add_epi32(hightenbits, _mm_set1_epi32(0xD800));
|
|
170
|
+
const __m128i lowtenbitsaddshifted = _mm_slli_epi32(lowtenbitsadd, 16);
|
|
171
|
+
__m128i surrogates = _mm_or_si128(hightenbitsadd, lowtenbitsaddshifted);
|
|
172
|
+
uint32_t basic_buffer[4];
|
|
173
|
+
uint32_t basic_buffer_swap[4];
|
|
174
|
+
if (big_endian) {
|
|
175
|
+
_mm_storeu_si128((__m128i *)basic_buffer_swap,
|
|
176
|
+
_mm_shuffle_epi8(composed, swap));
|
|
177
|
+
surrogates = _mm_shuffle_epi8(surrogates, swap);
|
|
178
|
+
}
|
|
179
|
+
_mm_storeu_si128((__m128i *)basic_buffer, composed);
|
|
180
|
+
uint32_t surrogate_buffer[4];
|
|
181
|
+
_mm_storeu_si128((__m128i *)surrogate_buffer, surrogates);
|
|
182
|
+
for (size_t i = 0; i < 3; i++) {
|
|
183
|
+
if (basic_buffer[i] > 0x3c00000) {
|
|
184
|
+
utf16_output[0] = uint16_t(surrogate_buffer[i] & 0xffff);
|
|
185
|
+
utf16_output[1] = uint16_t(surrogate_buffer[i] >> 16);
|
|
186
|
+
utf16_output += 2;
|
|
187
|
+
} else {
|
|
188
|
+
utf16_output[0] = big_endian ? uint16_t(basic_buffer_swap[i])
|
|
189
|
+
: uint16_t(basic_buffer[i]);
|
|
190
|
+
utf16_output++;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} else {
|
|
194
|
+
// here we know that there is an error but we do not handle errors
|
|
195
|
+
}
|
|
196
|
+
return consumed;
|
|
197
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// depends on "tables/utf8_to_utf16_tables.h"
|
|
2
|
+
|
|
3
|
+
// Convert up to 12 bytes from utf8 to utf32 using a mask indicating the
|
|
4
|
+
// end of the code points. Only the least significant 12 bits of the mask
|
|
5
|
+
// are accessed.
|
|
6
|
+
// It returns how many bytes were consumed (up to 12).
|
|
7
|
+
size_t convert_masked_utf8_to_utf32(const char *input,
|
|
8
|
+
uint64_t utf8_end_of_code_point_mask,
|
|
9
|
+
char32_t *&utf32_output) {
|
|
10
|
+
// we use an approach where we try to process up to 12 input bytes.
|
|
11
|
+
// Why 12 input bytes and not 16? Because we are concerned with the size of
|
|
12
|
+
// the lookup tables. Also 12 is nicely divisible by two and three.
|
|
13
|
+
//
|
|
14
|
+
//
|
|
15
|
+
// Optimization note: our main path below is load-latency dependent. Thus it
|
|
16
|
+
// is maybe beneficial to have fast paths that depend on branch prediction but
|
|
17
|
+
// have less latency. This results in more instructions but, potentially, also
|
|
18
|
+
// higher speeds.
|
|
19
|
+
//
|
|
20
|
+
// We first try a few fast paths.
|
|
21
|
+
const __m128i in = _mm_loadu_si128((__m128i *)input);
|
|
22
|
+
const uint16_t input_utf8_end_of_code_point_mask =
|
|
23
|
+
utf8_end_of_code_point_mask & 0xfff;
|
|
24
|
+
if (utf8_end_of_code_point_mask == 0xfff) {
|
|
25
|
+
// We process the data in chunks of 12 bytes.
|
|
26
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output),
|
|
27
|
+
_mm_cvtepu8_epi32(in));
|
|
28
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4),
|
|
29
|
+
_mm_cvtepu8_epi32(_mm_srli_si128(in, 4)));
|
|
30
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 8),
|
|
31
|
+
_mm_cvtepu8_epi32(_mm_srli_si128(in, 8)));
|
|
32
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 12),
|
|
33
|
+
_mm_cvtepu8_epi32(_mm_srli_si128(in, 12)));
|
|
34
|
+
utf32_output += 12; // We wrote 12 32-bit characters.
|
|
35
|
+
return 12; // We consumed 12 bytes.
|
|
36
|
+
}
|
|
37
|
+
if (((utf8_end_of_code_point_mask & 0xffff) == 0xaaaa)) {
|
|
38
|
+
// We want to take 8 2-byte UTF-8 code units and turn them into 8 4-byte
|
|
39
|
+
// UTF-32 code units. There is probably a more efficient sequence, but the
|
|
40
|
+
// following might do.
|
|
41
|
+
const __m128i sh =
|
|
42
|
+
_mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
|
|
43
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
44
|
+
const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f));
|
|
45
|
+
const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00));
|
|
46
|
+
const __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2));
|
|
47
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output),
|
|
48
|
+
_mm_cvtepu16_epi32(composed));
|
|
49
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4),
|
|
50
|
+
_mm_cvtepu16_epi32(_mm_srli_si128(composed, 8)));
|
|
51
|
+
utf32_output += 8; // We wrote 32 bytes, 8 code points.
|
|
52
|
+
return 16;
|
|
53
|
+
}
|
|
54
|
+
if (input_utf8_end_of_code_point_mask == 0x924) {
|
|
55
|
+
// We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte
|
|
56
|
+
// UTF-32 code units. There is probably a more efficient sequence, but the
|
|
57
|
+
// following might do.
|
|
58
|
+
const __m128i sh =
|
|
59
|
+
_mm_setr_epi8(2, 1, 0, -1, 5, 4, 3, -1, 8, 7, 6, -1, 11, 10, 9, -1);
|
|
60
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
61
|
+
const __m128i ascii =
|
|
62
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits
|
|
63
|
+
const __m128i middlebyte =
|
|
64
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x3f00)); // 5 or 6 bits
|
|
65
|
+
const __m128i middlebyte_shifted = _mm_srli_epi32(middlebyte, 2);
|
|
66
|
+
const __m128i highbyte =
|
|
67
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x0f0000)); // 4 bits
|
|
68
|
+
const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 4);
|
|
69
|
+
const __m128i composed =
|
|
70
|
+
_mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted);
|
|
71
|
+
_mm_storeu_si128((__m128i *)utf32_output, composed);
|
|
72
|
+
utf32_output += 4;
|
|
73
|
+
return 12;
|
|
74
|
+
}
|
|
75
|
+
/// We do not have a fast path available, so we fallback.
|
|
76
|
+
|
|
77
|
+
const uint8_t idx =
|
|
78
|
+
tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][0];
|
|
79
|
+
const uint8_t consumed =
|
|
80
|
+
tables::utf8_to_utf16::utf8bigindex[input_utf8_end_of_code_point_mask][1];
|
|
81
|
+
if (idx < 64) {
|
|
82
|
+
// SIX (6) input code-code units
|
|
83
|
+
// this is a relatively easy scenario
|
|
84
|
+
// we process SIX (6) input code-code units. The max length in bytes of six
|
|
85
|
+
// code code units spanning between 1 and 2 bytes each is 12 bytes. On
|
|
86
|
+
// processors where pdep/pext is fast, we might be able to use a small
|
|
87
|
+
// lookup table.
|
|
88
|
+
const __m128i sh =
|
|
89
|
+
_mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]);
|
|
90
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
91
|
+
const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi16(0x7f));
|
|
92
|
+
const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi16(0x1f00));
|
|
93
|
+
const __m128i composed = _mm_or_si128(ascii, _mm_srli_epi16(highbyte, 2));
|
|
94
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output),
|
|
95
|
+
_mm_cvtepu16_epi32(composed));
|
|
96
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(utf32_output + 4),
|
|
97
|
+
_mm_cvtepu16_epi32(_mm_srli_si128(composed, 8)));
|
|
98
|
+
utf32_output += 6; // We wrote 12 bytes, 6 code points.
|
|
99
|
+
} else if (idx < 145) {
|
|
100
|
+
// FOUR (4) input code-code units
|
|
101
|
+
const __m128i sh =
|
|
102
|
+
_mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]);
|
|
103
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
104
|
+
const __m128i ascii =
|
|
105
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x7f)); // 7 or 6 bits
|
|
106
|
+
const __m128i middlebyte =
|
|
107
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x3f00)); // 5 or 6 bits
|
|
108
|
+
const __m128i middlebyte_shifted = _mm_srli_epi32(middlebyte, 2);
|
|
109
|
+
const __m128i highbyte =
|
|
110
|
+
_mm_and_si128(perm, _mm_set1_epi32(0x0f0000)); // 4 bits
|
|
111
|
+
const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 4);
|
|
112
|
+
const __m128i composed =
|
|
113
|
+
_mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted), highbyte_shifted);
|
|
114
|
+
_mm_storeu_si128((__m128i *)utf32_output, composed);
|
|
115
|
+
utf32_output += 4;
|
|
116
|
+
} else if (idx < 209) {
|
|
117
|
+
// TWO (2) input code-code units
|
|
118
|
+
const __m128i sh =
|
|
119
|
+
_mm_loadu_si128((const __m128i *)tables::utf8_to_utf16::shufutf8[idx]);
|
|
120
|
+
const __m128i perm = _mm_shuffle_epi8(in, sh);
|
|
121
|
+
const __m128i ascii = _mm_and_si128(perm, _mm_set1_epi32(0x7f));
|
|
122
|
+
const __m128i middlebyte = _mm_and_si128(perm, _mm_set1_epi32(0x3f00));
|
|
123
|
+
const __m128i middlebyte_shifted = _mm_srli_epi32(middlebyte, 2);
|
|
124
|
+
__m128i middlehighbyte = _mm_and_si128(perm, _mm_set1_epi32(0x3f0000));
|
|
125
|
+
// correct for spurious high bit
|
|
126
|
+
const __m128i correct =
|
|
127
|
+
_mm_srli_epi32(_mm_and_si128(perm, _mm_set1_epi32(0x400000)), 1);
|
|
128
|
+
middlehighbyte = _mm_xor_si128(correct, middlehighbyte);
|
|
129
|
+
const __m128i middlehighbyte_shifted = _mm_srli_epi32(middlehighbyte, 4);
|
|
130
|
+
const __m128i highbyte = _mm_and_si128(perm, _mm_set1_epi32(0x07000000));
|
|
131
|
+
const __m128i highbyte_shifted = _mm_srli_epi32(highbyte, 6);
|
|
132
|
+
const __m128i composed =
|
|
133
|
+
_mm_or_si128(_mm_or_si128(ascii, middlebyte_shifted),
|
|
134
|
+
_mm_or_si128(highbyte_shifted, middlehighbyte_shifted));
|
|
135
|
+
_mm_storeu_si128((__m128i *)utf32_output, composed);
|
|
136
|
+
utf32_output += 3;
|
|
137
|
+
} else {
|
|
138
|
+
// here we know that there is an error but we do not handle errors
|
|
139
|
+
}
|
|
140
|
+
return consumed;
|
|
141
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Process one block of 8 characters. If in_place is false,
|
|
3
|
+
* copy the block from in to out. If there is a sequencing
|
|
4
|
+
* error in the block, overwrite the illsequenced characters
|
|
5
|
+
* with the replacement character. This function reads one
|
|
6
|
+
* character before the beginning of the buffer as a lookback.
|
|
7
|
+
* If that character is illsequenced, it too is overwritten.
|
|
8
|
+
*/
|
|
9
|
+
template <endianness big_endian, bool in_place>
|
|
10
|
+
simdutf_really_inline void utf16fix_block_sse(char16_t *out,
|
|
11
|
+
const char16_t *in) {
|
|
12
|
+
auto swap_if_needed = [](uint16_t x) simdutf_constexpr -> uint16_t {
|
|
13
|
+
return scalar::utf16::swap_if_needed<big_endian>(x);
|
|
14
|
+
};
|
|
15
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
16
|
+
|
|
17
|
+
__m128i lookback, block, lb_masked, block_masked, lb_is_high, block_is_low;
|
|
18
|
+
__m128i illseq, lb_illseq, block_illseq;
|
|
19
|
+
|
|
20
|
+
lookback = _mm_loadu_si128((const __m128i *)(in - 1));
|
|
21
|
+
block = _mm_loadu_si128((const __m128i *)in);
|
|
22
|
+
lb_masked = _mm_and_si128(lookback, _mm_set1_epi16(swap_if_needed(0xfc00U)));
|
|
23
|
+
block_masked = _mm_and_si128(block, _mm_set1_epi16(swap_if_needed(0xfc00U)));
|
|
24
|
+
lb_is_high =
|
|
25
|
+
_mm_cmpeq_epi16(lb_masked, _mm_set1_epi16(swap_if_needed(0xd800U)));
|
|
26
|
+
block_is_low =
|
|
27
|
+
_mm_cmpeq_epi16(block_masked, _mm_set1_epi16(swap_if_needed(0xdc00U)));
|
|
28
|
+
|
|
29
|
+
illseq = _mm_xor_si128(lb_is_high, block_is_low);
|
|
30
|
+
if (_mm_movemask_epi8(illseq) != 0) {
|
|
31
|
+
int lb;
|
|
32
|
+
|
|
33
|
+
/* compute the cause of the illegal sequencing */
|
|
34
|
+
lb_illseq = _mm_andnot_si128(block_is_low, lb_is_high);
|
|
35
|
+
block_illseq = _mm_or_si128(_mm_andnot_si128(lb_is_high, block_is_low),
|
|
36
|
+
_mm_bsrli_si128(lb_illseq, 2));
|
|
37
|
+
|
|
38
|
+
/* fix illegal sequencing in the lookback */
|
|
39
|
+
lb = _mm_cvtsi128_si32(lb_illseq);
|
|
40
|
+
lb = (lb & replacement) | (~lb & out[-1]);
|
|
41
|
+
out[-1] = char16_t(lb);
|
|
42
|
+
/* fix illegal sequencing in the main block */
|
|
43
|
+
block =
|
|
44
|
+
_mm_or_si128(_mm_andnot_si128(block_illseq, block),
|
|
45
|
+
_mm_and_si128(block_illseq, _mm_set1_epi16(replacement)));
|
|
46
|
+
_mm_storeu_si128((__m128i *)out, block);
|
|
47
|
+
} else if (!in_place) {
|
|
48
|
+
_mm_storeu_si128((__m128i *)out, block);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
template <endianness big_endian>
|
|
53
|
+
void utf16fix_sse(const char16_t *in, size_t n, char16_t *out) {
|
|
54
|
+
const char16_t replacement = scalar::utf16::replacement<big_endian>();
|
|
55
|
+
size_t i;
|
|
56
|
+
if (n < 9) {
|
|
57
|
+
scalar::utf16::to_well_formed_utf16<big_endian>(in, n, out);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
out[0] =
|
|
62
|
+
scalar::utf16::is_low_surrogate<big_endian>(in[0]) ? replacement : in[0];
|
|
63
|
+
|
|
64
|
+
/* duplicate code to have the compiler specialise utf16fix_block() */
|
|
65
|
+
if (in == out) {
|
|
66
|
+
for (i = 1; i + 8 < n; i += 8) {
|
|
67
|
+
utf16fix_block_sse<big_endian, true>(out + i, in + i);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
utf16fix_block_sse<big_endian, true>(out + n - 8, in + n - 8);
|
|
71
|
+
} else {
|
|
72
|
+
for (i = 1; i + 8 < n; i += 8) {
|
|
73
|
+
utf16fix_block_sse<big_endian, false>(out + i, in + i);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
utf16fix_block_sse<big_endian, false>(out + n - 8, in + n - 8);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
out[n - 1] = scalar::utf16::is_high_surrogate<big_endian>(out[n - 1])
|
|
80
|
+
? replacement
|
|
81
|
+
: out[n - 1];
|
|
82
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
// we want lower bytes
|
|
6
|
+
const auto mask = simd16<uint16_t>(0x00ff);
|
|
7
|
+
const auto t0 = in0 & mask;
|
|
8
|
+
const auto t1 = in1 & mask;
|
|
9
|
+
|
|
10
|
+
return simd16<uint16_t>::pack(t0, t1);
|
|
11
|
+
} else {
|
|
12
|
+
const auto t0 = in0.shr<8>();
|
|
13
|
+
const auto t1 = in1.shr<8>();
|
|
14
|
+
|
|
15
|
+
return simd16<uint16_t>::pack(t0, t1);
|
|
16
|
+
}
|
|
17
|
+
}
|