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,618 @@
|
|
|
1
|
+
// file included directly
|
|
2
|
+
|
|
3
|
+
template <typename T> struct base8 {
|
|
4
|
+
using vector_type = vector_u8_type_for_element<T>;
|
|
5
|
+
vector_type value;
|
|
6
|
+
static const int SIZE = sizeof(vector_type);
|
|
7
|
+
static const int ELEMENTS = sizeof(vector_type) / sizeof(T);
|
|
8
|
+
|
|
9
|
+
// Zero constructor
|
|
10
|
+
simdutf_really_inline base8() : value{vec_splats(T(0))} {}
|
|
11
|
+
|
|
12
|
+
// Conversion from SIMD register
|
|
13
|
+
simdutf_really_inline base8(const vector_type _value) : value{_value} {}
|
|
14
|
+
|
|
15
|
+
// Splat scalar
|
|
16
|
+
simdutf_really_inline base8(T v) : value{vec_splats(v)} {}
|
|
17
|
+
|
|
18
|
+
// Conversion to SIMD register
|
|
19
|
+
simdutf_really_inline operator const vector_type &() const {
|
|
20
|
+
return this->value;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
template <typename U> simdutf_really_inline void store(U *ptr) const {
|
|
24
|
+
vec_xst(value, 0, reinterpret_cast<T *>(ptr));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
template <typename SIMD8> void operator|=(const SIMD8 other) {
|
|
28
|
+
this->value = vec_or(this->value, other.value);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
template <int N = 1> vector_type prev_aux(vector_type prev_chunk) const {
|
|
32
|
+
vector_type chunk = this->value;
|
|
33
|
+
#if !SIMDUTF_IS_BIG_ENDIAN
|
|
34
|
+
chunk = (vector_type)vec_reve(this->value);
|
|
35
|
+
prev_chunk = (vector_type)vec_reve((vector_type)prev_chunk);
|
|
36
|
+
#endif
|
|
37
|
+
chunk = (vector_type)vec_sld((vector_type)prev_chunk, (vector_type)chunk,
|
|
38
|
+
16 - N);
|
|
39
|
+
#if !SIMDUTF_IS_BIG_ENDIAN
|
|
40
|
+
chunk = (vector_type)vec_reve((vector_type)chunk);
|
|
41
|
+
#endif
|
|
42
|
+
return chunk;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
simdutf_really_inline bool is_ascii() const {
|
|
46
|
+
return move_mask_u8(this->value) == 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
simdutf_really_inline uint16_t to_bitmask() const {
|
|
50
|
+
return move_mask_u8(value);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
template <endianness big_endian>
|
|
54
|
+
simdutf_really_inline void store_bytes_as_utf16(char16_t *p) const {
|
|
55
|
+
const vector_type zero = vec_splats(T(0));
|
|
56
|
+
|
|
57
|
+
if (big_endian) {
|
|
58
|
+
const vec_u8_t perm_lo = {16, 0, 16, 1, 16, 2, 16, 3,
|
|
59
|
+
16, 4, 16, 5, 16, 6, 16, 7};
|
|
60
|
+
const vec_u8_t perm_hi = {16, 8, 16, 9, 16, 10, 16, 11,
|
|
61
|
+
16, 12, 16, 13, 16, 14, 16, 15};
|
|
62
|
+
|
|
63
|
+
const vector_type v0 = vec_perm(value, zero, perm_lo);
|
|
64
|
+
const vector_type v1 = vec_perm(value, zero, perm_hi);
|
|
65
|
+
|
|
66
|
+
#if defined(__clang__)
|
|
67
|
+
vec_xst(v0, 0, reinterpret_cast<T *>(p));
|
|
68
|
+
vec_xst(v1, 16, reinterpret_cast<T *>(p));
|
|
69
|
+
#else
|
|
70
|
+
vec_xst(v0, 0, reinterpret_cast<vector_type *>(p));
|
|
71
|
+
vec_xst(v1, 16, reinterpret_cast<vector_type *>(p));
|
|
72
|
+
#endif // defined(__clang__)
|
|
73
|
+
} else {
|
|
74
|
+
const vec_u8_t perm_lo = {0, 16, 1, 16, 2, 16, 3, 16,
|
|
75
|
+
4, 16, 5, 16, 6, 16, 7, 16};
|
|
76
|
+
const vec_u8_t perm_hi = {8, 16, 9, 16, 10, 16, 11, 16,
|
|
77
|
+
12, 16, 13, 16, 14, 16, 15, 16};
|
|
78
|
+
|
|
79
|
+
const vector_type v0 = vec_perm(value, zero, perm_lo);
|
|
80
|
+
const vector_type v1 = vec_perm(value, zero, perm_hi);
|
|
81
|
+
|
|
82
|
+
#if defined(__clang__)
|
|
83
|
+
vec_xst(v0, 0, reinterpret_cast<T *>(p));
|
|
84
|
+
vec_xst(v1, 16, reinterpret_cast<T *>(p));
|
|
85
|
+
#else
|
|
86
|
+
vec_xst(v0, 0, reinterpret_cast<vector_type *>(p));
|
|
87
|
+
vec_xst(v1, 16, reinterpret_cast<vector_type *>(p));
|
|
88
|
+
#endif // defined(__clang__)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
template <endianness big_endian>
|
|
93
|
+
simdutf_really_inline void store_ascii_as_utf16(char16_t *p) const {
|
|
94
|
+
store_bytes_as_utf16<big_endian>(p);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
simdutf_really_inline void store_bytes_as_utf32(char32_t *p) const {
|
|
98
|
+
const vector_type zero = vec_splats(T(0));
|
|
99
|
+
|
|
100
|
+
#if SIMDUTF_IS_BIG_ENDIAN
|
|
101
|
+
const vec_u8_t perm0 = {16, 16, 16, 0, 16, 16, 16, 1,
|
|
102
|
+
16, 16, 16, 2, 16, 16, 16, 3};
|
|
103
|
+
|
|
104
|
+
const vec_u8_t perm1 = {16, 16, 16, 4, 16, 16, 16, 5,
|
|
105
|
+
16, 16, 16, 6, 16, 16, 16, 7};
|
|
106
|
+
|
|
107
|
+
const vec_u8_t perm2 = {16, 16, 16, 8, 16, 16, 16, 9,
|
|
108
|
+
16, 16, 16, 10, 16, 16, 16, 11};
|
|
109
|
+
|
|
110
|
+
const vec_u8_t perm3 = {16, 16, 16, 12, 16, 16, 16, 13,
|
|
111
|
+
16, 16, 16, 14, 16, 16, 16, 15};
|
|
112
|
+
#else
|
|
113
|
+
const vec_u8_t perm0 = {0, 16, 16, 16, 1, 16, 16, 16,
|
|
114
|
+
2, 16, 16, 16, 3, 16, 16, 16};
|
|
115
|
+
|
|
116
|
+
const vec_u8_t perm1 = {4, 16, 16, 16, 5, 16, 16, 16,
|
|
117
|
+
6, 16, 16, 16, 7, 16, 16, 16};
|
|
118
|
+
|
|
119
|
+
const vec_u8_t perm2 = {8, 16, 16, 16, 9, 16, 16, 16,
|
|
120
|
+
10, 16, 16, 16, 11, 16, 16, 16};
|
|
121
|
+
|
|
122
|
+
const vec_u8_t perm3 = {12, 16, 16, 16, 13, 16, 16, 16,
|
|
123
|
+
14, 16, 16, 16, 15, 16, 16, 16};
|
|
124
|
+
#endif // SIMDUTF_IS_BIG_ENDIAN
|
|
125
|
+
|
|
126
|
+
const vector_type v0 = vec_perm(value, zero, perm0);
|
|
127
|
+
const vector_type v1 = vec_perm(value, zero, perm1);
|
|
128
|
+
const vector_type v2 = vec_perm(value, zero, perm2);
|
|
129
|
+
const vector_type v3 = vec_perm(value, zero, perm3);
|
|
130
|
+
|
|
131
|
+
constexpr size_t n = base8<T>::SIZE;
|
|
132
|
+
|
|
133
|
+
#if defined(__clang__)
|
|
134
|
+
vec_xst(v0, 0 * n, reinterpret_cast<T *>(p));
|
|
135
|
+
vec_xst(v1, 1 * n, reinterpret_cast<T *>(p));
|
|
136
|
+
vec_xst(v2, 2 * n, reinterpret_cast<T *>(p));
|
|
137
|
+
vec_xst(v3, 3 * n, reinterpret_cast<T *>(p));
|
|
138
|
+
#else
|
|
139
|
+
vec_xst(v0, 0 * n, reinterpret_cast<vector_type *>(p));
|
|
140
|
+
vec_xst(v1, 1 * n, reinterpret_cast<vector_type *>(p));
|
|
141
|
+
vec_xst(v2, 2 * n, reinterpret_cast<vector_type *>(p));
|
|
142
|
+
vec_xst(v3, 3 * n, reinterpret_cast<vector_type *>(p));
|
|
143
|
+
#endif // defined(__clang__)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
simdutf_really_inline void store_words_as_utf32(char32_t *p) const {
|
|
147
|
+
const vector_type zero = vec_splats(T(0));
|
|
148
|
+
|
|
149
|
+
#if SIMDUTF_IS_BIG_ENDIAN
|
|
150
|
+
const vec_u8_t perm0 = {16, 16, 0, 1, 16, 16, 2, 3,
|
|
151
|
+
16, 16, 4, 5, 16, 16, 6, 7};
|
|
152
|
+
const vec_u8_t perm1 = {16, 16, 8, 9, 16, 16, 10, 11,
|
|
153
|
+
16, 16, 12, 13, 16, 16, 14, 15};
|
|
154
|
+
#else
|
|
155
|
+
const vec_u8_t perm0 = {0, 1, 16, 16, 2, 3, 16, 16,
|
|
156
|
+
4, 5, 16, 16, 6, 7, 16, 16};
|
|
157
|
+
const vec_u8_t perm1 = {8, 9, 16, 16, 10, 11, 16, 16,
|
|
158
|
+
12, 13, 16, 16, 14, 15, 16, 16};
|
|
159
|
+
#endif // SIMDUTF_IS_BIG_ENDIAN
|
|
160
|
+
|
|
161
|
+
const vector_type v0 = vec_perm(value, zero, perm0);
|
|
162
|
+
const vector_type v1 = vec_perm(value, zero, perm1);
|
|
163
|
+
|
|
164
|
+
constexpr size_t n = base8<T>::SIZE;
|
|
165
|
+
|
|
166
|
+
#if defined(__clang__)
|
|
167
|
+
vec_xst(v0, 0 * n, reinterpret_cast<T *>(p));
|
|
168
|
+
vec_xst(v1, 1 * n, reinterpret_cast<T *>(p));
|
|
169
|
+
#else
|
|
170
|
+
vec_xst(v0, 0 * n, reinterpret_cast<vector_type *>(p));
|
|
171
|
+
vec_xst(v1, 1 * n, reinterpret_cast<vector_type *>(p));
|
|
172
|
+
#endif // defined(__clang__)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
simdutf_really_inline void store_ascii_as_utf32(char32_t *p) const {
|
|
176
|
+
store_bytes_as_utf32(p);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// Forward declaration
|
|
181
|
+
template <typename T> struct simd8;
|
|
182
|
+
|
|
183
|
+
template <typename T>
|
|
184
|
+
simd8<bool> operator==(const simd8<T> a, const simd8<T> b);
|
|
185
|
+
|
|
186
|
+
template <typename T>
|
|
187
|
+
simd8<bool> operator!=(const simd8<T> a, const simd8<T> b);
|
|
188
|
+
|
|
189
|
+
template <typename T> simd8<T> operator&(const simd8<T> a, const simd8<T> b);
|
|
190
|
+
|
|
191
|
+
template <typename T> simd8<T> operator|(const simd8<T> a, const simd8<T> b);
|
|
192
|
+
|
|
193
|
+
template <typename T> simd8<T> operator^(const simd8<T> a, const simd8<T> b);
|
|
194
|
+
|
|
195
|
+
template <typename T> simd8<T> operator+(const simd8<T> a, const simd8<T> b);
|
|
196
|
+
|
|
197
|
+
template <typename T> simd8<bool> operator<(const simd8<T> a, const simd8<T> b);
|
|
198
|
+
|
|
199
|
+
// SIMD byte mask type (returned by things like eq and gt)
|
|
200
|
+
template <> struct simd8<bool> : base8<bool> {
|
|
201
|
+
using super = base8<bool>;
|
|
202
|
+
|
|
203
|
+
static simdutf_really_inline simd8<bool> splat(bool _value) {
|
|
204
|
+
return (vector_type)vec_splats((unsigned char)(-(!!_value)));
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
simdutf_really_inline simd8() : super(vector_type()) {}
|
|
208
|
+
simdutf_really_inline simd8(const vector_type _value) : super(_value) {}
|
|
209
|
+
// Splat constructor
|
|
210
|
+
simdutf_really_inline simd8(bool _value) : base8<bool>(splat(_value)) {}
|
|
211
|
+
|
|
212
|
+
template <typename T>
|
|
213
|
+
simdutf_really_inline simd8(simd8<T> other)
|
|
214
|
+
: simd8(vector_type(other.value)) {}
|
|
215
|
+
|
|
216
|
+
simdutf_really_inline uint16_t to_bitmask() const {
|
|
217
|
+
return move_mask_u8(value);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
simdutf_really_inline bool any() const {
|
|
221
|
+
return !vec_all_eq(this->value, (vector_type)vec_splats(0));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
simdutf_really_inline bool all() const { return to_bitmask() == 0xffff; }
|
|
225
|
+
|
|
226
|
+
simdutf_really_inline simd8<bool> operator~() const {
|
|
227
|
+
return this->value ^ (vector_type)splat(true);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
template <typename T> struct base8_numeric : base8<T> {
|
|
232
|
+
using super = base8<T>;
|
|
233
|
+
using vector_type = typename super::vector_type;
|
|
234
|
+
|
|
235
|
+
static simdutf_really_inline simd8<T> splat(T value) {
|
|
236
|
+
return (vector_type)vec_splats(value);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
static simdutf_really_inline simd8<T> zero() { return splat(0); }
|
|
240
|
+
|
|
241
|
+
template <typename U>
|
|
242
|
+
static simdutf_really_inline simd8<T> load(const U *values) {
|
|
243
|
+
return vec_xl(0, reinterpret_cast<const T *>(values));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Repeat 16 values as many times as necessary (usually for lookup tables)
|
|
247
|
+
static simdutf_really_inline simd8<T> repeat_16(T v0, T v1, T v2, T v3, T v4,
|
|
248
|
+
T v5, T v6, T v7, T v8, T v9,
|
|
249
|
+
T v10, T v11, T v12, T v13,
|
|
250
|
+
T v14, T v15) {
|
|
251
|
+
return simd8<T>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
|
|
252
|
+
v14, v15);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
simdutf_really_inline base8_numeric() : base8<T>() {}
|
|
256
|
+
simdutf_really_inline base8_numeric(const vector_type _value)
|
|
257
|
+
: base8<T>(_value) {}
|
|
258
|
+
|
|
259
|
+
// Override to distinguish from bool version
|
|
260
|
+
simdutf_really_inline simd8<T> operator~() const { return *this ^ 0xFFu; }
|
|
261
|
+
|
|
262
|
+
simdutf_really_inline simd8<T> &operator-=(const simd8<T> other) {
|
|
263
|
+
this->value = vec_sub(this->value, other.value);
|
|
264
|
+
return *static_cast<simd8<T> *>(this);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Perform a lookup assuming the value is between 0 and 16 (undefined behavior
|
|
268
|
+
// for out of range values)
|
|
269
|
+
template <typename L>
|
|
270
|
+
simdutf_really_inline simd8<L> lookup_16(simd8<L> lookup_table) const {
|
|
271
|
+
return (vector_type)vec_perm((vector_type)lookup_table,
|
|
272
|
+
(vector_type)lookup_table, this->value);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
template <typename L>
|
|
276
|
+
simdutf_really_inline simd8<L>
|
|
277
|
+
lookup_32(const simd8<L> lookup_table_lo,
|
|
278
|
+
const simd8<L> lookup_table_hi) const {
|
|
279
|
+
return (vector_type)vec_perm(lookup_table_lo.value, lookup_table_hi.value,
|
|
280
|
+
this->value);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
template <typename L>
|
|
284
|
+
simdutf_really_inline simd8<L>
|
|
285
|
+
lookup_16(L replace0, L replace1, L replace2, L replace3, L replace4,
|
|
286
|
+
L replace5, L replace6, L replace7, L replace8, L replace9,
|
|
287
|
+
L replace10, L replace11, L replace12, L replace13, L replace14,
|
|
288
|
+
L replace15) const {
|
|
289
|
+
return lookup_16(simd8<L>::repeat_16(
|
|
290
|
+
replace0, replace1, replace2, replace3, replace4, replace5, replace6,
|
|
291
|
+
replace7, replace8, replace9, replace10, replace11, replace12,
|
|
292
|
+
replace13, replace14, replace15));
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
// Unsigned bytes
|
|
297
|
+
template <> struct simd8<uint8_t> : base8_numeric<uint8_t> {
|
|
298
|
+
using Self = simd8<uint8_t>;
|
|
299
|
+
|
|
300
|
+
simdutf_really_inline simd8() : base8_numeric<uint8_t>() {}
|
|
301
|
+
simdutf_really_inline simd8(const vector_type _value)
|
|
302
|
+
: base8_numeric<uint8_t>(_value) {}
|
|
303
|
+
// Splat constructor
|
|
304
|
+
simdutf_really_inline simd8(uint8_t _value) : simd8(splat(_value)) {}
|
|
305
|
+
// Array constructor
|
|
306
|
+
simdutf_really_inline simd8(const uint8_t *values) : simd8(load(values)) {}
|
|
307
|
+
// Member-by-member initialization
|
|
308
|
+
simdutf_really_inline
|
|
309
|
+
simd8(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4, uint8_t v5,
|
|
310
|
+
uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9, uint8_t v10,
|
|
311
|
+
uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14, uint8_t v15)
|
|
312
|
+
: simd8((vector_type){v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
|
|
313
|
+
v12, v13, v14, v15}) {}
|
|
314
|
+
// Repeat 16 values as many times as necessary (usually for lookup tables)
|
|
315
|
+
simdutf_really_inline static simd8<uint8_t>
|
|
316
|
+
repeat_16(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3, uint8_t v4,
|
|
317
|
+
uint8_t v5, uint8_t v6, uint8_t v7, uint8_t v8, uint8_t v9,
|
|
318
|
+
uint8_t v10, uint8_t v11, uint8_t v12, uint8_t v13, uint8_t v14,
|
|
319
|
+
uint8_t v15) {
|
|
320
|
+
return simd8<uint8_t>(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
|
|
321
|
+
v13, v14, v15);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
simdutf_really_inline bool is_ascii() const {
|
|
325
|
+
return move_mask_u8(this->value) == 0;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
template <typename T>
|
|
329
|
+
simdutf_really_inline simd8(simd8<T> other)
|
|
330
|
+
: simd8(vector_type(other.value)) {}
|
|
331
|
+
|
|
332
|
+
template <int N>
|
|
333
|
+
simdutf_really_inline Self prev(const Self prev_chunk) const {
|
|
334
|
+
return prev_aux<N>(prev_chunk.value);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Saturated math
|
|
338
|
+
simdutf_really_inline simd8<uint8_t>
|
|
339
|
+
saturating_sub(const simd8<uint8_t> other) const {
|
|
340
|
+
return (vector_type)vec_subs(this->value, (vector_type)other);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Same as >, but only guarantees true is nonzero (< guarantees true = -1)
|
|
344
|
+
simdutf_really_inline simd8<uint8_t>
|
|
345
|
+
gt_bits(const simd8<uint8_t> other) const {
|
|
346
|
+
return this->saturating_sub(other);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Same as <, but only guarantees true is nonzero (< guarantees true = -1)
|
|
350
|
+
simdutf_really_inline simd8<uint8_t>
|
|
351
|
+
lt_bits(const simd8<uint8_t> other) const {
|
|
352
|
+
return other.saturating_sub(*this);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Bit-specific operations
|
|
356
|
+
simdutf_really_inline bool bits_not_set_anywhere() const {
|
|
357
|
+
return vec_all_eq(this->value, (vector_type)vec_splats(0));
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
simdutf_really_inline bool any_bits_set_anywhere() const {
|
|
361
|
+
return !bits_not_set_anywhere();
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
template <int N> simdutf_really_inline simd8<uint8_t> shr() const {
|
|
365
|
+
return simd8<uint8_t>(
|
|
366
|
+
(vector_type)vec_sr(this->value, (vector_type)vec_splat_u8(N)));
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
template <int N> simdutf_really_inline simd8<uint8_t> shl() const {
|
|
370
|
+
return simd8<uint8_t>(
|
|
371
|
+
(vector_type)vec_sl(this->value, (vector_type)vec_splat_u8(N)));
|
|
372
|
+
}
|
|
373
|
+
void dump() const {
|
|
374
|
+
#ifdef SIMDUTF_LOGGING
|
|
375
|
+
uint8_t tmp[16];
|
|
376
|
+
store(tmp);
|
|
377
|
+
for (int i = 0; i < 16; i++) {
|
|
378
|
+
if (i == 0) {
|
|
379
|
+
printf("[%02x", tmp[i]);
|
|
380
|
+
} else if (i == 15) {
|
|
381
|
+
printf(" %02x]", tmp[i]);
|
|
382
|
+
} else {
|
|
383
|
+
printf(" %02x", tmp[i]);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
putchar('\n');
|
|
387
|
+
#endif // SIMDUTF_LOGGING
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
void dump_ascii() const {
|
|
391
|
+
#ifdef SIMDUTF_LOGGING
|
|
392
|
+
uint8_t tmp[16];
|
|
393
|
+
store(tmp);
|
|
394
|
+
for (int i = 0; i < 16; i++) {
|
|
395
|
+
if (i == 0) {
|
|
396
|
+
printf("[%c", tmp[i]);
|
|
397
|
+
} else if (i == 15) {
|
|
398
|
+
printf("%c]", tmp[i]);
|
|
399
|
+
} else {
|
|
400
|
+
printf("%c", tmp[i]);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
putchar('\n');
|
|
404
|
+
#endif // SIMDUTF_LOGGING
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
// Signed bytes
|
|
409
|
+
template <> struct simd8<int8_t> : base8_numeric<int8_t> {
|
|
410
|
+
simdutf_really_inline simd8() : base8_numeric<int8_t>() {}
|
|
411
|
+
simdutf_really_inline simd8(const vector_type _value)
|
|
412
|
+
: base8_numeric<int8_t>(_value) {}
|
|
413
|
+
|
|
414
|
+
template <typename T>
|
|
415
|
+
simdutf_really_inline simd8(simd8<T> other)
|
|
416
|
+
: simd8(vector_type(other.value)) {}
|
|
417
|
+
|
|
418
|
+
// Splat constructor
|
|
419
|
+
simdutf_really_inline simd8(int8_t _value) : simd8(splat(_value)) {}
|
|
420
|
+
// Array constructor
|
|
421
|
+
simdutf_really_inline simd8(const int8_t *values) : simd8(load(values)) {}
|
|
422
|
+
|
|
423
|
+
simdutf_really_inline operator simd8<uint8_t>() const;
|
|
424
|
+
|
|
425
|
+
// Saturated math
|
|
426
|
+
simdutf_really_inline simd8<int8_t>
|
|
427
|
+
saturating_add(const simd8<int8_t> other) const {
|
|
428
|
+
return (vector_type)vec_adds(this->value, other.value);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
void dump() const {
|
|
432
|
+
int8_t tmp[16];
|
|
433
|
+
store(tmp);
|
|
434
|
+
for (int i = 0; i < 16; i++) {
|
|
435
|
+
if (i == 0) {
|
|
436
|
+
printf("[%02x", tmp[i]);
|
|
437
|
+
} else if (i == 15) {
|
|
438
|
+
printf("%02x]", tmp[i]);
|
|
439
|
+
} else {
|
|
440
|
+
printf("%02x", tmp[i]);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
putchar('\n');
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
template <typename T>
|
|
448
|
+
simd8<bool> operator==(const simd8<T> a, const simd8<T> b) {
|
|
449
|
+
return vec_cmpeq(a.value, b.value);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
template <typename T>
|
|
453
|
+
simd8<bool> operator!=(const simd8<T> a, const simd8<T> b) {
|
|
454
|
+
return vec_cmpne(a.value, b.value);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
template <typename T> simd8<T> operator&(const simd8<T> a, const simd8<T> b) {
|
|
458
|
+
return vec_and(a.value, b.value);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
template <typename T, typename U> simd8<T> operator&(const simd8<T> a, U b) {
|
|
462
|
+
return vec_and(a.value, vec_splats(T(b)));
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
template <typename T> simd8<T> operator|(const simd8<T> a, const simd8<T> b) {
|
|
466
|
+
return vec_or(a.value, b.value);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
template <typename T> simd8<T> operator^(const simd8<T> a, const simd8<T> b) {
|
|
470
|
+
return vec_xor(a.value, b.value);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
template <typename T, typename U> simd8<T> operator^(const simd8<T> a, U b) {
|
|
474
|
+
return vec_xor(a.value, vec_splats(T(b)));
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
template <typename T> simd8<T> operator+(const simd8<T> a, const simd8<T> b) {
|
|
478
|
+
return vec_add(a.value, b.value);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
template <typename T, typename U> simd8<T> operator+(const simd8<T> a, U b) {
|
|
482
|
+
return vec_add(a.value, vec_splats(T(b)));
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
simdutf_really_inline simd8<int8_t>::operator simd8<uint8_t>() const {
|
|
486
|
+
return (simd8<uint8_t>::vector_type)value;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
template <typename T>
|
|
490
|
+
simd8<bool> operator<(const simd8<T> a, const simd8<T> b) {
|
|
491
|
+
return vec_cmplt(a.value, b.value);
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
template <typename T>
|
|
495
|
+
simd8<bool> operator>(const simd8<T> a, const simd8<T> b) {
|
|
496
|
+
return vec_cmpgt(a.value, b.value);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
template <typename T>
|
|
500
|
+
simd8<bool> operator>=(const simd8<T> a, const simd8<T> b) {
|
|
501
|
+
return vec_cmpge(a.value, b.value);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
template <typename T> struct simd8x64 {
|
|
505
|
+
static constexpr int NUM_CHUNKS = 64 / sizeof(simd8<T>);
|
|
506
|
+
static constexpr size_t ELEMENTS = simd8<T>::ELEMENTS;
|
|
507
|
+
|
|
508
|
+
static_assert(NUM_CHUNKS == 4,
|
|
509
|
+
"PPC64 kernel should use four registers per 64-byte block.");
|
|
510
|
+
simd8<T> chunks[NUM_CHUNKS];
|
|
511
|
+
|
|
512
|
+
simd8x64(const simd8x64<T> &o) = delete; // no copy allowed
|
|
513
|
+
simd8x64<T> &
|
|
514
|
+
operator=(const simd8<T> other) = delete; // no assignment allowed
|
|
515
|
+
simd8x64() = delete; // no default constructor allowed
|
|
516
|
+
simd8x64(simd8x64<T> &&) = default;
|
|
517
|
+
|
|
518
|
+
simdutf_really_inline simd8x64(const simd8<T> chunk0, const simd8<T> chunk1,
|
|
519
|
+
const simd8<T> chunk2, const simd8<T> chunk3)
|
|
520
|
+
: chunks{chunk0, chunk1, chunk2, chunk3} {}
|
|
521
|
+
simdutf_really_inline simd8x64(const T *ptr)
|
|
522
|
+
: chunks{simd8<T>::load(ptr),
|
|
523
|
+
simd8<T>::load(ptr + sizeof(simd8<T>) / sizeof(T)),
|
|
524
|
+
simd8<T>::load(ptr + 2 * sizeof(simd8<T>) / sizeof(T)),
|
|
525
|
+
simd8<T>::load(ptr + 3 * sizeof(simd8<T>) / sizeof(T))} {}
|
|
526
|
+
|
|
527
|
+
simdutf_really_inline void store(T *ptr) const {
|
|
528
|
+
this->chunks[0].store(ptr + ELEMENTS * 0);
|
|
529
|
+
this->chunks[1].store(ptr + ELEMENTS * 1);
|
|
530
|
+
this->chunks[2].store(ptr + ELEMENTS * 2);
|
|
531
|
+
this->chunks[3].store(ptr + ELEMENTS * 3);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
simdutf_really_inline simd8x64<T> &operator|=(const simd8x64<T> &other) {
|
|
535
|
+
this->chunks[0] |= other.chunks[0];
|
|
536
|
+
this->chunks[1] |= other.chunks[1];
|
|
537
|
+
this->chunks[2] |= other.chunks[2];
|
|
538
|
+
this->chunks[3] |= other.chunks[3];
|
|
539
|
+
return *this;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
simdutf_really_inline simd8<T> reduce_or() const {
|
|
543
|
+
return (this->chunks[0] | this->chunks[1]) |
|
|
544
|
+
(this->chunks[2] | this->chunks[3]);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
simdutf_really_inline bool is_ascii() const {
|
|
548
|
+
return this->reduce_or().is_ascii();
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
template <endianness endian>
|
|
552
|
+
simdutf_really_inline void store_ascii_as_utf16(char16_t *ptr) const {
|
|
553
|
+
this->chunks[0].template store_ascii_as_utf16<endian>(ptr +
|
|
554
|
+
sizeof(simd8<T>) * 0);
|
|
555
|
+
this->chunks[1].template store_ascii_as_utf16<endian>(ptr +
|
|
556
|
+
sizeof(simd8<T>) * 1);
|
|
557
|
+
this->chunks[2].template store_ascii_as_utf16<endian>(ptr +
|
|
558
|
+
sizeof(simd8<T>) * 2);
|
|
559
|
+
this->chunks[3].template store_ascii_as_utf16<endian>(ptr +
|
|
560
|
+
sizeof(simd8<T>) * 3);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
simdutf_really_inline void store_ascii_as_utf32(char32_t *ptr) const {
|
|
564
|
+
this->chunks[0].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 0);
|
|
565
|
+
this->chunks[1].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 1);
|
|
566
|
+
this->chunks[2].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 2);
|
|
567
|
+
this->chunks[3].store_ascii_as_utf32(ptr + sizeof(simd8<T>) * 3);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
simdutf_really_inline uint64_t to_bitmask() const {
|
|
571
|
+
uint64_t r0 = uint32_t(this->chunks[0].to_bitmask());
|
|
572
|
+
uint64_t r1 = this->chunks[1].to_bitmask();
|
|
573
|
+
uint64_t r2 = this->chunks[2].to_bitmask();
|
|
574
|
+
uint64_t r3 = this->chunks[3].to_bitmask();
|
|
575
|
+
return r0 | (r1 << 16) | (r2 << 32) | (r3 << 48);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
simdutf_really_inline uint64_t lt(const T m) const {
|
|
579
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
580
|
+
return simd8x64<bool>(this->chunks[0] < mask, this->chunks[1] < mask,
|
|
581
|
+
this->chunks[2] < mask, this->chunks[3] < mask)
|
|
582
|
+
.to_bitmask();
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
simdutf_really_inline uint64_t gt(const T m) const {
|
|
586
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
587
|
+
return simd8x64<bool>(this->chunks[0] > mask, this->chunks[1] > mask,
|
|
588
|
+
this->chunks[2] > mask, this->chunks[3] > mask)
|
|
589
|
+
.to_bitmask();
|
|
590
|
+
}
|
|
591
|
+
simdutf_really_inline uint64_t eq(const T m) const {
|
|
592
|
+
const simd8<T> mask = simd8<T>::splat(m);
|
|
593
|
+
return simd8x64<bool>(this->chunks[0] == mask, this->chunks[1] == mask,
|
|
594
|
+
this->chunks[2] == mask, this->chunks[3] == mask)
|
|
595
|
+
.to_bitmask();
|
|
596
|
+
}
|
|
597
|
+
simdutf_really_inline uint64_t gteq_unsigned(const uint8_t m) const {
|
|
598
|
+
const simd8<uint8_t> mask = simd8<uint8_t>::splat(m);
|
|
599
|
+
return simd8x64<bool>(simd8<uint8_t>(this->chunks[0]) >= mask,
|
|
600
|
+
simd8<uint8_t>(this->chunks[1]) >= mask,
|
|
601
|
+
simd8<uint8_t>(this->chunks[2]) >= mask,
|
|
602
|
+
simd8<uint8_t>(this->chunks[3]) >= mask)
|
|
603
|
+
.to_bitmask();
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
void dump() const {
|
|
607
|
+
puts("");
|
|
608
|
+
for (int i = 0; i < 4; i++) {
|
|
609
|
+
printf("chunk[%d] = ", i);
|
|
610
|
+
this->chunks[i].dump();
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
}; // struct simd8x64<T>
|
|
614
|
+
|
|
615
|
+
simdutf_really_inline simd8<uint8_t> avg(const simd8<uint8_t> a,
|
|
616
|
+
const simd8<uint8_t> b) {
|
|
617
|
+
return vec_avg(a.value, b.value);
|
|
618
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#ifndef SIMDUTF_PPC64_H
|
|
2
|
+
#define SIMDUTF_PPC64_H
|
|
3
|
+
|
|
4
|
+
#ifdef SIMDUTF_FALLBACK_H
|
|
5
|
+
#error "ppc64.h must be included before fallback.h"
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
#include "simdutf/portability.h"
|
|
9
|
+
|
|
10
|
+
#ifndef SIMDUTF_IMPLEMENTATION_PPC64
|
|
11
|
+
#define SIMDUTF_IMPLEMENTATION_PPC64 (SIMDUTF_IS_PPC64)
|
|
12
|
+
#endif
|
|
13
|
+
#define SIMDUTF_CAN_ALWAYS_RUN_PPC64 \
|
|
14
|
+
SIMDUTF_IMPLEMENTATION_PPC64 &&SIMDUTF_IS_PPC64
|
|
15
|
+
|
|
16
|
+
#include "simdutf/internal/isadetection.h"
|
|
17
|
+
|
|
18
|
+
#if SIMDUTF_IMPLEMENTATION_PPC64
|
|
19
|
+
|
|
20
|
+
namespace simdutf {
|
|
21
|
+
/**
|
|
22
|
+
* Implementation for ALTIVEC (PPC64).
|
|
23
|
+
*/
|
|
24
|
+
namespace ppc64 {} // namespace ppc64
|
|
25
|
+
} // namespace simdutf
|
|
26
|
+
|
|
27
|
+
#include "simdutf/ppc64/implementation.h"
|
|
28
|
+
|
|
29
|
+
#include "simdutf/ppc64/begin.h"
|
|
30
|
+
|
|
31
|
+
// Declarations
|
|
32
|
+
#include "simdutf/ppc64/intrinsics.h"
|
|
33
|
+
#include "simdutf/ppc64/bitmanipulation.h"
|
|
34
|
+
#include "simdutf/ppc64/simd.h"
|
|
35
|
+
|
|
36
|
+
#include "simdutf/ppc64/end.h"
|
|
37
|
+
|
|
38
|
+
#endif // SIMDUTF_IMPLEMENTATION_PPC64
|
|
39
|
+
|
|
40
|
+
#endif // SIMDUTF_PPC64_H
|