summaryrefslogtreecommitdiff
path: root/cipher
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@iki.fi>2015-10-13 08:33:00 +0300
committerJussi Kivilinna <jussi.kivilinna@iki.fi>2015-10-13 08:33:00 +0300
commitfa94b6111948a614ebdcb67f7942eced8b84c579 (patch)
treedda90ff24d279b2a23945d0a5ec4ac0dd21365f1 /cipher
parent73374fdd27c7ba28b19f9672c68a6f5b72252fe5 (diff)
downloadlibgcrypt-fa94b6111948a614ebdcb67f7942eced8b84c579.tar.gz
Fix compiling AES/AES-NI implementation on linux-i386
* cipher/rijndael-aesni.c (do_aesni_ctr_4): Split assembly block in two parts to reduce number of register constraints needed. -- Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Diffstat (limited to 'cipher')
-rw-r--r--cipher/rijndael-aesni.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/cipher/rijndael-aesni.c b/cipher/rijndael-aesni.c
index 5c859031..97e0ad0a 100644
--- a/cipher/rijndael-aesni.c
+++ b/cipher/rijndael-aesni.c
@@ -961,8 +961,17 @@ do_aesni_ctr_4 (const RIJNDAEL_context *ctx,
aesenclast_xmm1_xmm2
aesenclast_xmm1_xmm3
aesenclast_xmm1_xmm4
+ :
+ : [ctr] "r" (ctr),
+ [key] "r" (ctx->keyschenc),
+ [rounds] "g" (ctx->rounds),
+ [addb_1] "m" (bige_addb_const[0][0]),
+ [addb_2] "m" (bige_addb_const[1][0]),
+ [addb_3] "m" (bige_addb_const[2][0]),
+ [addb_4] "m" (bige_addb_const[3][0])
+ : "%esi", "cc", "memory");
- "movdqu (%[src]), %%xmm1\n\t" /* Get block 1. */
+ asm volatile ("movdqu (%[src]), %%xmm1\n\t" /* Get block 1. */
"pxor %%xmm1, %%xmm0\n\t" /* EncCTR-1 ^= input */
"movdqu %%xmm0, (%[dst])\n\t" /* Store block 1 */
@@ -977,18 +986,10 @@ do_aesni_ctr_4 (const RIJNDAEL_context *ctx,
"movdqu 48(%[src]), %%xmm1\n\t" /* Get block 4. */
"pxor %%xmm1, %%xmm4\n\t" /* EncCTR-4 ^= input */
"movdqu %%xmm4, 48(%[dst])" /* Store block 4. */
-
:
- : [ctr] "r" (ctr),
- [src] "r" (a),
- [dst] "r" (b),
- [key] "r" (ctx->keyschenc),
- [rounds] "g" (ctx->rounds),
- [addb_1] "m" (bige_addb_const[0][0]),
- [addb_2] "m" (bige_addb_const[1][0]),
- [addb_3] "m" (bige_addb_const[2][0]),
- [addb_4] "m" (bige_addb_const[3][0])
- : "%esi", "cc", "memory");
+ : [src] "r" (a),
+ [dst] "r" (b)
+ : "memory");
#undef aesenc_xmm1_xmm0
#undef aesenc_xmm1_xmm2
#undef aesenc_xmm1_xmm3