diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-11-11 16:06:56 -0500 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-11-11 16:06:56 -0500 |
commit | 7a45413771553a372b8b1db7eb99260e778d4414 (patch) | |
tree | 2138cb2043051a750a4d289b3390d251324cd216 /src/crypto/zinc/chacha20/chacha20-x86_64-glue.c | |
parent | chacha20: import .pl for chacha20 (diff) | |
download | wireguard-monolithic-historical-7a45413771553a372b8b1db7eb99260e778d4414.tar.xz wireguard-monolithic-historical-7a45413771553a372b8b1db7eb99260e778d4414.zip |
chacha20: enable sse2 pathjd/maybe-sse2
Diffstat (limited to 'src/crypto/zinc/chacha20/chacha20-x86_64-glue.c')
-rw-r--r-- | src/crypto/zinc/chacha20/chacha20-x86_64-glue.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/crypto/zinc/chacha20/chacha20-x86_64-glue.c b/src/crypto/zinc/chacha20/chacha20-x86_64-glue.c index f5a9c21..49a7105 100644 --- a/src/crypto/zinc/chacha20/chacha20-x86_64-glue.c +++ b/src/crypto/zinc/chacha20/chacha20-x86_64-glue.c @@ -10,6 +10,8 @@ asmlinkage void hchacha20_ssse3(u32 *derived_key, const u8 *nonce, const u8 *key); +asmlinkage void chacha20_sse2(u8 *out, const u8 *in, const size_t len, + const u32 key[8], const u32 counter[4]); asmlinkage void chacha20_ssse3(u8 *out, const u8 *in, const size_t len, const u32 key[8], const u32 counter[4]); asmlinkage void chacha20_avx2(u8 *out, const u8 *in, const size_t len, @@ -61,8 +63,7 @@ static inline bool chacha20_arch(struct chacha20_ctx *ctx, u8 *dst, BUILD_BUG_ON(PAGE_SIZE < CHACHA20_BLOCK_SIZE || PAGE_SIZE % CHACHA20_BLOCK_SIZE); - if (!IS_ENABLED(CONFIG_AS_SSSE3) || !chacha20_use_ssse3 || - len <= CHACHA20_BLOCK_SIZE || !simd_use(simd_context)) + if (len <= CHACHA20_BLOCK_SIZE || !simd_use(simd_context)) return false; for (;;) { @@ -77,8 +78,10 @@ static inline bool chacha20_arch(struct chacha20_ctx *ctx, u8 *dst, else if (IS_ENABLED(CONFIG_AS_AVX2) && chacha20_use_avx2 && len >= CHACHA20_BLOCK_SIZE * 4) chacha20_avx2(dst, src, bytes, ctx->key, ctx->counter); - else + else if (IS_ENABLED(CONFIG_AS_SSSE3) && chacha20_use_ssse3) chacha20_ssse3(dst, src, bytes, ctx->key, ctx->counter); + else + chacha20_sse2(dst, src, bytes, ctx->key, ctx->counter); ctx->counter[0] += (bytes + 63) / 64; len -= bytes; if (!len) |