react-native-quick-crypto 1.0.19 → 1.1.1

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 (561) hide show
  1. package/QuickCrypto.podspec +12 -38
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +3 -0
  4. package/android/build.gradle +5 -1
  5. package/cpp/argon2/HybridArgon2.cpp +10 -3
  6. package/cpp/blake3/HybridBlake3.cpp +5 -3
  7. package/cpp/cipher/CCMCipher.cpp +29 -16
  8. package/cpp/cipher/CCMCipher.hpp +2 -4
  9. package/cpp/cipher/ChaCha20Cipher.cpp +14 -18
  10. package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
  11. package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +34 -23
  12. package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
  13. package/cpp/cipher/GCMCipher.cpp +14 -15
  14. package/cpp/cipher/HybridCipher.cpp +39 -36
  15. package/cpp/cipher/HybridCipher.hpp +17 -1
  16. package/cpp/cipher/HybridRsaCipher.cpp +74 -29
  17. package/cpp/cipher/OCBCipher.cpp +4 -3
  18. package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +14 -13
  19. package/cpp/cipher/XSalsa20Cipher.cpp +72 -6
  20. package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
  21. package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +21 -25
  22. package/cpp/dh/HybridDiffieHellman.cpp +29 -0
  23. package/cpp/ec/HybridEcKeyPair.cpp +35 -33
  24. package/cpp/ec/HybridEcKeyPair.hpp +3 -7
  25. package/cpp/ecdh/HybridECDH.cpp +23 -0
  26. package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
  27. package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
  28. package/cpp/hash/HybridHash.cpp +5 -7
  29. package/cpp/hkdf/HybridHkdf.cpp +6 -4
  30. package/cpp/hmac/HybridHmac.cpp +4 -6
  31. package/cpp/kmac/HybridKmac.cpp +4 -4
  32. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
  33. package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
  34. package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
  35. package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
  36. package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
  37. package/cpp/scrypt/HybridScrypt.cpp +6 -4
  38. package/cpp/sign/HybridSignHandle.cpp +25 -68
  39. package/cpp/sign/HybridVerifyHandle.cpp +23 -60
  40. package/cpp/utils/HybridUtils.cpp +213 -111
  41. package/cpp/utils/HybridUtils.hpp +9 -2
  42. package/cpp/utils/QuickCryptoUtils.hpp +72 -0
  43. package/deps/simdutf/LICENSE-APACHE +201 -0
  44. package/deps/simdutf/LICENSE-MIT +18 -0
  45. package/deps/simdutf/README.md +2782 -0
  46. package/deps/simdutf/include/simdutf/avx512.h +79 -0
  47. package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
  48. package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
  49. package/deps/simdutf/include/simdutf/common_defs.h +186 -0
  50. package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
  51. package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
  52. package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
  53. package/deps/simdutf/include/simdutf/error.h +126 -0
  54. package/deps/simdutf/include/simdutf/implementation.h +7081 -0
  55. package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
  56. package/deps/simdutf/include/simdutf/portability.h +285 -0
  57. package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
  58. package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
  59. package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
  60. package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
  61. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
  62. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
  63. package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
  64. package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
  65. package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
  66. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
  67. package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
  68. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
  69. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
  70. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
  71. package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
  72. package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
  73. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
  74. package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
  75. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
  76. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
  77. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
  78. package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
  79. package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
  80. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
  81. package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
  82. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
  83. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
  84. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
  85. package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
  86. package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
  87. package/deps/simdutf/include/simdutf.h +26 -0
  88. package/deps/simdutf/include/simdutf_c.h +342 -0
  89. package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
  90. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
  91. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
  92. package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
  93. package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
  94. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
  95. package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
  96. package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
  97. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
  98. package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
  99. package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
  100. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
  101. package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
  102. package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
  103. package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
  104. package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
  105. package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
  106. package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
  107. package/deps/simdutf/src/encoding_types.cpp +67 -0
  108. package/deps/simdutf/src/error.cpp +3 -0
  109. package/deps/simdutf/src/fallback/implementation.cpp +589 -0
  110. package/deps/simdutf/src/generic/ascii_validation.h +50 -0
  111. package/deps/simdutf/src/generic/base64.h +233 -0
  112. package/deps/simdutf/src/generic/base64lengths.h +63 -0
  113. package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
  114. package/deps/simdutf/src/generic/find.h +75 -0
  115. package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
  116. package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
  117. package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
  118. package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
  119. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
  120. package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
  121. package/deps/simdutf/src/generic/utf16.h +73 -0
  122. package/deps/simdutf/src/generic/utf32.h +136 -0
  123. package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
  124. package/deps/simdutf/src/generic/utf8.h +92 -0
  125. package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
  126. package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
  127. package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
  128. package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
  129. package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
  130. package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
  131. package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
  132. package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
  133. package/deps/simdutf/src/generic/validate_utf16.h +164 -0
  134. package/deps/simdutf/src/generic/validate_utf32.h +99 -0
  135. package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
  136. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
  137. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
  138. package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
  139. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
  140. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
  141. package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
  142. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
  143. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
  144. package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
  145. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
  146. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
  147. package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
  148. package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
  149. package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
  150. package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
  151. package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
  152. package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
  153. package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
  154. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
  155. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
  156. package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
  157. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
  158. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
  159. package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
  160. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
  161. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
  162. package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
  163. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
  164. package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
  165. package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
  166. package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
  167. package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
  168. package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
  169. package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
  170. package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
  171. package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
  172. package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
  173. package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
  174. package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
  175. package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
  176. package/deps/simdutf/src/implementation.cpp +2526 -0
  177. package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
  178. package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
  179. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
  180. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
  181. package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
  182. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
  183. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
  184. package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
  185. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
  186. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
  187. package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
  188. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
  189. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
  190. package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
  191. package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
  192. package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
  193. package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
  194. package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
  195. package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
  196. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
  197. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
  198. package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
  199. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
  200. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
  201. package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
  202. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
  203. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
  204. package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
  205. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
  206. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
  207. package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
  208. package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
  209. package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
  210. package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
  211. package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
  212. package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
  213. package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
  214. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
  215. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
  216. package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
  217. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
  218. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
  219. package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
  220. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
  221. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
  222. package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
  223. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
  224. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
  225. package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
  226. package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
  227. package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
  228. package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
  229. package/deps/simdutf/src/ppc64/templates.cpp +91 -0
  230. package/deps/simdutf/src/rvv/implementation.cpp +138 -0
  231. package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
  232. package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
  233. package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
  234. package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
  235. package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
  236. package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
  237. package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
  238. package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
  239. package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
  240. package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
  241. package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
  242. package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
  243. package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
  244. package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
  245. package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
  246. package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
  247. package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
  248. package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
  249. package/deps/simdutf/src/simdutf/arm64.h +43 -0
  250. package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
  251. package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
  252. package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
  253. package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
  254. package/deps/simdutf/src/simdutf/fallback.h +42 -0
  255. package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
  256. package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
  257. package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
  258. package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
  259. package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
  260. package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
  261. package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
  262. package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
  263. package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
  264. package/deps/simdutf/src/simdutf/haswell.h +63 -0
  265. package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
  266. package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
  267. package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
  268. package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
  269. package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
  270. package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
  271. package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
  272. package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
  273. package/deps/simdutf/src/simdutf/icelake.h +81 -0
  274. package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
  275. package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
  276. package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
  277. package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
  278. package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
  279. package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
  280. package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
  281. package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
  282. package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
  283. package/deps/simdutf/src/simdutf/lasx.h +49 -0
  284. package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
  285. package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
  286. package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
  287. package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
  288. package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
  289. package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
  290. package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
  291. package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
  292. package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
  293. package/deps/simdutf/src/simdutf/lsx.h +52 -0
  294. package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
  295. package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
  296. package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
  297. package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
  298. package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
  299. package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
  300. package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
  301. package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
  302. package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
  303. package/deps/simdutf/src/simdutf/ppc64.h +40 -0
  304. package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
  305. package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
  306. package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
  307. package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
  308. package/deps/simdutf/src/simdutf/rvv.h +41 -0
  309. package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
  310. package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
  311. package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
  312. package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
  313. package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
  314. package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
  315. package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
  316. package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
  317. package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
  318. package/deps/simdutf/src/simdutf/westmere.h +59 -0
  319. package/deps/simdutf/src/simdutf.cpp +152 -0
  320. package/deps/simdutf/src/simdutf_c.cpp +525 -0
  321. package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
  322. package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
  323. package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
  324. package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
  325. package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
  326. package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
  327. package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
  328. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
  329. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
  330. package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
  331. package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
  332. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
  333. package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
  334. package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
  335. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
  336. package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
  337. package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
  338. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
  339. package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
  340. package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
  341. package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
  342. package/lib/commonjs/argon2.js +51 -2
  343. package/lib/commonjs/argon2.js.map +1 -1
  344. package/lib/commonjs/cipher.js +109 -11
  345. package/lib/commonjs/cipher.js.map +1 -1
  346. package/lib/commonjs/dsa.js +8 -2
  347. package/lib/commonjs/dsa.js.map +1 -1
  348. package/lib/commonjs/hash.js +15 -5
  349. package/lib/commonjs/hash.js.map +1 -1
  350. package/lib/commonjs/hkdf.js +33 -6
  351. package/lib/commonjs/hkdf.js.map +1 -1
  352. package/lib/commonjs/hmac.js +15 -5
  353. package/lib/commonjs/hmac.js.map +1 -1
  354. package/lib/commonjs/keys/publicCipher.js +10 -4
  355. package/lib/commonjs/keys/publicCipher.js.map +1 -1
  356. package/lib/commonjs/random.js +11 -2
  357. package/lib/commonjs/random.js.map +1 -1
  358. package/lib/commonjs/rsa.js +12 -5
  359. package/lib/commonjs/rsa.js.map +1 -1
  360. package/lib/commonjs/scrypt.js +47 -6
  361. package/lib/commonjs/scrypt.js.map +1 -1
  362. package/lib/commonjs/subtle.js +76 -5
  363. package/lib/commonjs/subtle.js.map +1 -1
  364. package/lib/commonjs/utils/cipher.js +18 -7
  365. package/lib/commonjs/utils/cipher.js.map +1 -1
  366. package/lib/commonjs/utils/conversion.js +33 -9
  367. package/lib/commonjs/utils/conversion.js.map +1 -1
  368. package/lib/commonjs/utils/timingSafeEqual.js +7 -2
  369. package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
  370. package/lib/commonjs/x509certificate.js +6 -6
  371. package/lib/commonjs/x509certificate.js.map +1 -1
  372. package/lib/module/argon2.js +51 -2
  373. package/lib/module/argon2.js.map +1 -1
  374. package/lib/module/cipher.js +109 -11
  375. package/lib/module/cipher.js.map +1 -1
  376. package/lib/module/dsa.js +8 -2
  377. package/lib/module/dsa.js.map +1 -1
  378. package/lib/module/hash.js +15 -5
  379. package/lib/module/hash.js.map +1 -1
  380. package/lib/module/hkdf.js +33 -6
  381. package/lib/module/hkdf.js.map +1 -1
  382. package/lib/module/hmac.js +15 -5
  383. package/lib/module/hmac.js.map +1 -1
  384. package/lib/module/keys/publicCipher.js +10 -4
  385. package/lib/module/keys/publicCipher.js.map +1 -1
  386. package/lib/module/random.js +11 -2
  387. package/lib/module/random.js.map +1 -1
  388. package/lib/module/rsa.js +11 -4
  389. package/lib/module/rsa.js.map +1 -1
  390. package/lib/module/scrypt.js +47 -6
  391. package/lib/module/scrypt.js.map +1 -1
  392. package/lib/module/subtle.js +76 -5
  393. package/lib/module/subtle.js.map +1 -1
  394. package/lib/module/utils/cipher.js +18 -7
  395. package/lib/module/utils/cipher.js.map +1 -1
  396. package/lib/module/utils/conversion.js +33 -9
  397. package/lib/module/utils/conversion.js.map +1 -1
  398. package/lib/module/utils/timingSafeEqual.js +8 -3
  399. package/lib/module/utils/timingSafeEqual.js.map +1 -1
  400. package/lib/module/x509certificate.js +6 -6
  401. package/lib/module/x509certificate.js.map +1 -1
  402. package/lib/typescript/argon2.d.ts.map +1 -1
  403. package/lib/typescript/cipher.d.ts +2 -2
  404. package/lib/typescript/cipher.d.ts.map +1 -1
  405. package/lib/typescript/dsa.d.ts.map +1 -1
  406. package/lib/typescript/hash.d.ts +2 -2
  407. package/lib/typescript/hash.d.ts.map +1 -1
  408. package/lib/typescript/hkdf.d.ts.map +1 -1
  409. package/lib/typescript/hmac.d.ts +2 -2
  410. package/lib/typescript/hmac.d.ts.map +1 -1
  411. package/lib/typescript/index.d.ts +1 -1
  412. package/lib/typescript/index.d.ts.map +1 -1
  413. package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
  414. package/lib/typescript/random.d.ts.map +1 -1
  415. package/lib/typescript/rsa.d.ts.map +1 -1
  416. package/lib/typescript/scrypt.d.ts.map +1 -1
  417. package/lib/typescript/specs/utils.nitro.d.ts +0 -2
  418. package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
  419. package/lib/typescript/subtle.d.ts.map +1 -1
  420. package/lib/typescript/utils/cipher.d.ts +13 -1
  421. package/lib/typescript/utils/cipher.d.ts.map +1 -1
  422. package/lib/typescript/utils/conversion.d.ts +9 -6
  423. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  424. package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
  425. package/lib/typescript/x509certificate.d.ts.map +1 -1
  426. package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
  427. package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
  428. package/package.json +38 -6
  429. package/src/argon2.ts +80 -2
  430. package/src/cipher.ts +139 -15
  431. package/src/dsa.ts +11 -2
  432. package/src/hash.ts +17 -7
  433. package/src/hkdf.ts +44 -6
  434. package/src/hmac.ts +17 -7
  435. package/src/keys/publicCipher.ts +10 -4
  436. package/src/random.ts +11 -2
  437. package/src/rsa.ts +18 -4
  438. package/src/scrypt.ts +73 -6
  439. package/src/specs/utils.nitro.ts +0 -2
  440. package/src/subtle.ts +90 -8
  441. package/src/utils/cipher.ts +30 -8
  442. package/src/utils/conversion.ts +58 -20
  443. package/src/utils/timingSafeEqual.ts +8 -3
  444. package/src/x509certificate.ts +5 -6
  445. package/deps/blake3/.cargo/config.toml +0 -2
  446. package/deps/blake3/.git-blame-ignore-revs +0 -2
  447. package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
  448. package/deps/blake3/.github/workflows/ci.yml +0 -491
  449. package/deps/blake3/.github/workflows/tag.yml +0 -43
  450. package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
  451. package/deps/blake3/CONTRIBUTING.md +0 -31
  452. package/deps/blake3/Cargo.toml +0 -135
  453. package/deps/blake3/b3sum/Cargo.lock +0 -513
  454. package/deps/blake3/b3sum/Cargo.toml +0 -26
  455. package/deps/blake3/b3sum/README.md +0 -72
  456. package/deps/blake3/b3sum/src/main.rs +0 -564
  457. package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
  458. package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
  459. package/deps/blake3/b3sum/what_does_check_do.md +0 -176
  460. package/deps/blake3/benches/bench.rs +0 -623
  461. package/deps/blake3/build.rs +0 -389
  462. package/deps/blake3/c/CMakeLists.txt +0 -383
  463. package/deps/blake3/c/CMakePresets.json +0 -73
  464. package/deps/blake3/c/Makefile.testing +0 -82
  465. package/deps/blake3/c/blake3-config.cmake.in +0 -14
  466. package/deps/blake3/c/blake3_avx2.c +0 -326
  467. package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
  468. package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
  469. package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
  470. package/deps/blake3/c/blake3_avx512.c +0 -1388
  471. package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
  472. package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
  473. package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
  474. package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
  475. package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
  476. package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
  477. package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
  478. package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
  479. package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
  480. package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
  481. package/deps/blake3/c/blake3_sse2.c +0 -566
  482. package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
  483. package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
  484. package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
  485. package/deps/blake3/c/blake3_sse41.c +0 -560
  486. package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
  487. package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
  488. package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
  489. package/deps/blake3/c/blake3_tbb.cpp +0 -37
  490. package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
  491. package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
  492. package/deps/blake3/c/example.c +0 -36
  493. package/deps/blake3/c/example_tbb.c +0 -57
  494. package/deps/blake3/c/libblake3.pc.in +0 -12
  495. package/deps/blake3/c/main.c +0 -166
  496. package/deps/blake3/c/test.py +0 -97
  497. package/deps/blake3/media/B3.svg +0 -70
  498. package/deps/blake3/media/BLAKE3.svg +0 -85
  499. package/deps/blake3/media/speed.svg +0 -1474
  500. package/deps/blake3/reference_impl/Cargo.toml +0 -8
  501. package/deps/blake3/reference_impl/README.md +0 -14
  502. package/deps/blake3/reference_impl/reference_impl.rs +0 -374
  503. package/deps/blake3/src/ffi_avx2.rs +0 -65
  504. package/deps/blake3/src/ffi_avx512.rs +0 -169
  505. package/deps/blake3/src/ffi_neon.rs +0 -82
  506. package/deps/blake3/src/ffi_sse2.rs +0 -126
  507. package/deps/blake3/src/ffi_sse41.rs +0 -126
  508. package/deps/blake3/src/guts.rs +0 -60
  509. package/deps/blake3/src/hazmat.rs +0 -704
  510. package/deps/blake3/src/io.rs +0 -64
  511. package/deps/blake3/src/join.rs +0 -92
  512. package/deps/blake3/src/lib.rs +0 -1835
  513. package/deps/blake3/src/platform.rs +0 -587
  514. package/deps/blake3/src/portable.rs +0 -198
  515. package/deps/blake3/src/rust_avx2.rs +0 -474
  516. package/deps/blake3/src/rust_sse2.rs +0 -775
  517. package/deps/blake3/src/rust_sse41.rs +0 -766
  518. package/deps/blake3/src/test.rs +0 -1049
  519. package/deps/blake3/src/traits.rs +0 -227
  520. package/deps/blake3/src/wasm32_simd.rs +0 -794
  521. package/deps/blake3/test_vectors/Cargo.toml +0 -19
  522. package/deps/blake3/test_vectors/cross_test.sh +0 -25
  523. package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
  524. package/deps/blake3/test_vectors/src/lib.rs +0 -350
  525. package/deps/blake3/test_vectors/test_vectors.json +0 -217
  526. package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
  527. package/deps/blake3/tools/compiler_version/build.rs +0 -6
  528. package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
  529. package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
  530. package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
  531. package/deps/blake3/tools/release.md +0 -16
  532. package/deps/ncrypto/.bazelignore +0 -4
  533. package/deps/ncrypto/.bazelrc +0 -1
  534. package/deps/ncrypto/.bazelversion +0 -1
  535. package/deps/ncrypto/.clang-format +0 -111
  536. package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
  537. package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
  538. package/deps/ncrypto/.github/workflows/linter.yml +0 -38
  539. package/deps/ncrypto/.github/workflows/macos.yml +0 -43
  540. package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
  541. package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
  542. package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
  543. package/deps/ncrypto/.python-version +0 -1
  544. package/deps/ncrypto/.release-please-manifest.json +0 -3
  545. package/deps/ncrypto/BUILD.bazel +0 -44
  546. package/deps/ncrypto/CHANGELOG.md +0 -37
  547. package/deps/ncrypto/CMakeLists.txt +0 -79
  548. package/deps/ncrypto/MODULE.bazel +0 -16
  549. package/deps/ncrypto/MODULE.bazel.lock +0 -461
  550. package/deps/ncrypto/cmake/CPM.cmake +0 -1225
  551. package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
  552. package/deps/ncrypto/ncrypto.pc.in +0 -10
  553. package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
  554. package/deps/ncrypto/pyproject.toml +0 -38
  555. package/deps/ncrypto/release-please-config.json +0 -11
  556. package/deps/ncrypto/src/CMakeLists.txt +0 -40
  557. package/deps/ncrypto/tests/BUILD.bazel +0 -11
  558. package/deps/ncrypto/tests/CMakeLists.txt +0 -7
  559. package/deps/ncrypto/tests/basic.cpp +0 -856
  560. package/deps/ncrypto/tools/run-clang-format.sh +0 -42
  561. package/lib/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,309 @@
1
+ #ifndef SIMDUTF_LSX_IMPLEMENTATION_H
2
+ #define SIMDUTF_LSX_IMPLEMENTATION_H
3
+
4
+ #include "simdutf.h"
5
+ #include "simdutf/internal/isadetection.h"
6
+
7
+ namespace simdutf {
8
+ namespace lsx {
9
+
10
+ namespace {
11
+ using namespace simdutf;
12
+ }
13
+
14
+ class implementation final : public simdutf::implementation {
15
+ public:
16
+ simdutf_really_inline implementation()
17
+ : simdutf::implementation("lsx", "LOONGARCH SX",
18
+ internal::instruction_set::LSX) {}
19
+ #if SIMDUTF_FEATURE_DETECT_ENCODING
20
+ simdutf_warn_unused int detect_encodings(const char *input,
21
+ size_t length) const noexcept final;
22
+ #endif // SIMDUTF_FEATURE_DETECT_ENCODING
23
+ #if SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
24
+ simdutf_warn_unused bool validate_utf8(const char *buf,
25
+ size_t len) const noexcept final;
26
+ #endif // SIMDUTF_FEATURE_UTF8 || SIMDUTF_FEATURE_DETECT_ENCODING
27
+ #if SIMDUTF_FEATURE_UTF8
28
+ simdutf_warn_unused result
29
+ validate_utf8_with_errors(const char *buf, size_t len) const noexcept final;
30
+ #endif // SIMDUTF_FEATURE_UTF8
31
+ #if SIMDUTF_FEATURE_ASCII
32
+ simdutf_warn_unused bool validate_ascii(const char *buf,
33
+ size_t len) const noexcept final;
34
+ simdutf_warn_unused result
35
+ validate_ascii_with_errors(const char *buf, size_t len) const noexcept final;
36
+ #endif // SIMDUTF_FEATURE_ASCII
37
+
38
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_ASCII
39
+ simdutf_warn_unused bool
40
+ validate_utf16le_as_ascii(const char16_t *buf,
41
+ size_t len) const noexcept final;
42
+
43
+ simdutf_warn_unused bool
44
+ validate_utf16be_as_ascii(const char16_t *buf,
45
+ size_t len) const noexcept final;
46
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_ASCII
47
+
48
+ #if SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
49
+ simdutf_warn_unused bool validate_utf16le(const char16_t *buf,
50
+ size_t len) const noexcept final;
51
+ #endif // SIMDUTF_FEATURE_UTF16 || SIMDUTF_FEATURE_DETECT_ENCODING
52
+ #if SIMDUTF_FEATURE_UTF16
53
+ simdutf_warn_unused bool validate_utf16be(const char16_t *buf,
54
+ size_t len) const noexcept final;
55
+ simdutf_warn_unused result validate_utf16le_with_errors(
56
+ const char16_t *buf, size_t len) const noexcept final;
57
+ simdutf_warn_unused result validate_utf16be_with_errors(
58
+ const char16_t *buf, size_t len) const noexcept final;
59
+ void to_well_formed_utf16be(const char16_t *input, size_t len,
60
+ char16_t *output) const noexcept final;
61
+ void to_well_formed_utf16le(const char16_t *input, size_t len,
62
+ char16_t *output) const noexcept final;
63
+ #endif // SIMDUTF_FEATURE_UTF16
64
+ #if SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
65
+ simdutf_warn_unused bool validate_utf32(const char32_t *buf,
66
+ size_t len) const noexcept final;
67
+ #endif // SIMDUTF_FEATURE_UTF32 || SIMDUTF_FEATURE_DETECT_ENCODING
68
+ #if SIMDUTF_FEATURE_UTF32
69
+ simdutf_warn_unused result validate_utf32_with_errors(
70
+ const char32_t *buf, size_t len) const noexcept final;
71
+ #endif // SIMDUTF_FEATURE_UTF32
72
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
73
+ simdutf_warn_unused size_t convert_latin1_to_utf8(
74
+ const char *buf, size_t len, char *utf8_output) const noexcept final;
75
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
76
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
77
+ simdutf_warn_unused size_t convert_latin1_to_utf16le(
78
+ const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final;
79
+ simdutf_warn_unused size_t convert_latin1_to_utf16be(
80
+ const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final;
81
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
82
+ #if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
83
+ simdutf_warn_unused size_t convert_latin1_to_utf32(
84
+ const char *buf, size_t len, char32_t *utf32_output) const noexcept final;
85
+ #endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
86
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
87
+ simdutf_warn_unused size_t convert_utf8_to_latin1(
88
+ const char *buf, size_t len, char *latin1_output) const noexcept final;
89
+ simdutf_warn_unused result convert_utf8_to_latin1_with_errors(
90
+ const char *buf, size_t len, char *latin1_buffer) const noexcept final;
91
+ simdutf_warn_unused size_t convert_valid_utf8_to_latin1(
92
+ const char *buf, size_t len, char *latin1_output) const noexcept final;
93
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
94
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
95
+ simdutf_warn_unused size_t convert_utf8_to_utf16le(
96
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept final;
97
+ simdutf_warn_unused size_t convert_utf8_to_utf16be(
98
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept final;
99
+ simdutf_warn_unused result convert_utf8_to_utf16le_with_errors(
100
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept final;
101
+ simdutf_warn_unused result convert_utf8_to_utf16be_with_errors(
102
+ const char *buf, size_t len, char16_t *utf16_output) const noexcept final;
103
+ simdutf_warn_unused size_t convert_valid_utf8_to_utf16le(
104
+ const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final;
105
+ simdutf_warn_unused size_t convert_valid_utf8_to_utf16be(
106
+ const char *buf, size_t len, char16_t *utf16_buffer) const noexcept final;
107
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
108
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
109
+ simdutf_warn_unused size_t convert_utf8_to_utf32(
110
+ const char *buf, size_t len, char32_t *utf32_output) const noexcept final;
111
+ simdutf_warn_unused result convert_utf8_to_utf32_with_errors(
112
+ const char *buf, size_t len, char32_t *utf32_output) const noexcept final;
113
+ simdutf_warn_unused size_t convert_valid_utf8_to_utf32(
114
+ const char *buf, size_t len, char32_t *utf32_buffer) const noexcept final;
115
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
116
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
117
+ simdutf_warn_unused size_t
118
+ convert_utf16le_to_latin1(const char16_t *buf, size_t len,
119
+ char *latin1_buffer) const noexcept final;
120
+ simdutf_warn_unused size_t
121
+ convert_utf16be_to_latin1(const char16_t *buf, size_t len,
122
+ char *latin1_buffer) const noexcept final;
123
+ simdutf_warn_unused result convert_utf16le_to_latin1_with_errors(
124
+ const char16_t *buf, size_t len,
125
+ char *latin1_buffer) const noexcept final;
126
+ simdutf_warn_unused result convert_utf16be_to_latin1_with_errors(
127
+ const char16_t *buf, size_t len,
128
+ char *latin1_buffer) const noexcept final;
129
+ simdutf_warn_unused size_t
130
+ convert_valid_utf16le_to_latin1(const char16_t *buf, size_t len,
131
+ char *latin1_buffer) const noexcept final;
132
+ simdutf_warn_unused size_t
133
+ convert_valid_utf16be_to_latin1(const char16_t *buf, size_t len,
134
+ char *latin1_buffer) const noexcept final;
135
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_LATIN1
136
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
137
+ simdutf_warn_unused size_t convert_utf16le_to_utf8(
138
+ const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final;
139
+ simdutf_warn_unused size_t convert_utf16be_to_utf8(
140
+ const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final;
141
+ simdutf_warn_unused result convert_utf16le_to_utf8_with_errors(
142
+ const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final;
143
+ simdutf_warn_unused result convert_utf16be_to_utf8_with_errors(
144
+ const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final;
145
+ simdutf_warn_unused size_t convert_valid_utf16le_to_utf8(
146
+ const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final;
147
+ simdutf_warn_unused size_t convert_valid_utf16be_to_utf8(
148
+ const char16_t *buf, size_t len, char *utf8_buffer) const noexcept final;
149
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
150
+ #if SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
151
+ simdutf_warn_unused size_t
152
+ convert_utf32_to_latin1(const char32_t *buf, size_t len,
153
+ char *latin1_output) const noexcept final;
154
+ simdutf_warn_unused result
155
+ convert_utf32_to_latin1_with_errors(const char32_t *buf, size_t len,
156
+ char *latin1_output) const noexcept final;
157
+ simdutf_warn_unused size_t
158
+ convert_valid_utf32_to_latin1(const char32_t *buf, size_t len,
159
+ char *latin1_output) const noexcept final;
160
+ #endif // SIMDUTF_FEATURE_UTF32 && SIMDUTF_FEATURE_LATIN1
161
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
162
+ simdutf_warn_unused size_t convert_utf32_to_utf8(
163
+ const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final;
164
+ simdutf_warn_unused result convert_utf32_to_utf8_with_errors(
165
+ const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final;
166
+ simdutf_warn_unused size_t convert_valid_utf32_to_utf8(
167
+ const char32_t *buf, size_t len, char *utf8_buffer) const noexcept final;
168
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
169
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
170
+ simdutf_warn_unused size_t
171
+ convert_utf32_to_utf16le(const char32_t *buf, size_t len,
172
+ char16_t *utf16_buffer) const noexcept final;
173
+ simdutf_warn_unused size_t
174
+ convert_utf32_to_utf16be(const char32_t *buf, size_t len,
175
+ char16_t *utf16_buffer) const noexcept final;
176
+ simdutf_warn_unused result convert_utf32_to_utf16le_with_errors(
177
+ const char32_t *buf, size_t len,
178
+ char16_t *utf16_buffer) const noexcept final;
179
+ simdutf_warn_unused result convert_utf32_to_utf16be_with_errors(
180
+ const char32_t *buf, size_t len,
181
+ char16_t *utf16_buffer) const noexcept final;
182
+ simdutf_warn_unused size_t
183
+ convert_valid_utf32_to_utf16le(const char32_t *buf, size_t len,
184
+ char16_t *utf16_buffer) const noexcept final;
185
+ simdutf_warn_unused size_t
186
+ convert_valid_utf32_to_utf16be(const char32_t *buf, size_t len,
187
+ char16_t *utf16_buffer) const noexcept final;
188
+ simdutf_warn_unused size_t
189
+ convert_utf16le_to_utf32(const char16_t *buf, size_t len,
190
+ char32_t *utf32_buffer) const noexcept final;
191
+ simdutf_warn_unused size_t
192
+ convert_utf16be_to_utf32(const char16_t *buf, size_t len,
193
+ char32_t *utf32_buffer) const noexcept final;
194
+ simdutf_warn_unused result convert_utf16le_to_utf32_with_errors(
195
+ const char16_t *buf, size_t len,
196
+ char32_t *utf32_buffer) const noexcept final;
197
+ simdutf_warn_unused result convert_utf16be_to_utf32_with_errors(
198
+ const char16_t *buf, size_t len,
199
+ char32_t *utf32_buffer) const noexcept final;
200
+ simdutf_warn_unused size_t
201
+ convert_valid_utf16le_to_utf32(const char16_t *buf, size_t len,
202
+ char32_t *utf32_buffer) const noexcept final;
203
+ simdutf_warn_unused size_t
204
+ convert_valid_utf16be_to_utf32(const char16_t *buf, size_t len,
205
+ char32_t *utf32_buffer) const noexcept final;
206
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
207
+ #if SIMDUTF_FEATURE_UTF16
208
+ void change_endianness_utf16(const char16_t *buf, size_t length,
209
+ char16_t *output) const noexcept final;
210
+ simdutf_warn_unused size_t
211
+ count_utf16le(const char16_t *buf, size_t length) const noexcept override;
212
+ simdutf_warn_unused size_t
213
+ count_utf16be(const char16_t *buf, size_t length) const noexcept override;
214
+ #endif // SIMDUTF_FEATURE_UTF16
215
+ #if SIMDUTF_FEATURE_UTF8
216
+ simdutf_warn_unused size_t count_utf8(const char *buf,
217
+ size_t length) const noexcept override;
218
+ #endif // SIMDUTF_FEATURE_UTF8
219
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
220
+ simdutf_warn_unused size_t utf8_length_from_utf16le(
221
+ const char16_t *input, size_t length) const noexcept override;
222
+ simdutf_warn_unused size_t utf8_length_from_utf16be(
223
+ const char16_t *input, size_t length) const noexcept override;
224
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
225
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
226
+ simdutf_warn_unused size_t utf32_length_from_utf16le(
227
+ const char16_t *input, size_t length) const noexcept override;
228
+ simdutf_warn_unused size_t utf32_length_from_utf16be(
229
+ const char16_t *input, size_t length) const noexcept override;
230
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
231
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
232
+ simdutf_warn_unused size_t utf16_length_from_utf8(
233
+ const char *input, size_t length) const noexcept override;
234
+ simdutf_warn_unused result utf8_length_from_utf16le_with_replacement(
235
+ const char16_t *input, size_t length) const noexcept override;
236
+ ;
237
+ simdutf_warn_unused result utf8_length_from_utf16be_with_replacement(
238
+ const char16_t *input, size_t length) const noexcept override;
239
+ ;
240
+
241
+ simdutf_warn_unused size_t convert_utf16le_to_utf8_with_replacement(
242
+ const char16_t *input, size_t length,
243
+ char *utf8_buffer) const noexcept override;
244
+
245
+ simdutf_warn_unused size_t convert_utf16be_to_utf8_with_replacement(
246
+ const char16_t *input, size_t length,
247
+ char *utf8_buffer) const noexcept override;
248
+
249
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF16
250
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
251
+ simdutf_warn_unused size_t utf8_length_from_utf32(
252
+ const char32_t *input, size_t length) const noexcept override;
253
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
254
+ #if SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
255
+ simdutf_warn_unused size_t utf16_length_from_utf32(
256
+ const char32_t *input, size_t length) const noexcept override;
257
+ #endif // SIMDUTF_FEATURE_UTF16 && SIMDUTF_FEATURE_UTF32
258
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
259
+ simdutf_warn_unused size_t utf32_length_from_utf8(
260
+ const char *input, size_t length) const noexcept override;
261
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_UTF32
262
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
263
+ simdutf_warn_unused size_t latin1_length_from_utf8(
264
+ const char *input, size_t length) const noexcept override;
265
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
266
+ #if SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
267
+ simdutf_warn_unused size_t utf8_length_from_latin1(
268
+ const char *input, size_t length) const noexcept override;
269
+ #endif // SIMDUTF_FEATURE_UTF8 && SIMDUTF_FEATURE_LATIN1
270
+ #if SIMDUTF_FEATURE_BASE64
271
+ simdutf_warn_unused result base64_to_binary(
272
+ const char *input, size_t length, char *output, base64_options options,
273
+ last_chunk_handling_options last_chunk_options =
274
+ last_chunk_handling_options::loose) const noexcept override;
275
+ simdutf_warn_unused full_result base64_to_binary_details(
276
+ const char *input, size_t length, char *output, base64_options options,
277
+ last_chunk_handling_options last_chunk_options =
278
+ last_chunk_handling_options::loose) const noexcept override;
279
+ simdutf_warn_unused result base64_to_binary(
280
+ const char16_t *input, size_t length, char *output,
281
+ base64_options options,
282
+ last_chunk_handling_options last_chunk_options =
283
+ last_chunk_handling_options::loose) const noexcept override;
284
+ simdutf_warn_unused full_result base64_to_binary_details(
285
+ const char16_t *input, size_t length, char *output,
286
+ base64_options options,
287
+ last_chunk_handling_options last_chunk_options =
288
+ last_chunk_handling_options::loose) const noexcept override;
289
+ size_t binary_to_base64(const char *input, size_t length, char *output,
290
+ base64_options options) const noexcept override;
291
+ size_t
292
+ binary_to_base64_with_lines(const char *input, size_t length, char *output,
293
+ size_t line_length,
294
+ base64_options options) const noexcept override;
295
+ const char *find(const char *start, const char *end,
296
+ char character) const noexcept override;
297
+ const char16_t *find(const char16_t *start, const char16_t *end,
298
+ char16_t character) const noexcept override;
299
+ simdutf_warn_unused size_t binary_length_from_base64(
300
+ const char *input, size_t length) const noexcept override;
301
+ simdutf_warn_unused size_t binary_length_from_base64(
302
+ const char16_t *input, size_t length) const noexcept override;
303
+ #endif // SIMDUTF_FEATURE_BASE64
304
+ };
305
+
306
+ } // namespace lsx
307
+ } // namespace simdutf
308
+
309
+ #endif // SIMDUTF_LSX_IMPLEMENTATION_H
@@ -0,0 +1,196 @@
1
+ #ifndef SIMDUTF_LSX_INTRINSICS_H
2
+ #define SIMDUTF_LSX_INTRINSICS_H
3
+
4
+ #include "simdutf.h"
5
+
6
+ // This should be the correct header whether
7
+ // you use visual studio or other compilers.
8
+ #include <lsxintrin.h>
9
+
10
+ /*
11
+ Encoding of argument for LoongArch64 xvldi instruction. See:
12
+ https://jia.je/unofficial-loongarch-intrinsics-guide/lasx/misc/#__m256i-__lasx_xvldi-imm_n1024_1023-imm
13
+
14
+ 1: imm[12:8]=0b10000: broadcast imm[7:0] as 32-bit elements to all lanes
15
+
16
+ 2: imm[12:8]=0b10001: broadcast imm[7:0] << 8 as 32-bit elements to all lanes
17
+
18
+ 3: imm[12:8]=0b10010: broadcast imm[7:0] << 16 as 32-bit elements to all lanes
19
+
20
+ 4: imm[12:8]=0b10011: broadcast imm[7:0] << 24 as 32-bit elements to all lanes
21
+
22
+ 5: imm[12:8]=0b10100: broadcast imm[7:0] as 16-bit elements to all lanes
23
+
24
+ 6: imm[12:8]=0b10101: broadcast imm[7:0] << 8 as 16-bit elements to all lanes
25
+
26
+ 7: imm[12:8]=0b10110: broadcast (imm[7:0] << 8) | 0xFF as 32-bit elements to all
27
+ lanes
28
+
29
+ 8: imm[12:8]=0b10111: broadcast (imm[7:0] << 16) | 0xFFFF as 32-bit elements to
30
+ all lanes
31
+
32
+ 9: imm[12:8]=0b11000: broadcast imm[7:0] as 8-bit elements to all lanes
33
+
34
+ 10: imm[12:8]=0b11001: repeat each bit of imm[7:0] eight times, and broadcast
35
+ the result as 64-bit elements to all lanes
36
+ */
37
+
38
+ namespace vldi {
39
+
40
+ template <uint16_t v> class const_u16 {
41
+ constexpr static const uint8_t b0 = ((v >> 0 * 8) & 0xff);
42
+ constexpr static const uint8_t b1 = ((v >> 1 * 8) & 0xff);
43
+
44
+ constexpr static bool is_case5 = uint16_t(b0) == v;
45
+ constexpr static bool is_case6 = (uint16_t(b1) << 8) == v;
46
+ constexpr static bool is_case9 = (b0 == b1);
47
+ constexpr static bool is_case10 =
48
+ ((b0 == 0xff) || (b0 == 0x00)) && ((b1 == 0xff) || (b1 == 0x00));
49
+
50
+ public:
51
+ constexpr static uint16_t operation = is_case5 ? 0b10100
52
+ : is_case6 ? 0b10101
53
+ : is_case9 ? 0b11000
54
+ : is_case10 ? 0x11001
55
+ : 0xffff;
56
+
57
+ constexpr static uint16_t byte =
58
+ is_case5 ? b0
59
+ : is_case6 ? b1
60
+ : is_case9 ? b0
61
+ : is_case10 ? ((b0 ? 0x55 : 0x00) | (b1 ? 0xaa : 0x00))
62
+ : 0xffff;
63
+
64
+ constexpr static int value = int((operation << 8) | byte) - 8192;
65
+ constexpr static bool valid = operation != 0xffff;
66
+ };
67
+
68
+ template <uint32_t v> class const_u32 {
69
+ constexpr static const uint8_t b0 = (v & 0xff);
70
+ constexpr static const uint8_t b1 = ((v >> 8) & 0xff);
71
+ constexpr static const uint8_t b2 = ((v >> 16) & 0xff);
72
+ constexpr static const uint8_t b3 = ((v >> 24) & 0xff);
73
+
74
+ constexpr static bool is_case1 = (uint32_t(b0) == v);
75
+ constexpr static bool is_case2 = ((uint32_t(b1) << 8) == v);
76
+ constexpr static bool is_case3 = ((uint32_t(b2) << 16) == v);
77
+ constexpr static bool is_case4 = ((uint32_t(b3) << 24) == v);
78
+ constexpr static bool is_case5 = (b0 == b2) && (b1 == 0) && (b3 == 0);
79
+ constexpr static bool is_case6 = (b1 == b3) && (b0 == 0) && (b2 == 0);
80
+ constexpr static bool is_case7 = (b3 == 0) && (b2 == 0) && (b0 == 0xff);
81
+ constexpr static bool is_case8 = (b3 == 0) && (b1 == 0xff) && (b0 == 0xff);
82
+ constexpr static bool is_case9 = (b0 == b1) && (b0 == b2) && (b0 == b3);
83
+ constexpr static bool is_case10 =
84
+ ((b0 == 0xff) || (b0 == 0x00)) && ((b1 == 0xff) || (b1 == 0x00)) &&
85
+ ((b2 == 0xff) || (b2 == 0x00)) && ((b3 == 0xff) || (b3 == 0x00));
86
+
87
+ public:
88
+ constexpr static uint16_t operation = is_case1 ? 0b10000
89
+ : is_case2 ? 0b10001
90
+ : is_case3 ? 0b10010
91
+ : is_case4 ? 0b10011
92
+ : is_case5 ? 0b10100
93
+ : is_case6 ? 0b10101
94
+ : is_case7 ? 0b10110
95
+ : is_case8 ? 0b10111
96
+ : is_case9 ? 0b11000
97
+ : is_case10 ? 0b11001
98
+ : 0xffff;
99
+
100
+ constexpr static uint16_t byte =
101
+ is_case1 ? b0
102
+ : is_case2 ? b1
103
+ : is_case3 ? b2
104
+ : is_case4 ? b3
105
+ : is_case5 ? b0
106
+ : is_case6 ? b1
107
+ : is_case7 ? b1
108
+ : is_case8 ? b2
109
+ : is_case9 ? b0
110
+ : is_case10 ? ((b0 ? 0x11 : 0x00) | (b1 ? 0x22 : 0x00) |
111
+ (b2 ? 0x44 : 0x00) | (b3 ? 0x88 : 0x00))
112
+ : 0xffff;
113
+
114
+ constexpr static int value = int((operation << 8) | byte) - 8192;
115
+ constexpr static bool valid = operation != 0xffff;
116
+ };
117
+
118
+ template <uint64_t v> class const_u64 {
119
+ constexpr static const uint8_t b0 = ((v >> 0 * 8) & 0xff);
120
+ constexpr static const uint8_t b1 = ((v >> 1 * 8) & 0xff);
121
+ constexpr static const uint8_t b2 = ((v >> 2 * 8) & 0xff);
122
+ constexpr static const uint8_t b3 = ((v >> 3 * 8) & 0xff);
123
+ constexpr static const uint8_t b4 = ((v >> 4 * 8) & 0xff);
124
+ constexpr static const uint8_t b5 = ((v >> 5 * 8) & 0xff);
125
+ constexpr static const uint8_t b6 = ((v >> 6 * 8) & 0xff);
126
+ constexpr static const uint8_t b7 = ((v >> 7 * 8) & 0xff);
127
+
128
+ constexpr static bool is_case10 =
129
+ ((b0 == 0xff) || (b0 == 0x00)) && ((b1 == 0xff) || (b1 == 0x00)) &&
130
+ ((b2 == 0xff) || (b2 == 0x00)) && ((b3 == 0xff) || (b3 == 0x00)) &&
131
+ ((b4 == 0xff) || (b4 == 0x00)) && ((b5 == 0xff) || (b5 == 0x00)) &&
132
+ ((b6 == 0xff) || (b6 == 0x00)) && ((b7 == 0xff) || (b7 == 0x00));
133
+
134
+ public:
135
+ constexpr static bool is_32bit =
136
+ ((v & 0xffffffff) == (v >> 32)) && const_u32<(v >> 32)>::value;
137
+ constexpr static uint8_t op_32bit = const_u32<(v >> 32)>::operation;
138
+ constexpr static uint8_t byte_32bit = const_u32<(v >> 32)>::byte;
139
+
140
+ constexpr static uint16_t operation = is_32bit ? op_32bit
141
+ : is_case10 ? 0x11001
142
+ : 0xffff;
143
+
144
+ constexpr static uint16_t byte =
145
+ is_32bit ? byte_32bit
146
+ : is_case10
147
+ ? ((b0 ? 0x01 : 0x00) | (b1 ? 0x02 : 0x00) | (b2 ? 0x04 : 0x00) |
148
+ (b3 ? 0x08 : 0x00) | (b4 ? 0x10 : 0x00) | (b5 ? 0x20 : 0x00) |
149
+ (b6 ? 0x40 : 0x00) | (b7 ? 0x80 : 0x00))
150
+ : 0xffff;
151
+
152
+ constexpr static int value = int((operation << 8) | byte) - 8192;
153
+ constexpr static bool valid = operation != 0xffff;
154
+ };
155
+ } // namespace vldi
156
+
157
+ // Uncomment when running under QEMU affected
158
+ // by bug https://gitlab.com/qemu-project/qemu/-/issues/2865
159
+ // Versions <= 9.2.2 are affected, likely anything newer is correct.
160
+ #ifndef QEMU_VLDI_BUG
161
+ // #define QEMU_VLDI_BUG 1
162
+ #endif
163
+
164
+ #ifndef lsx_splat_u16
165
+ #ifdef QEMU_VLDI_BUG
166
+ #define lsx_splat_u16(v) __lsx_vreplgr2vr_h(v)
167
+ #define lsx_splat_u32(v) __lsx_vreplgr2vr_w(v)
168
+ #else
169
+ namespace {
170
+ template <uint16_t x> constexpr __m128i lsx_splat_u16_aux() {
171
+ return ((int16_t(x) < 512) && (int16_t(x) > -512))
172
+ ? __lsx_vrepli_h(
173
+ ((int16_t(x) < 512) && (int16_t(x) > -512)) ? int16_t(x) : 0)
174
+ : (vldi::const_u16<x>::valid
175
+ ? __lsx_vldi(vldi::const_u16<x>::valid
176
+ ? vldi::const_u16<x>::value
177
+ : 0)
178
+ : __lsx_vreplgr2vr_h(x));
179
+ }
180
+
181
+ template <uint32_t x> constexpr __m128i lsx_splat_u32_aux() {
182
+ return ((int32_t(x) < 512) && (int32_t(x) > -512))
183
+ ? __lsx_vrepli_w(
184
+ ((int32_t(x) < 512) && (int32_t(x) > -512)) ? int32_t(x) : 0)
185
+ : (vldi::const_u32<x>::valid
186
+ ? __lsx_vldi(vldi::const_u32<x>::valid
187
+ ? vldi::const_u32<x>::value
188
+ : 0)
189
+ : __lsx_vreplgr2vr_w(x));
190
+ }
191
+ } // namespace
192
+ #define lsx_splat_u16(v) lsx_splat_u16_aux<(v)>()
193
+ #define lsx_splat_u32(v) lsx_splat_u32_aux<(v)>()
194
+ #endif // QEMU_VLDI_BUG
195
+ #endif // lsx_splat_u16
196
+ #endif // SIMDUTF_LSX_INTRINSICS_H