1 From fa8f23284d4689c2a737204b337b58d966dcbd8c Mon Sep 17 00:00:00 2001
2 From: Sean Parkinson <sean@wolfssl.com>
3 Date: Fri, 20 Aug 2021 10:23:38 +1000
4 Subject: [PATCH] Maths x86 asm: change asm snippets to get compiling
7 Use register or memory for c0, c1, c2 in SQRADD and SQRADD2.
9 Use register or memory for vl, vh, vo in SP_ASM_MUL_ADD,
10 SP_ASM_MUL_ADD2 and SP_ASM_SQR_ADD.
12 wolfcrypt/src/asm.c | 29 ++++++++++++++++++++---------
13 wolfcrypt/src/sp_int.c | 6 +++---
14 2 files changed, 23 insertions(+), 12 deletions(-)
16 --- a/wolfcrypt/src/asm.c
17 +++ b/wolfcrypt/src/asm.c
18 @@ -698,33 +698,39 @@ __asm__( \
20 #define SQRADD(i, j) \
22 - "movl %6,%%eax \n\t" \
23 + "movl %3,%%eax \n\t" \
25 "addl %%eax,%0 \n\t" \
26 "adcl %%edx,%1 \n\t" \
28 - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i) :"%eax","%edx","cc");
29 + :"+rm"(c0), "+rm"(c1), "+rm"(c2) \
31 + :"%eax","%edx","cc");
33 #define SQRADD2(i, j) \
35 - "movl %6,%%eax \n\t" \
37 + "movl %3,%%eax \n\t" \
39 "addl %%eax,%0 \n\t" \
40 "adcl %%edx,%1 \n\t" \
42 "addl %%eax,%0 \n\t" \
43 "adcl %%edx,%1 \n\t" \
45 - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx", "cc");
46 + :"+rm"(c0), "+rm"(c1), "+rm"(c2) \
48 + :"%eax","%edx", "cc");
50 #define SQRADDSC(i, j) \
53 "movl %3,%%eax \n\t" \
55 "movl %%eax,%0 \n\t" \
56 "movl %%edx,%1 \n\t" \
58 - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "g"(i), "g"(j) :"%eax","%edx","cc");
59 + :"=r"(sc0), "=r"(sc1), "=r"(sc2) \
61 + :"%eax","%edx","cc");
63 #define SQRADDAC(i, j) \
65 @@ -733,7 +739,9 @@ __asm__(
66 "addl %%eax,%0 \n\t" \
67 "adcl %%edx,%1 \n\t" \
69 - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) :"%eax","%edx","cc");
70 + :"=r"(sc0), "=r"(sc1), "=r"(sc2) \
71 + : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
72 + :"%eax","%edx","cc");
76 @@ -743,7 +751,10 @@ __asm__(
80 - :"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) : "cc");
81 + :"=r"(c0), "=r"(c1), "=r"(c2) \
82 + : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), \
86 #elif defined(TFM_X86_64)
87 /* x86-64 optimized */
88 --- a/wolfcrypt/src/sp_int.c
89 +++ b/wolfcrypt/src/sp_int.c
90 @@ -476,7 +476,7 @@ static WC_INLINE sp_int_digit sp_div_wor
91 "addl %%eax, %[l] \n\t" \
92 "adcl %%edx, %[h] \n\t" \
93 "adcl $0 , %[o] \n\t" \
94 - : [l] "+r" (vl), [h] "+r" (vh), [o] "+r" (vo) \
95 + : [l] "+rm" (vl), [h] "+rm" (vh), [o] "+rm" (vo) \
96 : [a] "r" (va), [b] "r" (vb) \
97 : "eax", "edx", "cc" \
99 @@ -502,7 +502,7 @@ static WC_INLINE sp_int_digit sp_div_wor
100 "addl %%eax, %[l] \n\t" \
101 "adcl %%edx, %[h] \n\t" \
102 "adcl $0 , %[o] \n\t" \
103 - : [l] "+r" (vl), [h] "+r" (vh), [o] "+r" (vo) \
104 + : [l] "+rm" (vl), [h] "+rm" (vh), [o] "+rm" (vo) \
105 : [a] "r" (va), [b] "r" (vb) \
106 : "eax", "edx", "cc" \
108 @@ -541,7 +541,7 @@ static WC_INLINE sp_int_digit sp_div_wor
109 "addl %%eax, %[l] \n\t" \
110 "adcl %%edx, %[h] \n\t" \
111 "adcl $0 , %[o] \n\t" \
112 - : [l] "+r" (vl), [h] "+r" (vh), [o] "+r" (vo) \
113 + : [l] "+rm" (vl), [h] "+rm" (vh), [o] "+rm" (vo) \
115 : "eax", "edx", "cc" \