diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-09-17 06:42:50 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-09-17 23:40:54 +0200 |
commit | 2cbd0d9291a67d88842aeef9d1807c400f2acb96 (patch) | |
tree | 73c48ff707f8f9d34f56ae310e7ff463610eae1c /src/crypto/zinc/poly1305 | |
parent | chacha20-x86_64: don't activate simd for small blocks (diff) | |
download | wireguard-monolithic-historical-2cbd0d9291a67d88842aeef9d1807c400f2acb96.tar.xz wireguard-monolithic-historical-2cbd0d9291a67d88842aeef9d1807c400f2acb96.zip |
poly1305-x86_64: don't activate simd for small blocks
Diffstat (limited to 'src/crypto/zinc/poly1305')
-rw-r--r-- | src/crypto/zinc/poly1305/poly1305-x86_64-glue.h | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/crypto/zinc/poly1305/poly1305-x86_64-glue.h b/src/crypto/zinc/poly1305/poly1305-x86_64-glue.h index 1afd1c5..a884d22 100644 --- a/src/crypto/zinc/poly1305/poly1305-x86_64-glue.h +++ b/src/crypto/zinc/poly1305/poly1305-x86_64-glue.h @@ -61,22 +61,33 @@ static inline bool poly1305_init_arch(void *ctx, return true; } +struct poly1305_arch_internal { + u32 state[5]; + u32 simd_is_engaged; +}; + static inline bool poly1305_blocks_arch(void *ctx, const u8 *inp, const size_t len, const u32 padbit, simd_context_t *simd_context) { + struct poly1305_arch_internal *state = ctx; + + if ((len < (POLY1305_BLOCK_SIZE * 18) && !state->simd_is_engaged) || + !simd_use(simd_context)) + poly1305_blocks_x86_64(ctx, inp, len, padbit); + else #ifdef CONFIG_AS_AVX512 - if (poly1305_use_avx512 && simd_use(simd_context)) + if (poly1305_use_avx512) poly1305_blocks_avx512(ctx, inp, len, padbit); else #endif #ifdef CONFIG_AS_AVX2 - if (poly1305_use_avx2 && simd_use(simd_context)) + if (poly1305_use_avx2) poly1305_blocks_avx2(ctx, inp, len, padbit); else #endif #ifdef CONFIG_AS_AVX - if (poly1305_use_avx && simd_use(simd_context)) + if (poly1305_use_avx) poly1305_blocks_avx(ctx, inp, len, padbit); else #endif |