diff options
Diffstat (limited to 'src/lib/libcrypto/bn/asm/x86_64-gcc.c')
-rw-r--r-- | src/lib/libcrypto/bn/asm/x86_64-gcc.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/lib/libcrypto/bn/asm/x86_64-gcc.c b/src/lib/libcrypto/bn/asm/x86_64-gcc.c index f13f52dd85..acb0b40118 100644 --- a/src/lib/libcrypto/bn/asm/x86_64-gcc.c +++ b/src/lib/libcrypto/bn/asm/x86_64-gcc.c | |||
@@ -1,4 +1,5 @@ | |||
1 | #ifdef __SUNPRO_C | 1 | #include "../bn_lcl.h" |
2 | #if !(defined(__GNUC__) && __GNUC__>=2) | ||
2 | # include "../bn_asm.c" /* kind of dirty hack for Sun Studio */ | 3 | # include "../bn_asm.c" /* kind of dirty hack for Sun Studio */ |
3 | #else | 4 | #else |
4 | /* | 5 | /* |
@@ -54,7 +55,15 @@ | |||
54 | * machine. | 55 | * machine. |
55 | */ | 56 | */ |
56 | 57 | ||
58 | #ifdef _WIN64 | ||
59 | #define BN_ULONG unsigned long long | ||
60 | #else | ||
57 | #define BN_ULONG unsigned long | 61 | #define BN_ULONG unsigned long |
62 | #endif | ||
63 | |||
64 | #undef mul | ||
65 | #undef mul_add | ||
66 | #undef sqr | ||
58 | 67 | ||
59 | /* | 68 | /* |
60 | * "m"(a), "+m"(r) is the way to favor DirectPath µ-code; | 69 | * "m"(a), "+m"(r) is the way to favor DirectPath µ-code; |
@@ -97,7 +106,7 @@ | |||
97 | : "a"(a) \ | 106 | : "a"(a) \ |
98 | : "cc"); | 107 | : "cc"); |
99 | 108 | ||
100 | BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) | 109 | BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) |
101 | { | 110 | { |
102 | BN_ULONG c1=0; | 111 | BN_ULONG c1=0; |
103 | 112 | ||
@@ -121,7 +130,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) | |||
121 | return(c1); | 130 | return(c1); |
122 | } | 131 | } |
123 | 132 | ||
124 | BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) | 133 | BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) |
125 | { | 134 | { |
126 | BN_ULONG c1=0; | 135 | BN_ULONG c1=0; |
127 | 136 | ||
@@ -144,7 +153,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) | |||
144 | return(c1); | 153 | return(c1); |
145 | } | 154 | } |
146 | 155 | ||
147 | void bn_sqr_words(BN_ULONG *r, BN_ULONG *a, int n) | 156 | void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n) |
148 | { | 157 | { |
149 | if (n <= 0) return; | 158 | if (n <= 0) return; |
150 | 159 | ||
@@ -175,14 +184,14 @@ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d) | |||
175 | return ret; | 184 | return ret; |
176 | } | 185 | } |
177 | 186 | ||
178 | BN_ULONG bn_add_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n) | 187 | BN_ULONG bn_add_words (BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int n) |
179 | { BN_ULONG ret=0,i=0; | 188 | { BN_ULONG ret=0,i=0; |
180 | 189 | ||
181 | if (n <= 0) return 0; | 190 | if (n <= 0) return 0; |
182 | 191 | ||
183 | asm ( | 192 | asm ( |
184 | " subq %2,%2 \n" | 193 | " subq %2,%2 \n" |
185 | ".align 16 \n" | 194 | ".p2align 4 \n" |
186 | "1: movq (%4,%2,8),%0 \n" | 195 | "1: movq (%4,%2,8),%0 \n" |
187 | " adcq (%5,%2,8),%0 \n" | 196 | " adcq (%5,%2,8),%0 \n" |
188 | " movq %0,(%3,%2,8) \n" | 197 | " movq %0,(%3,%2,8) \n" |
@@ -198,14 +207,14 @@ BN_ULONG bn_add_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n) | |||
198 | } | 207 | } |
199 | 208 | ||
200 | #ifndef SIMICS | 209 | #ifndef SIMICS |
201 | BN_ULONG bn_sub_words (BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int n) | 210 | BN_ULONG bn_sub_words (BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,int n) |
202 | { BN_ULONG ret=0,i=0; | 211 | { BN_ULONG ret=0,i=0; |
203 | 212 | ||
204 | if (n <= 0) return 0; | 213 | if (n <= 0) return 0; |
205 | 214 | ||
206 | asm ( | 215 | asm ( |
207 | " subq %2,%2 \n" | 216 | " subq %2,%2 \n" |
208 | ".align 16 \n" | 217 | ".p2align 4 \n" |
209 | "1: movq (%4,%2,8),%0 \n" | 218 | "1: movq (%4,%2,8),%0 \n" |
210 | " sbbq (%5,%2,8),%0 \n" | 219 | " sbbq (%5,%2,8),%0 \n" |
211 | " movq %0,(%3,%2,8) \n" | 220 | " movq %0,(%3,%2,8) \n" |
@@ -485,7 +494,7 @@ void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) | |||
485 | r[7]=c2; | 494 | r[7]=c2; |
486 | } | 495 | } |
487 | 496 | ||
488 | void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a) | 497 | void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a) |
489 | { | 498 | { |
490 | BN_ULONG t1,t2; | 499 | BN_ULONG t1,t2; |
491 | BN_ULONG c1,c2,c3; | 500 | BN_ULONG c1,c2,c3; |
@@ -561,7 +570,7 @@ void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a) | |||
561 | r[15]=c1; | 570 | r[15]=c1; |
562 | } | 571 | } |
563 | 572 | ||
564 | void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a) | 573 | void bn_sqr_comba4(BN_ULONG *r, const BN_ULONG *a) |
565 | { | 574 | { |
566 | BN_ULONG t1,t2; | 575 | BN_ULONG t1,t2; |
567 | BN_ULONG c1,c2,c3; | 576 | BN_ULONG c1,c2,c3; |