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.
- package/QuickCrypto.podspec +12 -38
- package/README.md +2 -0
- package/android/CMakeLists.txt +3 -0
- package/android/build.gradle +5 -1
- package/cpp/argon2/HybridArgon2.cpp +10 -3
- package/cpp/blake3/HybridBlake3.cpp +5 -3
- package/cpp/cipher/CCMCipher.cpp +29 -16
- package/cpp/cipher/CCMCipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Cipher.cpp +14 -18
- package/cpp/cipher/ChaCha20Cipher.hpp +2 -4
- package/cpp/cipher/ChaCha20Poly1305Cipher.cpp +34 -23
- package/cpp/cipher/ChaCha20Poly1305Cipher.hpp +2 -4
- package/cpp/cipher/GCMCipher.cpp +14 -15
- package/cpp/cipher/HybridCipher.cpp +39 -36
- package/cpp/cipher/HybridCipher.hpp +17 -1
- package/cpp/cipher/HybridRsaCipher.cpp +74 -29
- package/cpp/cipher/OCBCipher.cpp +4 -3
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +14 -13
- package/cpp/cipher/XSalsa20Cipher.cpp +72 -6
- package/cpp/cipher/XSalsa20Cipher.hpp +25 -3
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +21 -25
- package/cpp/dh/HybridDiffieHellman.cpp +29 -0
- package/cpp/ec/HybridEcKeyPair.cpp +35 -33
- package/cpp/ec/HybridEcKeyPair.hpp +3 -7
- package/cpp/ecdh/HybridECDH.cpp +23 -0
- package/cpp/ed25519/HybridEdKeyPair.cpp +73 -117
- package/cpp/ed25519/HybridEdKeyPair.hpp +5 -9
- package/cpp/hash/HybridHash.cpp +5 -7
- package/cpp/hkdf/HybridHkdf.cpp +6 -4
- package/cpp/hmac/HybridHmac.cpp +4 -6
- package/cpp/kmac/HybridKmac.cpp +4 -4
- package/cpp/mldsa/HybridMlDsaKeyPair.cpp +37 -49
- package/cpp/mlkem/HybridMlKemKeyPair.cpp +39 -43
- package/cpp/pbkdf2/HybridPbkdf2.cpp +7 -8
- package/cpp/rsa/HybridRsaKeyPair.cpp +5 -8
- package/cpp/rsa/HybridRsaKeyPair.hpp +4 -7
- package/cpp/scrypt/HybridScrypt.cpp +6 -4
- package/cpp/sign/HybridSignHandle.cpp +25 -68
- package/cpp/sign/HybridVerifyHandle.cpp +23 -60
- package/cpp/utils/HybridUtils.cpp +213 -111
- package/cpp/utils/HybridUtils.hpp +9 -2
- package/cpp/utils/QuickCryptoUtils.hpp +72 -0
- package/deps/simdutf/LICENSE-APACHE +201 -0
- package/deps/simdutf/LICENSE-MIT +18 -0
- package/deps/simdutf/README.md +2782 -0
- package/deps/simdutf/include/simdutf/avx512.h +79 -0
- package/deps/simdutf/include/simdutf/base64_implementation.h +158 -0
- package/deps/simdutf/include/simdutf/base64_tables.h +887 -0
- package/deps/simdutf/include/simdutf/common_defs.h +186 -0
- package/deps/simdutf/include/simdutf/compiler_check.h +50 -0
- package/deps/simdutf/include/simdutf/constexpr_ptr.h +138 -0
- package/deps/simdutf/include/simdutf/encoding_types.h +189 -0
- package/deps/simdutf/include/simdutf/error.h +126 -0
- package/deps/simdutf/include/simdutf/implementation.h +7081 -0
- package/deps/simdutf/include/simdutf/internal/isadetection.h +325 -0
- package/deps/simdutf/include/simdutf/portability.h +285 -0
- package/deps/simdutf/include/simdutf/scalar/ascii.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/atomic_util.h +105 -0
- package/deps/simdutf/include/simdutf/scalar/base64.h +911 -0
- package/deps/simdutf/include/simdutf/scalar/latin1.h +26 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf16/latin1_to_utf16.h +52 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf32/latin1_to_utf32.h +27 -0
- package/deps/simdutf/include/simdutf/scalar/latin1_to_utf8/latin1_to_utf8.h +191 -0
- package/deps/simdutf/include/simdutf/scalar/swap_bytes.h +35 -0
- package/deps/simdutf/include/simdutf/scalar/utf16.h +226 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/utf16_to_latin1.h +108 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_latin1/valid_utf16_to_latin1.h +40 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/utf16_to_utf32.h +86 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf32/valid_utf16_to_utf32.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/utf16_to_utf8.h +295 -0
- package/deps/simdutf/include/simdutf/scalar/utf16_to_utf8/valid_utf16_to_utf8.h +91 -0
- package/deps/simdutf/include/simdutf/scalar/utf32.h +82 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/utf32_to_latin1.h +68 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_latin1/valid_utf32_to_latin1.h +67 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/utf32_to_utf16.h +84 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf16/valid_utf32_to_utf16.h +44 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/utf32_to_utf8.h +142 -0
- package/deps/simdutf/include/simdutf/scalar/utf32_to_utf8/valid_utf32_to_utf8.h +72 -0
- package/deps/simdutf/include/simdutf/scalar/utf8.h +326 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/utf8_to_latin1.h +225 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_latin1/valid_utf8_to_latin1.h +87 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/utf8_to_utf16.h +342 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf16/valid_utf8_to_utf16.h +106 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/utf8_to_utf32.h +299 -0
- package/deps/simdutf/include/simdutf/scalar/utf8_to_utf32/valid_utf8_to_utf32.h +83 -0
- package/deps/simdutf/include/simdutf/simdutf_version.h +26 -0
- package/deps/simdutf/include/simdutf.h +26 -0
- package/deps/simdutf/include/simdutf_c.h +342 -0
- package/deps/simdutf/src/arm64/arm_base64.cpp +791 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf16.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf32.cpp +24 -0
- package/deps/simdutf/src/arm64/arm_convert_latin1_to_utf8.cpp +70 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_latin1.cpp +61 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf32.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_convert_utf16_to_utf8.cpp +780 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_latin1.cpp +60 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf16.cpp +208 -0
- package/deps/simdutf/src/arm64/arm_convert_utf32_to_utf8.cpp +505 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf16.cpp +313 -0
- package/deps/simdutf/src/arm64/arm_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/arm64/arm_find.cpp +199 -0
- package/deps/simdutf/src/arm64/arm_utf16fix.cpp +185 -0
- package/deps/simdutf/src/arm64/arm_validate_utf16.cpp +165 -0
- package/deps/simdutf/src/arm64/arm_validate_utf32le.cpp +65 -0
- package/deps/simdutf/src/arm64/implementation.cpp +1442 -0
- package/deps/simdutf/src/encoding_types.cpp +67 -0
- package/deps/simdutf/src/error.cpp +3 -0
- package/deps/simdutf/src/fallback/implementation.cpp +589 -0
- package/deps/simdutf/src/generic/ascii_validation.h +50 -0
- package/deps/simdutf/src/generic/base64.h +233 -0
- package/deps/simdutf/src/generic/base64lengths.h +63 -0
- package/deps/simdutf/src/generic/buf_block_reader.h +109 -0
- package/deps/simdutf/src/generic/find.h +75 -0
- package/deps/simdutf/src/generic/utf16/change_endianness.h +24 -0
- package/deps/simdutf/src/generic/utf16/count_code_points_bytemask.h +58 -0
- package/deps/simdutf/src/generic/utf16/to_well_formed.h +93 -0
- package/deps/simdutf/src/generic/utf16/utf32_length_from_utf16.h +15 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16.h +35 -0
- package/deps/simdutf/src/generic/utf16/utf8_length_from_utf16_bytemask.h +199 -0
- package/deps/simdutf/src/generic/utf16.h +73 -0
- package/deps/simdutf/src/generic/utf32.h +136 -0
- package/deps/simdutf/src/generic/utf8/utf16_length_from_utf8_bytemask.h +53 -0
- package/deps/simdutf/src/generic/utf8.h +92 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/utf8_to_latin1.h +316 -0
- package/deps/simdutf/src/generic/utf8_to_latin1/valid_utf8_to_latin1.h +78 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/utf8_to_utf16.h +332 -0
- package/deps/simdutf/src/generic/utf8_to_utf16/valid_utf8_to_utf16.h +74 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/utf8_to_utf32.h +318 -0
- package/deps/simdutf/src/generic/utf8_to_utf32/valid_utf8_to_utf32.h +42 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_lookup4_algorithm.h +223 -0
- package/deps/simdutf/src/generic/utf8_validation/utf8_validator.h +84 -0
- package/deps/simdutf/src/generic/validate_utf16.h +164 -0
- package/deps/simdutf/src/generic/validate_utf32.h +99 -0
- package/deps/simdutf/src/haswell/avx2_base64.cpp +837 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf16.cpp +28 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf32.cpp +20 -0
- package/deps/simdutf/src/haswell/avx2_convert_latin1_to_utf8.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_latin1.cpp +83 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf32.cpp +210 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf16_to_utf8.cpp +602 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_latin1.cpp +116 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf16.cpp +164 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf32_to_utf8.cpp +569 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_latin1.cpp +60 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf16.cpp +195 -0
- package/deps/simdutf/src/haswell/avx2_convert_utf8_to_utf32.cpp +135 -0
- package/deps/simdutf/src/haswell/avx2_utf16fix.cpp +173 -0
- package/deps/simdutf/src/haswell/avx2_validate_utf16.cpp +17 -0
- package/deps/simdutf/src/haswell/implementation.cpp +1447 -0
- package/deps/simdutf/src/icelake/icelake_ascii_validation.inl.cpp +19 -0
- package/deps/simdutf/src/icelake/icelake_base64.inl.cpp +630 -0
- package/deps/simdutf/src/icelake/icelake_common.inl.cpp +37 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf16.inl.cpp +36 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf32.inl.cpp +23 -0
- package/deps/simdutf/src/icelake/icelake_convert_latin1_to_utf8.inl.cpp +107 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_latin1.inl.cpp +103 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf32.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf16_to_utf8.inl.cpp +206 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_latin1.inl.cpp +74 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf16.inl.cpp +338 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf32_to_utf8.inl.cpp +574 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_latin1.inl.cpp +104 -0
- package/deps/simdutf/src/icelake/icelake_convert_utf8_to_utf16.inl.cpp +75 -0
- package/deps/simdutf/src/icelake/icelake_convert_valid_utf8_to_latin1.inl.cpp +69 -0
- package/deps/simdutf/src/icelake/icelake_find.inl.cpp +146 -0
- package/deps/simdutf/src/icelake/icelake_from_utf8.inl.cpp +266 -0
- package/deps/simdutf/src/icelake/icelake_from_valid_utf8.inl.cpp +136 -0
- package/deps/simdutf/src/icelake/icelake_macros.inl.cpp +143 -0
- package/deps/simdutf/src/icelake/icelake_utf16fix.cpp +138 -0
- package/deps/simdutf/src/icelake/icelake_utf32_validation.inl.cpp +63 -0
- package/deps/simdutf/src/icelake/icelake_utf8_common.inl.cpp +753 -0
- package/deps/simdutf/src/icelake/icelake_utf8_length_from_utf16.inl.cpp +269 -0
- package/deps/simdutf/src/icelake/icelake_utf8_validation.inl.cpp +116 -0
- package/deps/simdutf/src/icelake/implementation.cpp +1903 -0
- package/deps/simdutf/src/implementation.cpp +2526 -0
- package/deps/simdutf/src/lasx/implementation.cpp +1531 -0
- package/deps/simdutf/src/lasx/lasx_base64.cpp +695 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf16.cpp +76 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf32.cpp +55 -0
- package/deps/simdutf/src/lasx/lasx_convert_latin1_to_utf8.cpp +65 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf32.cpp +183 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf16_to_utf8.cpp +550 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_latin1.cpp +73 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf16.cpp +218 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_latin1.cpp +72 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf16.cpp +296 -0
- package/deps/simdutf/src/lasx/lasx_convert_utf8_to_utf32.cpp +190 -0
- package/deps/simdutf/src/lasx/lasx_find.cpp +64 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lasx/lasx_validate_utf32le.cpp +84 -0
- package/deps/simdutf/src/lsx/implementation.cpp +1417 -0
- package/deps/simdutf/src/lsx/lsx_base64.cpp +675 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf16.cpp +39 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf32.cpp +27 -0
- package/deps/simdutf/src/lsx/lsx_convert_latin1_to_utf8.cpp +56 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_latin1.cpp +64 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf32.cpp +133 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf16_to_utf8.cpp +518 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_latin1.cpp +66 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf16.cpp +155 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf32_to_utf8.cpp +459 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_latin1.cpp +75 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf16.cpp +291 -0
- package/deps/simdutf/src/lsx/lsx_convert_utf8_to_utf32.cpp +179 -0
- package/deps/simdutf/src/lsx/lsx_find.cpp +60 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf16.cpp +13 -0
- package/deps/simdutf/src/lsx/lsx_validate_utf32le.cpp +68 -0
- package/deps/simdutf/src/ppc64/implementation.cpp +992 -0
- package/deps/simdutf/src/ppc64/ppc64_base64.cpp +480 -0
- package/deps/simdutf/src/ppc64/ppc64_base64_internal_tests.cpp +401 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf16.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf32.cpp +12 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_latin1_to_utf8.cpp +149 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_latin1.cpp +67 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf32.cpp +87 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf16_to_utf8.cpp +296 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_latin1.cpp +57 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf16.cpp +117 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf32_to_utf8.cpp +166 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_latin1.cpp +69 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf16.cpp +211 -0
- package/deps/simdutf/src/ppc64/ppc64_convert_utf8_to_utf32.cpp +153 -0
- package/deps/simdutf/src/ppc64/ppc64_utf16_to_utf8_tables.h +1011 -0
- package/deps/simdutf/src/ppc64/ppc64_utf8_length_from_latin1.cpp +37 -0
- package/deps/simdutf/src/ppc64/ppc64_validate_utf16.cpp +19 -0
- package/deps/simdutf/src/ppc64/templates.cpp +91 -0
- package/deps/simdutf/src/rvv/implementation.cpp +138 -0
- package/deps/simdutf/src/rvv/rvv_find.cpp +27 -0
- package/deps/simdutf/src/rvv/rvv_helpers.inl.cpp +23 -0
- package/deps/simdutf/src/rvv/rvv_latin1_to.inl.cpp +71 -0
- package/deps/simdutf/src/rvv/rvv_length_from.inl.cpp +164 -0
- package/deps/simdutf/src/rvv/rvv_utf16_to.inl.cpp +399 -0
- package/deps/simdutf/src/rvv/rvv_utf16fix.cpp +110 -0
- package/deps/simdutf/src/rvv/rvv_utf32_to.inl.cpp +307 -0
- package/deps/simdutf/src/rvv/rvv_utf8_to.inl.cpp +435 -0
- package/deps/simdutf/src/rvv/rvv_validate.inl.cpp +275 -0
- package/deps/simdutf/src/simdutf/arm64/begin.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/bitmanipulation.h +34 -0
- package/deps/simdutf/src/simdutf/arm64/end.h +2 -0
- package/deps/simdutf/src/simdutf/arm64/implementation.h +307 -0
- package/deps/simdutf/src/simdutf/arm64/intrinsics.h +10 -0
- package/deps/simdutf/src/simdutf/arm64/simd.h +547 -0
- package/deps/simdutf/src/simdutf/arm64/simd16-inl.h +403 -0
- package/deps/simdutf/src/simdutf/arm64/simd32-inl.h +129 -0
- package/deps/simdutf/src/simdutf/arm64/simd64-inl.h +28 -0
- package/deps/simdutf/src/simdutf/arm64.h +43 -0
- package/deps/simdutf/src/simdutf/fallback/begin.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/bitmanipulation.h +13 -0
- package/deps/simdutf/src/simdutf/fallback/end.h +1 -0
- package/deps/simdutf/src/simdutf/fallback/implementation.h +331 -0
- package/deps/simdutf/src/simdutf/fallback.h +42 -0
- package/deps/simdutf/src/simdutf/haswell/begin.h +15 -0
- package/deps/simdutf/src/simdutf/haswell/bitmanipulation.h +35 -0
- package/deps/simdutf/src/simdutf/haswell/end.h +13 -0
- package/deps/simdutf/src/simdutf/haswell/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/haswell/intrinsics.h +67 -0
- package/deps/simdutf/src/simdutf/haswell/simd.h +363 -0
- package/deps/simdutf/src/simdutf/haswell/simd16-inl.h +261 -0
- package/deps/simdutf/src/simdutf/haswell/simd32-inl.h +111 -0
- package/deps/simdutf/src/simdutf/haswell/simd64-inl.h +34 -0
- package/deps/simdutf/src/simdutf/haswell.h +63 -0
- package/deps/simdutf/src/simdutf/icelake/begin.h +14 -0
- package/deps/simdutf/src/simdutf/icelake/bitmanipulation.h +44 -0
- package/deps/simdutf/src/simdutf/icelake/end.h +12 -0
- package/deps/simdutf/src/simdutf/icelake/implementation.h +346 -0
- package/deps/simdutf/src/simdutf/icelake/intrinsics.h +138 -0
- package/deps/simdutf/src/simdutf/icelake/simd.h +17 -0
- package/deps/simdutf/src/simdutf/icelake/simd16-inl.h +90 -0
- package/deps/simdutf/src/simdutf/icelake/simd32-inl.h +47 -0
- package/deps/simdutf/src/simdutf/icelake.h +81 -0
- package/deps/simdutf/src/simdutf/lasx/begin.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lasx/end.h +8 -0
- package/deps/simdutf/src/simdutf/lasx/implementation.h +310 -0
- package/deps/simdutf/src/simdutf/lasx/intrinsics.h +319 -0
- package/deps/simdutf/src/simdutf/lasx/simd.h +551 -0
- package/deps/simdutf/src/simdutf/lasx/simd16-inl.h +234 -0
- package/deps/simdutf/src/simdutf/lasx/simd32-inl.h +74 -0
- package/deps/simdutf/src/simdutf/lasx/simd64-inl.h +52 -0
- package/deps/simdutf/src/simdutf/lasx.h +49 -0
- package/deps/simdutf/src/simdutf/lsx/begin.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/bitmanipulation.h +25 -0
- package/deps/simdutf/src/simdutf/lsx/end.h +2 -0
- package/deps/simdutf/src/simdutf/lsx/implementation.h +309 -0
- package/deps/simdutf/src/simdutf/lsx/intrinsics.h +196 -0
- package/deps/simdutf/src/simdutf/lsx/simd.h +421 -0
- package/deps/simdutf/src/simdutf/lsx/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/lsx/simd32-inl.h +69 -0
- package/deps/simdutf/src/simdutf/lsx/simd64-inl.h +50 -0
- package/deps/simdutf/src/simdutf/lsx.h +52 -0
- package/deps/simdutf/src/simdutf/ppc64/begin.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/bitmanipulation.h +29 -0
- package/deps/simdutf/src/simdutf/ppc64/end.h +1 -0
- package/deps/simdutf/src/simdutf/ppc64/implementation.h +348 -0
- package/deps/simdutf/src/simdutf/ppc64/intrinsics.h +19 -0
- package/deps/simdutf/src/simdutf/ppc64/simd.h +177 -0
- package/deps/simdutf/src/simdutf/ppc64/simd16-inl.h +327 -0
- package/deps/simdutf/src/simdutf/ppc64/simd32-inl.h +247 -0
- package/deps/simdutf/src/simdutf/ppc64/simd8-inl.h +618 -0
- package/deps/simdutf/src/simdutf/ppc64.h +40 -0
- package/deps/simdutf/src/simdutf/rvv/begin.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/end.h +7 -0
- package/deps/simdutf/src/simdutf/rvv/implementation.h +321 -0
- package/deps/simdutf/src/simdutf/rvv/intrinsics.h +131 -0
- package/deps/simdutf/src/simdutf/rvv.h +41 -0
- package/deps/simdutf/src/simdutf/westmere/begin.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/bitmanipulation.h +37 -0
- package/deps/simdutf/src/simdutf/westmere/end.h +8 -0
- package/deps/simdutf/src/simdutf/westmere/implementation.h +338 -0
- package/deps/simdutf/src/simdutf/westmere/intrinsics.h +38 -0
- package/deps/simdutf/src/simdutf/westmere/simd.h +379 -0
- package/deps/simdutf/src/simdutf/westmere/simd16-inl.h +242 -0
- package/deps/simdutf/src/simdutf/westmere/simd32-inl.h +151 -0
- package/deps/simdutf/src/simdutf/westmere/simd64-inl.h +33 -0
- package/deps/simdutf/src/simdutf/westmere.h +59 -0
- package/deps/simdutf/src/simdutf.cpp +152 -0
- package/deps/simdutf/src/simdutf_c.cpp +525 -0
- package/deps/simdutf/src/tables/utf16_to_utf8_tables.h +768 -0
- package/deps/simdutf/src/tables/utf32_to_utf16_tables.h +53 -0
- package/deps/simdutf/src/tables/utf8_to_utf16_tables.h +826 -0
- package/deps/simdutf/src/westmere/implementation.cpp +1479 -0
- package/deps/simdutf/src/westmere/internal/loader.cpp +7 -0
- package/deps/simdutf/src/westmere/internal/write_v_u16_11bits_to_utf8.cpp +66 -0
- package/deps/simdutf/src/westmere/sse_base64.cpp +672 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf16.cpp +21 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf32.cpp +31 -0
- package/deps/simdutf/src/westmere/sse_convert_latin1_to_utf8.cpp +71 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_latin1.cpp +70 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf32.cpp +206 -0
- package/deps/simdutf/src/westmere/sse_convert_utf16_to_utf8.cpp +504 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_latin1.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf16.cpp +209 -0
- package/deps/simdutf/src/westmere/sse_convert_utf32_to_utf8.cpp +589 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_latin1.cpp +58 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf16.cpp +197 -0
- package/deps/simdutf/src/westmere/sse_convert_utf8_to_utf32.cpp +141 -0
- package/deps/simdutf/src/westmere/sse_utf16fix.cpp +82 -0
- package/deps/simdutf/src/westmere/sse_validate_utf16.cpp +17 -0
- package/lib/commonjs/argon2.js +51 -2
- package/lib/commonjs/argon2.js.map +1 -1
- package/lib/commonjs/cipher.js +109 -11
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dsa.js +8 -2
- package/lib/commonjs/dsa.js.map +1 -1
- package/lib/commonjs/hash.js +15 -5
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/hkdf.js +33 -6
- package/lib/commonjs/hkdf.js.map +1 -1
- package/lib/commonjs/hmac.js +15 -5
- package/lib/commonjs/hmac.js.map +1 -1
- package/lib/commonjs/keys/publicCipher.js +10 -4
- package/lib/commonjs/keys/publicCipher.js.map +1 -1
- package/lib/commonjs/random.js +11 -2
- package/lib/commonjs/random.js.map +1 -1
- package/lib/commonjs/rsa.js +12 -5
- package/lib/commonjs/rsa.js.map +1 -1
- package/lib/commonjs/scrypt.js +47 -6
- package/lib/commonjs/scrypt.js.map +1 -1
- package/lib/commonjs/subtle.js +76 -5
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/cipher.js +18 -7
- package/lib/commonjs/utils/cipher.js.map +1 -1
- package/lib/commonjs/utils/conversion.js +33 -9
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/commonjs/utils/timingSafeEqual.js +7 -2
- package/lib/commonjs/utils/timingSafeEqual.js.map +1 -1
- package/lib/commonjs/x509certificate.js +6 -6
- package/lib/commonjs/x509certificate.js.map +1 -1
- package/lib/module/argon2.js +51 -2
- package/lib/module/argon2.js.map +1 -1
- package/lib/module/cipher.js +109 -11
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dsa.js +8 -2
- package/lib/module/dsa.js.map +1 -1
- package/lib/module/hash.js +15 -5
- package/lib/module/hash.js.map +1 -1
- package/lib/module/hkdf.js +33 -6
- package/lib/module/hkdf.js.map +1 -1
- package/lib/module/hmac.js +15 -5
- package/lib/module/hmac.js.map +1 -1
- package/lib/module/keys/publicCipher.js +10 -4
- package/lib/module/keys/publicCipher.js.map +1 -1
- package/lib/module/random.js +11 -2
- package/lib/module/random.js.map +1 -1
- package/lib/module/rsa.js +11 -4
- package/lib/module/rsa.js.map +1 -1
- package/lib/module/scrypt.js +47 -6
- package/lib/module/scrypt.js.map +1 -1
- package/lib/module/subtle.js +76 -5
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/cipher.js +18 -7
- package/lib/module/utils/cipher.js.map +1 -1
- package/lib/module/utils/conversion.js +33 -9
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/module/utils/timingSafeEqual.js +8 -3
- package/lib/module/utils/timingSafeEqual.js.map +1 -1
- package/lib/module/x509certificate.js +6 -6
- package/lib/module/x509certificate.js.map +1 -1
- package/lib/typescript/argon2.d.ts.map +1 -1
- package/lib/typescript/cipher.d.ts +2 -2
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +2 -2
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/hkdf.d.ts.map +1 -1
- package/lib/typescript/hmac.d.ts +2 -2
- package/lib/typescript/hmac.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
- package/lib/typescript/random.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts.map +1 -1
- package/lib/typescript/scrypt.d.ts.map +1 -1
- package/lib/typescript/specs/utils.nitro.d.ts +0 -2
- package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/cipher.d.ts +13 -1
- package/lib/typescript/utils/cipher.d.ts.map +1 -1
- package/lib/typescript/utils/conversion.d.ts +9 -6
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/lib/typescript/utils/timingSafeEqual.d.ts.map +1 -1
- package/lib/typescript/x509certificate.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +0 -2
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +0 -3
- package/package.json +38 -6
- package/src/argon2.ts +80 -2
- package/src/cipher.ts +139 -15
- package/src/dsa.ts +11 -2
- package/src/hash.ts +17 -7
- package/src/hkdf.ts +44 -6
- package/src/hmac.ts +17 -7
- package/src/keys/publicCipher.ts +10 -4
- package/src/random.ts +11 -2
- package/src/rsa.ts +18 -4
- package/src/scrypt.ts +73 -6
- package/src/specs/utils.nitro.ts +0 -2
- package/src/subtle.ts +90 -8
- package/src/utils/cipher.ts +30 -8
- package/src/utils/conversion.ts +58 -20
- package/src/utils/timingSafeEqual.ts +8 -3
- package/src/x509certificate.ts +5 -6
- package/deps/blake3/.cargo/config.toml +0 -2
- package/deps/blake3/.git-blame-ignore-revs +0 -2
- package/deps/blake3/.github/workflows/build_b3sum.py +0 -38
- package/deps/blake3/.github/workflows/ci.yml +0 -491
- package/deps/blake3/.github/workflows/tag.yml +0 -43
- package/deps/blake3/.github/workflows/upload_github_release_asset.py +0 -73
- package/deps/blake3/CONTRIBUTING.md +0 -31
- package/deps/blake3/Cargo.toml +0 -135
- package/deps/blake3/b3sum/Cargo.lock +0 -513
- package/deps/blake3/b3sum/Cargo.toml +0 -26
- package/deps/blake3/b3sum/README.md +0 -72
- package/deps/blake3/b3sum/src/main.rs +0 -564
- package/deps/blake3/b3sum/src/unit_tests.rs +0 -235
- package/deps/blake3/b3sum/tests/cli_tests.rs +0 -680
- package/deps/blake3/b3sum/what_does_check_do.md +0 -176
- package/deps/blake3/benches/bench.rs +0 -623
- package/deps/blake3/build.rs +0 -389
- package/deps/blake3/c/CMakeLists.txt +0 -383
- package/deps/blake3/c/CMakePresets.json +0 -73
- package/deps/blake3/c/Makefile.testing +0 -82
- package/deps/blake3/c/blake3-config.cmake.in +0 -14
- package/deps/blake3/c/blake3_avx2.c +0 -326
- package/deps/blake3/c/blake3_avx2_x86-64_unix.S +0 -1815
- package/deps/blake3/c/blake3_avx2_x86-64_windows_gnu.S +0 -1817
- package/deps/blake3/c/blake3_avx2_x86-64_windows_msvc.asm +0 -1828
- package/deps/blake3/c/blake3_avx512.c +0 -1388
- package/deps/blake3/c/blake3_avx512_x86-64_unix.S +0 -4824
- package/deps/blake3/c/blake3_avx512_x86-64_windows_gnu.S +0 -2615
- package/deps/blake3/c/blake3_avx512_x86-64_windows_msvc.asm +0 -2634
- package/deps/blake3/c/blake3_c_rust_bindings/Cargo.toml +0 -32
- package/deps/blake3/c/blake3_c_rust_bindings/README.md +0 -4
- package/deps/blake3/c/blake3_c_rust_bindings/benches/bench.rs +0 -477
- package/deps/blake3/c/blake3_c_rust_bindings/build.rs +0 -253
- package/deps/blake3/c/blake3_c_rust_bindings/cross_test.sh +0 -31
- package/deps/blake3/c/blake3_c_rust_bindings/src/lib.rs +0 -333
- package/deps/blake3/c/blake3_c_rust_bindings/src/test.rs +0 -696
- package/deps/blake3/c/blake3_sse2.c +0 -566
- package/deps/blake3/c/blake3_sse2_x86-64_unix.S +0 -2291
- package/deps/blake3/c/blake3_sse2_x86-64_windows_gnu.S +0 -2332
- package/deps/blake3/c/blake3_sse2_x86-64_windows_msvc.asm +0 -2350
- package/deps/blake3/c/blake3_sse41.c +0 -560
- package/deps/blake3/c/blake3_sse41_x86-64_unix.S +0 -2028
- package/deps/blake3/c/blake3_sse41_x86-64_windows_gnu.S +0 -2069
- package/deps/blake3/c/blake3_sse41_x86-64_windows_msvc.asm +0 -2089
- package/deps/blake3/c/blake3_tbb.cpp +0 -37
- package/deps/blake3/c/dependencies/CMakeLists.txt +0 -3
- package/deps/blake3/c/dependencies/tbb/CMakeLists.txt +0 -28
- package/deps/blake3/c/example.c +0 -36
- package/deps/blake3/c/example_tbb.c +0 -57
- package/deps/blake3/c/libblake3.pc.in +0 -12
- package/deps/blake3/c/main.c +0 -166
- package/deps/blake3/c/test.py +0 -97
- package/deps/blake3/media/B3.svg +0 -70
- package/deps/blake3/media/BLAKE3.svg +0 -85
- package/deps/blake3/media/speed.svg +0 -1474
- package/deps/blake3/reference_impl/Cargo.toml +0 -8
- package/deps/blake3/reference_impl/README.md +0 -14
- package/deps/blake3/reference_impl/reference_impl.rs +0 -374
- package/deps/blake3/src/ffi_avx2.rs +0 -65
- package/deps/blake3/src/ffi_avx512.rs +0 -169
- package/deps/blake3/src/ffi_neon.rs +0 -82
- package/deps/blake3/src/ffi_sse2.rs +0 -126
- package/deps/blake3/src/ffi_sse41.rs +0 -126
- package/deps/blake3/src/guts.rs +0 -60
- package/deps/blake3/src/hazmat.rs +0 -704
- package/deps/blake3/src/io.rs +0 -64
- package/deps/blake3/src/join.rs +0 -92
- package/deps/blake3/src/lib.rs +0 -1835
- package/deps/blake3/src/platform.rs +0 -587
- package/deps/blake3/src/portable.rs +0 -198
- package/deps/blake3/src/rust_avx2.rs +0 -474
- package/deps/blake3/src/rust_sse2.rs +0 -775
- package/deps/blake3/src/rust_sse41.rs +0 -766
- package/deps/blake3/src/test.rs +0 -1049
- package/deps/blake3/src/traits.rs +0 -227
- package/deps/blake3/src/wasm32_simd.rs +0 -794
- package/deps/blake3/test_vectors/Cargo.toml +0 -19
- package/deps/blake3/test_vectors/cross_test.sh +0 -25
- package/deps/blake3/test_vectors/src/bin/generate.rs +0 -4
- package/deps/blake3/test_vectors/src/lib.rs +0 -350
- package/deps/blake3/test_vectors/test_vectors.json +0 -217
- package/deps/blake3/tools/compiler_version/Cargo.toml +0 -7
- package/deps/blake3/tools/compiler_version/build.rs +0 -6
- package/deps/blake3/tools/compiler_version/src/main.rs +0 -27
- package/deps/blake3/tools/instruction_set_support/Cargo.toml +0 -6
- package/deps/blake3/tools/instruction_set_support/src/main.rs +0 -10
- package/deps/blake3/tools/release.md +0 -16
- package/deps/ncrypto/.bazelignore +0 -4
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +0 -1
- package/deps/ncrypto/.clang-format +0 -111
- package/deps/ncrypto/.github/workflows/bazel.yml +0 -58
- package/deps/ncrypto/.github/workflows/commitlint.yml +0 -16
- package/deps/ncrypto/.github/workflows/linter.yml +0 -38
- package/deps/ncrypto/.github/workflows/macos.yml +0 -43
- package/deps/ncrypto/.github/workflows/release-please.yml +0 -16
- package/deps/ncrypto/.github/workflows/ubuntu.yml +0 -128
- package/deps/ncrypto/.github/workflows/visual-studio.yml +0 -49
- package/deps/ncrypto/.python-version +0 -1
- package/deps/ncrypto/.release-please-manifest.json +0 -3
- package/deps/ncrypto/BUILD.bazel +0 -44
- package/deps/ncrypto/CHANGELOG.md +0 -37
- package/deps/ncrypto/CMakeLists.txt +0 -79
- package/deps/ncrypto/MODULE.bazel +0 -16
- package/deps/ncrypto/MODULE.bazel.lock +0 -461
- package/deps/ncrypto/cmake/CPM.cmake +0 -1225
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +0 -17
- package/deps/ncrypto/ncrypto.pc.in +0 -10
- package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +0 -28
- package/deps/ncrypto/pyproject.toml +0 -38
- package/deps/ncrypto/release-please-config.json +0 -11
- package/deps/ncrypto/src/CMakeLists.txt +0 -40
- package/deps/ncrypto/tests/BUILD.bazel +0 -11
- package/deps/ncrypto/tests/CMakeLists.txt +0 -7
- package/deps/ncrypto/tests/basic.cpp +0 -856
- package/deps/ncrypto/tools/run-clang-format.sh +0 -42
- package/lib/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
template <typename T> struct simd16;
|
|
2
|
+
|
|
3
|
+
template <typename T, typename Mask = simd16<bool>> struct base_u16 {
|
|
4
|
+
uint16x8_t value;
|
|
5
|
+
/// the size of vector in bytes
|
|
6
|
+
static const int SIZE = sizeof(value);
|
|
7
|
+
/// the number of elements of type T a vector can hold
|
|
8
|
+
static const int ELEMENTS = SIZE / sizeof(T);
|
|
9
|
+
// Conversion from/to SIMD register
|
|
10
|
+
simdutf_really_inline base_u16() = default;
|
|
11
|
+
simdutf_really_inline base_u16(const uint16x8_t _value) : value(_value) {}
|
|
12
|
+
simdutf_really_inline operator const uint16x8_t &() const {
|
|
13
|
+
return this->value;
|
|
14
|
+
}
|
|
15
|
+
simdutf_really_inline operator uint16x8_t &() { return this->value; }
|
|
16
|
+
// Bit operations
|
|
17
|
+
simdutf_really_inline simd16<T> operator|(const simd16<T> other) const {
|
|
18
|
+
return vorrq_u16(*this, other);
|
|
19
|
+
}
|
|
20
|
+
simdutf_really_inline simd16<T> operator&(const simd16<T> other) const {
|
|
21
|
+
return vandq_u16(*this, other);
|
|
22
|
+
}
|
|
23
|
+
simdutf_really_inline simd16<T> operator^(const simd16<T> other) const {
|
|
24
|
+
return veorq_u16(*this, other);
|
|
25
|
+
}
|
|
26
|
+
simdutf_really_inline simd16<T> bit_andnot(const simd16<T> other) const {
|
|
27
|
+
return vbicq_u16(*this, other);
|
|
28
|
+
}
|
|
29
|
+
simdutf_really_inline simd16<T> operator~() const { return *this ^ 0xFFu; }
|
|
30
|
+
simdutf_really_inline simd16<T> &operator|=(const simd16<T> other) {
|
|
31
|
+
auto this_cast = static_cast<simd16<T> *>(this);
|
|
32
|
+
*this_cast = *this_cast | other;
|
|
33
|
+
return *this_cast;
|
|
34
|
+
}
|
|
35
|
+
simdutf_really_inline simd16<T> &operator&=(const simd16<T> other) {
|
|
36
|
+
auto this_cast = static_cast<simd16<T> *>(this);
|
|
37
|
+
*this_cast = *this_cast & other;
|
|
38
|
+
return *this_cast;
|
|
39
|
+
}
|
|
40
|
+
simdutf_really_inline simd16<T> &operator^=(const simd16<T> other) {
|
|
41
|
+
auto this_cast = static_cast<simd16<T> *>(this);
|
|
42
|
+
*this_cast = *this_cast ^ other;
|
|
43
|
+
return *this_cast;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
friend simdutf_really_inline Mask operator==(const simd16<T> lhs,
|
|
47
|
+
const simd16<T> rhs) {
|
|
48
|
+
return vceqq_u16(lhs, rhs);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
template <int N = 1>
|
|
52
|
+
simdutf_really_inline simd16<T> prev(const simd16<T> prev_chunk) const {
|
|
53
|
+
return vextq_u18(prev_chunk, *this, 8 - N);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
template <typename T, typename Mask = simd16<bool>>
|
|
58
|
+
struct base16 : base_u16<T> {
|
|
59
|
+
typedef uint16_t bitmask_t;
|
|
60
|
+
typedef uint32_t bitmask2_t;
|
|
61
|
+
|
|
62
|
+
simdutf_really_inline base16() : base_u16<T>() {}
|
|
63
|
+
simdutf_really_inline base16(const uint16x8_t _value) : base_u16<T>(_value) {}
|
|
64
|
+
template <typename Pointer>
|
|
65
|
+
simdutf_really_inline base16(const Pointer *ptr) : base16(vld1q_u16(ptr)) {}
|
|
66
|
+
|
|
67
|
+
static const int SIZE = sizeof(base_u16<T>::value);
|
|
68
|
+
void dump() const {
|
|
69
|
+
#ifdef SIMDUTF_LOGGING
|
|
70
|
+
uint16_t temp[8];
|
|
71
|
+
vst1q_u16(temp, *this);
|
|
72
|
+
printf("[%04x, %04x, %04x, %04x, %04x, %04x, %04x, %04x]\n", temp[0],
|
|
73
|
+
temp[1], temp[2], temp[3], temp[4], temp[5], temp[6], temp[7]);
|
|
74
|
+
#endif // SIMDUTF_LOGGING
|
|
75
|
+
}
|
|
76
|
+
template <int N = 1>
|
|
77
|
+
simdutf_really_inline simd16<T> prev(const simd16<T> prev_chunk) const {
|
|
78
|
+
return vextq_u18(prev_chunk, *this, 8 - N);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// SIMD byte mask type (returned by things like eq and gt)
|
|
83
|
+
template <> struct simd16<bool> : base16<bool> {
|
|
84
|
+
static simdutf_really_inline simd16<bool> splat(bool _value) {
|
|
85
|
+
return vmovq_n_u16(uint16_t(-(!!_value)));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
simdutf_really_inline simd16() : base16() {}
|
|
89
|
+
simdutf_really_inline simd16(const uint16x8_t _value)
|
|
90
|
+
: base16<bool>(_value) {}
|
|
91
|
+
// Splat constructor
|
|
92
|
+
simdutf_really_inline simd16(bool _value) : base16<bool>(splat(_value)) {}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
template <typename T> struct base16_numeric : base16<T> {
|
|
96
|
+
static simdutf_really_inline simd16<T> splat(T _value) {
|
|
97
|
+
return vmovq_n_u16(_value);
|
|
98
|
+
}
|
|
99
|
+
static simdutf_really_inline simd16<T> zero() { return vdupq_n_u16(0); }
|
|
100
|
+
static simdutf_really_inline simd16<T> load(const T values[8]) {
|
|
101
|
+
return vld1q_u16(reinterpret_cast<const uint16_t *>(values));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
simdutf_really_inline base16_numeric() : base16<T>() {}
|
|
105
|
+
simdutf_really_inline base16_numeric(const uint16x8_t _value)
|
|
106
|
+
: base16<T>(_value) {}
|
|
107
|
+
|
|
108
|
+
// Store to array
|
|
109
|
+
simdutf_really_inline void store(T dst[8]) const {
|
|
110
|
+
return vst1q_u16(dst, *this);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Override to distinguish from bool version
|
|
114
|
+
simdutf_really_inline simd16<T> operator~() const { return *this ^ 0xFFu; }
|
|
115
|
+
|
|
116
|
+
// Addition/subtraction are the same for signed and unsigned
|
|
117
|
+
simdutf_really_inline simd16<T> operator+(const simd16<T> other) const {
|
|
118
|
+
return vaddq_u16(*this, other);
|
|
119
|
+
}
|
|
120
|
+
simdutf_really_inline simd16<T> operator-(const simd16<T> other) const {
|
|
121
|
+
return vsubq_u16(*this, other);
|
|
122
|
+
}
|
|
123
|
+
simdutf_really_inline simd16<T> &operator+=(const simd16<T> other) {
|
|
124
|
+
*this = *this + other;
|
|
125
|
+
return *static_cast<simd16<T> *>(this);
|
|
126
|
+
}
|
|
127
|
+
simdutf_really_inline simd16<T> &operator-=(const simd16<T> other) {
|
|
128
|
+
*this = *this - other;
|
|
129
|
+
return *static_cast<simd16<T> *>(this);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// Signed code units
|
|
134
|
+
template <> struct simd16<int16_t> : base16_numeric<int16_t> {
|
|
135
|
+
simdutf_really_inline simd16() : base16_numeric<int16_t>() {}
|
|
136
|
+
#ifndef SIMDUTF_REGULAR_VISUAL_STUDIO
|
|
137
|
+
simdutf_really_inline simd16(const uint16x8_t _value)
|
|
138
|
+
: base16_numeric<int16_t>(_value) {}
|
|
139
|
+
#endif
|
|
140
|
+
simdutf_really_inline simd16(const int16x8_t _value)
|
|
141
|
+
: base16_numeric<int16_t>(vreinterpretq_u16_s16(_value)) {}
|
|
142
|
+
|
|
143
|
+
// Splat constructor
|
|
144
|
+
simdutf_really_inline simd16(int16_t _value) : simd16(splat(_value)) {}
|
|
145
|
+
// Array constructor
|
|
146
|
+
simdutf_really_inline simd16(const int16_t *values) : simd16(load(values)) {}
|
|
147
|
+
simdutf_really_inline simd16(const char16_t *values)
|
|
148
|
+
: simd16(load(reinterpret_cast<const int16_t *>(values))) {}
|
|
149
|
+
simdutf_really_inline operator simd16<uint16_t>() const;
|
|
150
|
+
simdutf_really_inline operator const uint16x8_t &() const {
|
|
151
|
+
return this->value;
|
|
152
|
+
}
|
|
153
|
+
simdutf_really_inline operator const int16x8_t() const {
|
|
154
|
+
return vreinterpretq_s16_u16(this->value);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
simdutf_really_inline int16_t max_val() const {
|
|
158
|
+
return vmaxvq_s16(vreinterpretq_s16_u16(this->value));
|
|
159
|
+
}
|
|
160
|
+
simdutf_really_inline int16_t min_val() const {
|
|
161
|
+
return vminvq_s16(vreinterpretq_s16_u16(this->value));
|
|
162
|
+
}
|
|
163
|
+
// Order-sensitive comparisons
|
|
164
|
+
simdutf_really_inline simd16<int16_t>
|
|
165
|
+
max_val(const simd16<int16_t> other) const {
|
|
166
|
+
return vmaxq_s16(vreinterpretq_s16_u16(this->value),
|
|
167
|
+
vreinterpretq_s16_u16(other.value));
|
|
168
|
+
}
|
|
169
|
+
simdutf_really_inline simd16<int16_t>
|
|
170
|
+
min_val(const simd16<int16_t> other) const {
|
|
171
|
+
return vmaxq_s16(vreinterpretq_s16_u16(this->value),
|
|
172
|
+
vreinterpretq_s16_u16(other.value));
|
|
173
|
+
}
|
|
174
|
+
simdutf_really_inline simd16<bool>
|
|
175
|
+
operator>(const simd16<int16_t> other) const {
|
|
176
|
+
return vcgtq_s16(vreinterpretq_s16_u16(this->value),
|
|
177
|
+
vreinterpretq_s16_u16(other.value));
|
|
178
|
+
}
|
|
179
|
+
simdutf_really_inline simd16<bool>
|
|
180
|
+
operator<(const simd16<int16_t> other) const {
|
|
181
|
+
return vcltq_s16(vreinterpretq_s16_u16(this->value),
|
|
182
|
+
vreinterpretq_s16_u16(other.value));
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// Unsigned code units
|
|
187
|
+
template <> struct simd16<uint16_t> : base16_numeric<uint16_t> {
|
|
188
|
+
simdutf_really_inline simd16() : base16_numeric<uint16_t>() {}
|
|
189
|
+
simdutf_really_inline simd16(const uint16x8_t _value)
|
|
190
|
+
: base16_numeric<uint16_t>(_value) {}
|
|
191
|
+
|
|
192
|
+
// Splat constructor
|
|
193
|
+
simdutf_really_inline simd16(uint16_t _value) : simd16(splat(_value)) {}
|
|
194
|
+
// Array constructor
|
|
195
|
+
simdutf_really_inline simd16(const uint16_t *values) : simd16(load(values)) {}
|
|
196
|
+
simdutf_really_inline simd16(const char16_t *values)
|
|
197
|
+
: simd16(load(reinterpret_cast<const uint16_t *>(values))) {}
|
|
198
|
+
|
|
199
|
+
simdutf_really_inline int16_t max_val() const { return vmaxvq_u16(*this); }
|
|
200
|
+
simdutf_really_inline int16_t min_val() const { return vminvq_u16(*this); }
|
|
201
|
+
// Saturated math
|
|
202
|
+
simdutf_really_inline simd16<uint16_t>
|
|
203
|
+
saturating_add(const simd16<uint16_t> other) const {
|
|
204
|
+
return vqaddq_u16(*this, other);
|
|
205
|
+
}
|
|
206
|
+
simdutf_really_inline simd16<uint16_t>
|
|
207
|
+
saturating_sub(const simd16<uint16_t> other) const {
|
|
208
|
+
return vqsubq_u16(*this, other);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Order-specific operations
|
|
212
|
+
simdutf_really_inline simd16<uint16_t>
|
|
213
|
+
max_val(const simd16<uint16_t> other) const {
|
|
214
|
+
return vmaxq_u16(*this, other);
|
|
215
|
+
}
|
|
216
|
+
simdutf_really_inline simd16<uint16_t>
|
|
217
|
+
min_val(const simd16<uint16_t> other) const {
|
|
218
|
+
return vminq_u16(*this, other);
|
|
219
|
+
}
|
|
220
|
+
// Same as >, but only guarantees true is nonzero (< guarantees true = -1)
|
|
221
|
+
simdutf_really_inline simd16<uint16_t>
|
|
222
|
+
gt_bits(const simd16<uint16_t> other) const {
|
|
223
|
+
return this->saturating_sub(other);
|
|
224
|
+
}
|
|
225
|
+
// Same as <, but only guarantees true is nonzero (< guarantees true = -1)
|
|
226
|
+
simdutf_really_inline simd16<uint16_t>
|
|
227
|
+
lt_bits(const simd16<uint16_t> other) const {
|
|
228
|
+
return other.saturating_sub(*this);
|
|
229
|
+
}
|
|
230
|
+
simdutf_really_inline simd16<bool>
|
|
231
|
+
operator<=(const simd16<uint16_t> other) const {
|
|
232
|
+
return vcleq_u16(*this, other);
|
|
233
|
+
}
|
|
234
|
+
simdutf_really_inline simd16<bool>
|
|
235
|
+
operator>=(const simd16<uint16_t> other) const {
|
|
236
|
+
return vcgeq_u16(*this, other);
|
|
237
|
+
}
|
|
238
|
+
simdutf_really_inline simd16<bool>
|
|
239
|
+
operator>(const simd16<uint16_t> other) const {
|
|
240
|
+
return vcgtq_u16(*this, other);
|
|
241
|
+
}
|
|
242
|
+
simdutf_really_inline simd16<bool>
|
|
243
|
+
operator<(const simd16<uint16_t> other) const {
|
|
244
|
+
return vcltq_u16(*this, other);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Bit-specific operations
|
|
248
|
+
simdutf_really_inline simd16<bool> bits_not_set() const {
|
|
249
|
+
return *this == uint16_t(0);
|
|
250
|
+
}
|
|
251
|
+
template <int N> simdutf_really_inline simd16<uint16_t> shr() const {
|
|
252
|
+
return simd16<uint16_t>(vshrq_n_u16(*this, N));
|
|
253
|
+
}
|
|
254
|
+
template <int N> simdutf_really_inline simd16<uint16_t> shl() const {
|
|
255
|
+
return simd16<uint16_t>(vshlq_n_u16(*this, N));
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Pack with the unsigned saturation of two uint16_t code units into single
|
|
259
|
+
// uint8_t vector
|
|
260
|
+
static simdutf_really_inline simd8<uint8_t> pack(const simd16<uint16_t> &v0,
|
|
261
|
+
const simd16<uint16_t> &v1) {
|
|
262
|
+
return vqmovn_high_u16(vqmovn_u16(v0), v1);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Change the endianness
|
|
266
|
+
simdutf_really_inline simd16<uint16_t> swap_bytes() const {
|
|
267
|
+
return vreinterpretq_u16_u8(vrev16q_u8(vreinterpretq_u8_u16(*this)));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
void dump() const {
|
|
271
|
+
uint16_t temp[8];
|
|
272
|
+
vst1q_u16(temp, *this);
|
|
273
|
+
printf("[%04x, %04x, %04x, %04x, %04x, %04x, %04x, %04x]\n", temp[0],
|
|
274
|
+
temp[1], temp[2], temp[3], temp[4], temp[5], temp[6], temp[7]);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
simdutf_really_inline uint32_t sum() const { return vaddlvq_u16(value); }
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
simdutf_really_inline simd16<int16_t>::operator simd16<uint16_t>() const {
|
|
281
|
+
return this->value;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
template <typename T> struct simd16x32 {
|
|
285
|
+
static constexpr int NUM_CHUNKS = 64 / sizeof(simd16<T>);
|
|
286
|
+
static_assert(NUM_CHUNKS == 4,
|
|
287
|
+
"ARM kernel should use four registers per 64-byte block.");
|
|
288
|
+
simd16<T> chunks[NUM_CHUNKS];
|
|
289
|
+
|
|
290
|
+
simd16x32(const simd16x32<T> &o) = delete; // no copy allowed
|
|
291
|
+
simd16x32<T> &
|
|
292
|
+
operator=(const simd16<T> other) = delete; // no assignment allowed
|
|
293
|
+
simd16x32() = delete; // no default constructor allowed
|
|
294
|
+
|
|
295
|
+
simdutf_really_inline
|
|
296
|
+
simd16x32(const simd16<T> chunk0, const simd16<T> chunk1,
|
|
297
|
+
const simd16<T> chunk2, const simd16<T> chunk3)
|
|
298
|
+
: chunks{chunk0, chunk1, chunk2, chunk3} {}
|
|
299
|
+
simdutf_really_inline simd16x32(const T *ptr)
|
|
300
|
+
: chunks{simd16<T>::load(ptr),
|
|
301
|
+
simd16<T>::load(ptr + sizeof(simd16<T>) / sizeof(T)),
|
|
302
|
+
simd16<T>::load(ptr + 2 * sizeof(simd16<T>) / sizeof(T)),
|
|
303
|
+
simd16<T>::load(ptr + 3 * sizeof(simd16<T>) / sizeof(T))} {}
|
|
304
|
+
|
|
305
|
+
simdutf_really_inline void store(T *ptr) const {
|
|
306
|
+
this->chunks[0].store(ptr + sizeof(simd16<T>) * 0 / sizeof(T));
|
|
307
|
+
this->chunks[1].store(ptr + sizeof(simd16<T>) * 1 / sizeof(T));
|
|
308
|
+
this->chunks[2].store(ptr + sizeof(simd16<T>) * 2 / sizeof(T));
|
|
309
|
+
this->chunks[3].store(ptr + sizeof(simd16<T>) * 3 / sizeof(T));
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
simdutf_really_inline simd16<T> reduce_or() const {
|
|
313
|
+
return (this->chunks[0] | this->chunks[1]) |
|
|
314
|
+
(this->chunks[2] | this->chunks[3]);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
simdutf_really_inline bool is_ascii() const { return reduce_or().is_ascii(); }
|
|
318
|
+
|
|
319
|
+
simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const {
|
|
320
|
+
this->chunks[0].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 0);
|
|
321
|
+
this->chunks[1].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 1);
|
|
322
|
+
this->chunks[2].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 2);
|
|
323
|
+
this->chunks[3].store_ascii_as_utf16(ptr + sizeof(simd16<T>) * 3);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
simdutf_really_inline uint64_t to_bitmask() const {
|
|
327
|
+
#ifdef SIMDUTF_REGULAR_VISUAL_STUDIO
|
|
328
|
+
const uint8x16_t bit_mask =
|
|
329
|
+
simdutf_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
|
|
330
|
+
0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80);
|
|
331
|
+
#else
|
|
332
|
+
const uint8x16_t bit_mask = {0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,
|
|
333
|
+
0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
|
|
334
|
+
#endif
|
|
335
|
+
// Add each of the elements next to each other, successively, to stuff each
|
|
336
|
+
// 8 byte mask into one.
|
|
337
|
+
uint8x16_t sum0 = vpaddq_u8(
|
|
338
|
+
vreinterpretq_u8_u16(this->chunks[0] & vreinterpretq_u16_u8(bit_mask)),
|
|
339
|
+
vreinterpretq_u8_u16(this->chunks[1] & vreinterpretq_u16_u8(bit_mask)));
|
|
340
|
+
uint8x16_t sum1 = vpaddq_u8(
|
|
341
|
+
vreinterpretq_u8_u16(this->chunks[2] & vreinterpretq_u16_u8(bit_mask)),
|
|
342
|
+
vreinterpretq_u8_u16(this->chunks[3] & vreinterpretq_u16_u8(bit_mask)));
|
|
343
|
+
sum0 = vpaddq_u8(sum0, sum1);
|
|
344
|
+
sum0 = vpaddq_u8(sum0, sum0);
|
|
345
|
+
return vgetq_lane_u64(vreinterpretq_u64_u8(sum0), 0);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
simdutf_really_inline void swap_bytes() {
|
|
349
|
+
this->chunks[0] = this->chunks[0].swap_bytes();
|
|
350
|
+
this->chunks[1] = this->chunks[1].swap_bytes();
|
|
351
|
+
this->chunks[2] = this->chunks[2].swap_bytes();
|
|
352
|
+
this->chunks[3] = this->chunks[3].swap_bytes();
|
|
353
|
+
}
|
|
354
|
+
simdutf_really_inline uint64_t gt(const T m) const {
|
|
355
|
+
const simd16<T> mask = simd16<T>::splat(m);
|
|
356
|
+
return simd16x32<bool>(this->chunks[0] > mask, this->chunks[1] > mask,
|
|
357
|
+
this->chunks[2] > mask, this->chunks[3] > mask)
|
|
358
|
+
.to_bitmask();
|
|
359
|
+
}
|
|
360
|
+
simdutf_really_inline uint64_t gteq(const T m) const {
|
|
361
|
+
const simd16<T> mask = simd16<T>::splat(m);
|
|
362
|
+
return simd16x32<bool>(this->chunks[0] >= mask, this->chunks[1] >= mask,
|
|
363
|
+
this->chunks[2] >= mask, this->chunks[3] >= mask)
|
|
364
|
+
.to_bitmask();
|
|
365
|
+
}
|
|
366
|
+
simdutf_really_inline uint64_t lteq(const T m) const {
|
|
367
|
+
const simd16<T> mask = simd16<T>::splat(m);
|
|
368
|
+
return simd16x32<bool>(this->chunks[0] <= mask, this->chunks[1] <= mask,
|
|
369
|
+
this->chunks[2] <= mask, this->chunks[3] <= mask)
|
|
370
|
+
.to_bitmask();
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
simdutf_really_inline uint64_t not_in_range(const T low, const T high) const {
|
|
374
|
+
const simd16<T> mask_low = simd16<T>::splat(low);
|
|
375
|
+
const simd16<T> mask_high = simd16<T>::splat(high);
|
|
376
|
+
return simd16x32<bool>(
|
|
377
|
+
(this->chunks[0] > mask_high) | (this->chunks[0] < mask_low),
|
|
378
|
+
(this->chunks[1] > mask_high) | (this->chunks[1] < mask_low),
|
|
379
|
+
(this->chunks[2] > mask_high) | (this->chunks[2] < mask_low),
|
|
380
|
+
(this->chunks[3] > mask_high) | (this->chunks[3] < mask_low))
|
|
381
|
+
.to_bitmask();
|
|
382
|
+
}
|
|
383
|
+
}; // struct simd16x32<T>
|
|
384
|
+
template <>
|
|
385
|
+
simdutf_really_inline uint64_t simd16x32<uint16_t>::not_in_range(
|
|
386
|
+
const uint16_t low, const uint16_t high) const {
|
|
387
|
+
const simd16<uint16_t> mask_low = simd16<uint16_t>::splat(low);
|
|
388
|
+
const simd16<uint16_t> mask_high = simd16<uint16_t>::splat(high);
|
|
389
|
+
simd16x32<uint16_t> x(simd16<uint16_t>((this->chunks[0] > mask_high) |
|
|
390
|
+
(this->chunks[0] < mask_low)),
|
|
391
|
+
simd16<uint16_t>((this->chunks[1] > mask_high) |
|
|
392
|
+
(this->chunks[1] < mask_low)),
|
|
393
|
+
simd16<uint16_t>((this->chunks[2] > mask_high) |
|
|
394
|
+
(this->chunks[2] < mask_low)),
|
|
395
|
+
simd16<uint16_t>((this->chunks[3] > mask_high) |
|
|
396
|
+
(this->chunks[3] < mask_low)));
|
|
397
|
+
return x.to_bitmask();
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
simdutf_really_inline simd16<uint16_t> min(const simd16<uint16_t> a,
|
|
401
|
+
simd16<uint16_t> b) {
|
|
402
|
+
return vminq_u16(a.value, b.value);
|
|
403
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
template <typename T> struct simd32;
|
|
2
|
+
|
|
3
|
+
template <> struct simd32<uint32_t> {
|
|
4
|
+
static const size_t SIZE = sizeof(uint32x4_t);
|
|
5
|
+
static const size_t ELEMENTS = SIZE / sizeof(uint32_t);
|
|
6
|
+
|
|
7
|
+
uint32x4_t value;
|
|
8
|
+
|
|
9
|
+
simdutf_really_inline simd32(const uint32x4_t v) : value(v) {}
|
|
10
|
+
|
|
11
|
+
template <typename Pointer>
|
|
12
|
+
simdutf_really_inline simd32(const Pointer *ptr)
|
|
13
|
+
: value(vld1q_u32(reinterpret_cast<const uint32_t *>(ptr))) {}
|
|
14
|
+
|
|
15
|
+
simdutf_really_inline uint64_t sum() const { return vaddvq_u32(value); }
|
|
16
|
+
|
|
17
|
+
simdutf_really_inline simd32<uint32_t> swap_bytes() const {
|
|
18
|
+
return vreinterpretq_u32_u8(vrev32q_u8(vreinterpretq_u8_u32(value)));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
template <int N> simdutf_really_inline simd32<uint32_t> shr() const {
|
|
22
|
+
return vshrq_n_u32(value, N);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
template <int N> simdutf_really_inline simd32<uint32_t> shl() const {
|
|
26
|
+
return vshlq_n_u32(value, N);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void dump() const {
|
|
30
|
+
#ifdef SIMDUTF_LOGGING
|
|
31
|
+
uint32_t temp[4];
|
|
32
|
+
vst1q_u32(temp, value);
|
|
33
|
+
printf("[%08x, %08x, %08x, %08x]\n", temp[0], temp[1], temp[2], temp[3]);
|
|
34
|
+
#endif // SIMDUTF_LOGGING
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// operators
|
|
38
|
+
simdutf_really_inline simd32 &operator+=(const simd32 other) {
|
|
39
|
+
value = vaddq_u32(value, other.value);
|
|
40
|
+
return *this;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// static members
|
|
44
|
+
simdutf_really_inline static simd32<uint32_t> zero() {
|
|
45
|
+
return vdupq_n_u32(0);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
simdutf_really_inline static simd32<uint32_t> splat(uint32_t v) {
|
|
49
|
+
return vdupq_n_u32(v);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//----------------------------------------------------------------------
|
|
54
|
+
|
|
55
|
+
template <> struct simd32<bool> {
|
|
56
|
+
uint32x4_t value;
|
|
57
|
+
|
|
58
|
+
simdutf_really_inline simd32(const uint32x4_t v) : value(v) {}
|
|
59
|
+
|
|
60
|
+
simdutf_really_inline bool any() const { return vmaxvq_u32(value) != 0; }
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//----------------------------------------------------------------------
|
|
64
|
+
|
|
65
|
+
template <typename T>
|
|
66
|
+
simdutf_really_inline simd32<T> operator|(const simd32<T> a,
|
|
67
|
+
const simd32<T> b) {
|
|
68
|
+
return vorrq_u32(a.value, b.value);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
simdutf_really_inline simd32<uint32_t> min(const simd32<uint32_t> a,
|
|
72
|
+
const simd32<uint32_t> b) {
|
|
73
|
+
return vminq_u32(a.value, b.value);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
simdutf_really_inline simd32<uint32_t> max(const simd32<uint32_t> a,
|
|
77
|
+
const simd32<uint32_t> b) {
|
|
78
|
+
return vmaxq_u32(a.value, b.value);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
simdutf_really_inline simd32<bool> operator==(const simd32<uint32_t> a,
|
|
82
|
+
uint32_t b) {
|
|
83
|
+
return vceqq_u32(a.value, vdupq_n_u32(b));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
simdutf_really_inline simd32<uint32_t> operator&(const simd32<uint32_t> a,
|
|
87
|
+
const simd32<uint32_t> b) {
|
|
88
|
+
return vandq_u32(a.value, b.value);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
simdutf_really_inline simd32<uint32_t> operator&(const simd32<uint32_t> a,
|
|
92
|
+
uint32_t b) {
|
|
93
|
+
return vandq_u32(a.value, vdupq_n_u32(b));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
simdutf_really_inline simd32<uint32_t> operator|(const simd32<uint32_t> a,
|
|
97
|
+
uint32_t b) {
|
|
98
|
+
return vorrq_u32(a.value, vdupq_n_u32(b));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
simdutf_really_inline simd32<uint32_t> operator+(const simd32<uint32_t> a,
|
|
102
|
+
const simd32<uint32_t> b) {
|
|
103
|
+
return vaddq_u32(a.value, b.value);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
simdutf_really_inline simd32<uint32_t> operator-(const simd32<uint32_t> a,
|
|
107
|
+
uint32_t b) {
|
|
108
|
+
return vsubq_u32(a.value, vdupq_n_u32(b));
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
simdutf_really_inline simd32<bool> operator>=(const simd32<uint32_t> a,
|
|
112
|
+
const simd32<uint32_t> b) {
|
|
113
|
+
return vcgeq_u32(a.value, b.value);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
simdutf_really_inline simd32<bool> operator!(const simd32<bool> v) {
|
|
117
|
+
return vmvnq_u32(v.value);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
simdutf_really_inline simd32<bool> operator>(const simd32<uint32_t> a,
|
|
121
|
+
const simd32<uint32_t> b) {
|
|
122
|
+
return vcgtq_u32(a.value, b.value);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
simdutf_really_inline simd32<uint32_t> select(const simd32<bool> cond,
|
|
126
|
+
const simd32<uint32_t> v_true,
|
|
127
|
+
const simd32<uint32_t> v_false) {
|
|
128
|
+
return vbslq_u32(cond.value, v_true.value, v_false.value);
|
|
129
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
template <typename T> struct simd64;
|
|
2
|
+
|
|
3
|
+
template <> struct simd64<uint64_t> {
|
|
4
|
+
uint64x2_t value;
|
|
5
|
+
|
|
6
|
+
simdutf_really_inline simd64(const uint64x2_t v) : value(v) {}
|
|
7
|
+
|
|
8
|
+
template <typename Pointer>
|
|
9
|
+
simdutf_really_inline simd64(const Pointer *ptr)
|
|
10
|
+
: value(vld1q_u64(reinterpret_cast<const uint64_t *>(ptr))) {}
|
|
11
|
+
|
|
12
|
+
simdutf_really_inline uint64_t sum() const { return vaddvq_u64(value); }
|
|
13
|
+
|
|
14
|
+
// operators
|
|
15
|
+
simdutf_really_inline simd64 &operator+=(const simd64 other) {
|
|
16
|
+
value = vaddq_u64(value, other.value);
|
|
17
|
+
return *this;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// static members
|
|
21
|
+
simdutf_really_inline static simd64<uint64_t> zero() {
|
|
22
|
+
return vdupq_n_u64(0);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
simdutf_really_inline static simd64<uint64_t> splat(uint64_t v) {
|
|
26
|
+
return vdupq_n_u64(v);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#ifndef SIMDUTF_ARM64_H
|
|
2
|
+
#define SIMDUTF_ARM64_H
|
|
3
|
+
|
|
4
|
+
#ifdef SIMDUTF_FALLBACK_H
|
|
5
|
+
#error "arm64.h must be included before fallback.h"
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
#include "simdutf/portability.h"
|
|
9
|
+
|
|
10
|
+
#ifndef SIMDUTF_IMPLEMENTATION_ARM64
|
|
11
|
+
#define SIMDUTF_IMPLEMENTATION_ARM64 (SIMDUTF_IS_ARM64)
|
|
12
|
+
#endif
|
|
13
|
+
#if SIMDUTF_IMPLEMENTATION_ARM64 && SIMDUTF_IS_ARM64
|
|
14
|
+
#define SIMDUTF_CAN_ALWAYS_RUN_ARM64 1
|
|
15
|
+
#else
|
|
16
|
+
#define SIMDUTF_CAN_ALWAYS_RUN_ARM64 0
|
|
17
|
+
#endif
|
|
18
|
+
|
|
19
|
+
#include "simdutf/internal/isadetection.h"
|
|
20
|
+
|
|
21
|
+
#if SIMDUTF_IMPLEMENTATION_ARM64
|
|
22
|
+
|
|
23
|
+
namespace simdutf {
|
|
24
|
+
/**
|
|
25
|
+
* Implementation for NEON (ARMv8).
|
|
26
|
+
*/
|
|
27
|
+
namespace arm64 {} // namespace arm64
|
|
28
|
+
} // namespace simdutf
|
|
29
|
+
|
|
30
|
+
#include "simdutf/arm64/implementation.h"
|
|
31
|
+
|
|
32
|
+
#include "simdutf/arm64/begin.h"
|
|
33
|
+
|
|
34
|
+
// Declarations
|
|
35
|
+
#include "simdutf/arm64/intrinsics.h"
|
|
36
|
+
#include "simdutf/arm64/bitmanipulation.h"
|
|
37
|
+
#include "simdutf/arm64/simd.h"
|
|
38
|
+
|
|
39
|
+
#include "simdutf/arm64/end.h"
|
|
40
|
+
|
|
41
|
+
#endif // SIMDUTF_IMPLEMENTATION_ARM64
|
|
42
|
+
|
|
43
|
+
#endif // SIMDUTF_ARM64_H
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#define SIMDUTF_IMPLEMENTATION fallback
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#ifndef SIMDUTF_FALLBACK_BITMANIPULATION_H
|
|
2
|
+
#define SIMDUTF_FALLBACK_BITMANIPULATION_H
|
|
3
|
+
|
|
4
|
+
#include "simdutf.h"
|
|
5
|
+
#include <limits>
|
|
6
|
+
|
|
7
|
+
namespace simdutf {
|
|
8
|
+
namespace SIMDUTF_IMPLEMENTATION {
|
|
9
|
+
namespace {} // unnamed namespace
|
|
10
|
+
} // namespace SIMDUTF_IMPLEMENTATION
|
|
11
|
+
} // namespace simdutf
|
|
12
|
+
|
|
13
|
+
#endif // SIMDUTF_FALLBACK_BITMANIPULATION_H
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#undef SIMDUTF_IMPLEMENTATION
|