Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S

Issue 1128293004: Revert of Roll src/third_party/boringssl/src 68de407:de12d6c (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Thanks Rietveld, Thietveld. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #include "arm_arch.h" 1 #include "arm_arch.h"
2 2
3 .text 3 .text
4 .code 32 4 .code 32
5 5
6 #if __ARM_MAX_ARCH__>=7 6 #if __ARM_ARCH__>=7
7 .align 5 7 .align 5
8 .LOPENSSL_armcap: 8 .LOPENSSL_armcap:
9 .word» OPENSSL_armcap_P-.Lbn_mul_mont 9 .word» OPENSSL_armcap_P-bn_mul_mont
10 #endif 10 #endif
11 11
12 .globl» bn_mul_mont 12 .global»bn_mul_mont
13 .hidden bn_mul_mont 13 .hidden bn_mul_mont
14 .type bn_mul_mont,%function 14 .type bn_mul_mont,%function
15 15
16 .align 5 16 .align 5
17 bn_mul_mont: 17 bn_mul_mont:
18 .Lbn_mul_mont:
19 ldr ip,[sp,#4] @ load num 18 ldr ip,[sp,#4] @ load num
20 stmdb sp!,{r0,r2} @ sp points at argument block 19 stmdb sp!,{r0,r2} @ sp points at argument block
21 #if __ARM_MAX_ARCH__>=7 20 #if __ARM_ARCH__>=7
22 tst ip,#7 21 tst ip,#7
23 bne .Lialu 22 bne .Lialu
24 adr r0,bn_mul_mont 23 adr r0,bn_mul_mont
25 ldr r2,.LOPENSSL_armcap 24 ldr r2,.LOPENSSL_armcap
26 ldr r0,[r0,r2] 25 ldr r0,[r0,r2]
27 #ifdef __APPLE__
28 ldr r0,[r0]
29 #endif
30 tst r0,#1 @ NEON available? 26 tst r0,#1 @ NEON available?
31 ldmia sp, {r0,r2} 27 ldmia sp, {r0,r2}
32 beq .Lialu 28 beq .Lialu
33 add sp,sp,#8 29 add sp,sp,#8
34 b bn_mul8x_mont_neon 30 b bn_mul8x_mont_neon
35 .align 4 31 .align 4
36 .Lialu: 32 .Lialu:
37 #endif 33 #endif
38 cmp ip,#2 34 cmp ip,#2
39 mov r0,ip @ load num 35 mov r0,ip @ load num
40 movlt r0,#0 36 movlt r0,#0
41 addlt sp,sp,#2*4 37 addlt sp,sp,#2*4
42 blt .Labrt 38 blt .Labrt
43 39
44 » stmdb» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}» » @ save 10 regist ers 40 » stmdb» sp!,{r4-r12,lr}»» @ save 10 registers
45 41
46 mov r0,r0,lsl#2 @ rescale r0 for byte count 42 mov r0,r0,lsl#2 @ rescale r0 for byte count
47 sub sp,sp,r0 @ alloca(4*num) 43 sub sp,sp,r0 @ alloca(4*num)
48 sub sp,sp,#4 @ +extra dword 44 sub sp,sp,#4 @ +extra dword
49 sub r0,r0,#4 @ "num=num-1" 45 sub r0,r0,#4 @ "num=num-1"
50 add r4,r2,r0 @ &bp[num-1] 46 add r4,r2,r0 @ &bp[num-1]
51 47
52 add r0,sp,r0 @ r0 to point at &tp[num-1] 48 add r0,sp,r0 @ r0 to point at &tp[num-1]
53 ldr r8,[r0,#14*4] @ &n0 49 ldr r8,[r0,#14*4] @ &n0
54 ldr r2,[r2] @ bp[0] 50 ldr r2,[r2] @ bp[0]
(...skipping 23 matching lines...) Expand all
78 cmp r4,r0 74 cmp r4,r0
79 bne .L1st 75 bne .L1st
80 76
81 adds r12,r12,r11 77 adds r12,r12,r11
82 ldr r4,[r0,#13*4] @ restore bp 78 ldr r4,[r0,#13*4] @ restore bp
83 mov r14,#0 79 mov r14,#0
84 ldr r8,[r0,#14*4] @ restore n0 80 ldr r8,[r0,#14*4] @ restore n0
85 adc r14,r14,#0 81 adc r14,r14,#0
86 str r12,[r0] @ tp[num-1]= 82 str r12,[r0] @ tp[num-1]=
87 str r14,[r0,#4] @ tp[num]= 83 str r14,[r0,#4] @ tp[num]=
88 84
89 .Louter: 85 .Louter:
90 sub r7,r0,sp @ "original" r0-1 value 86 sub r7,r0,sp @ "original" r0-1 value
91 sub r1,r1,r7 @ "rewind" ap to &ap[1] 87 sub r1,r1,r7 @ "rewind" ap to &ap[1]
92 ldr r2,[r4,#4]! @ *(++bp) 88 ldr r2,[r4,#4]! @ *(++bp)
93 sub r3,r3,r7 @ "rewind" np to &np[1] 89 sub r3,r3,r7 @ "rewind" np to &np[1]
94 ldr r5,[r1,#-4] @ ap[0] 90 ldr r5,[r1,#-4] @ ap[0]
95 ldr r10,[sp] @ tp[0] 91 ldr r10,[sp] @ tp[0]
96 ldr r6,[r3,#-4] @ np[0] 92 ldr r6,[r3,#-4] @ np[0]
97 ldr r7,[sp,#4] @ tp[1] 93 ldr r7,[sp,#4] @ tp[1]
98 94
(...skipping 27 matching lines...) Expand all
126 adc r14,r14,#0 122 adc r14,r14,#0
127 ldr r8,[r0,#14*4] @ restore n0 123 ldr r8,[r0,#14*4] @ restore n0
128 adds r12,r12,r7 124 adds r12,r12,r7
129 ldr r7,[r0,#15*4] @ restore &bp[num] 125 ldr r7,[r0,#15*4] @ restore &bp[num]
130 adc r14,r14,#0 126 adc r14,r14,#0
131 str r12,[r0] @ tp[num-1]= 127 str r12,[r0] @ tp[num-1]=
132 str r14,[r0,#4] @ tp[num]= 128 str r14,[r0,#4] @ tp[num]=
133 129
134 cmp r4,r7 130 cmp r4,r7
135 bne .Louter 131 bne .Louter
136 132
137 ldr r2,[r0,#12*4] @ pull rp 133 ldr r2,[r0,#12*4] @ pull rp
138 add r0,r0,#4 @ r0 to point at &tp[num] 134 add r0,r0,#4 @ r0 to point at &tp[num]
139 sub r5,r0,sp @ "original" num value 135 sub r5,r0,sp @ "original" num value
140 mov r4,sp @ "rewind" r4 136 mov r4,sp @ "rewind" r4
141 mov r1,r4 @ "borrow" r1 137 mov r1,r4 @ "borrow" r1
142 sub r3,r3,r5 @ "rewind" r3 to &np[0] 138 sub r3,r3,r5 @ "rewind" r3 to &np[0]
143 139
144 subs r7,r7,r7 @ "clear" carry flag 140 subs r7,r7,r7 @ "clear" carry flag
145 .Lsub: ldr r7,[r4],#4 141 .Lsub: ldr r7,[r4],#4
146 ldr r6,[r3],#4 142 ldr r6,[r3],#4
147 sbcs r7,r7,r6 @ tp[j]-np[j] 143 sbcs r7,r7,r6 @ tp[j]-np[j]
148 str r7,[r2],#4 @ rp[j]= 144 str r7,[r2],#4 @ rp[j]=
149 teq r4,r0 @ preserve carry 145 teq r4,r0 @ preserve carry
150 bne .Lsub 146 bne .Lsub
151 sbcs r14,r14,#0 @ upmost carry 147 sbcs r14,r14,#0 @ upmost carry
152 mov r4,sp @ "rewind" r4 148 mov r4,sp @ "rewind" r4
153 sub r2,r2,r5 @ "rewind" r2 149 sub r2,r2,r5 @ "rewind" r2
154 150
155 and r1,r4,r14 151 and r1,r4,r14
156 bic r3,r2,r14 152 bic r3,r2,r14
157 orr r1,r1,r3 @ ap=borrow?tp:rp 153 orr r1,r1,r3 @ ap=borrow?tp:rp
158 154
159 .Lcopy: ldr r7,[r1],#4 @ copy or in-place refresh 155 .Lcopy: ldr r7,[r1],#4 @ copy or in-place refresh
160 str sp,[r4],#4 @ zap tp 156 str sp,[r4],#4 @ zap tp
161 str r7,[r2],#4 157 str r7,[r2],#4
162 cmp r4,r0 158 cmp r4,r0
163 bne .Lcopy 159 bne .Lcopy
164 160
165 add sp,r0,#4 @ skip over tp[num+1] 161 add sp,r0,#4 @ skip over tp[num+1]
166 » ldmia» sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}» » @ restore regist ers 162 » ldmia» sp!,{r4-r12,lr}»» @ restore registers
167 add sp,sp,#2*4 @ skip over {r0,r2} 163 add sp,sp,#2*4 @ skip over {r0,r2}
168 mov r0,#1 164 mov r0,#1
169 .Labrt: 165 .Labrt:»tst» lr,#1
170 #if __ARM_ARCH__>=5
171 » bx» lr» » » » @ .word»0xe12fff1e
172 #else
173 » tst» lr,#1
174 moveq pc,lr @ be binary compatible with V4, yet 166 moveq pc,lr @ be binary compatible with V4, yet
175 .word» 0xe12fff1e» » » @ interoperable with Thumb ISA:-) 167 » .word» 0xe12fff1e» » » @ interoperable with Thumb ISA:- )
176 #endif
177 .size bn_mul_mont,.-bn_mul_mont 168 .size bn_mul_mont,.-bn_mul_mont
178 #if __ARM_MAX_ARCH__>=7 169 #if __ARM_ARCH__>=7
179 .arch» armv7-a
180 .fpu neon 170 .fpu neon
181 171
182 .type bn_mul8x_mont_neon,%function 172 .type bn_mul8x_mont_neon,%function
183 .align 5 173 .align 5
184 bn_mul8x_mont_neon: 174 bn_mul8x_mont_neon:
185 mov ip,sp 175 mov ip,sp
186 » stmdb» sp!,{r4,r5,r6,r7,r8,r9,r10,r11} 176 » stmdb» sp!,{r4-r11}
187 » vstmdb» sp!,{d8,d9,d10,d11,d12,d13,d14,d15}» » @ ABI specificat ion says so 177 » vstmdb» sp!,{d8-d15}» » @ ABI specification says so
188 » ldmia» ip,{r4,r5}» » @ load rest of parameter block 178 » ldmia» ip,{r4-r5}» » @ load rest of parameter block
189 179
190 » sub» r7,sp,#16 180 » sub» » r7,sp,#16
191 » vld1.32»{d28[0]}, [r2,:32]! 181 » vld1.32»» {d28[0]}, [r2,:32]!
192 » sub» r7,r7,r5,lsl#4 182 » sub» » r7,r7,r5,lsl#4
193 » vld1.32»{d0,d1,d2,d3}, [r1]!» » @ can't specify :32 :-( 183 » vld1.32»» {d0-d3}, [r1]!»» @ can't specify :32 :-(
194 » and» r7,r7,#-64 184 » and» » r7,r7,#-64
195 » vld1.32»{d30[0]}, [r4,:32] 185 » vld1.32»» {d30[0]}, [r4,:32]
196 » mov» sp,r7» » » @ alloca 186 » mov» » sp,r7» » » @ alloca
197 » veor» d8,d8,d8 187 » veor» » d8,d8,d8
198 » subs» r8,r5,#8 188 » subs» » r8,r5,#8
199 » vzip.16»d28,d8 189 » vzip.16»» d28,d8
200 190
201 vmull.u32 q6,d28,d0[0] 191 vmull.u32 q6,d28,d0[0]
202 vmull.u32 q7,d28,d0[1] 192 vmull.u32 q7,d28,d0[1]
203 vmull.u32 q8,d28,d1[0] 193 vmull.u32 q8,d28,d1[0]
204 vshl.i64 d10,d13,#16 194 vshl.i64 d10,d13,#16
205 vmull.u32 q9,d28,d1[1] 195 vmull.u32 q9,d28,d1[1]
206 196
207 vadd.u64 d10,d10,d12 197 vadd.u64 d10,d10,d12
208 » veor» d8,d8,d8 198 » veor» » d8,d8,d8
209 vmul.u32 d29,d10,d30 199 vmul.u32 d29,d10,d30
210 200
211 vmull.u32 q10,d28,d2[0] 201 vmull.u32 q10,d28,d2[0]
212 » vld1.32»{d4,d5,d6,d7}, [r3]! 202 » vld1.32» {d4-d7}, [r3]!
213 vmull.u32 q11,d28,d2[1] 203 vmull.u32 q11,d28,d2[1]
214 vmull.u32 q12,d28,d3[0] 204 vmull.u32 q12,d28,d3[0]
215 » vzip.16»d29,d8 205 » vzip.16»» d29,d8
216 vmull.u32 q13,d28,d3[1] 206 vmull.u32 q13,d28,d3[1]
217 207
218 bne .LNEON_1st 208 bne .LNEON_1st
219 209
220 @ special case for num=8, everything is in register bank... 210 @ special case for num=8, everything is in register bank...
221 211
222 vmlal.u32 q6,d29,d4[0] 212 vmlal.u32 q6,d29,d4[0]
223 » sub» r9,r5,#1 213 » sub» » r9,r5,#1
224 vmlal.u32 q7,d29,d4[1] 214 vmlal.u32 q7,d29,d4[1]
225 vmlal.u32 q8,d29,d5[0] 215 vmlal.u32 q8,d29,d5[0]
226 vmlal.u32 q9,d29,d5[1] 216 vmlal.u32 q9,d29,d5[1]
227 217
228 vmlal.u32 q10,d29,d6[0] 218 vmlal.u32 q10,d29,d6[0]
229 » vmov» q5,q6 219 » vmov» » q5,q6
230 vmlal.u32 q11,d29,d6[1] 220 vmlal.u32 q11,d29,d6[1]
231 » vmov» q6,q7 221 » vmov» » q6,q7
232 vmlal.u32 q12,d29,d7[0] 222 vmlal.u32 q12,d29,d7[0]
233 » vmov» q7,q8 223 » vmov» » q7,q8
234 vmlal.u32 q13,d29,d7[1] 224 vmlal.u32 q13,d29,d7[1]
235 » vmov» q8,q9 225 » vmov» » q8,q9
236 » vmov» q9,q10 226 » vmov» » q9,q10
237 vshr.u64 d10,d10,#16 227 vshr.u64 d10,d10,#16
238 » vmov» q10,q11 228 » vmov» » q10,q11
239 » vmov» q11,q12 229 » vmov» » q11,q12
240 vadd.u64 d10,d10,d11 230 vadd.u64 d10,d10,d11
241 » vmov» q12,q13 231 » vmov» » q12,q13
242 » veor» q13,q13 232 » veor» » q13,q13
243 vshr.u64 d10,d10,#16 233 vshr.u64 d10,d10,#16
244 234
245 b .LNEON_outer8 235 b .LNEON_outer8
246 236
247 .align 4 237 .align 4
248 .LNEON_outer8: 238 .LNEON_outer8:
249 » vld1.32»{d28[0]}, [r2,:32]! 239 » vld1.32»» {d28[0]}, [r2,:32]!
250 » veor» d8,d8,d8 240 » veor» » d8,d8,d8
251 » vzip.16»d28,d8 241 » vzip.16»» d28,d8
252 vadd.u64 d12,d12,d10 242 vadd.u64 d12,d12,d10
253 243
254 vmlal.u32 q6,d28,d0[0] 244 vmlal.u32 q6,d28,d0[0]
255 vmlal.u32 q7,d28,d0[1] 245 vmlal.u32 q7,d28,d0[1]
256 vmlal.u32 q8,d28,d1[0] 246 vmlal.u32 q8,d28,d1[0]
257 vshl.i64 d10,d13,#16 247 vshl.i64 d10,d13,#16
258 vmlal.u32 q9,d28,d1[1] 248 vmlal.u32 q9,d28,d1[1]
259 249
260 vadd.u64 d10,d10,d12 250 vadd.u64 d10,d10,d12
261 » veor» d8,d8,d8 251 » veor» » d8,d8,d8
262 » subs» r9,r9,#1 252 » subs» » r9,r9,#1
263 vmul.u32 d29,d10,d30 253 vmul.u32 d29,d10,d30
264 254
265 vmlal.u32 q10,d28,d2[0] 255 vmlal.u32 q10,d28,d2[0]
266 vmlal.u32 q11,d28,d2[1] 256 vmlal.u32 q11,d28,d2[1]
267 vmlal.u32 q12,d28,d3[0] 257 vmlal.u32 q12,d28,d3[0]
268 » vzip.16»d29,d8 258 » vzip.16»» d29,d8
269 vmlal.u32 q13,d28,d3[1] 259 vmlal.u32 q13,d28,d3[1]
270 260
271 vmlal.u32 q6,d29,d4[0] 261 vmlal.u32 q6,d29,d4[0]
272 vmlal.u32 q7,d29,d4[1] 262 vmlal.u32 q7,d29,d4[1]
273 vmlal.u32 q8,d29,d5[0] 263 vmlal.u32 q8,d29,d5[0]
274 vmlal.u32 q9,d29,d5[1] 264 vmlal.u32 q9,d29,d5[1]
275 265
276 vmlal.u32 q10,d29,d6[0] 266 vmlal.u32 q10,d29,d6[0]
277 » vmov» q5,q6 267 » vmov» » q5,q6
278 vmlal.u32 q11,d29,d6[1] 268 vmlal.u32 q11,d29,d6[1]
279 » vmov» q6,q7 269 » vmov» » q6,q7
280 vmlal.u32 q12,d29,d7[0] 270 vmlal.u32 q12,d29,d7[0]
281 » vmov» q7,q8 271 » vmov» » q7,q8
282 vmlal.u32 q13,d29,d7[1] 272 vmlal.u32 q13,d29,d7[1]
283 » vmov» q8,q9 273 » vmov» » q8,q9
284 » vmov» q9,q10 274 » vmov» » q9,q10
285 vshr.u64 d10,d10,#16 275 vshr.u64 d10,d10,#16
286 » vmov» q10,q11 276 » vmov» » q10,q11
287 » vmov» q11,q12 277 » vmov» » q11,q12
288 vadd.u64 d10,d10,d11 278 vadd.u64 d10,d10,d11
289 » vmov» q12,q13 279 » vmov» » q12,q13
290 » veor» q13,q13 280 » veor» » q13,q13
291 vshr.u64 d10,d10,#16 281 vshr.u64 d10,d10,#16
292 282
293 bne .LNEON_outer8 283 bne .LNEON_outer8
294 284
295 vadd.u64 d12,d12,d10 285 vadd.u64 d12,d12,d10
296 » mov» r7,sp 286 » mov» » r7,sp
297 vshr.u64 d10,d12,#16 287 vshr.u64 d10,d12,#16
298 » mov» r8,r5 288 » mov» » r8,r5
299 vadd.u64 d13,d13,d10 289 vadd.u64 d13,d13,d10
300 » add» r6,sp,#16 290 » add» » r6,sp,#16
301 vshr.u64 d10,d13,#16 291 vshr.u64 d10,d13,#16
302 » vzip.16»d12,d13 292 » vzip.16»» d12,d13
303 293
304 b .LNEON_tail2 294 b .LNEON_tail2
305 295
306 .align 4 296 .align 4
307 .LNEON_1st: 297 .LNEON_1st:
308 vmlal.u32 q6,d29,d4[0] 298 vmlal.u32 q6,d29,d4[0]
309 » vld1.32»{d0,d1,d2,d3}, [r1]! 299 » vld1.32» {d0-d3}, [r1]!
310 vmlal.u32 q7,d29,d4[1] 300 vmlal.u32 q7,d29,d4[1]
311 » subs» r8,r8,#8 301 » subs» » r8,r8,#8
312 vmlal.u32 q8,d29,d5[0] 302 vmlal.u32 q8,d29,d5[0]
313 vmlal.u32 q9,d29,d5[1] 303 vmlal.u32 q9,d29,d5[1]
314 304
315 vmlal.u32 q10,d29,d6[0] 305 vmlal.u32 q10,d29,d6[0]
316 » vld1.32»{d4,d5}, [r3]! 306 » vld1.32» {d4-d5}, [r3]!
317 vmlal.u32 q11,d29,d6[1] 307 vmlal.u32 q11,d29,d6[1]
318 » vst1.64»{q6,q7}, [r7,:256]! 308 » vst1.64» {q6-q7}, [r7,:256]!
319 vmlal.u32 q12,d29,d7[0] 309 vmlal.u32 q12,d29,d7[0]
320 vmlal.u32 q13,d29,d7[1] 310 vmlal.u32 q13,d29,d7[1]
321 » vst1.64»{q8,q9}, [r7,:256]! 311 » vst1.64» {q8-q9}, [r7,:256]!
322 312
323 vmull.u32 q6,d28,d0[0] 313 vmull.u32 q6,d28,d0[0]
324 » vld1.32»{d6,d7}, [r3]! 314 » vld1.32» {d6-d7}, [r3]!
325 vmull.u32 q7,d28,d0[1] 315 vmull.u32 q7,d28,d0[1]
326 » vst1.64»{q10,q11}, [r7,:256]! 316 » vst1.64» {q10-q11}, [r7,:256]!
327 vmull.u32 q8,d28,d1[0] 317 vmull.u32 q8,d28,d1[0]
328 vmull.u32 q9,d28,d1[1] 318 vmull.u32 q9,d28,d1[1]
329 » vst1.64»{q12,q13}, [r7,:256]! 319 » vst1.64» {q12-q13}, [r7,:256]!
330 320
331 vmull.u32 q10,d28,d2[0] 321 vmull.u32 q10,d28,d2[0]
332 vmull.u32 q11,d28,d2[1] 322 vmull.u32 q11,d28,d2[1]
333 vmull.u32 q12,d28,d3[0] 323 vmull.u32 q12,d28,d3[0]
334 vmull.u32 q13,d28,d3[1] 324 vmull.u32 q13,d28,d3[1]
335 325
336 bne .LNEON_1st 326 bne .LNEON_1st
337 327
338 vmlal.u32 q6,d29,d4[0] 328 vmlal.u32 q6,d29,d4[0]
339 » add» r6,sp,#16 329 » add» » r6,sp,#16
340 vmlal.u32 q7,d29,d4[1] 330 vmlal.u32 q7,d29,d4[1]
341 » sub» r1,r1,r5,lsl#2» » @ rewind r1 331 » sub» » r1,r1,r5,lsl#2» » @ rewind r1
342 vmlal.u32 q8,d29,d5[0] 332 vmlal.u32 q8,d29,d5[0]
343 » vld1.64»{q5}, [sp,:128] 333 » vld1.64» {q5}, [sp,:128]
344 vmlal.u32 q9,d29,d5[1] 334 vmlal.u32 q9,d29,d5[1]
345 » sub» r9,r5,#1 335 » sub» » r9,r5,#1
346 336
347 vmlal.u32 q10,d29,d6[0] 337 vmlal.u32 q10,d29,d6[0]
348 » vst1.64»{q6,q7}, [r7,:256]! 338 » vst1.64»» {q6-q7}, [r7,:256]!
349 vmlal.u32 q11,d29,d6[1] 339 vmlal.u32 q11,d29,d6[1]
350 vshr.u64 d10,d10,#16 340 vshr.u64 d10,d10,#16
351 » vld1.64»{q6}, [r6, :128]! 341 » vld1.64» {q6}, [r6, :128]!
352 vmlal.u32 q12,d29,d7[0] 342 vmlal.u32 q12,d29,d7[0]
353 » vst1.64»{q8,q9}, [r7,:256]! 343 » vst1.64»» {q8-q9}, [r7,:256]!
354 vmlal.u32 q13,d29,d7[1] 344 vmlal.u32 q13,d29,d7[1]
355 345
356 » vst1.64»{q10,q11}, [r7,:256]! 346 » vst1.64»» {q10-q11}, [r7,:256]!
357 vadd.u64 d10,d10,d11 347 vadd.u64 d10,d10,d11
358 » veor» q4,q4,q4 348 » veor» » q4,q4,q4
359 » vst1.64»{q12,q13}, [r7,:256]! 349 » vst1.64»» {q12-q13}, [r7,:256]!
360 » vld1.64»{q7,q8}, [r6, :256]! 350 » vld1.64» {q7-q8}, [r6, :256]!
361 » vst1.64»{q4}, [r7,:128] 351 » vst1.64»» {q4}, [r7,:128]
362 vshr.u64 d10,d10,#16 352 vshr.u64 d10,d10,#16
363 353
364 » b» .LNEON_outer 354 » b» » .LNEON_outer
365 355
366 .align 4 356 .align 4
367 .LNEON_outer: 357 .LNEON_outer:
368 » vld1.32»{d28[0]}, [r2,:32]! 358 » vld1.32»» {d28[0]}, [r2,:32]!
369 » sub» r3,r3,r5,lsl#2» » @ rewind r3 359 » sub» » r3,r3,r5,lsl#2» » @ rewind r3
370 » vld1.32»{d0,d1,d2,d3}, [r1]! 360 » vld1.32»» {d0-d3}, [r1]!
371 » veor» d8,d8,d8 361 » veor» » d8,d8,d8
372 » mov» r7,sp 362 » mov» » r7,sp
373 » vzip.16»d28,d8 363 » vzip.16»» d28,d8
374 » sub» r8,r5,#8 364 » sub» » r8,r5,#8
375 vadd.u64 d12,d12,d10 365 vadd.u64 d12,d12,d10
376 366
377 vmlal.u32 q6,d28,d0[0] 367 vmlal.u32 q6,d28,d0[0]
378 » vld1.64»{q9,q10},[r6,:256]! 368 » vld1.64» {q9-q10},[r6,:256]!
379 vmlal.u32 q7,d28,d0[1] 369 vmlal.u32 q7,d28,d0[1]
380 vmlal.u32 q8,d28,d1[0] 370 vmlal.u32 q8,d28,d1[0]
381 » vld1.64»{q11,q12},[r6,:256]! 371 » vld1.64» {q11-q12},[r6,:256]!
382 vmlal.u32 q9,d28,d1[1] 372 vmlal.u32 q9,d28,d1[1]
383 373
384 vshl.i64 d10,d13,#16 374 vshl.i64 d10,d13,#16
385 » veor» d8,d8,d8 375 » veor» » d8,d8,d8
386 vadd.u64 d10,d10,d12 376 vadd.u64 d10,d10,d12
387 » vld1.64»{q13},[r6,:128]! 377 » vld1.64» {q13},[r6,:128]!
388 vmul.u32 d29,d10,d30 378 vmul.u32 d29,d10,d30
389 379
390 vmlal.u32 q10,d28,d2[0] 380 vmlal.u32 q10,d28,d2[0]
391 » vld1.32»{d4,d5,d6,d7}, [r3]! 381 » vld1.32» {d4-d7}, [r3]!
392 vmlal.u32 q11,d28,d2[1] 382 vmlal.u32 q11,d28,d2[1]
393 vmlal.u32 q12,d28,d3[0] 383 vmlal.u32 q12,d28,d3[0]
394 » vzip.16»d29,d8 384 » vzip.16»» d29,d8
395 vmlal.u32 q13,d28,d3[1] 385 vmlal.u32 q13,d28,d3[1]
396 386
397 .LNEON_inner: 387 .LNEON_inner:
398 vmlal.u32 q6,d29,d4[0] 388 vmlal.u32 q6,d29,d4[0]
399 » vld1.32»{d0,d1,d2,d3}, [r1]! 389 » vld1.32» {d0-d3}, [r1]!
400 vmlal.u32 q7,d29,d4[1] 390 vmlal.u32 q7,d29,d4[1]
401 » subs» r8,r8,#8 391 » subs» » r8,r8,#8
402 vmlal.u32 q8,d29,d5[0] 392 vmlal.u32 q8,d29,d5[0]
403 vmlal.u32 q9,d29,d5[1] 393 vmlal.u32 q9,d29,d5[1]
404 » vst1.64»{q6,q7}, [r7,:256]! 394 » vst1.64»» {q6-q7}, [r7,:256]!
405 395
406 vmlal.u32 q10,d29,d6[0] 396 vmlal.u32 q10,d29,d6[0]
407 » vld1.64»{q6}, [r6, :128]! 397 » vld1.64» {q6}, [r6, :128]!
408 vmlal.u32 q11,d29,d6[1] 398 vmlal.u32 q11,d29,d6[1]
409 » vst1.64»{q8,q9}, [r7,:256]! 399 » vst1.64»» {q8-q9}, [r7,:256]!
410 vmlal.u32 q12,d29,d7[0] 400 vmlal.u32 q12,d29,d7[0]
411 » vld1.64»{q7,q8}, [r6, :256]! 401 » vld1.64» {q7-q8}, [r6, :256]!
412 vmlal.u32 q13,d29,d7[1] 402 vmlal.u32 q13,d29,d7[1]
413 » vst1.64»{q10,q11}, [r7,:256]! 403 » vst1.64»» {q10-q11}, [r7,:256]!
414 404
415 vmlal.u32 q6,d28,d0[0] 405 vmlal.u32 q6,d28,d0[0]
416 » vld1.64»{q9,q10}, [r6, :256]! 406 » vld1.64» {q9-q10}, [r6, :256]!
417 vmlal.u32 q7,d28,d0[1] 407 vmlal.u32 q7,d28,d0[1]
418 » vst1.64»{q12,q13}, [r7,:256]! 408 » vst1.64»» {q12-q13}, [r7,:256]!
419 vmlal.u32 q8,d28,d1[0] 409 vmlal.u32 q8,d28,d1[0]
420 » vld1.64»{q11,q12}, [r6, :256]! 410 » vld1.64» {q11-q12}, [r6, :256]!
421 vmlal.u32 q9,d28,d1[1] 411 vmlal.u32 q9,d28,d1[1]
422 » vld1.32»{d4,d5,d6,d7}, [r3]! 412 » vld1.32» {d4-d7}, [r3]!
423 413
424 vmlal.u32 q10,d28,d2[0] 414 vmlal.u32 q10,d28,d2[0]
425 » vld1.64»{q13}, [r6, :128]! 415 » vld1.64» {q13}, [r6, :128]!
426 vmlal.u32 q11,d28,d2[1] 416 vmlal.u32 q11,d28,d2[1]
427 vmlal.u32 q12,d28,d3[0] 417 vmlal.u32 q12,d28,d3[0]
428 vmlal.u32 q13,d28,d3[1] 418 vmlal.u32 q13,d28,d3[1]
429 419
430 bne .LNEON_inner 420 bne .LNEON_inner
431 421
432 vmlal.u32 q6,d29,d4[0] 422 vmlal.u32 q6,d29,d4[0]
433 » add» r6,sp,#16 423 » add» » r6,sp,#16
434 vmlal.u32 q7,d29,d4[1] 424 vmlal.u32 q7,d29,d4[1]
435 » sub» r1,r1,r5,lsl#2» » @ rewind r1 425 » sub» » r1,r1,r5,lsl#2» » @ rewind r1
436 vmlal.u32 q8,d29,d5[0] 426 vmlal.u32 q8,d29,d5[0]
437 » vld1.64»{q5}, [sp,:128] 427 » vld1.64» {q5}, [sp,:128]
438 vmlal.u32 q9,d29,d5[1] 428 vmlal.u32 q9,d29,d5[1]
439 » subs» r9,r9,#1 429 » subs» » r9,r9,#1
440 430
441 vmlal.u32 q10,d29,d6[0] 431 vmlal.u32 q10,d29,d6[0]
442 » vst1.64»{q6,q7}, [r7,:256]! 432 » vst1.64»» {q6-q7}, [r7,:256]!
443 vmlal.u32 q11,d29,d6[1] 433 vmlal.u32 q11,d29,d6[1]
444 » vld1.64»{q6}, [r6, :128]! 434 » vld1.64» {q6}, [r6, :128]!
445 vshr.u64 d10,d10,#16 435 vshr.u64 d10,d10,#16
446 » vst1.64»{q8,q9}, [r7,:256]! 436 » vst1.64»» {q8-q9}, [r7,:256]!
447 vmlal.u32 q12,d29,d7[0] 437 vmlal.u32 q12,d29,d7[0]
448 » vld1.64»{q7,q8}, [r6, :256]! 438 » vld1.64» {q7-q8}, [r6, :256]!
449 vmlal.u32 q13,d29,d7[1] 439 vmlal.u32 q13,d29,d7[1]
450 440
451 » vst1.64»{q10,q11}, [r7,:256]! 441 » vst1.64»» {q10-q11}, [r7,:256]!
452 vadd.u64 d10,d10,d11 442 vadd.u64 d10,d10,d11
453 » vst1.64»{q12,q13}, [r7,:256]! 443 » vst1.64»» {q12-q13}, [r7,:256]!
454 vshr.u64 d10,d10,#16 444 vshr.u64 d10,d10,#16
455 445
456 bne .LNEON_outer 446 bne .LNEON_outer
457 447
458 » mov» r7,sp 448 » mov» » r7,sp
459 » mov» r8,r5 449 » mov» » r8,r5
460 450
461 .LNEON_tail: 451 .LNEON_tail:
462 vadd.u64 d12,d12,d10 452 vadd.u64 d12,d12,d10
463 » vld1.64»{q9,q10}, [r6, :256]! 453 » vld1.64»» {q9-q10}, [r6, :256]!
464 vshr.u64 d10,d12,#16 454 vshr.u64 d10,d12,#16
465 vadd.u64 d13,d13,d10 455 vadd.u64 d13,d13,d10
466 » vld1.64»{q11,q12}, [r6, :256]! 456 » vld1.64»» {q11-q12}, [r6, :256]!
467 vshr.u64 d10,d13,#16 457 vshr.u64 d10,d13,#16
468 » vld1.64»{q13}, [r6, :128]! 458 » vld1.64»» {q13}, [r6, :128]!
469 » vzip.16»d12,d13 459 » vzip.16»» d12,d13
470 460
471 .LNEON_tail2: 461 .LNEON_tail2:
472 vadd.u64 d14,d14,d10 462 vadd.u64 d14,d14,d10
473 » vst1.32»{d12[0]}, [r7, :32]! 463 » vst1.32»» {d12[0]}, [r7, :32]!
474 vshr.u64 d10,d14,#16 464 vshr.u64 d10,d14,#16
475 vadd.u64 d15,d15,d10 465 vadd.u64 d15,d15,d10
476 vshr.u64 d10,d15,#16 466 vshr.u64 d10,d15,#16
477 » vzip.16»d14,d15 467 » vzip.16»» d14,d15
478 468
479 vadd.u64 d16,d16,d10 469 vadd.u64 d16,d16,d10
480 » vst1.32»{d14[0]}, [r7, :32]! 470 » vst1.32»» {d14[0]}, [r7, :32]!
481 vshr.u64 d10,d16,#16 471 vshr.u64 d10,d16,#16
482 vadd.u64 d17,d17,d10 472 vadd.u64 d17,d17,d10
483 vshr.u64 d10,d17,#16 473 vshr.u64 d10,d17,#16
484 » vzip.16»d16,d17 474 » vzip.16»» d16,d17
485 475
486 vadd.u64 d18,d18,d10 476 vadd.u64 d18,d18,d10
487 » vst1.32»{d16[0]}, [r7, :32]! 477 » vst1.32»» {d16[0]}, [r7, :32]!
488 vshr.u64 d10,d18,#16 478 vshr.u64 d10,d18,#16
489 vadd.u64 d19,d19,d10 479 vadd.u64 d19,d19,d10
490 vshr.u64 d10,d19,#16 480 vshr.u64 d10,d19,#16
491 » vzip.16»d18,d19 481 » vzip.16»» d18,d19
492 482
493 vadd.u64 d20,d20,d10 483 vadd.u64 d20,d20,d10
494 » vst1.32»{d18[0]}, [r7, :32]! 484 » vst1.32»» {d18[0]}, [r7, :32]!
495 vshr.u64 d10,d20,#16 485 vshr.u64 d10,d20,#16
496 vadd.u64 d21,d21,d10 486 vadd.u64 d21,d21,d10
497 vshr.u64 d10,d21,#16 487 vshr.u64 d10,d21,#16
498 » vzip.16»d20,d21 488 » vzip.16»» d20,d21
499 489
500 vadd.u64 d22,d22,d10 490 vadd.u64 d22,d22,d10
501 » vst1.32»{d20[0]}, [r7, :32]! 491 » vst1.32»» {d20[0]}, [r7, :32]!
502 vshr.u64 d10,d22,#16 492 vshr.u64 d10,d22,#16
503 vadd.u64 d23,d23,d10 493 vadd.u64 d23,d23,d10
504 vshr.u64 d10,d23,#16 494 vshr.u64 d10,d23,#16
505 » vzip.16»d22,d23 495 » vzip.16»» d22,d23
506 496
507 vadd.u64 d24,d24,d10 497 vadd.u64 d24,d24,d10
508 » vst1.32»{d22[0]}, [r7, :32]! 498 » vst1.32»» {d22[0]}, [r7, :32]!
509 vshr.u64 d10,d24,#16 499 vshr.u64 d10,d24,#16
510 vadd.u64 d25,d25,d10 500 vadd.u64 d25,d25,d10
511 » vld1.64»{q6}, [r6, :128]! 501 » vld1.64»» {q6}, [r6, :128]!
512 vshr.u64 d10,d25,#16 502 vshr.u64 d10,d25,#16
513 » vzip.16»d24,d25 503 » vzip.16»» d24,d25
514 504
515 vadd.u64 d26,d26,d10 505 vadd.u64 d26,d26,d10
516 » vst1.32»{d24[0]}, [r7, :32]! 506 » vst1.32»» {d24[0]}, [r7, :32]!
517 vshr.u64 d10,d26,#16 507 vshr.u64 d10,d26,#16
518 vadd.u64 d27,d27,d10 508 vadd.u64 d27,d27,d10
519 » vld1.64»{q7,q8},» [r6, :256]! 509 » vld1.64»» {q7-q8},» [r6, :256]!
520 vshr.u64 d10,d27,#16 510 vshr.u64 d10,d27,#16
521 » vzip.16»d26,d27 511 » vzip.16»» d26,d27
522 » subs» r8,r8,#8 512 » subs» » r8,r8,#8
523 » vst1.32»{d26[0]}, [r7, :32]! 513 » vst1.32»» {d26[0]}, [r7, :32]!
524 514
525 bne .LNEON_tail 515 bne .LNEON_tail
526 516
527 vst1.32 {d10[0]}, [r7, :32] @ top-most bit 517 vst1.32 {d10[0]}, [r7, :32] @ top-most bit
528 sub r3,r3,r5,lsl#2 @ rewind r3 518 sub r3,r3,r5,lsl#2 @ rewind r3
529 subs r1,sp,#0 @ clear carry flag 519 subs r1,sp,#0 @ clear carry flag
530 add r2,sp,r5,lsl#2 520 add r2,sp,r5,lsl#2
531 521
532 .LNEON_sub: 522 .LNEON_sub:
533 » ldmia» r1!, {r4,r5,r6,r7} 523 » ldmia» r1!, {r4-r7}
534 » ldmia» r3!, {r8,r9,r10,r11} 524 » ldmia» r3!, {r8-r11}
535 sbcs r8, r4,r8 525 sbcs r8, r4,r8
536 sbcs r9, r5,r9 526 sbcs r9, r5,r9
537 sbcs r10,r6,r10 527 sbcs r10,r6,r10
538 sbcs r11,r7,r11 528 sbcs r11,r7,r11
539 teq r1,r2 @ preserves carry 529 teq r1,r2 @ preserves carry
540 » stmia» r0!, {r8,r9,r10,r11} 530 » stmia» r0!, {r8-r11}
541 bne .LNEON_sub 531 bne .LNEON_sub
542 532
543 ldr r10, [r1] @ load top-most bit 533 ldr r10, [r1] @ load top-most bit
544 veor q0,q0,q0 534 veor q0,q0,q0
545 sub r11,r2,sp @ this is num*4 535 sub r11,r2,sp @ this is num*4
546 veor q1,q1,q1 536 veor q1,q1,q1
547 mov r1,sp 537 mov r1,sp
548 sub r0,r0,r11 @ rewind r0 538 sub r0,r0,r11 @ rewind r0
549 mov r3,r2 @ second 3/4th of frame 539 mov r3,r2 @ second 3/4th of frame
550 sbcs r10,r10,#0 @ result is carry flag 540 sbcs r10,r10,#0 @ result is carry flag
551 541
552 .LNEON_copy_n_zap: 542 .LNEON_copy_n_zap:
553 » ldmia» r1!, {r4,r5,r6,r7} 543 » ldmia» r1!, {r4-r7}
554 » ldmia» r0, {r8,r9,r10,r11} 544 » ldmia» r0, {r8-r11}
555 movcc r8, r4 545 movcc r8, r4
556 » vst1.64»{q0,q1}, [r3,:256]!» » » @ wipe 546 » vst1.64»{q0-q1}, [r3,:256]!» » » @ wipe
557 movcc r9, r5 547 movcc r9, r5
558 movcc r10,r6 548 movcc r10,r6
559 » vst1.64»{q0,q1}, [r3,:256]!» » » @ wipe 549 » vst1.64»{q0-q1}, [r3,:256]!» » » @ wipe
560 movcc r11,r7 550 movcc r11,r7
561 » ldmia» r1, {r4,r5,r6,r7} 551 » ldmia» r1, {r4-r7}
562 » stmia» r0!, {r8,r9,r10,r11} 552 » stmia» r0!, {r8-r11}
563 sub r1,r1,#16 553 sub r1,r1,#16
564 » ldmia» r0, {r8,r9,r10,r11} 554 » ldmia» r0, {r8-r11}
565 movcc r8, r4 555 movcc r8, r4
566 » vst1.64»{q0,q1}, [r1,:256]!» » » @ wipe 556 » vst1.64»{q0-q1}, [r1,:256]!» » » @ wipe
567 movcc r9, r5 557 movcc r9, r5
568 movcc r10,r6 558 movcc r10,r6
569 » vst1.64»{q0,q1}, [r3,:256]!» » » @ wipe 559 » vst1.64»{q0-q1}, [r3,:256]!» » » @ wipe
570 movcc r11,r7 560 movcc r11,r7
571 teq r1,r2 @ preserves carry 561 teq r1,r2 @ preserves carry
572 » stmia» r0!, {r8,r9,r10,r11} 562 » stmia» r0!, {r8-r11}
573 bne .LNEON_copy_n_zap 563 bne .LNEON_copy_n_zap
574 564
575 sub sp,ip,#96 565 sub sp,ip,#96
576 » vldmia» sp!,{d8,d9,d10,d11,d12,d13,d14,d15} 566 vldmia sp!,{d8-d15}
577 » ldmia» sp!,{r4,r5,r6,r7,r8,r9,r10,r11} 567 ldmia sp!,{r4-r11}
578 » bx» lr» » » » » » @ .word»0xe12fff 1e 568 » .word» 0xe12fff1e
579 .size bn_mul8x_mont_neon,.-bn_mul8x_mont_neon 569 .size bn_mul8x_mont_neon,.-bn_mul8x_mont_neon
580 #endif 570 #endif
581 .byte» 77,111,110,116,103,111,109,101,114,121,32,109,117,108,116,105,112,108,10 5,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,44,32,6 7,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,1 10,115,115,108,46,111,114,103,62,0 571 .asciz» "Montgomery multiplication for ARMv4/NEON, CRYPTOGAMS by <appro@openssl. org>"
582 .align 2 572 .align 2
583 .align» 2 573 #if __ARM_ARCH__>=7
584 #if __ARM_MAX_ARCH__>=7
585 .comm OPENSSL_armcap_P,4,4 574 .comm OPENSSL_armcap_P,4,4
586 .hidden OPENSSL_armcap_P 575 .hidden OPENSSL_armcap_P
587 #endif 576 #endif
OLDNEW
« no previous file with comments | « third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S ('k') | third_party/boringssl/linux-arm/crypto/modes/ghash-armv4.S » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698