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,753 @@
|
|
|
1
|
+
// Common procedures for both validating and non-validating conversions from
|
|
2
|
+
// UTF-8.
|
|
3
|
+
enum block_processing_mode { SIMDUTF_FULL, SIMDUTF_TAIL };
|
|
4
|
+
|
|
5
|
+
using utf8_to_utf16_result = std::pair<const char *, char16_t *>;
|
|
6
|
+
using utf8_to_utf32_result = std::pair<const char *, uint32_t *>;
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
process_block_utf8_to_utf16 converts up to 64 bytes from 'in' from UTF-8
|
|
10
|
+
to UTF-16. When tail = SIMDUTF_FULL, then the full input buffer (64 bytes)
|
|
11
|
+
might be used. When tail = SIMDUTF_TAIL, we take into account 'gap' which
|
|
12
|
+
indicates how many input bytes are relevant.
|
|
13
|
+
|
|
14
|
+
Returns true when the result is correct, otherwise it returns false.
|
|
15
|
+
|
|
16
|
+
The provided in and out pointers are advanced according to how many input
|
|
17
|
+
bytes have been processed, upon success.
|
|
18
|
+
*/
|
|
19
|
+
template <block_processing_mode tail, endianness big_endian>
|
|
20
|
+
simdutf_really_inline bool
|
|
21
|
+
process_block_utf8_to_utf16(const char *&in, char16_t *&out, size_t gap) {
|
|
22
|
+
// constants
|
|
23
|
+
__m512i mask_identity = _mm512_set_epi8(
|
|
24
|
+
63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46,
|
|
25
|
+
45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28,
|
|
26
|
+
27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9,
|
|
27
|
+
8, 7, 6, 5, 4, 3, 2, 1, 0);
|
|
28
|
+
__m512i mask_c0c0c0c0 = _mm512_set1_epi32(0xc0c0c0c0);
|
|
29
|
+
__m512i mask_80808080 = _mm512_set1_epi32(0x80808080);
|
|
30
|
+
__m512i mask_f0f0f0f0 = _mm512_set1_epi32(0xf0f0f0f0);
|
|
31
|
+
__m512i mask_dfdfdfdf_tail = _mm512_set_epi64(
|
|
32
|
+
0xffffdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf,
|
|
33
|
+
0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf,
|
|
34
|
+
0xdfdfdfdfdfdfdfdf, 0xdfdfdfdfdfdfdfdf);
|
|
35
|
+
__m512i mask_c2c2c2c2 = _mm512_set1_epi32(0xc2c2c2c2);
|
|
36
|
+
__m512i mask_ffffffff = _mm512_set1_epi32(0xffffffff);
|
|
37
|
+
__m512i mask_d7c0d7c0 = _mm512_set1_epi32(0xd7c0d7c0);
|
|
38
|
+
__m512i mask_dc00dc00 = _mm512_set1_epi32(0xdc00dc00);
|
|
39
|
+
__m512i byteflip = _mm512_setr_epi64(0x0607040502030001, 0x0e0f0c0d0a0b0809,
|
|
40
|
+
0x0607040502030001, 0x0e0f0c0d0a0b0809,
|
|
41
|
+
0x0607040502030001, 0x0e0f0c0d0a0b0809,
|
|
42
|
+
0x0607040502030001, 0x0e0f0c0d0a0b0809);
|
|
43
|
+
// Note that 'tail' is a compile-time constant !
|
|
44
|
+
__mmask64 b =
|
|
45
|
+
(tail == SIMDUTF_FULL) ? 0xFFFFFFFFFFFFFFFF : (uint64_t(1) << gap) - 1;
|
|
46
|
+
__m512i input = (tail == SIMDUTF_FULL) ? _mm512_loadu_si512(in)
|
|
47
|
+
: _mm512_maskz_loadu_epi8(b, in);
|
|
48
|
+
__mmask64 m1 = (tail == SIMDUTF_FULL)
|
|
49
|
+
? _mm512_cmplt_epu8_mask(input, mask_80808080)
|
|
50
|
+
: _mm512_mask_cmplt_epu8_mask(b, input, mask_80808080);
|
|
51
|
+
if (_ktestc_mask64_u8(m1,
|
|
52
|
+
b)) { // NOT(m1) AND b -- if all zeroes, then all ASCII
|
|
53
|
+
// alternatively, we could do 'if (m1 == b) { '
|
|
54
|
+
if (tail == SIMDUTF_FULL) {
|
|
55
|
+
in += 64; // consumed 64 bytes
|
|
56
|
+
// we convert a full 64-byte block, writing 128 bytes.
|
|
57
|
+
__m512i input1 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(input));
|
|
58
|
+
if (big_endian) {
|
|
59
|
+
input1 = _mm512_shuffle_epi8(input1, byteflip);
|
|
60
|
+
}
|
|
61
|
+
_mm512_storeu_si512(out, input1);
|
|
62
|
+
out += 32;
|
|
63
|
+
__m512i input2 =
|
|
64
|
+
_mm512_cvtepu8_epi16(_mm512_extracti64x4_epi64(input, 1));
|
|
65
|
+
if (big_endian) {
|
|
66
|
+
input2 = _mm512_shuffle_epi8(input2, byteflip);
|
|
67
|
+
}
|
|
68
|
+
_mm512_storeu_si512(out, input2);
|
|
69
|
+
out += 32;
|
|
70
|
+
return true; // we are done
|
|
71
|
+
} else {
|
|
72
|
+
in += gap;
|
|
73
|
+
if (gap <= 32) {
|
|
74
|
+
__m512i input1 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(input));
|
|
75
|
+
if (big_endian) {
|
|
76
|
+
input1 = _mm512_shuffle_epi8(input1, byteflip);
|
|
77
|
+
}
|
|
78
|
+
_mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << (gap)) - 1),
|
|
79
|
+
input1);
|
|
80
|
+
out += gap;
|
|
81
|
+
} else {
|
|
82
|
+
__m512i input1 = _mm512_cvtepu8_epi16(_mm512_castsi512_si256(input));
|
|
83
|
+
if (big_endian) {
|
|
84
|
+
input1 = _mm512_shuffle_epi8(input1, byteflip);
|
|
85
|
+
}
|
|
86
|
+
_mm512_storeu_si512(out, input1);
|
|
87
|
+
out += 32;
|
|
88
|
+
__m512i input2 =
|
|
89
|
+
_mm512_cvtepu8_epi16(_mm512_extracti64x4_epi64(input, 1));
|
|
90
|
+
if (big_endian) {
|
|
91
|
+
input2 = _mm512_shuffle_epi8(input2, byteflip);
|
|
92
|
+
}
|
|
93
|
+
_mm512_mask_storeu_epi16(
|
|
94
|
+
out, __mmask32((uint32_t(1) << (gap - 32)) - 1), input2);
|
|
95
|
+
out += gap - 32;
|
|
96
|
+
}
|
|
97
|
+
return true; // we are done
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// classify characters further
|
|
101
|
+
__mmask64 m234 = _mm512_cmp_epu8_mask(
|
|
102
|
+
mask_c0c0c0c0, input,
|
|
103
|
+
_MM_CMPINT_LE); // 0xc0 <= input, 2, 3, or 4 leading byte
|
|
104
|
+
__mmask64 m34 =
|
|
105
|
+
_mm512_cmp_epu8_mask(mask_dfdfdfdf_tail, input,
|
|
106
|
+
_MM_CMPINT_LT); // 0xdf < input, 3 or 4 leading byte
|
|
107
|
+
|
|
108
|
+
__mmask64 milltwobytes = _mm512_mask_cmp_epu8_mask(
|
|
109
|
+
m234, input, mask_c2c2c2c2,
|
|
110
|
+
_MM_CMPINT_LT); // 0xc0 <= input < 0xc2 (illegal two byte sequence)
|
|
111
|
+
// Overlong 2-byte sequence
|
|
112
|
+
if (_ktestz_mask64_u8(milltwobytes, milltwobytes) == 0) {
|
|
113
|
+
// Overlong 2-byte sequence
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (_ktestz_mask64_u8(m34, m34) == 0) {
|
|
117
|
+
// We have a 3-byte sequence and/or a 2-byte sequence, or possibly even a
|
|
118
|
+
// 4-byte sequence!
|
|
119
|
+
__mmask64 m4 = _mm512_cmp_epu8_mask(
|
|
120
|
+
input, mask_f0f0f0f0,
|
|
121
|
+
_MM_CMPINT_NLT); // 0xf0 <= zmm0 (4 byte start bytes)
|
|
122
|
+
|
|
123
|
+
__mmask64 mask_not_ascii = (tail == SIMDUTF_FULL)
|
|
124
|
+
? _knot_mask64(m1)
|
|
125
|
+
: _kand_mask64(_knot_mask64(m1), b);
|
|
126
|
+
|
|
127
|
+
__mmask64 mp1 = _kshiftli_mask64(m234, 1);
|
|
128
|
+
__mmask64 mp2 = _kshiftli_mask64(m34, 2);
|
|
129
|
+
// We could do it as follows...
|
|
130
|
+
// if (_kortestz_mask64_u8(m4,m4)) { // compute the bitwise OR of the 64-bit
|
|
131
|
+
// masks a and b and return 1 if all zeroes but GCC generates better code
|
|
132
|
+
// when we do:
|
|
133
|
+
if (m4 == 0) { // compute the bitwise OR of the 64-bit masks a and b and
|
|
134
|
+
// return 1 if all zeroes
|
|
135
|
+
// Fast path with 1,2,3 bytes
|
|
136
|
+
__mmask64 mc = _kor_mask64(mp1, mp2); // expected continuation bytes
|
|
137
|
+
__mmask64 m1234 = _kor_mask64(m1, m234);
|
|
138
|
+
// mismatched continuation bytes:
|
|
139
|
+
if (tail == SIMDUTF_FULL) {
|
|
140
|
+
__mmask64 xnormcm1234 = _kxnor_mask64(
|
|
141
|
+
mc,
|
|
142
|
+
m1234); // XNOR of mc and m1234 should be all zero if they differ
|
|
143
|
+
// the presence of a 1 bit indicates that they overlap.
|
|
144
|
+
// _kortestz_mask64_u8: compute the bitwise OR of 64-bit masksand return
|
|
145
|
+
// 1 if all zeroes.
|
|
146
|
+
if (!_kortestz_mask64_u8(xnormcm1234, xnormcm1234)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
} else {
|
|
150
|
+
__mmask64 bxorm1234 = _kxor_mask64(b, m1234);
|
|
151
|
+
if (mc != bxorm1234) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// mend: identifying the last bytes of each sequence to be decoded
|
|
156
|
+
__mmask64 mend = _kshiftri_mask64(m1234, 1);
|
|
157
|
+
if (tail != SIMDUTF_FULL) {
|
|
158
|
+
mend = _kor_mask64(mend, (uint64_t(1) << (gap - 1)));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
__m512i last_and_third = _mm512_maskz_compress_epi8(mend, mask_identity);
|
|
162
|
+
__m512i last_and_thirdu16 =
|
|
163
|
+
_mm512_cvtepu8_epi16(_mm512_castsi512_si256(last_and_third));
|
|
164
|
+
|
|
165
|
+
__m512i nonasciitags = _mm512_maskz_mov_epi8(
|
|
166
|
+
mask_not_ascii, mask_c0c0c0c0); // ASCII: 00000000 other: 11000000
|
|
167
|
+
__m512i clearedbytes = _mm512_andnot_si512(
|
|
168
|
+
nonasciitags, input); // high two bits cleared where not ASCII
|
|
169
|
+
__m512i lastbytes = _mm512_maskz_permutexvar_epi8(
|
|
170
|
+
0x5555555555555555, last_and_thirdu16,
|
|
171
|
+
clearedbytes); // the last byte of each character
|
|
172
|
+
|
|
173
|
+
__mmask64 mask_before_non_ascii = _kshiftri_mask64(
|
|
174
|
+
mask_not_ascii, 1); // bytes that precede non-ASCII bytes
|
|
175
|
+
__m512i indexofsecondlastbytes = _mm512_add_epi16(
|
|
176
|
+
mask_ffffffff, last_and_thirdu16); // indices of the second last bytes
|
|
177
|
+
__m512i beforeasciibytes =
|
|
178
|
+
_mm512_maskz_mov_epi8(mask_before_non_ascii, clearedbytes);
|
|
179
|
+
__m512i secondlastbytes = _mm512_maskz_permutexvar_epi8(
|
|
180
|
+
0x5555555555555555, indexofsecondlastbytes,
|
|
181
|
+
beforeasciibytes); // the second last bytes (of two, three byte seq,
|
|
182
|
+
// surrogates)
|
|
183
|
+
secondlastbytes =
|
|
184
|
+
_mm512_slli_epi16(secondlastbytes, 6); // shifted into position
|
|
185
|
+
|
|
186
|
+
__m512i indexofthirdlastbytes = _mm512_add_epi16(
|
|
187
|
+
mask_ffffffff,
|
|
188
|
+
indexofsecondlastbytes); // indices of the second last bytes
|
|
189
|
+
__m512i thirdlastbyte =
|
|
190
|
+
_mm512_maskz_mov_epi8(m34,
|
|
191
|
+
clearedbytes); // only those that are the third
|
|
192
|
+
// last byte of a sequence
|
|
193
|
+
__m512i thirdlastbytes = _mm512_maskz_permutexvar_epi8(
|
|
194
|
+
0x5555555555555555, indexofthirdlastbytes,
|
|
195
|
+
thirdlastbyte); // the third last bytes (of three byte sequences, hi
|
|
196
|
+
// surrogate)
|
|
197
|
+
thirdlastbytes =
|
|
198
|
+
_mm512_slli_epi16(thirdlastbytes, 12); // shifted into position
|
|
199
|
+
__m512i Wout = _mm512_ternarylogic_epi32(lastbytes, secondlastbytes,
|
|
200
|
+
thirdlastbytes, 254);
|
|
201
|
+
// the elements of Wout excluding the last element if it happens to be a
|
|
202
|
+
// high surrogate:
|
|
203
|
+
|
|
204
|
+
__mmask64 mprocessed =
|
|
205
|
+
(tail == SIMDUTF_FULL)
|
|
206
|
+
? _pdep_u64(0xFFFFFFFF, mend)
|
|
207
|
+
: _pdep_u64(
|
|
208
|
+
0xFFFFFFFF,
|
|
209
|
+
_kand_mask64(
|
|
210
|
+
mend, b)); // we adjust mend at the end of the output.
|
|
211
|
+
|
|
212
|
+
// Encodings out of range...
|
|
213
|
+
{
|
|
214
|
+
// the location of 3-byte sequence start bytes in the input
|
|
215
|
+
__mmask64 m3 = m34 & (b ^ m4);
|
|
216
|
+
// code units in Wout corresponding to 3-byte sequences.
|
|
217
|
+
__mmask32 M3 = __mmask32(_pext_u64(m3 << 2, mend));
|
|
218
|
+
__m512i mask_08000800 = _mm512_set1_epi32(0x08000800);
|
|
219
|
+
__mmask32 Msmall800 =
|
|
220
|
+
_mm512_mask_cmplt_epu16_mask(M3, Wout, mask_08000800);
|
|
221
|
+
__m512i mask_d800d800 = _mm512_set1_epi32(0xd800d800);
|
|
222
|
+
__m512i Moutminusd800 = _mm512_sub_epi16(Wout, mask_d800d800);
|
|
223
|
+
__mmask32 M3s =
|
|
224
|
+
_mm512_mask_cmplt_epu16_mask(M3, Moutminusd800, mask_08000800);
|
|
225
|
+
if (_kor_mask32(Msmall800, M3s)) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
int64_t nout = _mm_popcnt_u64(mprocessed);
|
|
230
|
+
in += 64 - _lzcnt_u64(mprocessed);
|
|
231
|
+
if (big_endian) {
|
|
232
|
+
Wout = _mm512_shuffle_epi8(Wout, byteflip);
|
|
233
|
+
}
|
|
234
|
+
_mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << nout) - 1), Wout);
|
|
235
|
+
out += nout;
|
|
236
|
+
return true; // ok
|
|
237
|
+
}
|
|
238
|
+
//
|
|
239
|
+
// We have a 4-byte sequence, this is the general case.
|
|
240
|
+
// Slow!
|
|
241
|
+
__mmask64 mp3 = _kshiftli_mask64(m4, 3);
|
|
242
|
+
__mmask64 mc =
|
|
243
|
+
_kor_mask64(_kor_mask64(mp1, mp2), mp3); // expected continuation bytes
|
|
244
|
+
__mmask64 m1234 = _kor_mask64(m1, m234);
|
|
245
|
+
|
|
246
|
+
// mend: identifying the last bytes of each sequence to be decoded
|
|
247
|
+
__mmask64 mend =
|
|
248
|
+
_kor_mask64(_kshiftri_mask64(_kor_mask64(mp3, m1234), 1), mp3);
|
|
249
|
+
if (tail != SIMDUTF_FULL) {
|
|
250
|
+
mend = _kor_mask64(mend, __mmask64(uint64_t(1) << (gap - 1)));
|
|
251
|
+
}
|
|
252
|
+
__m512i last_and_third = _mm512_maskz_compress_epi8(mend, mask_identity);
|
|
253
|
+
__m512i last_and_thirdu16 =
|
|
254
|
+
_mm512_cvtepu8_epi16(_mm512_castsi512_si256(last_and_third));
|
|
255
|
+
|
|
256
|
+
__m512i nonasciitags = _mm512_maskz_mov_epi8(
|
|
257
|
+
mask_not_ascii, mask_c0c0c0c0); // ASCII: 00000000 other: 11000000
|
|
258
|
+
__m512i clearedbytes = _mm512_andnot_si512(
|
|
259
|
+
nonasciitags, input); // high two bits cleared where not ASCII
|
|
260
|
+
__m512i lastbytes = _mm512_maskz_permutexvar_epi8(
|
|
261
|
+
0x5555555555555555, last_and_thirdu16,
|
|
262
|
+
clearedbytes); // the last byte of each character
|
|
263
|
+
|
|
264
|
+
__mmask64 mask_before_non_ascii = _kshiftri_mask64(
|
|
265
|
+
mask_not_ascii, 1); // bytes that precede non-ASCII bytes
|
|
266
|
+
__m512i indexofsecondlastbytes = _mm512_add_epi16(
|
|
267
|
+
mask_ffffffff, last_and_thirdu16); // indices of the second last bytes
|
|
268
|
+
__m512i beforeasciibytes =
|
|
269
|
+
_mm512_maskz_mov_epi8(mask_before_non_ascii, clearedbytes);
|
|
270
|
+
__m512i secondlastbytes = _mm512_maskz_permutexvar_epi8(
|
|
271
|
+
0x5555555555555555, indexofsecondlastbytes,
|
|
272
|
+
beforeasciibytes); // the second last bytes (of two, three byte seq,
|
|
273
|
+
// surrogates)
|
|
274
|
+
secondlastbytes =
|
|
275
|
+
_mm512_slli_epi16(secondlastbytes, 6); // shifted into position
|
|
276
|
+
|
|
277
|
+
__m512i indexofthirdlastbytes = _mm512_add_epi16(
|
|
278
|
+
mask_ffffffff,
|
|
279
|
+
indexofsecondlastbytes); // indices of the second last bytes
|
|
280
|
+
__m512i thirdlastbyte = _mm512_maskz_mov_epi8(
|
|
281
|
+
m34,
|
|
282
|
+
clearedbytes); // only those that are the third last byte of a sequence
|
|
283
|
+
__m512i thirdlastbytes = _mm512_maskz_permutexvar_epi8(
|
|
284
|
+
0x5555555555555555, indexofthirdlastbytes,
|
|
285
|
+
thirdlastbyte); // the third last bytes (of three byte sequences, hi
|
|
286
|
+
// surrogate)
|
|
287
|
+
thirdlastbytes =
|
|
288
|
+
_mm512_slli_epi16(thirdlastbytes, 12); // shifted into position
|
|
289
|
+
__m512i thirdsecondandlastbytes = _mm512_ternarylogic_epi32(
|
|
290
|
+
lastbytes, secondlastbytes, thirdlastbytes, 254);
|
|
291
|
+
uint64_t Mlo_uint64 = _pext_u64(mp3, mend);
|
|
292
|
+
__mmask32 Mlo = __mmask32(Mlo_uint64);
|
|
293
|
+
__mmask32 Mhi = __mmask32(Mlo_uint64 >> 1);
|
|
294
|
+
__m512i lo_surr_mask = _mm512_maskz_mov_epi16(
|
|
295
|
+
Mlo,
|
|
296
|
+
mask_dc00dc00); // lo surr: 1101110000000000, other: 0000000000000000
|
|
297
|
+
__m512i shifted4_thirdsecondandlastbytes =
|
|
298
|
+
_mm512_srli_epi16(thirdsecondandlastbytes,
|
|
299
|
+
4); // hi surr: 00000WVUTSRQPNML vuts = WVUTS - 1
|
|
300
|
+
__m512i tagged_lo_surrogates = _mm512_or_si512(
|
|
301
|
+
thirdsecondandlastbytes,
|
|
302
|
+
lo_surr_mask); // lo surr: 110111KJHGFEDCBA, other: unchanged
|
|
303
|
+
__m512i Wout = _mm512_mask_add_epi16(
|
|
304
|
+
tagged_lo_surrogates, Mhi, shifted4_thirdsecondandlastbytes,
|
|
305
|
+
mask_d7c0d7c0); // hi sur: 110110vutsRQPNML, other: unchanged
|
|
306
|
+
// the elements of Wout excluding the last element if it happens to be a
|
|
307
|
+
// high surrogate:
|
|
308
|
+
__mmask32 Mout = ~(Mhi & 0x80000000);
|
|
309
|
+
__mmask64 mprocessed =
|
|
310
|
+
(tail == SIMDUTF_FULL)
|
|
311
|
+
? _pdep_u64(Mout, mend)
|
|
312
|
+
: _pdep_u64(
|
|
313
|
+
Mout,
|
|
314
|
+
_kand_mask64(mend,
|
|
315
|
+
b)); // we adjust mend at the end of the output.
|
|
316
|
+
|
|
317
|
+
// mismatched continuation bytes:
|
|
318
|
+
if (tail == SIMDUTF_FULL) {
|
|
319
|
+
__mmask64 xnormcm1234 = _kxnor_mask64(
|
|
320
|
+
mc, m1234); // XNOR of mc and m1234 should be all zero if they differ
|
|
321
|
+
// the presence of a 1 bit indicates that they overlap.
|
|
322
|
+
// _kortestz_mask64_u8: compute the bitwise OR of 64-bit masksand return 1
|
|
323
|
+
// if all zeroes.
|
|
324
|
+
if (!_kortestz_mask64_u8(xnormcm1234, xnormcm1234)) {
|
|
325
|
+
return false;
|
|
326
|
+
}
|
|
327
|
+
} else {
|
|
328
|
+
__mmask64 bxorm1234 = _kxor_mask64(b, m1234);
|
|
329
|
+
if (mc != bxorm1234) {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// Encodings out of range...
|
|
334
|
+
{
|
|
335
|
+
// the location of 3-byte sequence start bytes in the input
|
|
336
|
+
__mmask64 m3 = m34 & (b ^ m4);
|
|
337
|
+
// code units in Wout corresponding to 3-byte sequences.
|
|
338
|
+
__mmask32 M3 = __mmask32(_pext_u64(m3 << 2, mend));
|
|
339
|
+
__m512i mask_08000800 = _mm512_set1_epi32(0x08000800);
|
|
340
|
+
__mmask32 Msmall800 =
|
|
341
|
+
_mm512_mask_cmplt_epu16_mask(M3, Wout, mask_08000800);
|
|
342
|
+
__m512i mask_d800d800 = _mm512_set1_epi32(0xd800d800);
|
|
343
|
+
__m512i Moutminusd800 = _mm512_sub_epi16(Wout, mask_d800d800);
|
|
344
|
+
__mmask32 M3s =
|
|
345
|
+
_mm512_mask_cmplt_epu16_mask(M3, Moutminusd800, mask_08000800);
|
|
346
|
+
__m512i mask_04000400 = _mm512_set1_epi32(0x04000400);
|
|
347
|
+
__mmask32 M4s =
|
|
348
|
+
_mm512_mask_cmpge_epu16_mask(Mhi, Moutminusd800, mask_04000400);
|
|
349
|
+
if (!_kortestz_mask32_u8(M4s, _kor_mask32(Msmall800, M3s))) {
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
in += 64 - _lzcnt_u64(mprocessed);
|
|
354
|
+
int64_t nout = _mm_popcnt_u64(mprocessed);
|
|
355
|
+
if (big_endian) {
|
|
356
|
+
Wout = _mm512_shuffle_epi8(Wout, byteflip);
|
|
357
|
+
}
|
|
358
|
+
_mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << nout) - 1), Wout);
|
|
359
|
+
out += nout;
|
|
360
|
+
return true; // ok
|
|
361
|
+
}
|
|
362
|
+
// Fast path 2: all ASCII or 2 byte
|
|
363
|
+
__mmask64 continuation_or_ascii = (tail == SIMDUTF_FULL)
|
|
364
|
+
? _knot_mask64(m234)
|
|
365
|
+
: _kand_mask64(_knot_mask64(m234), b);
|
|
366
|
+
// on top of -0xc0 we subtract -2 which we get back later of the
|
|
367
|
+
// continuation byte tags
|
|
368
|
+
__m512i leading2byte = _mm512_maskz_sub_epi8(m234, input, mask_c2c2c2c2);
|
|
369
|
+
__mmask64 leading = tail == (tail == SIMDUTF_FULL)
|
|
370
|
+
? _kor_mask64(m1, m234)
|
|
371
|
+
: _kand_mask64(_kor_mask64(m1, m234),
|
|
372
|
+
b); // first bytes of each sequence
|
|
373
|
+
if (tail == SIMDUTF_FULL) {
|
|
374
|
+
__mmask64 xnor234leading =
|
|
375
|
+
_kxnor_mask64(_kshiftli_mask64(m234, 1), leading);
|
|
376
|
+
if (!_kortestz_mask64_u8(xnor234leading, xnor234leading)) {
|
|
377
|
+
return false;
|
|
378
|
+
}
|
|
379
|
+
} else {
|
|
380
|
+
__mmask64 bxorleading = _kxor_mask64(b, leading);
|
|
381
|
+
if (_kshiftli_mask64(m234, 1) != bxorleading) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
//
|
|
386
|
+
if (tail == SIMDUTF_FULL) {
|
|
387
|
+
// In the two-byte/ASCII scenario, we are easily latency bound, so we want
|
|
388
|
+
// to increment the input buffer as quickly as possible.
|
|
389
|
+
// We process 32 bytes unless the byte at index 32 is a continuation byte,
|
|
390
|
+
// in which case we include it as well for a total of 33 bytes.
|
|
391
|
+
// Note that if x is an ASCII byte, then the following is false:
|
|
392
|
+
// int8_t(x) <= int8_t(0xc0) under two's complement.
|
|
393
|
+
in += 32;
|
|
394
|
+
if (int8_t(*in) <= int8_t(0xc0))
|
|
395
|
+
in++;
|
|
396
|
+
// The alternative is to do
|
|
397
|
+
// in += 64 - _lzcnt_u64(_pdep_u64(0xFFFFFFFF, continuation_or_ascii));
|
|
398
|
+
// but it requires loading the input, doing the mask computation, and
|
|
399
|
+
// converting back the mask to a general register. It just takes too long,
|
|
400
|
+
// leaving the processor likely to be idle.
|
|
401
|
+
} else {
|
|
402
|
+
in += 64 - _lzcnt_u64(_pdep_u64(0xFFFFFFFF, continuation_or_ascii));
|
|
403
|
+
}
|
|
404
|
+
__m512i lead = _mm512_maskz_compress_epi8(
|
|
405
|
+
leading, leading2byte); // will contain zero for ascii, and the data
|
|
406
|
+
lead = _mm512_cvtepu8_epi16(
|
|
407
|
+
_mm512_castsi512_si256(lead)); // ... zero extended into code units
|
|
408
|
+
__m512i follow = _mm512_maskz_compress_epi8(
|
|
409
|
+
continuation_or_ascii, input); // the last bytes of each sequence
|
|
410
|
+
follow = _mm512_cvtepu8_epi16(
|
|
411
|
+
_mm512_castsi512_si256(follow)); // ... zero extended into code units
|
|
412
|
+
lead = _mm512_slli_epi16(lead, 6); // shifted into position
|
|
413
|
+
__m512i final = _mm512_add_epi16(follow, lead); // combining lead and follow
|
|
414
|
+
|
|
415
|
+
if (big_endian) {
|
|
416
|
+
final = _mm512_shuffle_epi8(final, byteflip);
|
|
417
|
+
}
|
|
418
|
+
if (tail == SIMDUTF_FULL) {
|
|
419
|
+
// Next part is UTF-16 specific and can be generalized to UTF-32.
|
|
420
|
+
int nout = _mm_popcnt_u32(uint32_t(leading));
|
|
421
|
+
_mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << nout) - 1), final);
|
|
422
|
+
out += nout; // UTF-8 to UTF-16 is only expansionary in this case.
|
|
423
|
+
} else {
|
|
424
|
+
int nout = int(_mm_popcnt_u64(_pdep_u64(0xFFFFFFFF, leading)));
|
|
425
|
+
_mm512_mask_storeu_epi16(out, __mmask32((uint64_t(1) << nout) - 1), final);
|
|
426
|
+
out += nout; // UTF-8 to UTF-16 is only expansionary in this case.
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
return true; // we are fine.
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/*
|
|
433
|
+
utf32_to_utf16_masked converts `count` lower UTF-32 code units
|
|
434
|
+
from input `utf32` into UTF-16. It differs from utf32_to_utf16
|
|
435
|
+
in that it 'masks' the writes.
|
|
436
|
+
|
|
437
|
+
Returns how many 16-bit code units were stored.
|
|
438
|
+
|
|
439
|
+
byteflip is used for flipping 16-bit code units, and it should be
|
|
440
|
+
__m512i byteflip = _mm512_setr_epi64(
|
|
441
|
+
0x0607040502030001,
|
|
442
|
+
0x0e0f0c0d0a0b0809,
|
|
443
|
+
0x0607040502030001,
|
|
444
|
+
0x0e0f0c0d0a0b0809,
|
|
445
|
+
0x0607040502030001,
|
|
446
|
+
0x0e0f0c0d0a0b0809,
|
|
447
|
+
0x0607040502030001,
|
|
448
|
+
0x0e0f0c0d0a0b0809
|
|
449
|
+
);
|
|
450
|
+
We pass it to the (always inlined) function to encourage the compiler to
|
|
451
|
+
keep the value in a (constant) register.
|
|
452
|
+
*/
|
|
453
|
+
template <endianness big_endian>
|
|
454
|
+
simdutf_really_inline size_t utf32_to_utf16_masked(const __m512i byteflip,
|
|
455
|
+
__m512i utf32,
|
|
456
|
+
unsigned int count,
|
|
457
|
+
char16_t *output) {
|
|
458
|
+
|
|
459
|
+
const __mmask16 valid = uint16_t((1 << count) - 1);
|
|
460
|
+
// 1. check if we have any surrogate pairs
|
|
461
|
+
const __m512i v_0000_ffff = _mm512_set1_epi32(0x0000ffff);
|
|
462
|
+
const __mmask16 sp_mask =
|
|
463
|
+
_mm512_mask_cmpgt_epu32_mask(valid, utf32, v_0000_ffff);
|
|
464
|
+
|
|
465
|
+
if (sp_mask == 0) {
|
|
466
|
+
if (big_endian) {
|
|
467
|
+
_mm256_mask_storeu_epi16(
|
|
468
|
+
(__m256i *)output, valid,
|
|
469
|
+
_mm256_shuffle_epi8(_mm512_cvtepi32_epi16(utf32),
|
|
470
|
+
_mm512_castsi512_si256(byteflip)));
|
|
471
|
+
|
|
472
|
+
} else {
|
|
473
|
+
_mm256_mask_storeu_epi16((__m256i *)output, valid,
|
|
474
|
+
_mm512_cvtepi32_epi16(utf32));
|
|
475
|
+
}
|
|
476
|
+
return count;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
{
|
|
480
|
+
// build surrogate pair code units in 32-bit lanes
|
|
481
|
+
|
|
482
|
+
// t0 = 8 x [000000000000aaaa|aaaaaabbbbbbbbbb]
|
|
483
|
+
const __m512i v_0001_0000 = _mm512_set1_epi32(0x00010000);
|
|
484
|
+
const __m512i t0 = _mm512_sub_epi32(utf32, v_0001_0000);
|
|
485
|
+
|
|
486
|
+
// t1 = 8 x [000000aaaaaaaaaa|bbbbbbbbbb000000]
|
|
487
|
+
const __m512i t1 = _mm512_slli_epi32(t0, 6);
|
|
488
|
+
|
|
489
|
+
// t2 = 8 x [000000aaaaaaaaaa|aaaaaabbbbbbbbbb] -- copy hi word from t1
|
|
490
|
+
// to t0
|
|
491
|
+
// 0xe4 = (t1 and v_ffff_0000) or (t0 and not v_ffff_0000)
|
|
492
|
+
const __m512i v_ffff_0000 = _mm512_set1_epi32(0xffff0000);
|
|
493
|
+
const __m512i t2 = _mm512_ternarylogic_epi32(t1, t0, v_ffff_0000, 0xe4);
|
|
494
|
+
|
|
495
|
+
// t2 = 8 x [110110aaaaaaaaaa|110111bbbbbbbbbb] -- copy hi word from t1
|
|
496
|
+
// to t0
|
|
497
|
+
// 0xba = (t2 and not v_fc00_fc000) or v_d800_dc00
|
|
498
|
+
const __m512i v_fc00_fc00 = _mm512_set1_epi32(0xfc00fc00);
|
|
499
|
+
const __m512i v_d800_dc00 = _mm512_set1_epi32(0xd800dc00);
|
|
500
|
+
const __m512i t3 =
|
|
501
|
+
_mm512_ternarylogic_epi32(t2, v_fc00_fc00, v_d800_dc00, 0xba);
|
|
502
|
+
const __m512i t4 = _mm512_mask_blend_epi32(sp_mask, utf32, t3);
|
|
503
|
+
__m512i t5 = _mm512_ror_epi32(t4, 16);
|
|
504
|
+
// Here we want to trim all of the upper 16-bit code units from the 2-byte
|
|
505
|
+
// characters represented as 4-byte values. We can compute it from
|
|
506
|
+
// sp_mask or the following... It can be more optimized!
|
|
507
|
+
const __mmask32 nonzero = _kor_mask32(
|
|
508
|
+
0xaaaaaaaa, _mm512_cmpneq_epi16_mask(t5, _mm512_setzero_si512()));
|
|
509
|
+
const __mmask32 nonzero_masked =
|
|
510
|
+
_kand_mask32(nonzero, __mmask32((uint64_t(1) << (2 * count)) - 1));
|
|
511
|
+
if (big_endian) {
|
|
512
|
+
t5 = _mm512_shuffle_epi8(t5, byteflip);
|
|
513
|
+
}
|
|
514
|
+
// we deliberately avoid _mm512_mask_compressstoreu_epi16 for portability
|
|
515
|
+
// (AMD Zen4 has terrible performance with it, it is effectively broken)
|
|
516
|
+
__m512i compressed = _mm512_maskz_compress_epi16(nonzero_masked, t5);
|
|
517
|
+
_mm512_mask_storeu_epi16(
|
|
518
|
+
output, _bzhi_u32(0xFFFFFFFF, count + _mm_popcnt_u32(sp_mask)),
|
|
519
|
+
compressed);
|
|
520
|
+
//_mm512_mask_compressstoreu_epi16(output, nonzero_masked, t5);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
return count + static_cast<unsigned int>(count_ones(sp_mask));
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/*
|
|
527
|
+
utf32_to_utf16 converts `count` lower UTF-32 code units
|
|
528
|
+
from input `utf32` into UTF-16. It may overflow.
|
|
529
|
+
|
|
530
|
+
Returns how many 16-bit code units were stored.
|
|
531
|
+
|
|
532
|
+
byteflip is used for flipping 16-bit code units, and it should be
|
|
533
|
+
__m512i byteflip = _mm512_setr_epi64(
|
|
534
|
+
0x0607040502030001,
|
|
535
|
+
0x0e0f0c0d0a0b0809,
|
|
536
|
+
0x0607040502030001,
|
|
537
|
+
0x0e0f0c0d0a0b0809,
|
|
538
|
+
0x0607040502030001,
|
|
539
|
+
0x0e0f0c0d0a0b0809,
|
|
540
|
+
0x0607040502030001,
|
|
541
|
+
0x0e0f0c0d0a0b0809
|
|
542
|
+
);
|
|
543
|
+
We pass it to the (always inlined) function to encourage the compiler to
|
|
544
|
+
keep the value in a (constant) register.
|
|
545
|
+
*/
|
|
546
|
+
template <endianness big_endian>
|
|
547
|
+
simdutf_really_inline size_t utf32_to_utf16(const __m512i byteflip,
|
|
548
|
+
__m512i utf32, unsigned int count,
|
|
549
|
+
char16_t *output) {
|
|
550
|
+
// check if we have any surrogate pairs
|
|
551
|
+
const __m512i v_0000_ffff = _mm512_set1_epi32(0x0000ffff);
|
|
552
|
+
const __mmask16 sp_mask = _mm512_cmpgt_epu32_mask(utf32, v_0000_ffff);
|
|
553
|
+
|
|
554
|
+
if (sp_mask == 0) {
|
|
555
|
+
// technically, it should be _mm256_storeu_epi16
|
|
556
|
+
if (big_endian) {
|
|
557
|
+
_mm256_storeu_si256(
|
|
558
|
+
(__m256i *)output,
|
|
559
|
+
_mm256_shuffle_epi8(_mm512_cvtepi32_epi16(utf32),
|
|
560
|
+
_mm512_castsi512_si256(byteflip)));
|
|
561
|
+
} else {
|
|
562
|
+
_mm256_storeu_si256((__m256i *)output, _mm512_cvtepi32_epi16(utf32));
|
|
563
|
+
}
|
|
564
|
+
return count;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
{
|
|
568
|
+
// build surrogate pair code units in 32-bit lanes
|
|
569
|
+
|
|
570
|
+
// t0 = 8 x [000000000000aaaa|aaaaaabbbbbbbbbb]
|
|
571
|
+
const __m512i v_0001_0000 = _mm512_set1_epi32(0x00010000);
|
|
572
|
+
const __m512i t0 = _mm512_sub_epi32(utf32, v_0001_0000);
|
|
573
|
+
|
|
574
|
+
// t1 = 8 x [000000aaaaaaaaaa|bbbbbbbbbb000000]
|
|
575
|
+
const __m512i t1 = _mm512_slli_epi32(t0, 6);
|
|
576
|
+
|
|
577
|
+
// t2 = 8 x [000000aaaaaaaaaa|aaaaaabbbbbbbbbb] -- copy hi word from t1
|
|
578
|
+
// to t0
|
|
579
|
+
// 0xe4 = (t1 and v_ffff_0000) or (t0 and not v_ffff_0000)
|
|
580
|
+
const __m512i v_ffff_0000 = _mm512_set1_epi32(0xffff0000);
|
|
581
|
+
const __m512i t2 = _mm512_ternarylogic_epi32(t1, t0, v_ffff_0000, 0xe4);
|
|
582
|
+
|
|
583
|
+
// t2 = 8 x [110110aaaaaaaaaa|110111bbbbbbbbbb] -- copy hi word from t1
|
|
584
|
+
// to t0
|
|
585
|
+
// 0xba = (t2 and not v_fc00_fc000) or v_d800_dc00
|
|
586
|
+
const __m512i v_fc00_fc00 = _mm512_set1_epi32(0xfc00fc00);
|
|
587
|
+
const __m512i v_d800_dc00 = _mm512_set1_epi32(0xd800dc00);
|
|
588
|
+
const __m512i t3 =
|
|
589
|
+
_mm512_ternarylogic_epi32(t2, v_fc00_fc00, v_d800_dc00, 0xba);
|
|
590
|
+
const __m512i t4 = _mm512_mask_blend_epi32(sp_mask, utf32, t3);
|
|
591
|
+
__m512i t5 = _mm512_ror_epi32(t4, 16);
|
|
592
|
+
const __mmask32 nonzero = _kor_mask32(
|
|
593
|
+
0xaaaaaaaa, _mm512_cmpneq_epi16_mask(t5, _mm512_setzero_si512()));
|
|
594
|
+
if (big_endian) {
|
|
595
|
+
t5 = _mm512_shuffle_epi8(t5, byteflip);
|
|
596
|
+
}
|
|
597
|
+
// we deliberately avoid _mm512_mask_compressstoreu_epi16 for portability
|
|
598
|
+
// (zen4)
|
|
599
|
+
__m512i compressed = _mm512_maskz_compress_epi16(nonzero, t5);
|
|
600
|
+
_mm512_mask_storeu_epi16(
|
|
601
|
+
output,
|
|
602
|
+
(1 << (count + static_cast<unsigned int>(count_ones(sp_mask)))) - 1,
|
|
603
|
+
compressed);
|
|
604
|
+
//_mm512_mask_compressstoreu_epi16(output, nonzero, t5);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
return count + static_cast<unsigned int>(count_ones(sp_mask));
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
/*
|
|
611
|
+
expanded_utf8_to_utf32 converts expanded UTF-8 characters (`utf8`)
|
|
612
|
+
stored at separate 32-bit lanes.
|
|
613
|
+
|
|
614
|
+
For each lane we have also a character class (`char_class), given in form
|
|
615
|
+
0x8080800N, where N is 4 highest bits from the leading byte; 0x80 resets
|
|
616
|
+
corresponding bytes during pshufb.
|
|
617
|
+
*/
|
|
618
|
+
simdutf_really_inline __m512i expanded_utf8_to_utf32(__m512i char_class,
|
|
619
|
+
__m512i utf8) {
|
|
620
|
+
/*
|
|
621
|
+
Input:
|
|
622
|
+
- utf8: bytes stored at separate 32-bit code units
|
|
623
|
+
- valid: which code units have valid UTF-8 characters
|
|
624
|
+
|
|
625
|
+
Bit layout of single word. We show 4 cases for each possible
|
|
626
|
+
UTF-8 character encoding. The `?` denotes bits we must not
|
|
627
|
+
assume their value.
|
|
628
|
+
|
|
629
|
+
|10dd.dddd|10cc.cccc|10bb.bbbb|1111.0aaa| 4-byte char
|
|
630
|
+
|????.????|10cc.cccc|10bb.bbbb|1110.aaaa| 3-byte char
|
|
631
|
+
|????.????|????.????|10bb.bbbb|110a.aaaa| 2-byte char
|
|
632
|
+
|????.????|????.????|????.????|0aaa.aaaa| ASCII char
|
|
633
|
+
byte 3 byte 2 byte 1 byte 0
|
|
634
|
+
*/
|
|
635
|
+
|
|
636
|
+
/* 1. Reset control bits of continuation bytes and the MSB
|
|
637
|
+
of the leading byte; this makes all bytes unsigned (and
|
|
638
|
+
does not alter ASCII char).
|
|
639
|
+
|
|
640
|
+
|00dd.dddd|00cc.cccc|00bb.bbbb|0111.0aaa| 4-byte char
|
|
641
|
+
|00??.????|00cc.cccc|00bb.bbbb|0110.aaaa| 3-byte char
|
|
642
|
+
|00??.????|00??.????|00bb.bbbb|010a.aaaa| 2-byte char
|
|
643
|
+
|00??.????|00??.????|00??.????|0aaa.aaaa| ASCII char
|
|
644
|
+
^^ ^^ ^^ ^
|
|
645
|
+
*/
|
|
646
|
+
__m512i values;
|
|
647
|
+
const __m512i v_3f3f_3f7f = _mm512_set1_epi32(0x3f3f3f7f);
|
|
648
|
+
values = _mm512_and_si512(utf8, v_3f3f_3f7f);
|
|
649
|
+
|
|
650
|
+
/* 2. Swap and join fields A-B and C-D
|
|
651
|
+
|
|
652
|
+
|0000.cccc|ccdd.dddd|0001.110a|aabb.bbbb| 4-byte char
|
|
653
|
+
|0000.cccc|cc??.????|0001.10aa|aabb.bbbb| 3-byte char
|
|
654
|
+
|0000.????|????.????|0001.0aaa|aabb.bbbb| 2-byte char
|
|
655
|
+
|0000.????|????.????|000a.aaaa|aa??.????| ASCII char */
|
|
656
|
+
const __m512i v_0140_0140 = _mm512_set1_epi32(0x01400140);
|
|
657
|
+
values = _mm512_maddubs_epi16(values, v_0140_0140);
|
|
658
|
+
|
|
659
|
+
/* 3. Swap and join fields AB & CD
|
|
660
|
+
|
|
661
|
+
|0000.0001|110a.aabb|bbbb.cccc|ccdd.dddd| 4-byte char
|
|
662
|
+
|0000.0001|10aa.aabb|bbbb.cccc|cc??.????| 3-byte char
|
|
663
|
+
|0000.0001|0aaa.aabb|bbbb.????|????.????| 2-byte char
|
|
664
|
+
|0000.000a|aaaa.aa??|????.????|????.????| ASCII char */
|
|
665
|
+
const __m512i v_0001_1000 = _mm512_set1_epi32(0x00011000);
|
|
666
|
+
values = _mm512_madd_epi16(values, v_0001_1000);
|
|
667
|
+
|
|
668
|
+
/* 4. Shift left the values by variable amounts to reset highest UTF-8 bits
|
|
669
|
+
|aaab.bbbb|bccc.cccd|dddd.d000|0000.0000| 4-byte char -- by 11
|
|
670
|
+
|aaaa.bbbb|bbcc.cccc|????.??00|0000.0000| 3-byte char -- by 10
|
|
671
|
+
|aaaa.abbb|bbb?.????|????.???0|0000.0000| 2-byte char -- by 9
|
|
672
|
+
|aaaa.aaa?|????.????|????.????|?000.0000| ASCII char -- by 7 */
|
|
673
|
+
{
|
|
674
|
+
/** pshufb
|
|
675
|
+
|
|
676
|
+
continuation = 0
|
|
677
|
+
ascii = 7
|
|
678
|
+
_2_bytes = 9
|
|
679
|
+
_3_bytes = 10
|
|
680
|
+
_4_bytes = 11
|
|
681
|
+
|
|
682
|
+
shift_left_v3 = 4 * [
|
|
683
|
+
ascii, # 0000
|
|
684
|
+
ascii, # 0001
|
|
685
|
+
ascii, # 0010
|
|
686
|
+
ascii, # 0011
|
|
687
|
+
ascii, # 0100
|
|
688
|
+
ascii, # 0101
|
|
689
|
+
ascii, # 0110
|
|
690
|
+
ascii, # 0111
|
|
691
|
+
continuation, # 1000
|
|
692
|
+
continuation, # 1001
|
|
693
|
+
continuation, # 1010
|
|
694
|
+
continuation, # 1011
|
|
695
|
+
_2_bytes, # 1100
|
|
696
|
+
_2_bytes, # 1101
|
|
697
|
+
_3_bytes, # 1110
|
|
698
|
+
_4_bytes, # 1111
|
|
699
|
+
] */
|
|
700
|
+
const __m512i shift_left_v3 = _mm512_setr_epi64(
|
|
701
|
+
0x0707070707070707, 0x0b0a090900000000, 0x0707070707070707,
|
|
702
|
+
0x0b0a090900000000, 0x0707070707070707, 0x0b0a090900000000,
|
|
703
|
+
0x0707070707070707, 0x0b0a090900000000);
|
|
704
|
+
|
|
705
|
+
const __m512i shift = _mm512_shuffle_epi8(shift_left_v3, char_class);
|
|
706
|
+
values = _mm512_sllv_epi32(values, shift);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
/* 5. Shift right the values by variable amounts to reset lowest bits
|
|
710
|
+
|0000.0000|000a.aabb|bbbb.cccc|ccdd.dddd| 4-byte char -- by 11
|
|
711
|
+
|0000.0000|0000.0000|aaaa.bbbb|bbcc.cccc| 3-byte char -- by 16
|
|
712
|
+
|0000.0000|0000.0000|0000.0aaa|aabb.bbbb| 2-byte char -- by 21
|
|
713
|
+
|0000.0000|0000.0000|0000.0000|0aaa.aaaa| ASCII char -- by 25 */
|
|
714
|
+
{
|
|
715
|
+
// 4 * [25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 0, 21, 21, 16, 11]
|
|
716
|
+
const __m512i shift_right = _mm512_setr_epi64(
|
|
717
|
+
0x1919191919191919, 0x0b10151500000000, 0x1919191919191919,
|
|
718
|
+
0x0b10151500000000, 0x1919191919191919, 0x0b10151500000000,
|
|
719
|
+
0x1919191919191919, 0x0b10151500000000);
|
|
720
|
+
|
|
721
|
+
const __m512i shift = _mm512_shuffle_epi8(shift_right, char_class);
|
|
722
|
+
values = _mm512_srlv_epi32(values, shift);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
return values;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
simdutf_really_inline __m512i expand_and_identify(__m512i lane0, __m512i lane1,
|
|
729
|
+
int &count) {
|
|
730
|
+
const __m512i merged = _mm512_mask_mov_epi32(lane0, 0x1000, lane1);
|
|
731
|
+
const __m512i expand_ver2 = _mm512_setr_epi64(
|
|
732
|
+
0x0403020103020100, 0x0605040305040302, 0x0807060507060504,
|
|
733
|
+
0x0a09080709080706, 0x0c0b0a090b0a0908, 0x0e0d0c0b0d0c0b0a,
|
|
734
|
+
0x000f0e0d0f0e0d0c, 0x0201000f01000f0e);
|
|
735
|
+
const __m512i input = _mm512_shuffle_epi8(merged, expand_ver2);
|
|
736
|
+
const __m512i v_0000_00c0 = _mm512_set1_epi32(0xc0);
|
|
737
|
+
const __m512i t0 = _mm512_and_si512(input, v_0000_00c0);
|
|
738
|
+
const __m512i v_0000_0080 = _mm512_set1_epi32(0x80);
|
|
739
|
+
const __mmask16 leading_bytes = _mm512_cmpneq_epu32_mask(t0, v_0000_0080);
|
|
740
|
+
count = static_cast<int>(count_ones(leading_bytes));
|
|
741
|
+
return _mm512_mask_compress_epi32(_mm512_setzero_si512(), leading_bytes,
|
|
742
|
+
input);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
simdutf_really_inline __m512i expand_utf8_to_utf32(__m512i input) {
|
|
746
|
+
__m512i char_class = _mm512_srli_epi32(input, 4);
|
|
747
|
+
/* char_class = ((input >> 4) & 0x0f) | 0x80808000 */
|
|
748
|
+
const __m512i v_0000_000f = _mm512_set1_epi32(0x0f);
|
|
749
|
+
const __m512i v_8080_8000 = _mm512_set1_epi32(0x80808000);
|
|
750
|
+
char_class =
|
|
751
|
+
_mm512_ternarylogic_epi32(char_class, v_0000_000f, v_8080_8000, 0xea);
|
|
752
|
+
return expanded_utf8_to_utf32(char_class, input);
|
|
753
|
+
}
|