diff options
author | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2013-09-01 16:50:55 +0300 |
---|---|---|
committer | Jussi Kivilinna <jussi.kivilinna@iki.fi> | 2013-09-01 16:50:55 +0300 |
commit | d12828cd821a4b4428eae19de5aee02cf536e536 (patch) | |
tree | d91b173619c4cc23260ccd1cd918ea7ecc419937 /cipher/serpent.c | |
parent | fd6721c235a5bdcb332c8eb708fbd4f96e52e824 (diff) | |
download | libgcrypt-d12828cd821a4b4428eae19de5aee02cf536e536.tar.gz |
serpent-avx2-amd64: Move register clearing to assembly
* cipher/serpent-avx2-amd64.S (_gcry_serpent_avx2_ctr_enc)
(_gcry_serpent_avx2_cbc_dec, _gcry_serpent_avx2_cfb_dec): Change last
'vzeroupper' to 'vzeroall'.
* cipher/serpent.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
(_gcry_serpent_avx2_cfb_dec) [USE_AVX2]: Remove register clearing with
'vzeroall'.
--
AVX2 implementation was already clearing upper halfs of YMM registers at end of
assembly functions to prevent long SSE<->AVX transition stalls present on Intel
CPUs. Patch changes these 'vzeroupper' instructions to 'vzeroall' to fully
clear YMM registers. After this change register clearing in serpent.c in not
needed.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher/serpent.c')
-rw-r--r-- | cipher/serpent.c | 9 |
1 files changed, 0 insertions, 9 deletions
diff --git a/cipher/serpent.c b/cipher/serpent.c index bf03fe74..430a7e9f 100644 --- a/cipher/serpent.c +++ b/cipher/serpent.c @@ -845,9 +845,6 @@ _gcry_serpent_ctr_enc(void *context, unsigned char *ctr, if (did_use_avx2) { - /* clear avx2 registers used by serpent-sse2 */ - asm volatile ("vzeroall;\n":::); - /* serpent-avx2 assembly code does not use stack */ if (nblocks == 0) burn_stack_depth = 0; @@ -937,9 +934,6 @@ _gcry_serpent_cbc_dec(void *context, unsigned char *iv, if (did_use_avx2) { - /* clear avx2 registers used by serpent-sse2 */ - asm volatile ("vzeroall;\n":::); - /* serpent-avx2 assembly code does not use stack */ if (nblocks == 0) burn_stack_depth = 0; @@ -1023,9 +1017,6 @@ _gcry_serpent_cfb_dec(void *context, unsigned char *iv, if (did_use_avx2) { - /* clear avx2 registers used by serpent-sse2 */ - asm volatile ("vzeroall;\n":::); - /* serpent-avx2 assembly code does not use stack */ if (nblocks == 0) burn_stack_depth = 0; |