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.
Files changed (732) hide show
  1. package/QuickCrypto.podspec +12 -38
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +3 -0
  4. package/cpp/utils/HybridUtils.cpp +39 -77
  5. package/deps/simdutf/.clang-format +4 -0
  6. package/deps/simdutf/.github/ISSUE_TEMPLATE/bug_report.md +62 -0
  7. package/deps/simdutf/.github/ISSUE_TEMPLATE/config.yml +1 -0
  8. package/deps/simdutf/.github/ISSUE_TEMPLATE/feature_request.md +35 -0
  9. package/deps/simdutf/.github/ISSUE_TEMPLATE/standard-issue-template.md +29 -0
  10. package/deps/simdutf/.github/pull_request_template.md +51 -0
  11. package/deps/simdutf/.github/workflows/aarch64.yml +39 -0
  12. package/deps/simdutf/.github/workflows/alpine.yml +27 -0
  13. package/deps/simdutf/.github/workflows/amalgamation_demos.yml +34 -0
  14. package/deps/simdutf/.github/workflows/armv7.yml +32 -0
  15. package/deps/simdutf/.github/workflows/atomic_fuzz.yml +25 -0
  16. package/deps/simdutf/.github/workflows/cifuzz.yml +37 -0
  17. package/deps/simdutf/.github/workflows/clangformat.yml +36 -0
  18. package/deps/simdutf/.github/workflows/debian-latestcxxstandards.yml +40 -0
  19. package/deps/simdutf/.github/workflows/debian.yml +33 -0
  20. package/deps/simdutf/.github/workflows/documentation.yml +36 -0
  21. package/deps/simdutf/.github/workflows/emscripten.yml +19 -0
  22. package/deps/simdutf/.github/workflows/loongarch64-gcc-14.2.yml +39 -0
  23. package/deps/simdutf/.github/workflows/macos-latest.yml +29 -0
  24. package/deps/simdutf/.github/workflows/msys2-clang.yml +48 -0
  25. package/deps/simdutf/.github/workflows/msys2.yml +50 -0
  26. package/deps/simdutf/.github/workflows/ppc64le.yml +29 -0
  27. package/deps/simdutf/.github/workflows/rvv-1024-clang-18.yml +35 -0
  28. package/deps/simdutf/.github/workflows/rvv-128-clang-17.yml +35 -0
  29. package/deps/simdutf/.github/workflows/rvv-256-gcc-14.yml +31 -0
  30. package/deps/simdutf/.github/workflows/s390x.yml +29 -0
  31. package/deps/simdutf/.github/workflows/selective-amalgamation.yml +29 -0
  32. package/deps/simdutf/.github/workflows/typos.yml +19 -0
  33. package/deps/simdutf/.github/workflows/ubuntu22-cxx20.yml +30 -0
  34. package/deps/simdutf/.github/workflows/ubuntu22.yml +32 -0
  35. package/deps/simdutf/.github/workflows/ubuntu22_gcc12.yml +27 -0
  36. package/deps/simdutf/.github/workflows/ubuntu22sani.yml +29 -0
  37. package/deps/simdutf/.github/workflows/ubuntu24-cxxstandards.yml +34 -0
  38. package/deps/simdutf/.github/workflows/ubuntu24-unsignedchar.yml +34 -0
  39. package/deps/simdutf/.github/workflows/ubuntu24.yml +32 -0
  40. package/deps/simdutf/.github/workflows/ubuntu24sani.yml +36 -0
  41. package/deps/simdutf/.github/workflows/ubuntu24sani_clang.yml +29 -0
  42. package/deps/simdutf/.github/workflows/vs17-arm-ci.yml +21 -0
  43. package/deps/simdutf/.github/workflows/vs17-ci-cxx20.yml +41 -0
  44. package/deps/simdutf/.github/workflows/vs17-ci.yml +41 -0
  45. package/deps/simdutf/.github/workflows/vs17-clang-ci.yml +41 -0
  46. package/deps/simdutf/.github/workflows/vs17-cxxstandards.yml +36 -0
  47. package/deps/simdutf/AI_USAGE_POLICY.md +56 -0
  48. package/deps/simdutf/AUTHORS +6 -0
  49. package/deps/simdutf/CMakeLists.txt +231 -0
  50. package/deps/simdutf/CONTRIBUTING.md +214 -0
  51. package/deps/simdutf/CONTRIBUTORS +1 -0
  52. package/deps/simdutf/Doxyfile +2584 -0
  53. package/deps/simdutf/LICENSE-APACHE +201 -0
  54. package/deps/simdutf/LICENSE-MIT +18 -0
  55. package/deps/simdutf/Makefile.crosscompile +54 -0
  56. package/deps/simdutf/README-RVV.md +16 -0
  57. package/deps/simdutf/README.md +2782 -0
  58. package/deps/simdutf/SECURITY.md +8 -0
  59. package/deps/simdutf/benchmarks/CMakeLists.txt +101 -0
  60. package/deps/simdutf/benchmarks/alignment.cpp +150 -0
  61. package/deps/simdutf/benchmarks/base64/CMakeLists.txt +30 -0
  62. package/deps/simdutf/benchmarks/base64/benchmark_base64.cpp +875 -0
  63. package/deps/simdutf/benchmarks/base64/libbase64_spaces.h +49 -0
  64. package/deps/simdutf/benchmarks/base64/node_base64.h +227 -0
  65. package/deps/simdutf/benchmarks/base64/openssl3_base64.h +334 -0
  66. package/deps/simdutf/benchmarks/benchmark.cpp +65 -0
  67. package/deps/simdutf/benchmarks/benchmark_to_well_formed_utf16.cpp +347 -0
  68. package/deps/simdutf/benchmarks/competition/.clang-format-ignore +5 -0
  69. package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.cpp +1276 -0
  70. package/deps/simdutf/benchmarks/competition/CppCon2018/utf_utils.h +595 -0
  71. package/deps/simdutf/benchmarks/competition/README.md +7 -0
  72. package/deps/simdutf/benchmarks/competition/hoehrmann/hoehrmann.h +91 -0
  73. package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16.h +444 -0
  74. package/deps/simdutf/benchmarks/competition/inoue2008/inoue_utf8_to_utf16_tables.h +13183 -0
  75. package/deps/simdutf/benchmarks/competition/inoue2008/script.py +73 -0
  76. package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.cpp +738 -0
  77. package/deps/simdutf/benchmarks/competition/llvm/ConvertUTF.h +293 -0
  78. package/deps/simdutf/benchmarks/competition/u8u16/COPYRIGHT +8 -0
  79. package/deps/simdutf/benchmarks/competition/u8u16/Makefile +44 -0
  80. package/deps/simdutf/benchmarks/competition/u8u16/OSL3.0.txt +169 -0
  81. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/BOM_Profiler.h +148 -0
  82. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/i386_timer.h +45 -0
  83. package/deps/simdutf/benchmarks/competition/u8u16/Profiling/ppc_timer.c +34 -0
  84. package/deps/simdutf/benchmarks/competition/u8u16/README +56 -0
  85. package/deps/simdutf/benchmarks/competition/u8u16/config/config_defs.h +43 -0
  86. package/deps/simdutf/benchmarks/competition/u8u16/config/g4_config.h +27 -0
  87. package/deps/simdutf/benchmarks/competition/u8u16/config/mmx_config.h +16 -0
  88. package/deps/simdutf/benchmarks/competition/u8u16/config/p4_config.h +18 -0
  89. package/deps/simdutf/benchmarks/competition/u8u16/config/p4_ideal_config.h +16 -0
  90. package/deps/simdutf/benchmarks/competition/u8u16/config/spu_config.h +28 -0
  91. package/deps/simdutf/benchmarks/competition/u8u16/config/ssse3_config.h +20 -0
  92. package/deps/simdutf/benchmarks/competition/u8u16/iconv_u8u16.c +2 -0
  93. package/deps/simdutf/benchmarks/competition/u8u16/lib/altivec_simd.h +440 -0
  94. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_basic_ops.py +121 -0
  95. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_half_operand_versions.py +158 -0
  96. package/deps/simdutf/benchmarks/competition/u8u16/lib/libgen/make_test.py +270 -0
  97. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd.h +141 -0
  98. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_basic.h +216 -0
  99. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_built_in.h +119 -0
  100. package/deps/simdutf/benchmarks/competition/u8u16/lib/mmx_simd_modified.h +2430 -0
  101. package/deps/simdutf/benchmarks/competition/u8u16/lib/outline.txt +39 -0
  102. package/deps/simdutf/benchmarks/competition/u8u16/lib/spu_simd.h +421 -0
  103. package/deps/simdutf/benchmarks/competition/u8u16/lib/sse_simd.h +836 -0
  104. package/deps/simdutf/benchmarks/competition/u8u16/lib/stdint.h +222 -0
  105. package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_BE.c +4 -0
  106. package/deps/simdutf/benchmarks/competition/u8u16/libu8u16_LE.c +5 -0
  107. package/deps/simdutf/benchmarks/competition/u8u16/proto/u8u16.py +390 -0
  108. package/deps/simdutf/benchmarks/competition/u8u16/src/Makefile +18 -0
  109. package/deps/simdutf/benchmarks/competition/u8u16/src/bytelex.h +448 -0
  110. package/deps/simdutf/benchmarks/competition/u8u16/src/charsets/ASCII_EBCDIC.h +284 -0
  111. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.c +1975 -0
  112. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.pdf +0 -0
  113. package/deps/simdutf/benchmarks/competition/u8u16/src/libu8u16.w +2263 -0
  114. package/deps/simdutf/benchmarks/competition/u8u16/src/multiliteral.h +239 -0
  115. package/deps/simdutf/benchmarks/competition/u8u16/src/u8u16.c +232 -0
  116. package/deps/simdutf/benchmarks/competition/u8u16/src/x8x16.c +194 -0
  117. package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.c +193 -0
  118. package/deps/simdutf/benchmarks/competition/u8u16/src/xml_error.h +167 -0
  119. package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.c +288 -0
  120. package/deps/simdutf/benchmarks/competition/u8u16/src/xmldecl.h +117 -0
  121. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_g4.c +2 -0
  122. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_mmx.c +2 -0
  123. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4.c +3 -0
  124. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_p4_ideal.c +2 -0
  125. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_spu.c +2 -0
  126. package/deps/simdutf/benchmarks/competition/u8u16/u8u16_ssse3.c +3 -0
  127. package/deps/simdutf/benchmarks/competition/u8u16/x8x16_p4.c +2 -0
  128. package/deps/simdutf/benchmarks/competition/utf8lut/LICENSE +23 -0
  129. package/deps/simdutf/benchmarks/competition/utf8lut/data/test_minimal.txt +44 -0
  130. package/deps/simdutf/benchmarks/competition/utf8lut/readme.md +106 -0
  131. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.cmd +11 -0
  132. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_clang_corr_tests.sh +13 -0
  133. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_corr_tests.sh +13 -0
  134. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_example.sh +13 -0
  135. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_file_conv.sh +14 -0
  136. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_lib.sh +11 -0
  137. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_gcc_iconv_sample.sh +8 -0
  138. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_corr_tests.cmd +12 -0
  139. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_example.cmd +13 -0
  140. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_file_conv.cmd +14 -0
  141. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_lib.cmd +11 -0
  142. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_mingw_iconv_sample.cmd +8 -0
  143. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_corr_tests.cmd +11 -0
  144. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_example.cmd +12 -0
  145. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_file_conv.cmd +13 -0
  146. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_lib.cmd +10 -0
  147. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/build_msvc_iconv_sample.cmd +9 -0
  148. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/html_table.py +25 -0
  149. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/measure.py +94 -0
  150. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/resize.py +20 -0
  151. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_all.cmd +2 -0
  152. package/deps/simdutf/benchmarks/competition/utf8lut/scripts/wipe_interm.cmd +1 -0
  153. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/CustomMemcpy.h +75 -0
  154. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/PerfDefs.h +47 -0
  155. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.cpp +17 -0
  156. package/deps/simdutf/benchmarks/competition/utf8lut/src/base/Timing.h +76 -0
  157. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/AllProcessors.cpp +35 -0
  158. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.cpp +117 -0
  159. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BaseBufferProcessor.h +210 -0
  160. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferDecoder.h +158 -0
  161. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/BufferEncoder.h +104 -0
  162. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorPlugins.h +334 -0
  163. package/deps/simdutf/benchmarks/competition/utf8lut/src/buffer/ProcessorSelector.h +186 -0
  164. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.cpp +140 -0
  165. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderLut.h +42 -0
  166. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/DecoderProcess.h +100 -0
  167. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/Dfa.h +57 -0
  168. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.cpp +85 -0
  169. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderLut.h +27 -0
  170. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/EncoderProcess.h +126 -0
  171. package/deps/simdutf/benchmarks/competition/utf8lut/src/core/ProcessTrivial.h +108 -0
  172. package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.cpp +139 -0
  173. package/deps/simdutf/benchmarks/competition/utf8lut/src/iconv/iconv.h +74 -0
  174. package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.cpp +65 -0
  175. package/deps/simdutf/benchmarks/competition/utf8lut/src/message/MessageConverter.h +91 -0
  176. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/CorrectnessTests.cpp +772 -0
  177. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/Example.cpp +12 -0
  178. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/FileConverter.cpp +486 -0
  179. package/deps/simdutf/benchmarks/competition/utf8lut/src/tests/iconv_sample.c +162 -0
  180. package/deps/simdutf/benchmarks/competition/utf8lut/src/utf8lut.h +15 -0
  181. package/deps/simdutf/benchmarks/competition/utf8sse4/fromutf8-sse.cpp +292 -0
  182. package/deps/simdutf/benchmarks/competition/utfcpp/LICENSE +23 -0
  183. package/deps/simdutf/benchmarks/competition/utfcpp/README.md +1503 -0
  184. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/checked.h +335 -0
  185. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/core.h +338 -0
  186. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp11.h +103 -0
  187. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/cpp17.h +103 -0
  188. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8/unchecked.h +274 -0
  189. package/deps/simdutf/benchmarks/competition/utfcpp/source/utf8.h +34 -0
  190. package/deps/simdutf/benchmarks/dataset/README.md +155 -0
  191. package/deps/simdutf/benchmarks/dataset/emoji.txt +204 -0
  192. package/deps/simdutf/benchmarks/dataset/scripts/utf8type.py +40 -0
  193. package/deps/simdutf/benchmarks/dataset/wikipedia_mars/Makefile +80 -0
  194. package/deps/simdutf/benchmarks/dataset/wikipedia_mars/convert_to_utf6.py +20 -0
  195. package/deps/simdutf/benchmarks/find/CMakeLists.txt +6 -0
  196. package/deps/simdutf/benchmarks/find/findbenchmark.cpp +63 -0
  197. package/deps/simdutf/benchmarks/find/findbenchmarker.h +46 -0
  198. package/deps/simdutf/benchmarks/shortbench.cpp +555 -0
  199. package/deps/simdutf/benchmarks/src/CMakeLists.txt +52 -0
  200. package/deps/simdutf/benchmarks/src/apple_arm_events.h +1104 -0
  201. package/deps/simdutf/benchmarks/src/benchmark.cpp +3899 -0
  202. package/deps/simdutf/benchmarks/src/benchmark.h +317 -0
  203. package/deps/simdutf/benchmarks/src/benchmark_base.cpp +144 -0
  204. package/deps/simdutf/benchmarks/src/benchmark_base.h +98 -0
  205. package/deps/simdutf/benchmarks/src/cmdline.cpp +176 -0
  206. package/deps/simdutf/benchmarks/src/cmdline.h +35 -0
  207. package/deps/simdutf/benchmarks/src/event_counter.h +162 -0
  208. package/deps/simdutf/benchmarks/src/linux-perf-events.h +104 -0
  209. package/deps/simdutf/benchmarks/stream.cpp +209 -0
  210. package/deps/simdutf/benchmarks/threaded.cpp +123 -0
  211. package/deps/simdutf/cmake/CPM.cmake +1363 -0
  212. package/deps/simdutf/cmake/JoinPaths.cmake +23 -0
  213. package/deps/simdutf/cmake/add_cpp_test.cmake +68 -0
  214. package/deps/simdutf/cmake/simdutf-config.cmake.in +2 -0
  215. package/deps/simdutf/cmake/simdutf-flags.cmake +26 -0
  216. package/deps/simdutf/cmake/toolchains-ci/riscv64-linux-gnu.cmake +4 -0
  217. package/deps/simdutf/cmake/toolchains-dev/README.md +32 -0
  218. package/deps/simdutf/cmake/toolchains-dev/aarch64.cmake +14 -0
  219. package/deps/simdutf/cmake/toolchains-dev/loongarch64.cmake +22 -0
  220. package/deps/simdutf/cmake/toolchains-dev/powerpc64.cmake +16 -0
  221. package/deps/simdutf/cmake/toolchains-dev/powerpc64le.cmake +16 -0
  222. package/deps/simdutf/cmake/toolchains-dev/riscv64.cmake +16 -0
  223. package/deps/simdutf/cmake/toolchains-dev/rvv-spike.cmake +38 -0
  224. package/deps/simdutf/doc/avx512.png +0 -0
  225. package/deps/simdutf/doc/logo.png +0 -0
  226. package/deps/simdutf/doc/logo.svg +165 -0
  227. package/deps/simdutf/doc/node2023.png +0 -0
  228. package/deps/simdutf/doc/shortinput.md +78 -0
  229. package/deps/simdutf/doc/utf16utf8.png +0 -0
  230. package/deps/simdutf/doc/utf8utf16.png +0 -0
  231. package/deps/simdutf/doc/widelogo.png +0 -0
  232. package/deps/simdutf/doxygen.py +50 -0
  233. package/deps/simdutf/fuzz/.clang-format +9 -0
  234. package/deps/simdutf/fuzz/CMakeLists.txt +45 -0
  235. package/deps/simdutf/fuzz/README.md +168 -0
  236. package/deps/simdutf/fuzz/atomic_base64.cpp +448 -0
  237. package/deps/simdutf/fuzz/base64.cpp +278 -0
  238. package/deps/simdutf/fuzz/build.sh +83 -0
  239. package/deps/simdutf/fuzz/conversion.cpp +669 -0
  240. package/deps/simdutf/fuzz/helpers/.clang-format-ignore +1 -0
  241. package/deps/simdutf/fuzz/helpers/common.h +135 -0
  242. package/deps/simdutf/fuzz/helpers/nameof.hpp +1258 -0
  243. package/deps/simdutf/fuzz/main.cpp +72 -0
  244. package/deps/simdutf/fuzz/minimize_and_cleanse.sh +87 -0
  245. package/deps/simdutf/fuzz/misc.cpp +216 -0
  246. package/deps/simdutf/fuzz/random_fuzz.sh +154 -0
  247. package/deps/simdutf/fuzz/roundtrip.cpp +588 -0
  248. package/deps/simdutf/fuzz/safe_conversion.cpp +104 -0
  249. package/deps/simdutf/include/simdutf/avx512.h +79 -0
  250. package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  251. package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  252. package/deps/simdutf/include/simdutf/common_defs.h +186 -0
  253. package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  254. package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  255. package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  256. package/deps/simdutf/include/simdutf/error.h +126 -0
  257. package/deps/simdutf/include/simdutf/implementation.h +7081 -0
  258. package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  259. package/deps/simdutf/include/simdutf/portability.h +285 -0
  260. package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  261. package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  262. package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  263. package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  264. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  265. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  266. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  267. package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  268. package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  269. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  270. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  271. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  272. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  273. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  274. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  275. package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  276. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  277. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  278. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  279. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  280. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  281. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  282. package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  283. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  284. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  285. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  286. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  287. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  288. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  289. package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  290. package/deps/simdutf/include/simdutf.h +26 -0
  291. package/deps/simdutf/include/simdutf_c.h +342 -0
  292. package/deps/simdutf/riscv/Dockerfile +16 -0
  293. package/deps/simdutf/riscv/README.md +24 -0
  294. package/deps/simdutf/riscv/remove-docker-station +8 -0
  295. package/deps/simdutf/riscv/run-docker-station +31 -0
  296. package/deps/simdutf/scripts/.flake8 +2 -0
  297. package/deps/simdutf/scripts/Makefile +2 -0
  298. package/deps/simdutf/scripts/README_ADD_FUNCTION.md +49 -0
  299. package/deps/simdutf/scripts/add_function.py +330 -0
  300. package/deps/simdutf/scripts/amalgamation_tests.py +156 -0
  301. package/deps/simdutf/scripts/base64/Makefile +2 -0
  302. package/deps/simdutf/scripts/base64/README.md +2 -0
  303. package/deps/simdutf/scripts/base64/avx512.py +76 -0
  304. package/deps/simdutf/scripts/base64/neon_decode.py +143 -0
  305. package/deps/simdutf/scripts/base64/neon_generate_lut.py +101 -0
  306. package/deps/simdutf/scripts/base64/sse.py +252 -0
  307. package/deps/simdutf/scripts/base64/sseregular.py +160 -0
  308. package/deps/simdutf/scripts/base64/sseurl.py +283 -0
  309. package/deps/simdutf/scripts/base64/table.py +59 -0
  310. package/deps/simdutf/scripts/base64bench_print.py +145 -0
  311. package/deps/simdutf/scripts/benchmark-all.py +119 -0
  312. package/deps/simdutf/scripts/benchmark_print.py +324 -0
  313. package/deps/simdutf/scripts/check_feature_macros.py +156 -0
  314. package/deps/simdutf/scripts/check_typos.sh +13 -0
  315. package/deps/simdutf/scripts/clang_format.sh +35 -0
  316. package/deps/simdutf/scripts/clang_format_docker.sh +38 -0
  317. package/deps/simdutf/scripts/common.py +24 -0
  318. package/deps/simdutf/scripts/compilation_benchmark.py +55 -0
  319. package/deps/simdutf/scripts/compile_many_variations.sh +64 -0
  320. package/deps/simdutf/scripts/create_latex_table.py +62 -0
  321. package/deps/simdutf/scripts/docker/Dockerfile +14 -0
  322. package/deps/simdutf/scripts/docker/Makefile +9 -0
  323. package/deps/simdutf/scripts/docker/README.md +30 -0
  324. package/deps/simdutf/scripts/docker/llvm.gpg +0 -0
  325. package/deps/simdutf/scripts/ppc64_convert_utf16_to_utf8.py +155 -0
  326. package/deps/simdutf/scripts/prepare_doxygen.sh +21 -0
  327. package/deps/simdutf/scripts/release.py +197 -0
  328. package/deps/simdutf/scripts/shortinputplots.py +97 -0
  329. package/deps/simdutf/scripts/sse_convert_utf16_to_utf8.py +422 -0
  330. package/deps/simdutf/scripts/sse_convert_utf32_to_utf16.py +105 -0
  331. package/deps/simdutf/scripts/sse_utf8_utf16_decode.py +186 -0
  332. package/deps/simdutf/scripts/sse_validate_utf16le_proof.py +137 -0
  333. package/deps/simdutf/scripts/sse_validate_utf16le_testcases.py +129 -0
  334. package/deps/simdutf/scripts/table.py +207 -0
  335. package/deps/simdutf/scripts/tests/new.txt +33 -0
  336. package/deps/simdutf/scripts/tests/old.txt +33 -0
  337. package/deps/simdutf/scripts/tests/results.txt +272 -0
  338. package/deps/simdutf/simdutf.pc.in +11 -0
  339. package/deps/simdutf/singleheader/.flake8 +2 -0
  340. package/deps/simdutf/singleheader/CMakeLists.txt +64 -0
  341. package/deps/simdutf/singleheader/README-dev.md +81 -0
  342. package/deps/simdutf/singleheader/README.md +19 -0
  343. package/deps/simdutf/singleheader/amalgamate.py +513 -0
  344. package/deps/simdutf/singleheader/amalgamation_demo.c +59 -0
  345. package/deps/simdutf/singleheader/amalgamation_demo.cpp +54 -0
  346. package/deps/simdutf/singleheader/test-features.py +262 -0
  347. package/deps/simdutf/src/CMakeLists.txt +78 -0
  348. package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  349. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  350. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  351. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  352. package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  353. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  354. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  355. package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  356. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  357. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  358. package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  359. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  360. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  361. package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  362. package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  363. package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  364. package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  365. package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  366. package/deps/simdutf/src/encoding_types.cpp +67 -0
  367. package/deps/simdutf/src/error.cpp +3 -0
  368. package/deps/simdutf/src/fallback/implementation.cpp +589 -0
  369. package/deps/simdutf/src/generic/ascii_validation.h +50 -0
  370. package/deps/simdutf/src/generic/base64.h +233 -0
  371. package/deps/simdutf/src/generic/base64lengths.h +63 -0
  372. package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  373. package/deps/simdutf/src/generic/find.h +75 -0
  374. package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  375. package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  376. package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  377. package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  378. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  379. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  380. package/deps/simdutf/src/generic/utf16.h +73 -0
  381. package/deps/simdutf/src/generic/utf32.h +136 -0
  382. package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  383. package/deps/simdutf/src/generic/utf8.h +92 -0
  384. package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  385. package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  386. package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  387. package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  388. package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  389. package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  390. package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  391. package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  392. package/deps/simdutf/src/generic/validate_utf16.h +164 -0
  393. package/deps/simdutf/src/generic/validate_utf32.h +99 -0
  394. package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  395. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  396. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  397. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  398. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  399. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  400. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  401. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  402. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  403. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  404. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  405. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  406. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  407. package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  408. package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  409. package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  410. package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  411. package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  412. package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  413. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  414. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  415. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  416. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  417. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  418. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  419. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  420. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  421. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  422. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  423. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  424. package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  425. package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  426. package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  427. package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  428. package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  429. package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  430. package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  431. package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  432. package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  433. package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  434. package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  435. package/deps/simdutf/src/implementation.cpp +2526 -0
  436. package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  437. package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  438. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  439. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  440. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  441. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  442. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  443. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  444. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  445. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  446. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  447. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  448. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  449. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  450. package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  451. package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  452. package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  453. package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  454. package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  455. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  456. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  457. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  458. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  459. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  460. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  461. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  462. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  463. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  464. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  465. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  466. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  467. package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  468. package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  469. package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  470. package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  471. package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  472. package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  473. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  474. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  475. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  476. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  477. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  478. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  479. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  480. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  481. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  482. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  483. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  484. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  485. package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  486. package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  487. package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  488. package/deps/simdutf/src/ppc64/templates.cpp +91 -0
  489. package/deps/simdutf/src/rvv/implementation.cpp +138 -0
  490. package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  491. package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  492. package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  493. package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  494. package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  495. package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  496. package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  497. package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  498. package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  499. package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  500. package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  501. package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  502. package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  503. package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  504. package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  505. package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  506. package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  507. package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  508. package/deps/simdutf/src/simdutf/arm64.h +43 -0
  509. package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  510. package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  511. package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  512. package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  513. package/deps/simdutf/src/simdutf/fallback.h +42 -0
  514. package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  515. package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  516. package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  517. package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  518. package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  519. package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  520. package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  521. package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  522. package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  523. package/deps/simdutf/src/simdutf/haswell.h +63 -0
  524. package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  525. package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  526. package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  527. package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  528. package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  529. package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  530. package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  531. package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  532. package/deps/simdutf/src/simdutf/icelake.h +81 -0
  533. package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  534. package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  535. package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  536. package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  537. package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  538. package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  539. package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  540. package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  541. package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  542. package/deps/simdutf/src/simdutf/lasx.h +49 -0
  543. package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  544. package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  545. package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  546. package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  547. package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  548. package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  549. package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  550. package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  551. package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  552. package/deps/simdutf/src/simdutf/lsx.h +52 -0
  553. package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  554. package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  555. package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  556. package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  557. package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  558. package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  559. package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  560. package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  561. package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  562. package/deps/simdutf/src/simdutf/ppc64.h +40 -0
  563. package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  564. package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  565. package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  566. package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  567. package/deps/simdutf/src/simdutf/rvv.h +41 -0
  568. package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  569. package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  570. package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  571. package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  572. package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  573. package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  574. package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  575. package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  576. package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  577. package/deps/simdutf/src/simdutf/westmere.h +59 -0
  578. package/deps/simdutf/src/simdutf.cpp +152 -0
  579. package/deps/simdutf/src/simdutf_c.cpp +525 -0
  580. package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  581. package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  582. package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  583. package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  584. package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  585. package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  586. package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  587. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  588. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  589. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  590. package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  591. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  592. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  593. package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  594. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  595. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  596. package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  597. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  598. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  599. package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  600. package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  601. package/deps/simdutf/tests/CMakeLists.txt +483 -0
  602. package/deps/simdutf/tests/atomic_base64_tests.cpp +2845 -0
  603. package/deps/simdutf/tests/base64_tests.cpp +3617 -0
  604. package/deps/simdutf/tests/basic_fuzzer.cpp +805 -0
  605. package/deps/simdutf/tests/bele_tests.cpp +182 -0
  606. package/deps/simdutf/tests/constexpr_base64_tests.cpp +387 -0
  607. package/deps/simdutf/tests/convert_latin1_to_utf16be_tests.cpp +52 -0
  608. package/deps/simdutf/tests/convert_latin1_to_utf16le_tests.cpp +80 -0
  609. package/deps/simdutf/tests/convert_latin1_to_utf32_tests.cpp +66 -0
  610. package/deps/simdutf/tests/convert_latin1_to_utf8_tests.cpp +120 -0
  611. package/deps/simdutf/tests/convert_utf16_to_utf8_safe_tests.cpp +203 -0
  612. package/deps/simdutf/tests/convert_utf16_to_utf8_with_replacement_tests.cpp +276 -0
  613. package/deps/simdutf/tests/convert_utf16be_to_latin1_tests.cpp +109 -0
  614. package/deps/simdutf/tests/convert_utf16be_to_latin1_tests_with_errors.cpp +136 -0
  615. package/deps/simdutf/tests/convert_utf16be_to_utf32_tests.cpp +193 -0
  616. package/deps/simdutf/tests/convert_utf16be_to_utf32_with_errors_tests.cpp +381 -0
  617. package/deps/simdutf/tests/convert_utf16be_to_utf8_tests.cpp +259 -0
  618. package/deps/simdutf/tests/convert_utf16be_to_utf8_with_errors_tests.cpp +266 -0
  619. package/deps/simdutf/tests/convert_utf16le_to_latin1_tests.cpp +148 -0
  620. package/deps/simdutf/tests/convert_utf16le_to_latin1_tests_with_errors.cpp +176 -0
  621. package/deps/simdutf/tests/convert_utf16le_to_utf32_tests.cpp +213 -0
  622. package/deps/simdutf/tests/convert_utf16le_to_utf32_with_errors_tests.cpp +318 -0
  623. package/deps/simdutf/tests/convert_utf16le_to_utf8_tests.cpp +343 -0
  624. package/deps/simdutf/tests/convert_utf16le_to_utf8_with_errors_tests.cpp +271 -0
  625. package/deps/simdutf/tests/convert_utf32_to_latin1_tests.cpp +111 -0
  626. package/deps/simdutf/tests/convert_utf32_to_latin1_with_errors_tests.cpp +96 -0
  627. package/deps/simdutf/tests/convert_utf32_to_utf16be_tests.cpp +148 -0
  628. package/deps/simdutf/tests/convert_utf32_to_utf16be_with_errors_tests.cpp +192 -0
  629. package/deps/simdutf/tests/convert_utf32_to_utf16le_tests.cpp +166 -0
  630. package/deps/simdutf/tests/convert_utf32_to_utf16le_with_errors_tests.cpp +215 -0
  631. package/deps/simdutf/tests/convert_utf32_to_utf8_tests.cpp +181 -0
  632. package/deps/simdutf/tests/convert_utf32_to_utf8_with_errors_tests.cpp +261 -0
  633. package/deps/simdutf/tests/convert_utf8_to_latin1_tests.cpp +516 -0
  634. package/deps/simdutf/tests/convert_utf8_to_latin1_with_errors_tests.cpp +579 -0
  635. package/deps/simdutf/tests/convert_utf8_to_utf16be_tests.cpp +412 -0
  636. package/deps/simdutf/tests/convert_utf8_to_utf16be_with_errors_tests.cpp +480 -0
  637. package/deps/simdutf/tests/convert_utf8_to_utf16le_tests.cpp +671 -0
  638. package/deps/simdutf/tests/convert_utf8_to_utf16le_with_errors_tests.cpp +455 -0
  639. package/deps/simdutf/tests/convert_utf8_to_utf32_tests.cpp +1204 -0
  640. package/deps/simdutf/tests/convert_utf8_to_utf32_with_errors_tests.cpp +337 -0
  641. package/deps/simdutf/tests/convert_valid_utf16be_to_latin1_tests.cpp +37 -0
  642. package/deps/simdutf/tests/convert_valid_utf16be_to_utf32_tests.cpp +97 -0
  643. package/deps/simdutf/tests/convert_valid_utf16be_to_utf8_tests.cpp +126 -0
  644. package/deps/simdutf/tests/convert_valid_utf16le_to_latin1_tests.cpp +71 -0
  645. package/deps/simdutf/tests/convert_valid_utf16le_to_utf32_tests.cpp +122 -0
  646. package/deps/simdutf/tests/convert_valid_utf16le_to_utf8_tests.cpp +244 -0
  647. package/deps/simdutf/tests/convert_valid_utf32_to_latin1_tests.cpp +49 -0
  648. package/deps/simdutf/tests/convert_valid_utf32_to_utf16be_tests.cpp +92 -0
  649. package/deps/simdutf/tests/convert_valid_utf32_to_utf16le_tests.cpp +114 -0
  650. package/deps/simdutf/tests/convert_valid_utf32_to_utf8_tests.cpp +109 -0
  651. package/deps/simdutf/tests/convert_valid_utf8_to_latin1_tests.cpp +84 -0
  652. package/deps/simdutf/tests/convert_valid_utf8_to_utf16be_tests.cpp +124 -0
  653. package/deps/simdutf/tests/convert_valid_utf8_to_utf16le_tests.cpp +221 -0
  654. package/deps/simdutf/tests/convert_valid_utf8_to_utf32_tests.cpp +155 -0
  655. package/deps/simdutf/tests/count_utf16be.cpp +64 -0
  656. package/deps/simdutf/tests/count_utf16le.cpp +61 -0
  657. package/deps/simdutf/tests/count_utf8.cpp +87 -0
  658. package/deps/simdutf/tests/detect_encodings_tests.cpp +312 -0
  659. package/deps/simdutf/tests/embed/valid_utf8.txt +1 -0
  660. package/deps/simdutf/tests/embed_tests.cpp +22 -0
  661. package/deps/simdutf/tests/find_tests.cpp +77 -0
  662. package/deps/simdutf/tests/fixed_string_tests.cpp +153 -0
  663. package/deps/simdutf/tests/helpers/CMakeLists.txt +25 -0
  664. package/deps/simdutf/tests/helpers/compiletime_conversions.h +222 -0
  665. package/deps/simdutf/tests/helpers/fixed_string.h +267 -0
  666. package/deps/simdutf/tests/helpers/random_int.cpp +30 -0
  667. package/deps/simdutf/tests/helpers/random_int.h +39 -0
  668. package/deps/simdutf/tests/helpers/random_utf16.cpp +123 -0
  669. package/deps/simdutf/tests/helpers/random_utf16.h +52 -0
  670. package/deps/simdutf/tests/helpers/random_utf32.cpp +41 -0
  671. package/deps/simdutf/tests/helpers/random_utf32.h +40 -0
  672. package/deps/simdutf/tests/helpers/random_utf8.cpp +93 -0
  673. package/deps/simdutf/tests/helpers/random_utf8.h +36 -0
  674. package/deps/simdutf/tests/helpers/test.cpp +231 -0
  675. package/deps/simdutf/tests/helpers/test.h +193 -0
  676. package/deps/simdutf/tests/helpers/transcode_test_base.cpp +1257 -0
  677. package/deps/simdutf/tests/helpers/transcode_test_base.h +683 -0
  678. package/deps/simdutf/tests/helpers/utf16.h +27 -0
  679. package/deps/simdutf/tests/installation_tests/find/CMakeLists.txt +43 -0
  680. package/deps/simdutf/tests/installation_tests/from_fetch/CMakeLists.txt +47 -0
  681. package/deps/simdutf/tests/internal_tests.cpp +27 -0
  682. package/deps/simdutf/tests/null_safety_tests.cpp +94 -0
  683. package/deps/simdutf/tests/random_fuzzer.cpp +779 -0
  684. package/deps/simdutf/tests/readme_tests.cpp +274 -0
  685. package/deps/simdutf/tests/reference/CMakeLists.txt +23 -0
  686. package/deps/simdutf/tests/reference/decode_utf16.h +81 -0
  687. package/deps/simdutf/tests/reference/decode_utf32.h +47 -0
  688. package/deps/simdutf/tests/reference/encode_latin1.cpp +1 -0
  689. package/deps/simdutf/tests/reference/encode_latin1.h +32 -0
  690. package/deps/simdutf/tests/reference/encode_utf16.cpp +49 -0
  691. package/deps/simdutf/tests/reference/encode_utf16.h +20 -0
  692. package/deps/simdutf/tests/reference/encode_utf32.cpp +1 -0
  693. package/deps/simdutf/tests/reference/encode_utf32.h +36 -0
  694. package/deps/simdutf/tests/reference/encode_utf8.cpp +1 -0
  695. package/deps/simdutf/tests/reference/encode_utf8.h +40 -0
  696. package/deps/simdutf/tests/reference/validate_utf16.cpp +60 -0
  697. package/deps/simdutf/tests/reference/validate_utf16.h +14 -0
  698. package/deps/simdutf/tests/reference/validate_utf16_to_latin1.cpp +35 -0
  699. package/deps/simdutf/tests/reference/validate_utf16_to_latin1.h +13 -0
  700. package/deps/simdutf/tests/reference/validate_utf32.cpp +27 -0
  701. package/deps/simdutf/tests/reference/validate_utf32.h +12 -0
  702. package/deps/simdutf/tests/reference/validate_utf32_to_latin1.cpp +27 -0
  703. package/deps/simdutf/tests/reference/validate_utf32_to_latin1.h +12 -0
  704. package/deps/simdutf/tests/reference/validate_utf8.cpp +82 -0
  705. package/deps/simdutf/tests/reference/validate_utf8.h +11 -0
  706. package/deps/simdutf/tests/reference/validate_utf8_to_latin1.cpp +43 -0
  707. package/deps/simdutf/tests/reference/validate_utf8_to_latin1.h +12 -0
  708. package/deps/simdutf/tests/select_implementation.cpp +43 -0
  709. package/deps/simdutf/tests/simdutf_c_tests.cpp +244 -0
  710. package/deps/simdutf/tests/span_tests.cpp +401 -0
  711. package/deps/simdutf/tests/special_tests.cpp +559 -0
  712. package/deps/simdutf/tests/straight_c_test.c +187 -0
  713. package/deps/simdutf/tests/text_encoding_tests.cpp +77 -0
  714. package/deps/simdutf/tests/to_well_formed_utf16_tests.cpp +377 -0
  715. package/deps/simdutf/tests/utf8_length_from_utf16_tests.cpp +202 -0
  716. package/deps/simdutf/tests/validate_ascii_basic_tests.cpp +165 -0
  717. package/deps/simdutf/tests/validate_ascii_with_errors_tests.cpp +77 -0
  718. package/deps/simdutf/tests/validate_utf16be_basic_tests.cpp +175 -0
  719. package/deps/simdutf/tests/validate_utf16be_with_errors_tests.cpp +188 -0
  720. package/deps/simdutf/tests/validate_utf16le_basic_tests.cpp +268 -0
  721. package/deps/simdutf/tests/validate_utf16le_with_errors_tests.cpp +274 -0
  722. package/deps/simdutf/tests/validate_utf32_basic_tests.cpp +92 -0
  723. package/deps/simdutf/tests/validate_utf32_with_errors_tests.cpp +114 -0
  724. package/deps/simdutf/tests/validate_utf8_basic_tests.cpp +178 -0
  725. package/deps/simdutf/tests/validate_utf8_brute_force_tests.cpp +88 -0
  726. package/deps/simdutf/tests/validate_utf8_puzzler_tests.cpp +33 -0
  727. package/deps/simdutf/tests/validate_utf8_with_errors_tests.cpp +228 -0
  728. package/deps/simdutf/tools/CMakeLists.txt +85 -0
  729. package/deps/simdutf/tools/fastbase64.cpp +250 -0
  730. package/deps/simdutf/tools/sutf.cpp +556 -0
  731. package/deps/simdutf/tools/sutf.h +40 -0
  732. package/package.json +2 -2
@@ -0,0 +1,291 @@
1
+ // Convert up to 16 bytes from utf8 to utf16 using a mask indicating the
2
+ // end of the code points. Only the least significant 12 bits of the mask
3
+ // are accessed.
4
+ // It returns how many bytes were consumed (up to 16, usually 12).
5
+ template <endianness big_endian>
6
+ size_t convert_masked_utf8_to_utf16(const char *input,
7
+ uint64_t utf8_end_of_code_point_mask,
8
+ char16_t *&utf16_output) {
9
+ // we use an approach where we try to process up to 12 input bytes.
10
+ // Why 12 input bytes and not 16? Because we are concerned with the size of
11
+ // the lookup tables. Also 12 is nicely divisible by two and three.
12
+ //
13
+ __m128i in = __lsx_vld(reinterpret_cast<const uint8_t *>(input), 0);
14
+ const uint16_t input_utf8_end_of_code_point_mask =
15
+ utf8_end_of_code_point_mask & 0xfff;
16
+ //
17
+ // Optimization note: our main path below is load-latency dependent. Thus it
18
+ // is maybe beneficial to have fast paths that depend on branch prediction but
19
+ // have less latency. This results in more instructions but, potentially, also
20
+ // higher speeds.
21
+
22
+ // We first try a few fast paths.
23
+ // The obvious first test is ASCII, which actually consumes the full 16.
24
+ if ((utf8_end_of_code_point_mask & 0xFFFF) == 0xFFFF) {
25
+ // We process in chunks of 16 bytes
26
+ // The routine in simd.h is reused.
27
+ simd8<int8_t> temp{in};
28
+ temp.store_ascii_as_utf16<big_endian>(utf16_output);
29
+ utf16_output += 16; // We wrote 16 16-bit characters.
30
+ return 16; // We consumed 16 bytes.
31
+ }
32
+
33
+ uint64_t buffer[2];
34
+ // 3 byte sequences are the next most common, as seen in CJK, which has long
35
+ // sequences of these.
36
+ if (input_utf8_end_of_code_point_mask == 0x924) {
37
+ // We want to take 4 3-byte UTF-8 code units and turn them into 4 2-byte
38
+ // UTF-16 code units.
39
+ __m128i composed = convert_utf8_3_byte_to_utf16(in);
40
+ // Byte swap if necessary
41
+ if simdutf_constexpr (!match_system(big_endian)) {
42
+ composed = lsx_swap_bytes(composed);
43
+ }
44
+
45
+ __lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
46
+ utf16_output += 4; // We wrote 4 16-bit characters.
47
+ return 12; // We consumed 12 bytes.
48
+ }
49
+
50
+ // 2 byte sequences occur in short bursts in languages like Greek and Russian.
51
+ if ((utf8_end_of_code_point_mask & 0xFFFF) == 0xAAAA) {
52
+ // We want to take 6 2-byte UTF-8 code units and turn them into 6 2-byte
53
+ // UTF-16 code units.
54
+ __m128i composed = convert_utf8_2_byte_to_utf16(in);
55
+ // Byte swap if necessary
56
+ if simdutf_constexpr (!match_system(big_endian)) {
57
+ composed = lsx_swap_bytes(composed);
58
+ }
59
+
60
+ __lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
61
+ utf16_output += 6; // We wrote 6 16-bit characters.
62
+ return 12; // We consumed 12 bytes.
63
+ }
64
+
65
+ /// We do not have a fast path available, or the fast path is unimportant, so
66
+ /// we fallback.
67
+ const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex
68
+ [input_utf8_end_of_code_point_mask][0];
69
+
70
+ const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex
71
+ [input_utf8_end_of_code_point_mask][1];
72
+ const __m128i zero = __lsx_vldi(0);
73
+ if (idx < 64) {
74
+ // SIX (6) input code-code units
75
+ // Convert to UTF-16
76
+ __m128i composed = convert_utf8_1_to_2_byte_to_utf16(in, idx);
77
+ // Byte swap if necessary
78
+ if simdutf_constexpr (!match_system(big_endian)) {
79
+ composed = lsx_swap_bytes(composed);
80
+ }
81
+ // Store
82
+ __lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
83
+ utf16_output += 6; // We wrote 6 16-bit characters.
84
+ return consumed;
85
+ } else if (idx < 145) {
86
+ // FOUR (4) input code-code units
87
+ // UTF-16 and UTF-32 use similar algorithms, but UTF-32 skips the narrowing.
88
+ __m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
89
+ simdutf::tables::utf8_to_utf16::shufutf8[idx]),
90
+ 0);
91
+ // XXX: depending on the system scalar instructions might be faster.
92
+ // 1 byte: 00000000 00000000 0ccccccc
93
+ // 2 byte: 00000000 110bbbbb 10cccccc
94
+ // 3 byte: 1110aaaa 10bbbbbb 10cccccc
95
+ sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
96
+ __m128i perm = __lsx_vshuf_b(zero, in, sh);
97
+ // 1 byte: 00000000 0ccccccc
98
+ // 2 byte: xx0bbbbb x0cccccc
99
+ // 3 byte: xxbbbbbb x0cccccc
100
+ __m128i lowperm = __lsx_vpickev_h(perm, perm);
101
+ // 1 byte: 00000000 00000000
102
+ // 2 byte: 00000000 00000000
103
+ // 3 byte: 00000000 1110aaaa
104
+ __m128i highperm = __lsx_vpickod_h(perm, perm);
105
+ // 3 byte: aaaa0000 00000000
106
+ highperm = __lsx_vslli_h(highperm, 12);
107
+ // ASCII
108
+ // 1 byte: 00000000 0ccccccc
109
+ // 2+byte: 00000000 00cccccc
110
+ __m128i ascii = __lsx_vand_v(lowperm, __lsx_vrepli_h(0x7f));
111
+ // 1 byte: 00000000 00000000
112
+ // 2 byte: xx0bbbbb 00000000
113
+ // 3 byte: xxbbbbbb 00000000
114
+ __m128i middlebyte = __lsx_vand_v(lowperm, lsx_splat_u16(0xFF00));
115
+ // 1 byte: 00000000 0ccccccc
116
+ // 2 byte: 0010bbbb bbcccccc
117
+ // 3 byte: 0010bbbb bbcccccc
118
+ __m128i composed = __lsx_vor_v(__lsx_vsrli_h(middlebyte, 2), ascii);
119
+
120
+ __m128i v0fff = __lsx_vreplgr2vr_h(uint16_t(0xfff));
121
+ // aaaabbbb bbcccccc
122
+ composed = __lsx_vbitsel_v(highperm, composed, v0fff);
123
+
124
+ if simdutf_constexpr (!match_system(big_endian)) {
125
+ composed = lsx_swap_bytes(composed);
126
+ }
127
+
128
+ __lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
129
+ utf16_output += 4; // We wrote 4 16-bit codepoints
130
+ return consumed;
131
+ } else if (idx < 209) {
132
+ // THREE (3) input code-code units
133
+ if (input_utf8_end_of_code_point_mask == 0x888) {
134
+ // We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte
135
+ // UTF-16 pairs. Generating surrogate pairs is a little tricky though, but
136
+ // it is easier when we can assume they are all pairs. This version does
137
+ // not use the LUT, but 4 byte sequences are less common and the overhead
138
+ // of the extra memory access is less important than the early branch
139
+ // overhead in shorter sequences.
140
+
141
+ __m128i expected_mask =
142
+ (__m128i)v16u8{0xf8, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0,
143
+ 0xf8, 0xc0, 0xc0, 0xc0, 0x0, 0x0, 0x0, 0x0};
144
+ __m128i expected =
145
+ (__m128i)v16u8{0xf0, 0x80, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80,
146
+ 0xf0, 0x80, 0x80, 0x80, 0x0, 0x0, 0x0, 0x0};
147
+ __m128i check = __lsx_vseq_b(__lsx_vand_v(in, expected_mask), expected);
148
+ if (__lsx_bz_b(check))
149
+ return 12;
150
+ // Swap byte pairs
151
+ // 10dddddd 10cccccc|10bbbbbb 11110aaa
152
+ // 10cccccc 10dddddd|11110aaa 10bbbbbb
153
+ __m128i swap = lsx_swap_bytes(in);
154
+ // Shift left 2 bits
155
+ // cccccc00 dddddd00 xxxxxxxx bbbbbb00
156
+ __m128i shift = __lsx_vslli_b(swap, 2);
157
+ // Create a magic number containing the low 2 bits of the trail surrogate
158
+ // and all the corrections needed to create the pair. UTF-8 4b prefix =
159
+ // -0x0000|0xF000 surrogate offset = -0x0000|0x0040 (0x10000 << 6)
160
+ // surrogate high = +0x0000|0xD800
161
+ // surrogate low = +0xDC00|0x0000
162
+ // -------------------------------
163
+ // = +0xDC00|0xE7C0
164
+ __m128i magic = __lsx_vreplgr2vr_w(uint32_t(0xDC00E7C0));
165
+ // Generate unadjusted trail surrogate minus lowest 2 bits
166
+ // xxxxxxxx xxxxxxxx|11110aaa bbbbbb00
167
+ __m128i trail = __lsx_vbitsel_v(shift, swap, lsx_splat_u32(0x0000ff00));
168
+ // Insert low 2 bits of trail surrogate to magic number for later
169
+ // 11011100 00000000 11100111 110000cc
170
+ __m128i magic_with_low_2 = __lsx_vor_v(__lsx_vsrli_w(shift, 30), magic);
171
+
172
+ // Generate lead surrogate
173
+ // xxxxcccc ccdddddd|xxxxxxxx xxxxxxxx
174
+ // 000000cc ccdddddd|xxxxxxxx xxxxxxxx
175
+ __m128i lead = __lsx_vbitsel_v(
176
+ __lsx_vsrli_h(__lsx_vand_v(shift, __lsx_vldi(0x3F)), 4), swap,
177
+ __lsx_vrepli_h(0x3f /* 0x003f*/));
178
+
179
+ // Blend pairs
180
+ // 000000cc ccdddddd|11110aaa bbbbbb00
181
+ __m128i blend = __lsx_vbitsel_v(lead, trail, lsx_splat_u32(0x0000FFFF));
182
+
183
+ // Add magic number to finish the result
184
+ // 110111CC CCDDDDDD|110110AA BBBBBBCC
185
+ __m128i composed = __lsx_vadd_h(blend, magic_with_low_2);
186
+ // Byte swap if necessary
187
+ if simdutf_constexpr (!match_system(big_endian)) {
188
+ composed = lsx_swap_bytes(composed);
189
+ }
190
+ // __lsx_vst(composed, reinterpret_cast<uint16_t *>(utf16_output), 0);
191
+ __lsx_vst(composed, reinterpret_cast<uint16_t *>(buffer), 0);
192
+ std::memcpy(utf16_output, buffer, 12);
193
+ utf16_output += 6; // We 3 32-bit surrogate pairs.
194
+ return 12; // We consumed 12 bytes.
195
+ }
196
+ // 3 1-4 byte sequences
197
+ __m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
198
+ simdutf::tables::utf8_to_utf16::shufutf8[idx]),
199
+ 0);
200
+ // 1 byte: 00000000 00000000 00000000 0ddddddd
201
+ // 3 byte: 00000000 00000000 110ccccc 10dddddd
202
+ // 3 byte: 00000000 1110bbbb 10cccccc 10dddddd
203
+ // 4 byte: 11110aaa 10bbbbbb 10cccccc 10dddddd
204
+ sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
205
+ __m128i perm = __lsx_vshuf_b(zero, in, sh);
206
+ // added to fix issue https://github.com/simdutf/simdutf/issues/514
207
+ // We only want to write 2 * 16-bit code units when that is actually what we
208
+ // have. Unfortunately, we cannot trust the input. So it is possible to get
209
+ // 0xff as an input byte and it should not result in a surrogate pair. We
210
+ // need to check for that.
211
+ uint32_t permbuffer[4];
212
+ __lsx_vst(perm, permbuffer, 0);
213
+ // Mask the low and middle bytes
214
+ // 00000000 00000000 00000000 0ddddddd
215
+ __m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_w(0x7f));
216
+ // Because the surrogates need more work, the high surrogate is computed
217
+ // first.
218
+ __m128i middlehigh = __lsx_vslli_w(perm, 2);
219
+ // 00000000 00000000 00cccccc 00000000
220
+ __m128i middlebyte = __lsx_vand_v(perm, lsx_splat_u32(0x00003F00));
221
+ // Start assembling the sequence. Since the 4th byte is in the same position
222
+ // as it would be in a surrogate and there is no dependency, shift left
223
+ // instead of right. 3 byte: 00000000 10bbbbxx xxxxxxxx xxxxxxxx 4 byte:
224
+ // 11110aaa bbbbbbxx xxxxxxxx xxxxxxxx
225
+ __m128i ab = __lsx_vbitsel_v(middlehigh, perm, lsx_splat_u32(0xFF000000));
226
+ // Top 16 bits contains the high ten bits of the surrogate pair before
227
+ // correction 3 byte: 00000000 10bbbbcc|cccc0000 00000000 4 byte: 11110aaa
228
+ // bbbbbbcc|cccc0000 00000000 - high 10 bits correct w/o correction
229
+ __m128i v_fffc0000 = __lsx_vreplgr2vr_w(uint32_t(0xFFFC0000));
230
+ __m128i abc = __lsx_vbitsel_v(__lsx_vslli_w(middlebyte, 4), ab, v_fffc0000);
231
+ // Combine the low 6 or 7 bits by a shift right accumulate
232
+ // 3 byte: 00000000 00000010|bbbbcccc ccdddddd - low 16 bits correct
233
+ // 4 byte: 00000011 110aaabb|bbbbcccc ccdddddd - low 10 bits correct w/o
234
+ // correction
235
+ __m128i composed = __lsx_vor_v(ascii, __lsx_vsrli_w(abc, 6));
236
+ // After this is for surrogates
237
+ // Blend the low and high surrogates
238
+ // 4 byte: 11110aaa bbbbbbcc|bbbbcccc ccdddddd
239
+ __m128i mixed = __lsx_vbitsel_v(abc, composed, lsx_splat_u32(0x0000FFFF));
240
+ // Clear the upper 6 bits of the low surrogate. Don't clear the upper bits
241
+ // yet as 0x10000 was not subtracted from the codepoint yet. 4 byte:
242
+ // 11110aaa bbbbbbcc|000000cc ccdddddd
243
+ __m128i v_ffff03ff = __lsx_vreplgr2vr_w(uint32_t(0xFFFF03FF));
244
+ __m128i masked_pair = __lsx_vand_v(mixed, v_ffff03ff);
245
+ // Correct the remaining UTF-8 prefix, surrogate offset, and add the
246
+ // surrogate prefixes in one magic 16-bit addition. similar magic number but
247
+ // without the continue byte adjust and halfword swapped UTF-8 4b prefix =
248
+ // -0xF000|0x0000 surrogate offset = -0x0040|0x0000 (0x10000 << 6)
249
+ // surrogate high = +0xD800|0x0000
250
+ // surrogate low = +0x0000|0xDC00
251
+ // -----------------------------------
252
+ // = +0xE7C0|0xDC00
253
+ __m128i magic = __lsx_vreplgr2vr_w(uint32_t(0xE7C0DC00));
254
+ // 4 byte: 110110AA BBBBBBCC|110111CC CCDDDDDD - surrogate pair complete
255
+ __m128i surrogates = __lsx_vadd_w(masked_pair, magic);
256
+ // If the high bit is 1 (s32 less than zero), this needs a surrogate pair
257
+ __m128i is_pair = __lsx_vslt_w(perm, zero);
258
+ // Select either the 4 byte surrogate pair or the 2 byte solo codepoint
259
+ // 3 byte: 0xxxxxxx xxxxxxxx|bbbbcccc ccdddddd
260
+ // 4 byte: 110110AA BBBBBBCC|110111CC CCDDDDDD
261
+ __m128i selected = __lsx_vbitsel_v(composed, surrogates, is_pair);
262
+ // Byte swap if necessary
263
+ if simdutf_constexpr (!match_system(big_endian)) {
264
+ selected = lsx_swap_bytes(selected);
265
+ }
266
+ // Attempting to shuffle and store would be complex, just scalarize.
267
+ uint32_t buffer_tmp[4];
268
+ __lsx_vst(selected, buffer_tmp, 0);
269
+ // Test for the top bit of the surrogate mask. Remove due to issue 514
270
+ // const uint32_t SURROGATE_MASK = match_system(big_endian) ? 0x80000000 :
271
+ // 0x00800000;
272
+ for (size_t i = 0; i < 3; i++) {
273
+ // Surrogate
274
+ // Used to be if (buffer[i] & SURROGATE_MASK) {
275
+ // See discussion above.
276
+ // patch for issue https://github.com/simdutf/simdutf/issues/514
277
+ if ((permbuffer[i] & 0xf8000000) == 0xf0000000) {
278
+ utf16_output[0] = uint16_t(buffer_tmp[i] >> 16);
279
+ utf16_output[1] = uint16_t(buffer_tmp[i] & 0xFFFF);
280
+ utf16_output += 2;
281
+ } else {
282
+ utf16_output[0] = uint16_t(buffer_tmp[i] & 0xFFFF);
283
+ utf16_output++;
284
+ }
285
+ }
286
+ return consumed;
287
+ } else {
288
+ // here we know that there is an error but we do not handle errors
289
+ return 12;
290
+ }
291
+ }
@@ -0,0 +1,179 @@
1
+ // Convert up to 12 bytes from utf8 to utf32 using a mask indicating the
2
+ // end of the code points. Only the least significant 12 bits of the mask
3
+ // are accessed.
4
+ // It returns how many bytes were consumed (up to 12).
5
+ size_t convert_masked_utf8_to_utf32(const char *input,
6
+ uint64_t utf8_end_of_code_point_mask,
7
+ char32_t *&utf32_out) {
8
+ // we use an approach where we try to process up to 12 input bytes.
9
+ // Why 12 input bytes and not 16? Because we are concerned with the size of
10
+ // the lookup tables. Also 12 is nicely divisible by two and three.
11
+ //
12
+ uint32_t *&utf32_output = reinterpret_cast<uint32_t *&>(utf32_out);
13
+ __m128i in = __lsx_vld(reinterpret_cast<const uint8_t *>(input), 0);
14
+ const uint16_t input_utf8_end_of_code_point_mask =
15
+ utf8_end_of_code_point_mask & 0xFFF;
16
+ //
17
+ // Optimization note: our main path below is load-latency dependent. Thus it
18
+ // is maybe beneficial to have fast paths that depend on branch prediction but
19
+ // have less latency. This results in more instructions but, potentially, also
20
+ // higher speeds.
21
+ //
22
+ // We first try a few fast paths.
23
+ if ((utf8_end_of_code_point_mask & 0xffff) == 0xffff) {
24
+ // We process in chunks of 16 bytes.
25
+ // use fast implementation in src/simdutf/arm64/simd.h
26
+ // Ideally the compiler can keep the tables in registers.
27
+ simd8<int8_t> temp{in};
28
+ temp.store_ascii_as_utf32_tbl(utf32_out);
29
+ utf32_output += 16; // We wrote 16 32-bit characters.
30
+ return 16; // We consumed 16 bytes.
31
+ }
32
+ __m128i zero = __lsx_vldi(0);
33
+ if (input_utf8_end_of_code_point_mask == 0x924) {
34
+ // We want to take 4 3-byte UTF-8 code units and turn them into 4 4-byte
35
+ // UTF-32 code units. Convert to UTF-16
36
+ __m128i composed_utf16 = convert_utf8_3_byte_to_utf16(in);
37
+ __m128i utf32_low = __lsx_vilvl_h(zero, composed_utf16);
38
+
39
+ __lsx_vst(utf32_low, reinterpret_cast<uint32_t *>(utf32_output), 0);
40
+ utf32_output += 4; // We wrote 4 32-bit characters.
41
+ return 12; // We consumed 12 bytes.
42
+ }
43
+ // 2 byte sequences occur in short bursts in languages like Greek and Russian.
44
+ if (input_utf8_end_of_code_point_mask == 0xaaa) {
45
+ // We want to take 6 2-byte UTF-8 code units and turn them into 6 4-byte
46
+ // UTF-32 code units. Convert to UTF-16
47
+ __m128i composed_utf16 = convert_utf8_2_byte_to_utf16(in);
48
+
49
+ __m128i utf32_low = __lsx_vilvl_h(zero, composed_utf16);
50
+ __m128i utf32_high = __lsx_vilvh_h(zero, composed_utf16);
51
+
52
+ __lsx_vst(utf32_low, reinterpret_cast<uint32_t *>(utf32_output), 0);
53
+ __lsx_vst(utf32_high, reinterpret_cast<uint32_t *>(utf32_output), 16);
54
+ utf32_output += 6;
55
+ return 12; // We consumed 12 bytes.
56
+ }
57
+ /// Either no fast path or an unimportant fast path.
58
+
59
+ const uint8_t idx = simdutf::tables::utf8_to_utf16::utf8bigindex
60
+ [input_utf8_end_of_code_point_mask][0];
61
+ const uint8_t consumed = simdutf::tables::utf8_to_utf16::utf8bigindex
62
+ [input_utf8_end_of_code_point_mask][1];
63
+
64
+ if (idx < 64) {
65
+ // SIX (6) input code-code units
66
+ // Convert to UTF-16
67
+ __m128i composed_utf16 = convert_utf8_1_to_2_byte_to_utf16(in, idx);
68
+ __m128i utf32_low = __lsx_vilvl_h(zero, composed_utf16);
69
+ __m128i utf32_high = __lsx_vilvh_h(zero, composed_utf16);
70
+
71
+ __lsx_vst(utf32_low, reinterpret_cast<uint32_t *>(utf32_output), 0);
72
+ __lsx_vst(utf32_high, reinterpret_cast<uint32_t *>(utf32_output), 16);
73
+ utf32_output += 6;
74
+ return consumed;
75
+ } else if (idx < 145) {
76
+ // FOUR (4) input code-code units
77
+ // UTF-16 and UTF-32 use similar algorithms, but UTF-32 skips the narrowing.
78
+ __m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
79
+ simdutf::tables::utf8_to_utf16::shufutf8[idx]),
80
+ 0);
81
+ // Shuffle
82
+ // 1 byte: 00000000 00000000 0ccccccc
83
+ // 2 byte: 00000000 110bbbbb 10cccccc
84
+ // 3 byte: 1110aaaa 10bbbbbb 10cccccc
85
+ sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
86
+ __m128i perm = __lsx_vshuf_b(zero, in, sh);
87
+ // Split
88
+ // 00000000 00000000 0ccccccc
89
+ __m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_w(0x7F)); // 6 or 7 bits
90
+ // Note: unmasked
91
+ // xxxxxxxx aaaaxxxx xxxxxxxx
92
+ __m128i high =
93
+ __lsx_vsrli_w(__lsx_vand_v(perm, __lsx_vldi(0xf)), 4); // 4 bits
94
+ // Use 16 bit bic instead of and.
95
+ // The top bits will be corrected later in the bsl
96
+ // 00000000 10bbbbbb 00000000
97
+ __m128i middle =
98
+ __lsx_vand_v(perm, lsx_splat_u32(0x0000FF00)); // 5 or 6 bits
99
+ // Combine low and middle with shift right accumulate
100
+ // 00000000 00xxbbbb bbcccccc
101
+ __m128i lowmid = __lsx_vor_v(ascii, __lsx_vsrli_w(middle, 2));
102
+ // Insert top 4 bits from high byte with bitwise select
103
+ // 00000000 aaaabbbb bbcccccc
104
+ __m128i composed = __lsx_vbitsel_v(lowmid, high, lsx_splat_u32(0x0000F000));
105
+ __lsx_vst(composed, utf32_output, 0);
106
+ utf32_output += 4; // We wrote 4 32-bit characters.
107
+ return consumed;
108
+ } else if (idx < 209) {
109
+ // THREE (3) input code-code units
110
+ if (input_utf8_end_of_code_point_mask == 0x888) {
111
+ // We want to take 3 4-byte UTF-8 code units and turn them into 3 4-byte
112
+ // UTF-32 code units. This uses the same method as the fixed 3 byte
113
+ // version, reversing and shift left insert. However, there is no need for
114
+ // a shuffle mask now, just rev16 and rev32.
115
+ //
116
+ // This version does not use the LUT, but 4 byte sequences are less common
117
+ // and the overhead of the extra memory access is less important than the
118
+ // early branch overhead in shorter sequences, so it comes last.
119
+
120
+ // Swap pairs of bytes
121
+ // 10dddddd|10cccccc|10bbbbbb|11110aaa
122
+ // 10cccccc 10dddddd|11110aaa 10bbbbbb
123
+ __m128i swap = lsx_swap_bytes(in);
124
+ // Shift left and insert
125
+ // xxxxcccc ccdddddd|xxxxxxxa aabbbbbb
126
+ __m128i merge1 = __lsx_vbitsel_v(__lsx_vsrli_h(swap, 2), swap,
127
+ __lsx_vrepli_h(0x3f /*0x003F*/));
128
+ // Shift insert again
129
+ // xxxxxxxx xxxaaabb bbbbcccc ccdddddd
130
+ __m128i merge2 =
131
+ __lsx_vbitsel_v(__lsx_vslli_w(merge1, 12), /* merge1 << 12 */
132
+ __lsx_vsrli_w(merge1, 16), /* merge1 >> 16 */
133
+ lsx_splat_u32(0x00000FFF));
134
+ // Clear the garbage
135
+ // 00000000 000aaabb bbbbcccc ccdddddd
136
+ __m128i composed = __lsx_vand_v(merge2, lsx_splat_u32(0x1FFFFF));
137
+ // Store
138
+ __lsx_vst(composed, utf32_output, 0);
139
+ utf32_output += 3; // We wrote 3 32-bit characters.
140
+ return 12; // We consumed 12 bytes.
141
+ }
142
+ // Unlike UTF-16, doing a fast codepath doesn't have nearly as much benefit
143
+ // due to surrogates no longer being involved.
144
+ __m128i sh = __lsx_vld(reinterpret_cast<const uint8_t *>(
145
+ simdutf::tables::utf8_to_utf16::shufutf8[idx]),
146
+ 0);
147
+ // 1 byte: 00000000 00000000 00000000 0ddddddd
148
+ // 2 byte: 00000000 00000000 110ccccc 10dddddd
149
+ // 3 byte: 00000000 1110bbbb 10cccccc 10dddddd
150
+ // 4 byte: 11110aaa 10bbbbbb 10cccccc 10dddddd
151
+ sh = __lsx_vand_v(sh, __lsx_vldi(0x1f));
152
+ __m128i perm = __lsx_vshuf_b(zero, in, sh);
153
+
154
+ // Ascii
155
+ __m128i ascii = __lsx_vand_v(perm, __lsx_vrepli_w(0x7F));
156
+ __m128i middle = __lsx_vand_v(perm, lsx_splat_u32(0x00003f00));
157
+ // 00000000 00000000 0000cccc ccdddddd
158
+ __m128i cd = __lsx_vor_v(__lsx_vsrli_w(middle, 2), ascii);
159
+
160
+ __m128i correction = __lsx_vand_v(perm, lsx_splat_u32(0x00400000));
161
+ __m128i corrected = __lsx_vadd_b(perm, __lsx_vsrli_w(correction, 1));
162
+ // Insert twice
163
+ // 00000000 000aaabb bbbbxxxx xxxxxxxx
164
+ __m128i corrected_srli2 =
165
+ __lsx_vsrli_w(__lsx_vand_v(corrected, __lsx_vrepli_b(0x7)), 2);
166
+ __m128i ab =
167
+ __lsx_vbitsel_v(corrected_srli2, corrected, __lsx_vrepli_h(0x3f));
168
+ ab = __lsx_vsrli_w(ab, 4);
169
+ // 00000000 000aaabb bbbbcccc ccdddddd
170
+ __m128i composed = __lsx_vbitsel_v(ab, cd, lsx_splat_u32(0x00000FFF));
171
+ // Store
172
+ __lsx_vst(composed, utf32_output, 0);
173
+ utf32_output += 3; // We wrote 3 32-bit characters.
174
+ return consumed;
175
+ } else {
176
+ // here we know that there is an error but we do not handle errors
177
+ return 12;
178
+ }
179
+ }
@@ -0,0 +1,60 @@
1
+ simdutf_really_inline const char *util_find(const char *start, const char *end,
2
+ char character) noexcept {
3
+ if (start >= end)
4
+ return end;
5
+
6
+ const int step = 16;
7
+ __m128i char_vec = __lsx_vreplgr2vr_b(static_cast<uint8_t>(character));
8
+
9
+ while (end - start >= step) {
10
+ __m128i data = __lsx_vld(reinterpret_cast<const __m128i *>(start), 0);
11
+ __m128i cmp = __lsx_vseq_b(data, char_vec);
12
+ if (__lsx_bnz_v(cmp)) {
13
+ uint16_t mask =
14
+ static_cast<uint16_t>(__lsx_vpickve2gr_hu(__lsx_vmsknz_b(cmp), 0));
15
+ return start + trailing_zeroes(mask);
16
+ }
17
+
18
+ start += step;
19
+ }
20
+
21
+ // Handle remaining bytes with scalar loop
22
+ for (; start < end; ++start) {
23
+ if (*start == character) {
24
+ return start;
25
+ }
26
+ }
27
+
28
+ return end;
29
+ }
30
+
31
+ simdutf_really_inline const char16_t *util_find(const char16_t *start,
32
+ const char16_t *end,
33
+ char16_t character) noexcept {
34
+ if (start >= end)
35
+ return end;
36
+
37
+ const int step = 8;
38
+ __m128i char_vec = __lsx_vreplgr2vr_h(static_cast<uint16_t>(character));
39
+
40
+ while (end - start >= step) {
41
+ __m128i data = __lsx_vld(reinterpret_cast<const __m128i *>(start), 0);
42
+ __m128i cmp = __lsx_vseq_h(data, char_vec);
43
+ if (__lsx_bnz_v(cmp)) {
44
+ uint16_t mask =
45
+ static_cast<uint16_t>(__lsx_vpickve2gr_hu(__lsx_vmsknz_b(cmp), 0));
46
+ return start + trailing_zeroes(mask) / 2;
47
+ }
48
+
49
+ start += step;
50
+ }
51
+
52
+ // Handle remaining elements with scalar loop
53
+ for (; start < end; ++start) {
54
+ if (*start == character) {
55
+ return start;
56
+ }
57
+ }
58
+
59
+ return end;
60
+ }
@@ -0,0 +1,13 @@
1
+ template <endianness big_endian>
2
+ simd8<uint8_t> utf16_gather_high_bytes(const simd16<uint16_t> in0,
3
+ const simd16<uint16_t> in1) {
4
+ if (big_endian) {
5
+ const auto mask = simd16<uint16_t>(0x00ff);
6
+ const auto t0 = in0 & mask;
7
+ const auto t1 = in1 & mask;
8
+
9
+ return simd16<uint16_t>::pack(t0, t1);
10
+ } else {
11
+ return simd16<uint16_t>::pack_shifted_right<8>(in0, in1);
12
+ }
13
+ }
@@ -0,0 +1,68 @@
1
+ const char32_t *lsx_validate_utf32le(const char32_t *input, size_t size) {
2
+ const char32_t *end = input + size;
3
+
4
+ __m128i offset = lsx_splat_u32(0xffff2000);
5
+ __m128i standardoffsetmax = lsx_splat_u32(0xfffff7ff);
6
+ __m128i standardmax = lsx_splat_u32(0x10ffff);
7
+ __m128i currentmax = lsx_splat_u32(0);
8
+ __m128i currentoffsetmax = lsx_splat_u32(0);
9
+
10
+ while (input + 4 < end) {
11
+ __m128i in = __lsx_vld(reinterpret_cast<const uint32_t *>(input), 0);
12
+ currentmax = __lsx_vmax_wu(in, currentmax);
13
+ // 0xD8__ + 0x2000 = 0xF8__ => 0xF8__ > 0xF7FF
14
+ currentoffsetmax =
15
+ __lsx_vmax_wu(__lsx_vadd_w(in, offset), currentoffsetmax);
16
+
17
+ input += 4;
18
+ }
19
+
20
+ __m128i is_zero =
21
+ __lsx_vxor_v(__lsx_vmax_wu(currentmax, standardmax), standardmax);
22
+ if (__lsx_bnz_v(is_zero)) {
23
+ return nullptr;
24
+ }
25
+
26
+ is_zero = __lsx_vxor_v(__lsx_vmax_wu(currentoffsetmax, standardoffsetmax),
27
+ standardoffsetmax);
28
+ if (__lsx_bnz_v(is_zero)) {
29
+ return nullptr;
30
+ }
31
+
32
+ return input;
33
+ }
34
+
35
+ const result lsx_validate_utf32le_with_errors(const char32_t *input,
36
+ size_t size) {
37
+ const char32_t *start = input;
38
+ const char32_t *end = input + size;
39
+
40
+ __m128i offset = lsx_splat_u32(0xffff2000);
41
+ __m128i standardoffsetmax = lsx_splat_u32(0xfffff7ff);
42
+ __m128i standardmax = lsx_splat_u32(0x10ffff);
43
+ __m128i currentmax = lsx_splat_u32(0);
44
+ __m128i currentoffsetmax = lsx_splat_u32(0);
45
+
46
+ while (input + 4 < end) {
47
+ __m128i in = __lsx_vld(reinterpret_cast<const uint32_t *>(input), 0);
48
+ currentmax = __lsx_vmax_wu(in, currentmax);
49
+ currentoffsetmax =
50
+ __lsx_vmax_wu(__lsx_vadd_w(in, offset), currentoffsetmax);
51
+
52
+ __m128i is_zero =
53
+ __lsx_vxor_v(__lsx_vmax_wu(currentmax, standardmax), standardmax);
54
+ if (__lsx_bnz_v(is_zero)) {
55
+ return result(error_code::TOO_LARGE, input - start);
56
+ }
57
+
58
+ is_zero = __lsx_vxor_v(__lsx_vmax_wu(currentoffsetmax, standardoffsetmax),
59
+ standardoffsetmax);
60
+ if (__lsx_bnz_v(is_zero)) {
61
+ return result(error_code::SURROGATE, input - start);
62
+ }
63
+
64
+ input += 4;
65
+ }
66
+
67
+ return result(error_code::SUCCESS, input - start);
68
+ }