react-native-quick-crypto 1.0.19 → 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/package.json +2 -2
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
#ifndef SIMDUTF_WESTMERE_SIMD_H
|
|
2
|
+
#define SIMDUTF_WESTMERE_SIMD_H
|
|
3
|
+
|
|
4
|
+
namespace simdutf {
|
|
5
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
6
|
+
namespace {
|
|
7
|
+
namespace simd {
|
|
8
|
+
|
|
9
|
+
template <typename Child> struct base {
|
|
10
|
+
__m128i value;
|
|
11
|
+
|
|
12
|
+
// Zero constructor
|
|
13
|
+
simdutf_really_inline base() : value{__m128i()} {}
|
|
14
|
+
|
|
15
|
+
// Conversion from SIMD register
|
|
16
|
+
simdutf_really_inline base(const __m128i _value) : value(_value) {}
|
|
17
|
+
// Conversion to SIMD register
|
|
18
|
+
simdutf_really_inline operator const __m128i &() const { return this->value; }
|
|
19
|
+
template <endianness big_endian>
|
|
20
|
+
simdutf_really_inline void store_ascii_as_utf16(char16_t *p) const {
|
|
21
|
+
__m128i first = _mm_cvtepu8_epi16(*this);
|
|
22
|
+
__m128i second = _mm_cvtepu8_epi16(_mm_srli_si128(*this, 8));
|
|
23
|
+
if (big_endian) {
|
|
24
|
+
const __m128i swap =
|
|
25
|
+
_mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
|
|
26
|
+
first = _mm_shuffle_epi8(first, swap);
|
|
27
|
+
second = _mm_shuffle_epi8(second, swap);
|
|
28
|
+
}
|
|
29
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(p), first);
|
|
30
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(p + 8), second);
|
|
31
|
+
}
|
|
32
|
+
simdutf_really_inline void store_ascii_as_utf32(char32_t *p) const {
|
|
33
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(p), _mm_cvtepu8_epi32(*this));
|
|
34
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(p + 4),
|
|
35
|
+
_mm_cvtepu8_epi32(_mm_srli_si128(*this, 4)));
|
|
36
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(p + 8),
|
|
37
|
+
_mm_cvtepu8_epi32(_mm_srli_si128(*this, 8)));
|
|
38
|
+
_mm_storeu_si128(reinterpret_cast<__m128i *>(p + 12),
|
|
39
|
+
_mm_cvtepu8_epi32(_mm_srli_si128(*this, 12)));
|
|
40
|
+
}
|
|
41
|
+
// Bit operations
|
|
42
|
+
simdutf_really_inline Child operator|(const Child other) const {
|
|
43
|
+
return _mm_or_si128(*this, other);
|
|
44
|
+
}
|
|
45
|
+
simdutf_really_inline Child operator&(const Child other) const {
|
|
46
|
+
return _mm_and_si128(*this, other);
|
|
47
|
+
}
|
|
48
|
+
simdutf_really_inline Child operator^(const Child other) const {
|
|
49
|
+
return _mm_xor_si128(*this, other);
|
|
50
|
+
}
|
|
51
|
+
simdutf_really_inline Child &operator|=(const Child other) {
|
|
52
|
+
auto this_cast = static_cast<Child *>(this);
|
|
53
|
+
*this_cast = *this_cast | other;
|
|
54
|
+
return *this_cast;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// Forward-declared so they can be used by splat and friends.
|
|
59
|
+
template <typename T> struct simd8;
|
|
60
|
+
|
|
61
|
+
template <typename T, typename Mask = simd8<bool>>
|
|
62
|
+
struct base8 : base<simd8<T>> {
|
|
63
|
+
typedef uint16_t bitmask_t;
|
|
64
|
+
typedef uint32_t bitmask2_t;
|
|
65
|
+
|
|
66
|
+
simdutf_really_inline T first() const { return _mm_extract_epi8(*this, 0); }
|
|
67
|
+
simdutf_really_inline T last() const { return _mm_extract_epi8(*this, 15); }
|
|
68
|
+
simdutf_really_inline base8() : base<simd8<T>>() {}
|
|
69
|
+
simdutf_really_inline base8(const __m128i _value) : base<simd8<T>>(_value) {}
|
|
70
|
+
|
|
71
|
+
friend simdutf_really_inline Mask operator==(const simd8<T> lhs,
|
|
72
|
+
const simd8<T> rhs) {
|
|
73
|
+
return _mm_cmpeq_epi8(lhs, rhs);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
static const int SIZE = sizeof(base<simd8<T>>::value);
|
|
77
|
+
|
|
78
|
+
template <int N = 1>
|
|
79
|
+
simdutf_really_inline simd8<T> prev(const simd8<T> prev_chunk) const {
|
|
80
|
+
return _mm_alignr_epi8(*this, prev_chunk, 16 - N);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// SIMD byte mask type (returned by things like eq and gt)
|
|
85
|
+
template <> struct simd8<bool> : base8<bool> {
|
|
86
|
+
static simdutf_really_inline simd8<bool> splat(bool _value) {
|
|
87
|
+
return _mm_set1_epi8(uint8_t(-(!!_value)));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
simdutf_really_inline simd8() : base8() {}
|
|
91
|
+
simdutf_really_inline simd8(const __m128i _value) : base8<bool>(_value) {}
|
|
92
|
+
// Splat constructor
|
|
93
|
+
simdutf_really_inline simd8(bool _value) : base8<bool>(splat(_value)) {}
|
|
94
|
+
|
|
95
|
+
simdutf_really_inline int to_bitmask() const {
|
|
96
|
+
return _mm_movemask_epi8(*this);
|
|
97
|
+
}
|
|
98
|
+
simdutf_really_inline simd8<bool> operator~() const { return *this ^ true; }
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
template <typename T> struct base8_numeric : base8<T> {
|
|
102
|
+
static simdutf_really_inline simd8<T> splat(T _value) {
|
|
103
|
+
return _mm_set1_epi8(_value);
|
|
104
|
+
}
|
|
105
|
+
static simdutf_really_inline simd8<T> zero() { return _mm_setzero_si128(); }
|
|
106
|
+
static simdutf_really_inline simd8<T> load(const T values[16]) {
|
|
107
|
+
return _mm_loadu_si128(reinterpret_cast<const __m128i *>(values));
|
|
108
|
+
}
|
|
109
|
+
// Repeat 16 values as many times as necessary (usually for lookup tables)
|
|
110
|
+
static simdutf_really_inline simd8<T> repeat_16(T v0, T v1, T v2, T v3, T v4,
|
|
111
|
+
T v5, T v6, T v7, T v8, T v9,
|
|
112
|
+
T v10, T v11, T v12, T v13,
|
|
113
|
+
T v14, T v15) {
|
|
114
|
+
return simd8<T>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
|
|
115
|
+
v14, v15);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
simdutf_really_inline base8_numeric() : base8<T>() {}
|
|
119
|
+
simdutf_really_inline base8_numeric(const __m128i _value)
|
|
120
|
+
: base8<T>(_value) {}
|
|
121
|
+
|
|
122
|
+
// Store to array
|
|
123
|
+
simdutf_really_inline void store(T dst[16]) const {
|
|
124
|
+
return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Override to distinguish from bool version
|
|
128
|
+
simdutf_really_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
|
|
129
|
+
|
|
130
|
+
// Addition/subtraction are the same for signed and unsigned
|
|
131
|
+
simdutf_really_inline simd8<T> operator-(const simd8<T> other) const {
|
|
132
|
+
return _mm_sub_epi8(*this, other);
|
|
133
|
+
}
|
|
134
|
+
simdutf_really_inline simd8<T> &operator-=(const simd8<T> other) {
|
|
135
|
+
*this = *this - other;
|
|
136
|
+
return *static_cast<simd8<T> *>(this);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Perform a lookup assuming the value is between 0 and 16 (undefined behavior
|
|
140
|
+
// for out of range values)
|
|
141
|
+
template <typename L>
|
|
142
|
+
simdutf_really_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
|
|
143
|
+
return _mm_shuffle_epi8(lookup_table, *this);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
template <typename L>
|
|
147
|
+
simdutf_really_inline simd8<L>
|
|
148
|
+
lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4,
|
|
149
|
+
L replace5, L replace6, L replace7, L replace8, L replace9,
|
|
150
|
+
L replace10, L replace11, L replace12, L replace13, L replace14,
|
|
151
|
+
L replace15) const {
|
|
152
|
+
return lookup_16(simd8<L>::repeat_16(
|
|
153
|
+
replace0, replace1, replace2, replace3, replace4, replace5, replace6,
|
|
154
|
+
replace7, replace8, replace9, replace10, replace11, replace12,
|
|
155
|
+
replace13, replace14, replace15));
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// Signed bytes
|
|
160
|
+
template <> struct simd8<int8_t> : base8_numeric<int8_t> {
|
|
161
|
+
simdutf_really_inline simd8() : base8_numeric<int8_t>() {}
|
|
162
|
+
simdutf_really_inline simd8(const __m128i _value)
|
|
163
|
+
: base8_numeric<int8_t>(_value) {}
|
|
164
|
+
// Splat constructor
|
|
165
|
+
simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {}
|
|
166
|
+
// Member-by-member initialization
|
|
167
|
+
simdutf_really_inline operator simd8<uint8_t>() const;
|
|
168
|
+
simdutf_really_inline bool is_ascii() const {
|
|
169
|
+
return _mm_movemask_epi8(*this) == 0;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Order-sensitive comparisons
|
|
173
|
+
simdutf_really_inline simd8<bool> operator>(const simd8<int8_t> other) const {
|
|
174
|
+
return _mm_cmpgt_epi8(*this, other);
|
|
175
|
+
}
|
|
176
|
+
simdutf_really_inline simd8<bool> operator<(const simd8<int8_t> other) const {
|
|
177
|
+
return _mm_cmpgt_epi8(other, *this);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
// Unsigned bytes
|
|
182
|
+
template <> struct simd8<uint8_t> : base8_numeric<uint8_t> {
|
|
183
|
+
simdutf_really_inline simd8() : base8_numeric<uint8_t>() {}
|
|
184
|
+
simdutf_really_inline simd8(const __m128i _value)
|
|
185
|
+
: base8_numeric<uint8_t>(_value) {}
|
|
186
|
+
|
|
187
|
+
// Splat constructor
|
|
188
|
+
simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
|
|
189
|
+
// Array constructor
|
|
190
|
+
simdutf_really_inline simd8(const uint8_t *values) : simd8(load(values)) {}
|
|
191
|
+
// Member-by-member initialization
|
|
192
|
+
simdutf_really_inline
|
|
193
|
+
simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5,
|
|
194
|
+
uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10,
|
|
195
|
+
uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15)
|
|
196
|
+
: simd8(_mm_setr_epi8(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
|
|
197
|
+
v12, v13, v14, v15)) {}
|
|
198
|
+
|
|
199
|
+
// Saturated math
|
|
200
|
+
simdutf_really_inline simd8<uint8_t>
|
|
201
|
+
saturating_sub(const simd8<uint8_t> other) const {
|
|
202
|
+
return _mm_subs_epu8(*this, other);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Order-specific operations
|
|
206
|
+
simdutf_really_inline simd8<uint8_t>
|
|
207
|
+
min_val(const simd8<uint8_t> other) const {
|
|
208
|
+
return _mm_min_epu8(*this, other);
|
|
209
|
+
}
|
|
210
|
+
// Same as >, but only guarantees true is nonzero (< guarantees true = -1)
|
|
211
|
+
simdutf_really_inline simd8<uint8_t>
|
|
212
|
+
gt_bits(const simd8<uint8_t> other) const {
|
|
213
|
+
return this->saturating_sub(other);
|
|
214
|
+
}
|
|
215
|
+
// Same as <, but only guarantees true is nonzero (< guarantees true = -1)
|
|
216
|
+
simdutf_really_inline simd8<bool>
|
|
217
|
+
operator>=(const simd8<uint8_t> other) const {
|
|
218
|
+
return other.min_val(*this) == other;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Bit-specific operations
|
|
222
|
+
simdutf_really_inline simd8<bool> bits_not_set() const {
|
|
223
|
+
return *this == uint8_t(0);
|
|
224
|
+
}
|
|
225
|
+
simdutf_really_inline simd8<bool> any_bits_set() const {
|
|
226
|
+
return ~this->bits_not_set();
|
|
227
|
+
}
|
|
228
|
+
simdutf_really_inline bool is_ascii() const {
|
|
229
|
+
return _mm_movemask_epi8(*this) == 0;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
simdutf_really_inline bool bits_not_set_anywhere() const {
|
|
233
|
+
return _mm_testz_si128(*this, *this);
|
|
234
|
+
}
|
|
235
|
+
simdutf_really_inline bool any_bits_set_anywhere() const {
|
|
236
|
+
return !bits_not_set_anywhere();
|
|
237
|
+
}
|
|
238
|
+
template <int N> simdutf_really_inline simd8<uint8_t> shr() const {
|
|
239
|
+
return simd8<uint8_t>(_mm_srli_epi16(*this, N)) & uint8_t(0xFFu >> N);
|
|
240
|
+
}
|
|
241
|
+
template <int N> simdutf_really_inline simd8<uint8_t> shl() const {
|
|
242
|
+
return simd8<uint8_t>(_mm_slli_epi16(*this, N)) & uint8_t(0xFFu << N);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
simdutf_really_inline uint64_t sum_bytes() const {
|
|
246
|
+
const auto tmp = _mm_sad_epu8(value, _mm_setzero_si128());
|
|
247
|
+
return _mm_extract_epi64(tmp, 0) + _mm_extract_epi64(tmp, 1);
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
simdutf_really_inline simd8<int8_t>::operator simd8<uint8_t>() const {
|
|
252
|
+
return this->value;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
template <typename T> struct simd8x64 {
|
|
256
|
+
static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
|
|
257
|
+
static_assert(NUM_CHUNKS == 4,
|
|
258
|
+
"Westmere kernel should use four registers per 64-byte block.");
|
|
259
|
+
simd8<T> chunks[NUM_CHUNKS];
|
|
260
|
+
|
|
261
|
+
simd8x64(const simd8x64<T> &o) = delete; // no copy allowed
|
|
262
|
+
simd8x64<T> &
|
|
263
|
+
operator=(const simd8<T> other) = delete; // no assignment allowed
|
|
264
|
+
simd8x64() = delete; // no default constructor allowed
|
|
265
|
+
|
|
266
|
+
simdutf_really_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1,
|
|
267
|
+
const simd8<T> chunk2, const simd8<T> chunk3)
|
|
268
|
+
: chunks{chunk0, chunk1, chunk2, chunk3} {}
|
|
269
|
+
simdutf_really_inline simd8x64(const T *ptr)
|
|
270
|
+
: chunks{simd8<T>::load(ptr),
|
|
271
|
+
simd8<T>::load(ptr + sizeof(simd8<T>) / sizeof(T)),
|
|
272
|
+
simd8<T>::load(ptr + 2 * sizeof(simd8<T>) / sizeof(T)),
|
|
273
|
+
simd8<T>::load(ptr + 3 * sizeof(simd8<T>) / sizeof(T))} {}
|
|
274
|
+
|
|
275
|
+
simdutf_really_inline void store(T *ptr) const {
|
|
276
|
+
this->chunks[0].store(ptr + sizeof(simd8<T>) * 0 / sizeof(T));
|
|
277
|
+
this->chunks[1].store(ptr + sizeof(simd8<T>) * 1 / sizeof(T));
|
|
278
|
+
this->chunks[2].store(ptr + sizeof(simd8<T>) * 2 / sizeof(T));
|
|
279
|
+
this->chunks[3].store(ptr + sizeof(simd8<T>) * 3 / sizeof(T));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
simdutf_really_inline simd8x64<T> &operator|=(const simd8x64<T> &other) {
|
|
283
|
+
this->chunks[0] |= other.chunks[0];
|
|
284
|
+
this->chunks[1] |= other.chunks[1];
|
|
285
|
+
this->chunks[2] |= other.chunks[2];
|
|
286
|
+
this->chunks[3] |= other.chunks[3];
|
|
287
|
+
return *this;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
simdutf_really_inline simd8<T> reduce_or() const {
|
|
291
|
+
return (this->chunks[0] | this->chunks[1]) |
|
|
292
|
+
(this->chunks[2] | this->chunks[3]);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
simdutf_really_inline bool is_ascii() const {
|
|
296
|
+
return this->reduce_or().is_ascii();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
template <endianness endian>
|
|
300
|
+
simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const {
|
|
301
|
+
this->chunks[0].template store_ascii_as_utf16<endian>(ptr +
|
|
302
|
+
sizeof(simd8<T>) * 0);
|
|
303
|
+
this->chunks[1].template store_ascii_as_utf16<endian>(ptr +
|
|
304
|
+
sizeof(simd8<T>) * 1);
|
|
305
|
+
this->chunks[2].template store_ascii_as_utf16<endian>(ptr +
|
|
306
|
+
sizeof(simd8<T>) * 2);
|
|
307
|
+
this->chunks[3].template store_ascii_as_utf16<endian>(ptr +
|
|
308
|
+
sizeof(simd8<T>) * 3);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
simdutf_really_inline void store_ascii_as_utf32(char32_t *ptr) const {
|
|
312
|
+
this->chunks[0].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 0);
|
|
313
|
+
this->chunks[1].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 1);
|
|
314
|
+
this->chunks[2].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 2);
|
|
315
|
+
this->chunks[3].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 3);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
simdutf_really_inline uint64_t to_bitmask() const {
|
|
319
|
+
uint64_t r0 = uint32_t(this->chunks[0].to_bitmask());
|
|
320
|
+
uint64_t r1 = this->chunks[1].to_bitmask();
|
|
321
|
+
uint64_t r2 = this->chunks[2].to_bitmask();
|
|
322
|
+
uint64_t r3 = this->chunks[3].to_bitmask();
|
|
323
|
+
return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
simdutf_really_inline uint64_t lt(const T m) const {
|
|
327
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
328
|
+
return simd8x64<bool>(this->chunks[0] < mask, this->chunks[1] < mask,
|
|
329
|
+
this->chunks[2] < mask, this->chunks[3] < mask)
|
|
330
|
+
.to_bitmask();
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
simdutf_really_inline uint64_t gt(const T m) const {
|
|
334
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
335
|
+
return simd8x64<bool>(this->chunks[0] > mask, this->chunks[1] > mask,
|
|
336
|
+
this->chunks[2] > mask, this->chunks[3] > mask)
|
|
337
|
+
.to_bitmask();
|
|
338
|
+
}
|
|
339
|
+
simdutf_really_inline uint64_t gteq(const T m) const {
|
|
340
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
341
|
+
return simd8x64<bool>(this->chunks[0] >= mask, this->chunks[1] >= mask,
|
|
342
|
+
this->chunks[2] >= mask, this->chunks[3] >= mask)
|
|
343
|
+
.to_bitmask();
|
|
344
|
+
}
|
|
345
|
+
simdutf_really_inline uint64_t eq(const T m) const {
|
|
346
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
347
|
+
return simd8x64<bool>(this->chunks[0] == mask, this->chunks[1] == mask,
|
|
348
|
+
this->chunks[2] == mask, this->chunks[3] == mask)
|
|
349
|
+
.to_bitmask();
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const {
|
|
353
|
+
const simd8<uint8_t> mask = simd8<uint8_t>::splat(m);
|
|
354
|
+
return simd8x64<bool>(simd8<uint8_t>(__m128i(this->chunks[0])) >= mask,
|
|
355
|
+
simd8<uint8_t>(__m128i(this->chunks[1])) >= mask,
|
|
356
|
+
simd8<uint8_t>(__m128i(this->chunks[2])) >= mask,
|
|
357
|
+
simd8<uint8_t>(__m128i(this->chunks[3])) >= mask)
|
|
358
|
+
.to_bitmask();
|
|
359
|
+
}
|
|
360
|
+
}; // struct simd8x64<T>
|
|
361
|
+
|
|
362
|
+
#include "simdutf/westmere/simd16-inl.h"
|
|
363
|
+
#include "simdutf/westmere/simd32-inl.h"
|
|
364
|
+
#include "simdutf/westmere/simd64-inl.h"
|
|
365
|
+
|
|
366
|
+
simdutf_really_inline simd64<uint64_t> sum_8bytes(const simd8<uint8_t> v) {
|
|
367
|
+
return _mm_sad_epu8(v.value, simd8<uint8_t>::zero());
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
simdutf_really_inline simd8<uint8_t> as_vector_u8(const simd32<uint32_t> v) {
|
|
371
|
+
return simd8<uint8_t>(v.value);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
} // namespace simd
|
|
375
|
+
} // unnamed namespace
|
|
376
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
377
|
+
} // namespace simdutf
|
|
378
|
+
|
|
379
|
+
#endif // SIMDUTF_WESTMERE_SIMD_INPUT_H
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
template <typename T> struct simd16;
|
|
2
|
+
|
|
3
|
+
template <typename T, typename Mask = simd16<bool>>
|
|
4
|
+
struct base16 : base<simd16<T>> {
|
|
5
|
+
simdutf_really_inline base16() : base<simd16<T>>() {}
|
|
6
|
+
|
|
7
|
+
simdutf_really_inline base16(const __m128i _value)
|
|
8
|
+
: base<simd16<T>>(_value) {}
|
|
9
|
+
|
|
10
|
+
friend simdutf_really_inline Mask operator==(const simd16<T> lhs,
|
|
11
|
+
const simd16<T> rhs) {
|
|
12
|
+
return _mm_cmpeq_epi16(lhs, rhs);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/// the size of vector in bytes
|
|
16
|
+
static const int SIZE = sizeof(base<simd16<T>>::value);
|
|
17
|
+
|
|
18
|
+
/// the number of elements of type T a vector can hold
|
|
19
|
+
static const int ELEMENTS = SIZE / sizeof(T);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// SIMD byte mask type (returned by things like eq and gt)
|
|
23
|
+
template <> struct simd16<bool> : base16<bool> {
|
|
24
|
+
static simdutf_really_inline simd16<bool> splat(bool _value) {
|
|
25
|
+
return _mm_set1_epi16(uint16_t(-(!!_value)));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
simdutf_really_inline simd16(const __m128i _value) : base16<bool>(_value) {}
|
|
29
|
+
|
|
30
|
+
// Splat constructor
|
|
31
|
+
simdutf_really_inline simd16(bool _value) : base16<bool>(splat(_value)) {}
|
|
32
|
+
|
|
33
|
+
simdutf_really_inline int to_bitmask() const {
|
|
34
|
+
return _mm_movemask_epi8(*this);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
simdutf_really_inline simd16<bool> operator~() const { return *this ^ true; }
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
template <typename T> struct base16_numeric : base16<T> {
|
|
41
|
+
static simdutf_really_inline simd16<T> splat(T _value) {
|
|
42
|
+
return _mm_set1_epi16(_value);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static simdutf_really_inline simd16<T> zero() { return _mm_setzero_si128(); }
|
|
46
|
+
|
|
47
|
+
static simdutf_really_inline simd16<T> load(const T values[8]) {
|
|
48
|
+
return _mm_loadu_si128(reinterpret_cast<const __m128i *>(values));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
simdutf_really_inline base16_numeric() : base16<T>() {}
|
|
52
|
+
|
|
53
|
+
simdutf_really_inline base16_numeric(const __m128i _value)
|
|
54
|
+
: base16<T>(_value) {}
|
|
55
|
+
|
|
56
|
+
// Store to array
|
|
57
|
+
simdutf_really_inline void store(T dst[8]) const {
|
|
58
|
+
return _mm_storeu_si128(reinterpret_cast<__m128i *>(dst), *this);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Override to distinguish from bool version
|
|
62
|
+
simdutf_really_inline simd16<T> operator~() const { return *this ^ 0xFFu; }
|
|
63
|
+
|
|
64
|
+
// Addition/subtraction are the same for signed and unsigned
|
|
65
|
+
simdutf_really_inline simd16<T> operator+(const simd16<T> other) const {
|
|
66
|
+
return _mm_add_epi16(*this, other);
|
|
67
|
+
}
|
|
68
|
+
simdutf_really_inline simd16<T> &operator+=(const simd16<T> other) {
|
|
69
|
+
*this = *this + other;
|
|
70
|
+
return *static_cast<simd16<T> *>(this);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Unsigned code units
|
|
75
|
+
template <> struct simd16<uint16_t> : base16_numeric<uint16_t> {
|
|
76
|
+
simdutf_really_inline simd16() : base16_numeric<uint16_t>() {}
|
|
77
|
+
|
|
78
|
+
simdutf_really_inline simd16(const __m128i _value)
|
|
79
|
+
: base16_numeric<uint16_t>(_value) {}
|
|
80
|
+
|
|
81
|
+
// Splat constructor
|
|
82
|
+
simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {}
|
|
83
|
+
|
|
84
|
+
// Array constructor
|
|
85
|
+
simdutf_really_inline simd16(const char16_t *values)
|
|
86
|
+
: simd16(load(reinterpret_cast<const uint16_t *>(values))) {}
|
|
87
|
+
|
|
88
|
+
// Order-specific operations
|
|
89
|
+
simdutf_really_inline simd16<uint16_t>
|
|
90
|
+
max_val(const simd16<uint16_t> other) const {
|
|
91
|
+
return _mm_max_epu16(*this, other);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
simdutf_really_inline simd16<uint16_t>
|
|
95
|
+
min_val(const simd16<uint16_t> other) const {
|
|
96
|
+
return _mm_min_epu16(*this, other);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
simdutf_really_inline simd16<bool>
|
|
100
|
+
operator<=(const simd16<uint16_t> other) const {
|
|
101
|
+
return other.max_val(*this) == other;
|
|
102
|
+
}
|
|
103
|
+
simdutf_really_inline simd16<bool>
|
|
104
|
+
operator>=(const simd16<uint16_t> other) const {
|
|
105
|
+
return other.min_val(*this) == other;
|
|
106
|
+
}
|
|
107
|
+
// Bit-specific operations
|
|
108
|
+
simdutf_really_inline simd16<bool> bits_not_set() const {
|
|
109
|
+
return *this == uint16_t(0);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
simdutf_really_inline simd16<bool> any_bits_set() const {
|
|
113
|
+
return ~this->bits_not_set();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
template <int N> simdutf_really_inline simd16<uint16_t> shr() const {
|
|
117
|
+
return simd16<uint16_t>(_mm_srli_epi16(*this, N));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Change the endianness
|
|
121
|
+
simdutf_really_inline simd16<uint16_t> swap_bytes() const {
|
|
122
|
+
const __m128i swap =
|
|
123
|
+
_mm_setr_epi8(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
|
|
124
|
+
return _mm_shuffle_epi8(*this, swap);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Pack with the unsigned saturation of two uint16_t code units into single
|
|
128
|
+
// uint8_t vector
|
|
129
|
+
static simdutf_really_inline simd8<uint8_t> pack(const simd16<uint16_t> &v0,
|
|
130
|
+
const simd16<uint16_t> &v1) {
|
|
131
|
+
return _mm_packus_epi16(v0, v1);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
simdutf_really_inline uint64_t sum() const {
|
|
135
|
+
const auto lo_u16 = _mm_and_si128(value, _mm_set1_epi32(0x0000ffff));
|
|
136
|
+
const auto hi_u16 = _mm_srli_epi32(value, 16);
|
|
137
|
+
const auto sum_u32 = _mm_add_epi32(lo_u16, hi_u16);
|
|
138
|
+
|
|
139
|
+
const auto lo_u32 = _mm_and_si128(sum_u32, _mm_set1_epi64x(0xffffffff));
|
|
140
|
+
const auto hi_u32 = _mm_srli_epi64(sum_u32, 32);
|
|
141
|
+
const auto sum_u64 = _mm_add_epi64(lo_u32, hi_u32);
|
|
142
|
+
|
|
143
|
+
return uint64_t(_mm_extract_epi64(sum_u64, 0)) +
|
|
144
|
+
uint64_t(_mm_extract_epi64(sum_u64, 1));
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
template <typename T> struct simd16x32 {
|
|
149
|
+
static constexpr int NUM_CHUNKS = 64 / sizeof(simd16<T>);
|
|
150
|
+
static_assert(NUM_CHUNKS == 4,
|
|
151
|
+
"Westmere kernel should use four registers per 64-byte block.");
|
|
152
|
+
simd16<T> chunks[NUM_CHUNKS];
|
|
153
|
+
|
|
154
|
+
simd16x32(const simd16x32<T> &o) = delete; // no copy allowed
|
|
155
|
+
simd16x32<T> &
|
|
156
|
+
operator=(const simd16<T> other) = delete; // no assignment allowed
|
|
157
|
+
simd16x32() = delete; // no default constructor allowed
|
|
158
|
+
|
|
159
|
+
simdutf_really_inline
|
|
160
|
+
simd16x32(const simd16<T> chunk0, const simd16<T> chunk1,
|
|
161
|
+
const simd16<T> chunk2, const simd16<T> chunk3)
|
|
162
|
+
: chunks{chunk0, chunk1, chunk2, chunk3} {}
|
|
163
|
+
simdutf_really_inline simd16x32(const T *ptr)
|
|
164
|
+
: chunks{simd16<T>::load(ptr),
|
|
165
|
+
simd16<T>::load(ptr + sizeof(simd16<T>) / sizeof(T)),
|
|
166
|
+
simd16<T>::load(ptr + 2 * sizeof(simd16<T>) / sizeof(T)),
|
|
167
|
+
simd16<T>::load(ptr + 3 * sizeof(simd16<T>) / sizeof(T))} {}
|
|
168
|
+
|
|
169
|
+
simdutf_really_inline void store(T *ptr) const {
|
|
170
|
+
this->chunks[0].store(ptr + sizeof(simd16<T>) * 0 / sizeof(T));
|
|
171
|
+
this->chunks[1].store(ptr + sizeof(simd16<T>) * 1 / sizeof(T));
|
|
172
|
+
this->chunks[2].store(ptr + sizeof(simd16<T>) * 2 / sizeof(T));
|
|
173
|
+
this->chunks[3].store(ptr + sizeof(simd16<T>) * 3 / sizeof(T));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
simdutf_really_inline simd16<T> reduce_or() const {
|
|
177
|
+
return (this->chunks[0] | this->chunks[1]) |
|
|
178
|
+
(this->chunks[2] | this->chunks[3]);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
simdutf_really_inline bool is_ascii() const {
|
|
182
|
+
return this->reduce_or().is_ascii();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const {
|
|
186
|
+
this->chunks[0].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 0);
|
|
187
|
+
this->chunks[1].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 1);
|
|
188
|
+
this->chunks[2].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 2);
|
|
189
|
+
this->chunks[3].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 3);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
simdutf_really_inline uint64_t to_bitmask() const {
|
|
193
|
+
uint64_t r0 = uint32_t(this->chunks[0].to_bitmask());
|
|
194
|
+
uint64_t r1 = this->chunks[1].to_bitmask();
|
|
195
|
+
uint64_t r2 = this->chunks[2].to_bitmask();
|
|
196
|
+
uint64_t r3 = this->chunks[3].to_bitmask();
|
|
197
|
+
return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
simdutf_really_inline void swap_bytes() {
|
|
201
|
+
this->chunks[0] = this->chunks[0].swap_bytes();
|
|
202
|
+
this->chunks[1] = this->chunks[1].swap_bytes();
|
|
203
|
+
this->chunks[2] = this->chunks[2].swap_bytes();
|
|
204
|
+
this->chunks[3] = this->chunks[3].swap_bytes();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
simdutf_really_inline uint64_t lteq(const T m) const {
|
|
208
|
+
const simd16<T> mask = simd16<T>::splat(m);
|
|
209
|
+
return simd16x32<bool>(this->chunks[0] <= mask, this->chunks[1] <= mask,
|
|
210
|
+
this->chunks[2] <= mask, this->chunks[3] <= mask)
|
|
211
|
+
.to_bitmask();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
simdutf_really_inline uint64_t gteq(const T m) const {
|
|
215
|
+
const simd16<T> mask = simd16<T>::splat(m);
|
|
216
|
+
return simd16x32<bool>(this->chunks[0] >= mask, this->chunks[1] >= mask,
|
|
217
|
+
this->chunks[2] >= mask, this->chunks[3] >= mask)
|
|
218
|
+
.to_bitmask();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
simdutf_really_inline uint64_t eq(const T m) const {
|
|
222
|
+
const simd16<T> mask = simd16<T>::splat(m);
|
|
223
|
+
return simd16x32<bool>(this->chunks[0] == mask, this->chunks[1] == mask,
|
|
224
|
+
this->chunks[2] == mask, this->chunks[3] == mask)
|
|
225
|
+
.to_bitmask();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
simdutf_really_inline uint64_t not_in_range(const T low, const T high) const {
|
|
229
|
+
const simd16<T> mask_low = simd16<T>::splat(static_cast<T>(low - 1));
|
|
230
|
+
const simd16<T> mask_high = simd16<T>::splat(static_cast<T>(high + 1));
|
|
231
|
+
return simd16x32<bool>(
|
|
232
|
+
(this->chunks[0] >= mask_high) | (this->chunks[0] <= mask_low),
|
|
233
|
+
(this->chunks[1] >= mask_high) | (this->chunks[1] <= mask_low),
|
|
234
|
+
(this->chunks[2] >= mask_high) | (this->chunks[2] <= mask_low),
|
|
235
|
+
(this->chunks[3] >= mask_high) | (this->chunks[3] <= mask_low))
|
|
236
|
+
.to_bitmask();
|
|
237
|
+
}
|
|
238
|
+
}; // struct simd16x32<T>
|
|
239
|
+
|
|
240
|
+
simd16<uint16_t> min(const simd16<uint16_t> a, simd16<uint16_t> b) {
|
|
241
|
+
return _mm_min_epu16(a.value, b.value);
|
|
242
|
+
}
|