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,325 @@
1
+ /* From
2
+ https://github.com/endorno/pytorch/blob/master/torch/lib/TH/generic/simd/simd.h
3
+ Highly modified.
4
+
5
+ Copyright (c) 2016- Facebook, Inc (Adam Paszke)
6
+ Copyright (c) 2014- Facebook, Inc (Soumith Chintala)
7
+ Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert)
8
+ Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu)
9
+ Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu)
10
+ Copyright (c) 2011-2013 NYU (Clement Farabet)
11
+ Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou,
12
+ Iain Melvin, Jason Weston) Copyright (c) 2006 Idiap Research Institute
13
+ (Samy Bengio) Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert,
14
+ Samy Bengio, Johnny Mariethoz)
15
+
16
+ All rights reserved.
17
+
18
+ Redistribution and use in source and binary forms, with or without
19
+ modification, are permitted provided that the following conditions are met:
20
+
21
+ 1. Redistributions of source code must retain the above copyright
22
+ notice, this list of conditions and the following disclaimer.
23
+
24
+ 2. Redistributions in binary form must reproduce the above copyright
25
+ notice, this list of conditions and the following disclaimer in the
26
+ documentation and/or other materials provided with the distribution.
27
+
28
+ 3. Neither the names of Facebook, Deepmind Technologies, NYU, NEC Laboratories
29
+ America and IDIAP Research Institute nor the names of its contributors may be
30
+ used to endorse or promote products derived from this software without
31
+ specific prior written permission.
32
+
33
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
34
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
35
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
36
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
37
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
38
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
39
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
40
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
41
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
42
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
43
+ POSSIBILITY OF SUCH DAMAGE.
44
+ */
45
+
46
+ #ifndef SIMDutf_INTERNAL_ISADETECTION_H
47
+ #define SIMDutf_INTERNAL_ISADETECTION_H
48
+
49
+ #include <cstdint>
50
+ #include <cstdlib>
51
+ #if defined(_MSC_VER)
52
+ #include <intrin.h>
53
+ #elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID)
54
+ #include <cpuid.h>
55
+ #endif
56
+
57
+ #include "simdutf/portability.h"
58
+
59
+ // RISC-V ISA detection utilities
60
+ #if SIMDUTF_IS_RISCV64 && defined(__linux__)
61
+ #include <unistd.h> // for syscall
62
+ // We define these ourselves, for backwards compatibility
63
+ struct simdutf_riscv_hwprobe {
64
+ int64_t key;
65
+ uint64_t value;
66
+ };
67
+ #define simdutf_riscv_hwprobe(...) syscall(258, __VA_ARGS__)
68
+ #define SIMDUTF_RISCV_HWPROBE_KEY_IMA_EXT_0 4
69
+ #define SIMDUTF_RISCV_HWPROBE_IMA_V (1 << 2)
70
+ #define SIMDUTF_RISCV_HWPROBE_EXT_ZVBB (1 << 17)
71
+ #endif // SIMDUTF_IS_RISCV64 && defined(__linux__)
72
+
73
+ #if defined(__loongarch__) && defined(__linux__)
74
+ #include <sys/auxv.h>
75
+ // bits/hwcap.h
76
+ // #define HWCAP_LOONGARCH_LSX (1 << 4)
77
+ // #define HWCAP_LOONGARCH_LASX (1 << 5)
78
+ #endif
79
+
80
+ namespace simdutf {
81
+ namespace internal {
82
+
83
+ enum instruction_set {
84
+ DEFAULT = 0x0,
85
+ NEON = 0x1,
86
+ AVX2 = 0x4,
87
+ SSE42 = 0x8,
88
+ PCLMULQDQ = 0x10,
89
+ BMI1 = 0x20,
90
+ BMI2 = 0x40,
91
+ ALTIVEC = 0x80,
92
+ AVX512F = 0x100,
93
+ AVX512DQ = 0x200,
94
+ AVX512IFMA = 0x400,
95
+ AVX512PF = 0x800,
96
+ AVX512ER = 0x1000,
97
+ AVX512CD = 0x2000,
98
+ AVX512BW = 0x4000,
99
+ AVX512VL = 0x8000,
100
+ AVX512VBMI2 = 0x10000,
101
+ AVX512VPOPCNTDQ = 0x2000,
102
+ RVV = 0x4000,
103
+ ZVBB = 0x8000,
104
+ LSX = 0x40000,
105
+ LASX = 0x80000,
106
+ };
107
+
108
+ #if defined(__PPC64__)
109
+
110
+ static inline uint32_t detect_supported_architectures() {
111
+ return instruction_set::ALTIVEC;
112
+ }
113
+
114
+ #elif SIMDUTF_IS_RISCV64
115
+
116
+ static inline uint32_t detect_supported_architectures() {
117
+ uint32_t host_isa = instruction_set::DEFAULT;
118
+ #if SIMDUTF_IS_RVV
119
+ host_isa |= instruction_set::RVV;
120
+ #endif
121
+ #if SIMDUTF_IS_ZVBB
122
+ host_isa |= instruction_set::ZVBB;
123
+ #endif
124
+ #if defined(__linux__)
125
+ simdutf_riscv_hwprobe probes[] = {{SIMDUTF_RISCV_HWPROBE_KEY_IMA_EXT_0, 0}};
126
+ long ret = simdutf_riscv_hwprobe(&probes, sizeof probes / sizeof *probes, 0,
127
+ nullptr, 0);
128
+ if (ret == 0) {
129
+ uint64_t extensions = probes[0].value;
130
+ if (extensions & SIMDUTF_RISCV_HWPROBE_IMA_V)
131
+ host_isa |= instruction_set::RVV;
132
+ if (extensions & SIMDUTF_RISCV_HWPROBE_EXT_ZVBB)
133
+ host_isa |= instruction_set::ZVBB;
134
+ }
135
+ #endif
136
+ #if defined(RUN_IN_SPIKE_SIMULATOR)
137
+ // Proxy Kernel does not implement yet hwprobe syscall
138
+ host_isa |= instruction_set::RVV;
139
+ #endif
140
+ return host_isa;
141
+ }
142
+
143
+ #elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
144
+
145
+ static inline uint32_t detect_supported_architectures() {
146
+ return instruction_set::NEON;
147
+ }
148
+
149
+ #elif defined(__x86_64__) || defined(_M_AMD64) // x64
150
+
151
+ namespace {
152
+ namespace cpuid_bit {
153
+ // Can be found on Intel ISA Reference for CPUID
154
+
155
+ // EAX = 0x01
156
+ constexpr uint32_t pclmulqdq = uint32_t(1)
157
+ << 1; ///< @private bit 1 of ECX for EAX=0x1
158
+ constexpr uint32_t sse42 = uint32_t(1)
159
+ << 20; ///< @private bit 20 of ECX for EAX=0x1
160
+ constexpr uint32_t osxsave =
161
+ (uint32_t(1) << 26) |
162
+ (uint32_t(1) << 27); ///< @private bits 26+27 of ECX for EAX=0x1
163
+
164
+ // EAX = 0x7f (Structured Extended Feature Flags), ECX = 0x00 (Sub-leaf)
165
+ // See: "Table 3-8. Information Returned by CPUID Instruction"
166
+ namespace ebx {
167
+ constexpr uint32_t bmi1 = uint32_t(1) << 3;
168
+ constexpr uint32_t avx2 = uint32_t(1) << 5;
169
+ constexpr uint32_t bmi2 = uint32_t(1) << 8;
170
+ constexpr uint32_t avx512f = uint32_t(1) << 16;
171
+ constexpr uint32_t avx512dq = uint32_t(1) << 17;
172
+ constexpr uint32_t avx512ifma = uint32_t(1) << 21;
173
+ constexpr uint32_t avx512cd = uint32_t(1) << 28;
174
+ constexpr uint32_t avx512bw = uint32_t(1) << 30;
175
+ constexpr uint32_t avx512vl = uint32_t(1) << 31;
176
+ } // namespace ebx
177
+
178
+ namespace ecx {
179
+ constexpr uint32_t avx512vbmi = uint32_t(1) << 1;
180
+ constexpr uint32_t avx512vbmi2 = uint32_t(1) << 6;
181
+ constexpr uint32_t avx512vnni = uint32_t(1) << 11;
182
+ constexpr uint32_t avx512bitalg = uint32_t(1) << 12;
183
+ constexpr uint32_t avx512vpopcnt = uint32_t(1) << 14;
184
+ } // namespace ecx
185
+ namespace edx {
186
+ constexpr uint32_t avx512vp2intersect = uint32_t(1) << 8;
187
+ }
188
+ namespace xcr0_bit {
189
+ constexpr uint64_t avx256_saved = uint64_t(1) << 2; ///< @private bit 2 = AVX
190
+ constexpr uint64_t avx512_saved =
191
+ uint64_t(7) << 5; ///< @private bits 5,6,7 = opmask, ZMM_hi256, hi16_ZMM
192
+ } // namespace xcr0_bit
193
+ } // namespace cpuid_bit
194
+ } // namespace
195
+
196
+ static inline void cpuid(uint32_t *eax, uint32_t *ebx, uint32_t *ecx,
197
+ uint32_t *edx) {
198
+ #if defined(_MSC_VER)
199
+ int cpu_info[4];
200
+ __cpuidex(cpu_info, *eax, *ecx);
201
+ *eax = cpu_info[0];
202
+ *ebx = cpu_info[1];
203
+ *ecx = cpu_info[2];
204
+ *edx = cpu_info[3];
205
+ #elif defined(HAVE_GCC_GET_CPUID) && defined(USE_GCC_GET_CPUID)
206
+ uint32_t level = *eax;
207
+ __get_cpuid(level, eax, ebx, ecx, edx);
208
+ #else
209
+ uint32_t a = *eax, b, c = *ecx, d;
210
+ asm volatile("cpuid\n\t" : "+a"(a), "=b"(b), "+c"(c), "=d"(d));
211
+ *eax = a;
212
+ *ebx = b;
213
+ *ecx = c;
214
+ *edx = d;
215
+ #endif
216
+ }
217
+
218
+ static inline uint64_t xgetbv() {
219
+ #if defined(_MSC_VER)
220
+ return _xgetbv(0);
221
+ #else
222
+ uint32_t xcr0_lo, xcr0_hi;
223
+ asm volatile("xgetbv\n\t" : "=a"(xcr0_lo), "=d"(xcr0_hi) : "c"(0));
224
+ return xcr0_lo | ((uint64_t)xcr0_hi << 32);
225
+ #endif
226
+ }
227
+
228
+ static inline uint32_t detect_supported_architectures() {
229
+ uint32_t eax;
230
+ uint32_t ebx = 0;
231
+ uint32_t ecx = 0;
232
+ uint32_t edx = 0;
233
+ uint32_t host_isa = 0x0;
234
+
235
+ // EBX for EAX=0x1
236
+ eax = 0x1;
237
+ cpuid(&eax, &ebx, &ecx, &edx);
238
+
239
+ if (ecx & cpuid_bit::sse42) {
240
+ host_isa |= instruction_set::SSE42;
241
+ }
242
+
243
+ if (ecx & cpuid_bit::pclmulqdq) {
244
+ host_isa |= instruction_set::PCLMULQDQ;
245
+ }
246
+
247
+ if ((ecx & cpuid_bit::osxsave) != cpuid_bit::osxsave) {
248
+ return host_isa;
249
+ }
250
+
251
+ // xgetbv for checking if the OS saves registers
252
+ uint64_t xcr0 = xgetbv();
253
+
254
+ if ((xcr0 & cpuid_bit::xcr0_bit::avx256_saved) == 0) {
255
+ return host_isa;
256
+ }
257
+ // ECX for EAX=0x7
258
+ eax = 0x7;
259
+ ecx = 0x0; // Sub-leaf = 0
260
+ cpuid(&eax, &ebx, &ecx, &edx);
261
+ if (ebx & cpuid_bit::ebx::avx2) {
262
+ host_isa |= instruction_set::AVX2;
263
+ }
264
+ if (ebx & cpuid_bit::ebx::bmi1) {
265
+ host_isa |= instruction_set::BMI1;
266
+ }
267
+ if (ebx & cpuid_bit::ebx::bmi2) {
268
+ host_isa |= instruction_set::BMI2;
269
+ }
270
+ if (!((xcr0 & cpuid_bit::xcr0_bit::avx512_saved) ==
271
+ cpuid_bit::xcr0_bit::avx512_saved)) {
272
+ return host_isa;
273
+ }
274
+ if (ebx & cpuid_bit::ebx::avx512f) {
275
+ host_isa |= instruction_set::AVX512F;
276
+ }
277
+ if (ebx & cpuid_bit::ebx::avx512bw) {
278
+ host_isa |= instruction_set::AVX512BW;
279
+ }
280
+ if (ebx & cpuid_bit::ebx::avx512cd) {
281
+ host_isa |= instruction_set::AVX512CD;
282
+ }
283
+ if (ebx & cpuid_bit::ebx::avx512dq) {
284
+ host_isa |= instruction_set::AVX512DQ;
285
+ }
286
+ if (ebx & cpuid_bit::ebx::avx512vl) {
287
+ host_isa |= instruction_set::AVX512VL;
288
+ }
289
+ if (ecx & cpuid_bit::ecx::avx512vbmi2) {
290
+ host_isa |= instruction_set::AVX512VBMI2;
291
+ }
292
+ if (ecx & cpuid_bit::ecx::avx512vpopcnt) {
293
+ host_isa |= instruction_set::AVX512VPOPCNTDQ;
294
+ }
295
+ return host_isa;
296
+ }
297
+ #elif defined(__loongarch__)
298
+
299
+ static inline uint32_t detect_supported_architectures() {
300
+ uint32_t host_isa = instruction_set::DEFAULT;
301
+ #if defined(__linux__)
302
+ uint64_t hwcap = 0;
303
+ hwcap = getauxval(AT_HWCAP);
304
+ if (hwcap & HWCAP_LOONGARCH_LSX) {
305
+ host_isa |= instruction_set::LSX;
306
+ }
307
+ if (hwcap & HWCAP_LOONGARCH_LASX) {
308
+ host_isa |= instruction_set::LASX;
309
+ }
310
+ #endif
311
+ return host_isa;
312
+ }
313
+ #else // fallback
314
+
315
+ // includes 32-bit ARM.
316
+ static inline uint32_t detect_supported_architectures() {
317
+ return instruction_set::DEFAULT;
318
+ }
319
+
320
+ #endif // end SIMD extension detection code
321
+
322
+ } // namespace internal
323
+ } // namespace simdutf
324
+
325
+ #endif // SIMDutf_INTERNAL_ISADETECTION_H
@@ -0,0 +1,285 @@
1
+ #ifndef SIMDUTF_PORTABILITY_H
2
+ #define SIMDUTF_PORTABILITY_H
3
+
4
+ #include "simdutf/compiler_check.h"
5
+
6
+ #include <cfloat>
7
+ #include <cstddef>
8
+ #include <cstdint>
9
+ #include <cstdlib>
10
+ #ifndef _WIN32
11
+ // strcasecmp, strncasecmp
12
+ #include <strings.h>
13
+ #endif
14
+
15
+ #if defined(__apple_build_version__)
16
+ #if __apple_build_version__ < 14000000
17
+ #define SIMDUTF_SPAN_DISABLED \
18
+ 1 // apple-clang/13 doesn't support std::convertible_to
19
+ #endif
20
+ #endif
21
+
22
+ #if SIMDUTF_CPLUSPLUS20
23
+ #include <version>
24
+ #if __cpp_concepts >= 201907L && __cpp_lib_span >= 202002L && \
25
+ !defined(SIMDUTF_SPAN_DISABLED)
26
+ #define SIMDUTF_SPAN 1
27
+ #endif // __cpp_concepts >= 201907L && __cpp_lib_span >= 202002L
28
+ #if __cpp_lib_atomic_ref >= 201806L
29
+ #define SIMDUTF_ATOMIC_REF 1
30
+ #endif // __cpp_lib_atomic_ref
31
+ #if __has_cpp_attribute(maybe_unused) >= 201603L
32
+ #define SIMDUTF_MAYBE_UNUSED_AVAILABLE 1
33
+ #endif // __has_cpp_attribute(maybe_unused) >= 201603L
34
+ #endif
35
+
36
+ /**
37
+ * We want to check that it is actually a little endian system at
38
+ * compile-time.
39
+ */
40
+
41
+ #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)
42
+ #define SIMDUTF_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
43
+ #elif defined(_WIN32)
44
+ #define SIMDUTF_IS_BIG_ENDIAN 0
45
+ #else
46
+ #if defined(__APPLE__) || \
47
+ defined(__FreeBSD__) // defined __BYTE_ORDER__ && defined
48
+ // __ORDER_BIG_ENDIAN__
49
+ #include <machine/endian.h>
50
+ #elif defined(sun) || \
51
+ defined(__sun) // defined(__APPLE__) || defined(__FreeBSD__)
52
+ #include <sys/byteorder.h>
53
+ #else // defined(__APPLE__) || defined(__FreeBSD__)
54
+
55
+ #ifdef __has_include
56
+ #if __has_include(<endian.h>)
57
+ #include <endian.h>
58
+ #endif //__has_include(<endian.h>)
59
+ #endif //__has_include
60
+
61
+ #endif // defined(__APPLE__) || defined(__FreeBSD__)
62
+
63
+ #ifndef !defined(__BYTE_ORDER__) || !defined(__ORDER_LITTLE_ENDIAN__)
64
+ #define SIMDUTF_IS_BIG_ENDIAN 0
65
+ #endif
66
+
67
+ #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
68
+ #define SIMDUTF_IS_BIG_ENDIAN 0
69
+ #else // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
70
+ #define SIMDUTF_IS_BIG_ENDIAN 1
71
+ #endif // __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
72
+
73
+ #endif // defined __BYTE_ORDER__ && defined __ORDER_BIG_ENDIAN__
74
+
75
+ /**
76
+ * At this point in time, SIMDUTF_IS_BIG_ENDIAN is defined.
77
+ */
78
+
79
+ #ifdef _MSC_VER
80
+ #define SIMDUTF_VISUAL_STUDIO 1
81
+ /**
82
+ * We want to differentiate carefully between
83
+ * clang under visual studio and regular visual
84
+ * studio.
85
+ *
86
+ * Under clang for Windows, we enable:
87
+ * * target pragmas so that part and only part of the
88
+ * code gets compiled for advanced instructions.
89
+ *
90
+ */
91
+ #ifdef __clang__
92
+ // clang under visual studio
93
+ #define SIMDUTF_CLANG_VISUAL_STUDIO 1
94
+ #else
95
+ // just regular visual studio (best guess)
96
+ #define SIMDUTF_REGULAR_VISUAL_STUDIO 1
97
+ #endif // __clang__
98
+ #endif // _MSC_VER
99
+
100
+ #ifdef SIMDUTF_REGULAR_VISUAL_STUDIO
101
+ // https://en.wikipedia.org/wiki/C_alternative_tokens
102
+ // This header should have no effect, except maybe
103
+ // under Visual Studio.
104
+ #include <iso646.h>
105
+ #endif
106
+
107
+ #if (defined(__x86_64__) || defined(_M_AMD64)) && !defined(_M_ARM64EC)
108
+ #define SIMDUTF_IS_X86_64 1
109
+ #elif defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
110
+ #define SIMDUTF_IS_ARM64 1
111
+ #elif defined(__PPC64__) || defined(_M_PPC64)
112
+ #if defined(__VEC__) && defined(__ALTIVEC__)
113
+ #define SIMDUTF_IS_PPC64 1
114
+ #endif
115
+ #elif defined(__s390__)
116
+ // s390 IBM system. Big endian.
117
+ #elif (defined(__riscv) || defined(__riscv__)) && __riscv_xlen == 64
118
+ // RISC-V 64-bit
119
+ #define SIMDUTF_IS_RISCV64 1
120
+
121
+ // #if __riscv_v_intrinsic >= 1000000
122
+ // #define SIMDUTF_HAS_RVV_INTRINSICS 1
123
+ // #define SIMDUTF_HAS_RVV_TARGET_REGION 1
124
+ // #elif ...
125
+ // Check for special compiler versions that implement pre v1.0 intrinsics
126
+ #if __riscv_v_intrinsic >= 11000
127
+ #define SIMDUTF_HAS_RVV_INTRINSICS 1
128
+ #endif
129
+
130
+ #define SIMDUTF_HAS_ZVBB_INTRINSICS \
131
+ 0 // there is currently no way to detect this
132
+
133
+ #if SIMDUTF_HAS_RVV_INTRINSICS && __riscv_vector && \
134
+ __riscv_v_min_vlen >= 128 && __riscv_v_elen >= 64
135
+ // RISC-V V extension
136
+ #define SIMDUTF_IS_RVV 1
137
+ #if SIMDUTF_HAS_ZVBB_INTRINSICS && __riscv_zvbb >= 1000000
138
+ // RISC-V Vector Basic Bit-manipulation
139
+ #define SIMDUTF_IS_ZVBB 1
140
+ #endif
141
+ #endif
142
+
143
+ #elif defined(__loongarch_lp64)
144
+ #if defined(__loongarch_sx) && defined(__loongarch_asx)
145
+ #define SIMDUTF_IS_LSX 1
146
+ #define SIMDUTF_IS_LASX 1 // We can always run both
147
+ #elif defined(__loongarch_sx)
148
+ #define SIMDUTF_IS_LSX 1
149
+ // Adjust for runtime dispatching support.
150
+ #if defined(__GNUC__) && !defined(__clang__) && \
151
+ !defined(__INTEL_COMPILER) && !defined(__NVCOMPILER)
152
+ #if __GNUC__ > 15 || (__GNUC__ == 15 && __GNUC_MINOR__ >= 0)
153
+ // We are ok, we will support runtime dispatch for LASX.
154
+ #else
155
+ // We disable runtime dispatch for LASX, which means that we will not be
156
+ // able to use LASX even if it is supported by the hardware. Loongson
157
+ // users should update to GCC 15 or better.
158
+ #define SIMDUTF_IMPLEMENTATION_LASX 0
159
+ #endif
160
+ #else
161
+ // We are not using GCC, so we assume that we can support runtime dispatch
162
+ // for LASX. https://godbolt.org/z/jcMnrjYhs
163
+ #define SIMDUTF_IMPLEMENTATION_LASX 0
164
+ #endif
165
+ #endif
166
+ #else
167
+ // The simdutf library is designed
168
+ // for 64-bit processors and it seems that you are not
169
+ // compiling for a known 64-bit platform. Please
170
+ // use a 64-bit target such as x64 or 64-bit ARM for best performance.
171
+ #define SIMDUTF_IS_32BITS 1
172
+
173
+ // We do not support 32-bit platforms, but it can be
174
+ // handy to identify them.
175
+ #if defined(_M_IX86) || defined(__i386__)
176
+ #define SIMDUTF_IS_X86_32BITS 1
177
+ #elif defined(__arm__) || defined(_M_ARM)
178
+ #define SIMDUTF_IS_ARM_32BITS 1
179
+ #elif defined(__PPC__) || defined(_M_PPC)
180
+ #define SIMDUTF_IS_PPC_32BITS 1
181
+ #endif
182
+
183
+ #endif // defined(__x86_64__) || defined(_M_AMD64)
184
+
185
+ #ifdef SIMDUTF_IS_32BITS
186
+ #ifndef SIMDUTF_NO_PORTABILITY_WARNING
187
+ // In the future, we may want to warn users of 32-bit systems that
188
+ // the simdutf does not support accelerated kernels for such systems.
189
+ #endif // SIMDUTF_NO_PORTABILITY_WARNING
190
+ #endif // SIMDUTF_IS_32BITS
191
+
192
+ // this is almost standard?
193
+ #define SIMDUTF_STRINGIFY_IMPLEMENTATION_(a) #a
194
+ #define SIMDUTF_STRINGIFY(a) SIMDUTF_STRINGIFY_IMPLEMENTATION_(a)
195
+
196
+ // Our fast kernels require 64-bit systems.
197
+ //
198
+ // On 32-bit x86, we lack 64-bit popcnt, lzcnt, blsr instructions.
199
+ // Furthermore, the number of SIMD registers is reduced.
200
+ //
201
+ // On 32-bit ARM, we would have smaller registers.
202
+ //
203
+ // The simdutf users should still have the fallback kernel. It is
204
+ // slower, but it should run everywhere.
205
+
206
+ //
207
+ // Enable valid runtime implementations, and select
208
+ // SIMDUTF_BUILTIN_IMPLEMENTATION
209
+ //
210
+
211
+ // We are going to use runtime dispatch.
212
+ #if defined(SIMDUTF_IS_X86_64) || defined(SIMDUTF_IS_LSX)
213
+ #ifdef __clang__
214
+ // clang does not have GCC push pop
215
+ // warning: clang attribute push can't be used within a namespace in clang
216
+ // up til 8.0 so SIMDUTF_TARGET_REGION and SIMDUTF_UNTARGET_REGION must be
217
+ // *outside* of a namespace.
218
+ #define SIMDUTF_TARGET_REGION(T) \
219
+ _Pragma(SIMDUTF_STRINGIFY(clang attribute push( \
220
+ __attribute__((target(T))), apply_to = function)))
221
+ #define SIMDUTF_UNTARGET_REGION _Pragma("clang attribute pop")
222
+ #elif defined(__GNUC__)
223
+ // GCC is easier
224
+ #define SIMDUTF_TARGET_REGION(T) \
225
+ _Pragma("GCC push_options") _Pragma(SIMDUTF_STRINGIFY(GCC target(T)))
226
+ #define SIMDUTF_UNTARGET_REGION _Pragma("GCC pop_options")
227
+ #endif // clang then gcc
228
+
229
+ #endif // defined(SIMDUTF_IS_X86_64) || defined(SIMDUTF_IS_LSX)
230
+
231
+ // Default target region macros don't do anything.
232
+ #ifndef SIMDUTF_TARGET_REGION
233
+ #define SIMDUTF_TARGET_REGION(T)
234
+ #define SIMDUTF_UNTARGET_REGION
235
+ #endif
236
+
237
+ // Is threading enabled?
238
+ #if defined(_REENTRANT) || defined(_MT)
239
+ #ifndef SIMDUTF_THREADS_ENABLED
240
+ #define SIMDUTF_THREADS_ENABLED
241
+ #endif
242
+ #endif
243
+
244
+ // workaround for large stack sizes under -O0.
245
+ // https://github.com/simdutf/simdutf/issues/691
246
+ #ifdef __APPLE__
247
+ #ifndef __OPTIMIZE__
248
+ // Apple systems have small stack sizes in secondary threads.
249
+ // Lack of compiler optimization may generate high stack usage.
250
+ // Users may want to disable threads for safety, but only when
251
+ // in debug mode which we detect by the fact that the __OPTIMIZE__
252
+ // macro is not defined.
253
+ #undef SIMDUTF_THREADS_ENABLED
254
+ #endif
255
+ #endif
256
+
257
+ #ifdef SIMDUTF_VISUAL_STUDIO
258
+ // This is one case where we do not distinguish between
259
+ // regular visual studio and clang under visual studio.
260
+ // clang under Windows has _stricmp (like visual studio) but not strcasecmp
261
+ // (as clang normally has)
262
+ #define simdutf_strcasecmp _stricmp
263
+ #define simdutf_strncasecmp _strnicmp
264
+ #else
265
+ // The strcasecmp, strncasecmp, and strcasestr functions do not work with
266
+ // multibyte strings (e.g. UTF-8). So they are only useful for ASCII in our
267
+ // context.
268
+ // https://www.gnu.org/software/libunistring/manual/libunistring.html#char-_002a-strings
269
+ #define simdutf_strcasecmp strcasecmp
270
+ #define simdutf_strncasecmp strncasecmp
271
+ #endif
272
+
273
+ #if defined(__GNUC__) && !defined(__clang__)
274
+ #if __GNUC__ >= 11
275
+ #define SIMDUTF_GCC11ORMORE 1
276
+ #endif // __GNUC__ >= 11
277
+ #if __GNUC__ == 10
278
+ #define SIMDUTF_GCC10 1
279
+ #endif // __GNUC__ == 10
280
+ #if __GNUC__ < 10
281
+ #define SIMDUTF_GCC9OROLDER 1
282
+ #endif // __GNUC__ == 10
283
+ #endif // defined(__GNUC__) && !defined(__clang__)
284
+
285
+ #endif // SIMDUTF_PORTABILITY_H
@@ -0,0 +1,86 @@
1
+ #ifndef SIMDUTF_ASCII_H
2
+ #define SIMDUTF_ASCII_H
3
+
4
+ namespace simdutf {
5
+ namespace scalar {
6
+ namespace {
7
+ namespace ascii {
8
+
9
+ template <class InputPtr>
10
+ #if SIMDUTF_CPLUSPLUS20
11
+ requires simdutf::detail::indexes_into_byte_like<InputPtr>
12
+ #endif
13
+ simdutf_warn_unused simdutf_constexpr23 bool validate(InputPtr data,
14
+ size_t len) noexcept {
15
+ uint64_t pos = 0;
16
+
17
+ #if SIMDUTF_CPLUSPLUS23
18
+ // avoid memcpy during constant evaluation
19
+ if !consteval
20
+ #endif
21
+ // process in blocks of 16 bytes when possible
22
+ {
23
+ for (; pos + 16 <= len; pos += 16) {
24
+ uint64_t v1;
25
+ std::memcpy(&v1, data + pos, sizeof(uint64_t));
26
+ uint64_t v2;
27
+ std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t));
28
+ uint64_t v{v1 | v2};
29
+ if ((v & 0x8080808080808080) != 0) {
30
+ return false;
31
+ }
32
+ }
33
+ }
34
+
35
+ // process the tail byte-by-byte
36
+ for (; pos < len; pos++) {
37
+ if (static_cast<std::uint8_t>(data[pos]) >= 0b10000000) {
38
+ return false;
39
+ }
40
+ }
41
+ return true;
42
+ }
43
+ template <class InputPtr>
44
+ #if SIMDUTF_CPLUSPLUS20
45
+ requires simdutf::detail::indexes_into_byte_like<InputPtr>
46
+ #endif
47
+ simdutf_warn_unused simdutf_constexpr23 result
48
+ validate_with_errors(InputPtr data, size_t len) noexcept {
49
+ size_t pos = 0;
50
+ #if SIMDUTF_CPLUSPLUS23
51
+ // avoid memcpy during constant evaluation
52
+ if !consteval
53
+ #endif
54
+ {
55
+ // process in blocks of 16 bytes when possible
56
+ for (; pos + 16 <= len; pos += 16) {
57
+ uint64_t v1;
58
+ std::memcpy(&v1, data + pos, sizeof(uint64_t));
59
+ uint64_t v2;
60
+ std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t));
61
+ uint64_t v{v1 | v2};
62
+ if ((v & 0x8080808080808080) != 0) {
63
+ for (; pos < len; pos++) {
64
+ if (static_cast<std::uint8_t>(data[pos]) >= 0b10000000) {
65
+ return result(error_code::TOO_LARGE, pos);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ // process the tail byte-by-byte
73
+ for (; pos < len; pos++) {
74
+ if (static_cast<std::uint8_t>(data[pos]) >= 0b10000000) {
75
+ return result(error_code::TOO_LARGE, pos);
76
+ }
77
+ }
78
+ return result(error_code::SUCCESS, pos);
79
+ }
80
+
81
+ } // namespace ascii
82
+ } // unnamed namespace
83
+ } // namespace scalar
84
+ } // namespace simdutf
85
+
86
+ #endif