Remove building with NOCRYPTO option
[minix.git] / crypto / external / bsd / openssl / lib / libcrypto / arch / arm / sha1-armv4-large.S
blobadce7312e8639dc9fc7ca859012b1d420e206d24
1 #include "arm_arch.h"
2 #include "arm_asm.h"
4 .text
5 .code   32
7 .global sha1_block_data_order
8 .type   sha1_block_data_order,%function
10 .align  5
11 sha1_block_data_order:
12 #if __ARM_MAX_ARCH__>=7
13         sub     r3,pc,#8                @ sha1_block_data_order
14         ldr     r12,.LOPENSSL_armcap
15         ldr     r12,[r3,r12]            @ OPENSSL_armcap_P
16         tst     r12,#ARMV8_SHA1
17         bne     .LARMv8
18         tst     r12,#ARMV7_NEON
19         bne     .LNEON
20 #endif
21         stmdb   sp!,{r4-r12,lr}
22         add     r2,r1,r2,lsl#6  @ r2 to point at the end of r1
23         ldmia   r0,{r3,r4,r5,r6,r7}
24 .Lloop:
25         ldr     r8,.LK_00_19
26         mov     r14,sp
27         sub     sp,sp,#15*4
28         mov     r5,r5,ror#30
29         mov     r6,r6,ror#30
30         mov     r7,r7,ror#30            @ [6]
31 .L_00_15:
32 #if __ARM_ARCH__<7
33         ldrb    r10,[r1,#2]
34         ldrb    r9,[r1,#3]
35         ldrb    r11,[r1,#1]
36         add     r7,r8,r7,ror#2                  @ E+=K_00_19
37         ldrb    r12,[r1],#4
38         orr     r9,r9,r10,lsl#8
39         eor     r10,r5,r6                       @ F_xx_xx
40         orr     r9,r9,r11,lsl#16
41         add     r7,r7,r3,ror#27                 @ E+=ROR(A,27)
42         orr     r9,r9,r12,lsl#24
43 #else
44         ldr     r9,[r1],#4                      @ handles unaligned
45         add     r7,r8,r7,ror#2                  @ E+=K_00_19
46         eor     r10,r5,r6                       @ F_xx_xx
47         add     r7,r7,r3,ror#27                 @ E+=ROR(A,27)
48 #ifdef __ARMEL__
49         rev     r9,r9                           @ byte swap
50 #endif
51 #endif
52         and     r10,r4,r10,ror#2
53         add     r7,r7,r9                        @ E+=X[i]
54         eor     r10,r10,r6,ror#2                @ F_00_19(B,C,D)
55         str     r9,[r14,#-4]!
56         add     r7,r7,r10                       @ E+=F_00_19(B,C,D)
57 #if __ARM_ARCH__<7
58         ldrb    r10,[r1,#2]
59         ldrb    r9,[r1,#3]
60         ldrb    r11,[r1,#1]
61         add     r6,r8,r6,ror#2                  @ E+=K_00_19
62         ldrb    r12,[r1],#4
63         orr     r9,r9,r10,lsl#8
64         eor     r10,r4,r5                       @ F_xx_xx
65         orr     r9,r9,r11,lsl#16
66         add     r6,r6,r7,ror#27                 @ E+=ROR(A,27)
67         orr     r9,r9,r12,lsl#24
68 #else
69         ldr     r9,[r1],#4                      @ handles unaligned
70         add     r6,r8,r6,ror#2                  @ E+=K_00_19
71         eor     r10,r4,r5                       @ F_xx_xx
72         add     r6,r6,r7,ror#27                 @ E+=ROR(A,27)
73 #ifdef __ARMEL__
74         rev     r9,r9                           @ byte swap
75 #endif
76 #endif
77         and     r10,r3,r10,ror#2
78         add     r6,r6,r9                        @ E+=X[i]
79         eor     r10,r10,r5,ror#2                @ F_00_19(B,C,D)
80         str     r9,[r14,#-4]!
81         add     r6,r6,r10                       @ E+=F_00_19(B,C,D)
82 #if __ARM_ARCH__<7
83         ldrb    r10,[r1,#2]
84         ldrb    r9,[r1,#3]
85         ldrb    r11,[r1,#1]
86         add     r5,r8,r5,ror#2                  @ E+=K_00_19
87         ldrb    r12,[r1],#4
88         orr     r9,r9,r10,lsl#8
89         eor     r10,r3,r4                       @ F_xx_xx
90         orr     r9,r9,r11,lsl#16
91         add     r5,r5,r6,ror#27                 @ E+=ROR(A,27)
92         orr     r9,r9,r12,lsl#24
93 #else
94         ldr     r9,[r1],#4                      @ handles unaligned
95         add     r5,r8,r5,ror#2                  @ E+=K_00_19
96         eor     r10,r3,r4                       @ F_xx_xx
97         add     r5,r5,r6,ror#27                 @ E+=ROR(A,27)
98 #ifdef __ARMEL__
99         rev     r9,r9                           @ byte swap
100 #endif
101 #endif
102         and     r10,r7,r10,ror#2
103         add     r5,r5,r9                        @ E+=X[i]
104         eor     r10,r10,r4,ror#2                @ F_00_19(B,C,D)
105         str     r9,[r14,#-4]!
106         add     r5,r5,r10                       @ E+=F_00_19(B,C,D)
107 #if __ARM_ARCH__<7
108         ldrb    r10,[r1,#2]
109         ldrb    r9,[r1,#3]
110         ldrb    r11,[r1,#1]
111         add     r4,r8,r4,ror#2                  @ E+=K_00_19
112         ldrb    r12,[r1],#4
113         orr     r9,r9,r10,lsl#8
114         eor     r10,r7,r3                       @ F_xx_xx
115         orr     r9,r9,r11,lsl#16
116         add     r4,r4,r5,ror#27                 @ E+=ROR(A,27)
117         orr     r9,r9,r12,lsl#24
118 #else
119         ldr     r9,[r1],#4                      @ handles unaligned
120         add     r4,r8,r4,ror#2                  @ E+=K_00_19
121         eor     r10,r7,r3                       @ F_xx_xx
122         add     r4,r4,r5,ror#27                 @ E+=ROR(A,27)
123 #ifdef __ARMEL__
124         rev     r9,r9                           @ byte swap
125 #endif
126 #endif
127         and     r10,r6,r10,ror#2
128         add     r4,r4,r9                        @ E+=X[i]
129         eor     r10,r10,r3,ror#2                @ F_00_19(B,C,D)
130         str     r9,[r14,#-4]!
131         add     r4,r4,r10                       @ E+=F_00_19(B,C,D)
132 #if __ARM_ARCH__<7
133         ldrb    r10,[r1,#2]
134         ldrb    r9,[r1,#3]
135         ldrb    r11,[r1,#1]
136         add     r3,r8,r3,ror#2                  @ E+=K_00_19
137         ldrb    r12,[r1],#4
138         orr     r9,r9,r10,lsl#8
139         eor     r10,r6,r7                       @ F_xx_xx
140         orr     r9,r9,r11,lsl#16
141         add     r3,r3,r4,ror#27                 @ E+=ROR(A,27)
142         orr     r9,r9,r12,lsl#24
143 #else
144         ldr     r9,[r1],#4                      @ handles unaligned
145         add     r3,r8,r3,ror#2                  @ E+=K_00_19
146         eor     r10,r6,r7                       @ F_xx_xx
147         add     r3,r3,r4,ror#27                 @ E+=ROR(A,27)
148 #ifdef __ARMEL__
149         rev     r9,r9                           @ byte swap
150 #endif
151 #endif
152         and     r10,r5,r10,ror#2
153         add     r3,r3,r9                        @ E+=X[i]
154         eor     r10,r10,r7,ror#2                @ F_00_19(B,C,D)
155         str     r9,[r14,#-4]!
156         add     r3,r3,r10                       @ E+=F_00_19(B,C,D)
157         teq     r14,sp
158         bne     .L_00_15                @ [((11+4)*5+2)*3]
159         sub     sp,sp,#25*4
160 #if __ARM_ARCH__<7
161         ldrb    r10,[r1,#2]
162         ldrb    r9,[r1,#3]
163         ldrb    r11,[r1,#1]
164         add     r7,r8,r7,ror#2                  @ E+=K_00_19
165         ldrb    r12,[r1],#4
166         orr     r9,r9,r10,lsl#8
167         eor     r10,r5,r6                       @ F_xx_xx
168         orr     r9,r9,r11,lsl#16
169         add     r7,r7,r3,ror#27                 @ E+=ROR(A,27)
170         orr     r9,r9,r12,lsl#24
171 #else
172         ldr     r9,[r1],#4                      @ handles unaligned
173         add     r7,r8,r7,ror#2                  @ E+=K_00_19
174         eor     r10,r5,r6                       @ F_xx_xx
175         add     r7,r7,r3,ror#27                 @ E+=ROR(A,27)
176 #ifdef __ARMEL__
177         rev     r9,r9                           @ byte swap
178 #endif
179 #endif
180         and     r10,r4,r10,ror#2
181         add     r7,r7,r9                        @ E+=X[i]
182         eor     r10,r10,r6,ror#2                @ F_00_19(B,C,D)
183         str     r9,[r14,#-4]!
184         add     r7,r7,r10                       @ E+=F_00_19(B,C,D)
185         ldr     r9,[r14,#15*4]
186         ldr     r10,[r14,#13*4]
187         ldr     r11,[r14,#7*4]
188         add     r6,r8,r6,ror#2                  @ E+=K_xx_xx
189         ldr     r12,[r14,#2*4]
190         eor     r9,r9,r10
191         eor     r11,r11,r12                     @ 1 cycle stall
192         eor     r10,r4,r5                       @ F_xx_xx
193         mov     r9,r9,ror#31
194         add     r6,r6,r7,ror#27                 @ E+=ROR(A,27)
195         eor     r9,r9,r11,ror#31
196         str     r9,[r14,#-4]!
197         and r10,r3,r10,ror#2                                    @ F_xx_xx
198                                                 @ F_xx_xx
199         add     r6,r6,r9                        @ E+=X[i]
200         eor     r10,r10,r5,ror#2                @ F_00_19(B,C,D)
201         add     r6,r6,r10                       @ E+=F_00_19(B,C,D)
202         ldr     r9,[r14,#15*4]
203         ldr     r10,[r14,#13*4]
204         ldr     r11,[r14,#7*4]
205         add     r5,r8,r5,ror#2                  @ E+=K_xx_xx
206         ldr     r12,[r14,#2*4]
207         eor     r9,r9,r10
208         eor     r11,r11,r12                     @ 1 cycle stall
209         eor     r10,r3,r4                       @ F_xx_xx
210         mov     r9,r9,ror#31
211         add     r5,r5,r6,ror#27                 @ E+=ROR(A,27)
212         eor     r9,r9,r11,ror#31
213         str     r9,[r14,#-4]!
214         and r10,r7,r10,ror#2                                    @ F_xx_xx
215                                                 @ F_xx_xx
216         add     r5,r5,r9                        @ E+=X[i]
217         eor     r10,r10,r4,ror#2                @ F_00_19(B,C,D)
218         add     r5,r5,r10                       @ E+=F_00_19(B,C,D)
219         ldr     r9,[r14,#15*4]
220         ldr     r10,[r14,#13*4]
221         ldr     r11,[r14,#7*4]
222         add     r4,r8,r4,ror#2                  @ E+=K_xx_xx
223         ldr     r12,[r14,#2*4]
224         eor     r9,r9,r10
225         eor     r11,r11,r12                     @ 1 cycle stall
226         eor     r10,r7,r3                       @ F_xx_xx
227         mov     r9,r9,ror#31
228         add     r4,r4,r5,ror#27                 @ E+=ROR(A,27)
229         eor     r9,r9,r11,ror#31
230         str     r9,[r14,#-4]!
231         and r10,r6,r10,ror#2                                    @ F_xx_xx
232                                                 @ F_xx_xx
233         add     r4,r4,r9                        @ E+=X[i]
234         eor     r10,r10,r3,ror#2                @ F_00_19(B,C,D)
235         add     r4,r4,r10                       @ E+=F_00_19(B,C,D)
236         ldr     r9,[r14,#15*4]
237         ldr     r10,[r14,#13*4]
238         ldr     r11,[r14,#7*4]
239         add     r3,r8,r3,ror#2                  @ E+=K_xx_xx
240         ldr     r12,[r14,#2*4]
241         eor     r9,r9,r10
242         eor     r11,r11,r12                     @ 1 cycle stall
243         eor     r10,r6,r7                       @ F_xx_xx
244         mov     r9,r9,ror#31
245         add     r3,r3,r4,ror#27                 @ E+=ROR(A,27)
246         eor     r9,r9,r11,ror#31
247         str     r9,[r14,#-4]!
248         and r10,r5,r10,ror#2                                    @ F_xx_xx
249                                                 @ F_xx_xx
250         add     r3,r3,r9                        @ E+=X[i]
251         eor     r10,r10,r7,ror#2                @ F_00_19(B,C,D)
252         add     r3,r3,r10                       @ E+=F_00_19(B,C,D)
254         ldr     r8,.LK_20_39            @ [+15+16*4]
255         cmn     sp,#0                   @ [+3], clear carry to denote 20_39
256 .L_20_39_or_60_79:
257         ldr     r9,[r14,#15*4]
258         ldr     r10,[r14,#13*4]
259         ldr     r11,[r14,#7*4]
260         add     r7,r8,r7,ror#2                  @ E+=K_xx_xx
261         ldr     r12,[r14,#2*4]
262         eor     r9,r9,r10
263         eor     r11,r11,r12                     @ 1 cycle stall
264         eor     r10,r5,r6                       @ F_xx_xx
265         mov     r9,r9,ror#31
266         add     r7,r7,r3,ror#27                 @ E+=ROR(A,27)
267         eor     r9,r9,r11,ror#31
268         str     r9,[r14,#-4]!
269         eor r10,r4,r10,ror#2                                    @ F_xx_xx
270                                                 @ F_xx_xx
271         add     r7,r7,r9                        @ E+=X[i]
272         add     r7,r7,r10                       @ E+=F_20_39(B,C,D)
273         ldr     r9,[r14,#15*4]
274         ldr     r10,[r14,#13*4]
275         ldr     r11,[r14,#7*4]
276         add     r6,r8,r6,ror#2                  @ E+=K_xx_xx
277         ldr     r12,[r14,#2*4]
278         eor     r9,r9,r10
279         eor     r11,r11,r12                     @ 1 cycle stall
280         eor     r10,r4,r5                       @ F_xx_xx
281         mov     r9,r9,ror#31
282         add     r6,r6,r7,ror#27                 @ E+=ROR(A,27)
283         eor     r9,r9,r11,ror#31
284         str     r9,[r14,#-4]!
285         eor r10,r3,r10,ror#2                                    @ F_xx_xx
286                                                 @ F_xx_xx
287         add     r6,r6,r9                        @ E+=X[i]
288         add     r6,r6,r10                       @ E+=F_20_39(B,C,D)
289         ldr     r9,[r14,#15*4]
290         ldr     r10,[r14,#13*4]
291         ldr     r11,[r14,#7*4]
292         add     r5,r8,r5,ror#2                  @ E+=K_xx_xx
293         ldr     r12,[r14,#2*4]
294         eor     r9,r9,r10
295         eor     r11,r11,r12                     @ 1 cycle stall
296         eor     r10,r3,r4                       @ F_xx_xx
297         mov     r9,r9,ror#31
298         add     r5,r5,r6,ror#27                 @ E+=ROR(A,27)
299         eor     r9,r9,r11,ror#31
300         str     r9,[r14,#-4]!
301         eor r10,r7,r10,ror#2                                    @ F_xx_xx
302                                                 @ F_xx_xx
303         add     r5,r5,r9                        @ E+=X[i]
304         add     r5,r5,r10                       @ E+=F_20_39(B,C,D)
305         ldr     r9,[r14,#15*4]
306         ldr     r10,[r14,#13*4]
307         ldr     r11,[r14,#7*4]
308         add     r4,r8,r4,ror#2                  @ E+=K_xx_xx
309         ldr     r12,[r14,#2*4]
310         eor     r9,r9,r10
311         eor     r11,r11,r12                     @ 1 cycle stall
312         eor     r10,r7,r3                       @ F_xx_xx
313         mov     r9,r9,ror#31
314         add     r4,r4,r5,ror#27                 @ E+=ROR(A,27)
315         eor     r9,r9,r11,ror#31
316         str     r9,[r14,#-4]!
317         eor r10,r6,r10,ror#2                                    @ F_xx_xx
318                                                 @ F_xx_xx
319         add     r4,r4,r9                        @ E+=X[i]
320         add     r4,r4,r10                       @ E+=F_20_39(B,C,D)
321         ldr     r9,[r14,#15*4]
322         ldr     r10,[r14,#13*4]
323         ldr     r11,[r14,#7*4]
324         add     r3,r8,r3,ror#2                  @ E+=K_xx_xx
325         ldr     r12,[r14,#2*4]
326         eor     r9,r9,r10
327         eor     r11,r11,r12                     @ 1 cycle stall
328         eor     r10,r6,r7                       @ F_xx_xx
329         mov     r9,r9,ror#31
330         add     r3,r3,r4,ror#27                 @ E+=ROR(A,27)
331         eor     r9,r9,r11,ror#31
332         str     r9,[r14,#-4]!
333         eor r10,r5,r10,ror#2                                    @ F_xx_xx
334                                                 @ F_xx_xx
335         add     r3,r3,r9                        @ E+=X[i]
336         add     r3,r3,r10                       @ E+=F_20_39(B,C,D)
337         teq     r14,sp                  @ preserve carry
338         bne     .L_20_39_or_60_79       @ [+((12+3)*5+2)*4]
339         bcs     .L_done                 @ [+((12+3)*5+2)*4], spare 300 bytes
341         ldr     r8,.LK_40_59
342         sub     sp,sp,#20*4             @ [+2]
343 .L_40_59:
344         ldr     r9,[r14,#15*4]
345         ldr     r10,[r14,#13*4]
346         ldr     r11,[r14,#7*4]
347         add     r7,r8,r7,ror#2                  @ E+=K_xx_xx
348         ldr     r12,[r14,#2*4]
349         eor     r9,r9,r10
350         eor     r11,r11,r12                     @ 1 cycle stall
351         eor     r10,r5,r6                       @ F_xx_xx
352         mov     r9,r9,ror#31
353         add     r7,r7,r3,ror#27                 @ E+=ROR(A,27)
354         eor     r9,r9,r11,ror#31
355         str     r9,[r14,#-4]!
356         and r10,r4,r10,ror#2                                    @ F_xx_xx
357         and r11,r5,r6                                   @ F_xx_xx
358         add     r7,r7,r9                        @ E+=X[i]
359         add     r7,r7,r10                       @ E+=F_40_59(B,C,D)
360         add     r7,r7,r11,ror#2
361         ldr     r9,[r14,#15*4]
362         ldr     r10,[r14,#13*4]
363         ldr     r11,[r14,#7*4]
364         add     r6,r8,r6,ror#2                  @ E+=K_xx_xx
365         ldr     r12,[r14,#2*4]
366         eor     r9,r9,r10
367         eor     r11,r11,r12                     @ 1 cycle stall
368         eor     r10,r4,r5                       @ F_xx_xx
369         mov     r9,r9,ror#31
370         add     r6,r6,r7,ror#27                 @ E+=ROR(A,27)
371         eor     r9,r9,r11,ror#31
372         str     r9,[r14,#-4]!
373         and r10,r3,r10,ror#2                                    @ F_xx_xx
374         and r11,r4,r5                                   @ F_xx_xx
375         add     r6,r6,r9                        @ E+=X[i]
376         add     r6,r6,r10                       @ E+=F_40_59(B,C,D)
377         add     r6,r6,r11,ror#2
378         ldr     r9,[r14,#15*4]
379         ldr     r10,[r14,#13*4]
380         ldr     r11,[r14,#7*4]
381         add     r5,r8,r5,ror#2                  @ E+=K_xx_xx
382         ldr     r12,[r14,#2*4]
383         eor     r9,r9,r10
384         eor     r11,r11,r12                     @ 1 cycle stall
385         eor     r10,r3,r4                       @ F_xx_xx
386         mov     r9,r9,ror#31
387         add     r5,r5,r6,ror#27                 @ E+=ROR(A,27)
388         eor     r9,r9,r11,ror#31
389         str     r9,[r14,#-4]!
390         and r10,r7,r10,ror#2                                    @ F_xx_xx
391         and r11,r3,r4                                   @ F_xx_xx
392         add     r5,r5,r9                        @ E+=X[i]
393         add     r5,r5,r10                       @ E+=F_40_59(B,C,D)
394         add     r5,r5,r11,ror#2
395         ldr     r9,[r14,#15*4]
396         ldr     r10,[r14,#13*4]
397         ldr     r11,[r14,#7*4]
398         add     r4,r8,r4,ror#2                  @ E+=K_xx_xx
399         ldr     r12,[r14,#2*4]
400         eor     r9,r9,r10
401         eor     r11,r11,r12                     @ 1 cycle stall
402         eor     r10,r7,r3                       @ F_xx_xx
403         mov     r9,r9,ror#31
404         add     r4,r4,r5,ror#27                 @ E+=ROR(A,27)
405         eor     r9,r9,r11,ror#31
406         str     r9,[r14,#-4]!
407         and r10,r6,r10,ror#2                                    @ F_xx_xx
408         and r11,r7,r3                                   @ F_xx_xx
409         add     r4,r4,r9                        @ E+=X[i]
410         add     r4,r4,r10                       @ E+=F_40_59(B,C,D)
411         add     r4,r4,r11,ror#2
412         ldr     r9,[r14,#15*4]
413         ldr     r10,[r14,#13*4]
414         ldr     r11,[r14,#7*4]
415         add     r3,r8,r3,ror#2                  @ E+=K_xx_xx
416         ldr     r12,[r14,#2*4]
417         eor     r9,r9,r10
418         eor     r11,r11,r12                     @ 1 cycle stall
419         eor     r10,r6,r7                       @ F_xx_xx
420         mov     r9,r9,ror#31
421         add     r3,r3,r4,ror#27                 @ E+=ROR(A,27)
422         eor     r9,r9,r11,ror#31
423         str     r9,[r14,#-4]!
424         and r10,r5,r10,ror#2                                    @ F_xx_xx
425         and r11,r6,r7                                   @ F_xx_xx
426         add     r3,r3,r9                        @ E+=X[i]
427         add     r3,r3,r10                       @ E+=F_40_59(B,C,D)
428         add     r3,r3,r11,ror#2
429         teq     r14,sp
430         bne     .L_40_59                @ [+((12+5)*5+2)*4]
432         ldr     r8,.LK_60_79
433         sub     sp,sp,#20*4
434         cmp     sp,#0                   @ set carry to denote 60_79
435         b       .L_20_39_or_60_79       @ [+4], spare 300 bytes
436 .L_done:
437         add     sp,sp,#80*4             @ "deallocate" stack frame
438         ldmia   r0,{r8,r9,r10,r11,r12}
439         add     r3,r8,r3
440         add     r4,r9,r4
441         add     r5,r10,r5,ror#2
442         add     r6,r11,r6,ror#2
443         add     r7,r12,r7,ror#2
444         stmia   r0,{r3,r4,r5,r6,r7}
445         teq     r1,r2
446         bne     .Lloop                  @ [+18], total 1307
448 #if __ARM_ARCH__>=5
449         ldmia   sp!,{r4-r12,pc}
450 #else
451         ldmia   sp!,{r4-r12,lr}
452         tst     lr,#1
453         moveq   pc,lr                   @ be binary compatible with V4, yet
454         .word   0xe12fff1e                      @ interoperable with Thumb ISA:-)
455 #endif
456 .size   sha1_block_data_order,.-sha1_block_data_order
458 .align  5
459 .LK_00_19:      .word   0x5a827999
460 .LK_20_39:      .word   0x6ed9eba1
461 .LK_40_59:      .word   0x8f1bbcdc
462 .LK_60_79:      .word   0xca62c1d6
463 #if __ARM_MAX_ARCH__>=7
464 .LOPENSSL_armcap:
465 .word   OPENSSL_armcap_P-sha1_block_data_order
466 #endif
467 .asciz  "SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>"
468 .align  5
469 #if __ARM_MAX_ARCH__>=7
470 .arch   armv7-a
471 .fpu    neon
473 .type   sha1_block_data_order_neon,%function
474 .align  4
475 sha1_block_data_order_neon:
476 .LNEON:
477         stmdb   sp!,{r4-r12,lr}
478         add     r2,r1,r2,lsl#6  @ r2 to point at the end of r1
479         @ dmb                           @ errata #451034 on early Cortex A8
480         @ vstmdb        sp!,{d8-d15}    @ ABI specification says so
481         mov     r14,sp
482         sub     sp,sp,#64               @ alloca
483         adr     r8,.LK_00_19
484         bic     sp,sp,#15               @ align for 128-bit stores
486         ldmia   r0,{r3,r4,r5,r6,r7}     @ load context
487         mov     r12,sp
489         vld1.8          {q0-q1},[r1]!   @ handles unaligned
490         veor            q15,q15,q15
491         vld1.8          {q2-q3},[r1]!
492         vld1.32         {d28[],d29[]},[r8,:32]! @ load K_00_19
493         vrev32.8        q0,q0           @ yes, even on
494         vrev32.8        q1,q1           @ big-endian...
495         vrev32.8        q2,q2
496         vadd.i32        q8,q0,q14
497         vrev32.8        q3,q3
498         vadd.i32        q9,q1,q14
499         vst1.32         {q8},[r12,:128]!
500         vadd.i32        q10,q2,q14
501         vst1.32         {q9},[r12,:128]!
502         vst1.32         {q10},[r12,:128]!
503         ldr             r9,[sp]                 @ big RAW stall
505 .Loop_neon:
506         vext.8  q8,q0,q1,#8
507         bic     r10,r6,r4
508         add     r7,r7,r9
509         and     r11,r5,r4
510         vadd.i32        q13,q3,q14
511         ldr     r9,[sp,#4]
512         add     r7,r7,r3,ror#27
513         vext.8  q12,q3,q15,#4
514         eor     r11,r11,r10
515         mov     r4,r4,ror#2
516         add     r7,r7,r11
517         veor    q8,q8,q0
518         bic     r10,r5,r3
519         add     r6,r6,r9
520         veor    q12,q12,q2
521         and     r11,r4,r3
522         ldr     r9,[sp,#8]
523         veor    q12,q12,q8
524         add     r6,r6,r7,ror#27
525         eor     r11,r11,r10
526         vst1.32 {q13},[r12,:128]!
527         sub     r12,r12,#64
528         mov     r3,r3,ror#2
529         add     r6,r6,r11
530         vext.8  q13,q15,q12,#4
531         bic     r10,r4,r7
532         add     r5,r5,r9
533         vadd.i32        q8,q12,q12
534         and     r11,r3,r7
535         ldr     r9,[sp,#12]
536         vsri.32 q8,q12,#31
537         add     r5,r5,r6,ror#27
538         eor     r11,r11,r10
539         mov     r7,r7,ror#2
540         vshr.u32        q12,q13,#30
541         add     r5,r5,r11
542         bic     r10,r3,r6
543         vshl.u32        q13,q13,#2
544         add     r4,r4,r9
545         and     r11,r7,r6
546         veor    q8,q8,q12
547         ldr     r9,[sp,#16]
548         add     r4,r4,r5,ror#27
549         veor    q8,q8,q13
550         eor     r11,r11,r10
551         mov     r6,r6,ror#2
552         add     r4,r4,r11
553         vext.8  q9,q1,q2,#8
554         bic     r10,r7,r5
555         add     r3,r3,r9
556         and     r11,r6,r5
557         vadd.i32        q13,q8,q14
558         ldr     r9,[sp,#20]
559         vld1.32 {d28[],d29[]},[r8,:32]!
560         add     r3,r3,r4,ror#27
561         vext.8  q12,q8,q15,#4
562         eor     r11,r11,r10
563         mov     r5,r5,ror#2
564         add     r3,r3,r11
565         veor    q9,q9,q1
566         bic     r10,r6,r4
567         add     r7,r7,r9
568         veor    q12,q12,q3
569         and     r11,r5,r4
570         ldr     r9,[sp,#24]
571         veor    q12,q12,q9
572         add     r7,r7,r3,ror#27
573         eor     r11,r11,r10
574         vst1.32 {q13},[r12,:128]!
575         mov     r4,r4,ror#2
576         add     r7,r7,r11
577         vext.8  q13,q15,q12,#4
578         bic     r10,r5,r3
579         add     r6,r6,r9
580         vadd.i32        q9,q12,q12
581         and     r11,r4,r3
582         ldr     r9,[sp,#28]
583         vsri.32 q9,q12,#31
584         add     r6,r6,r7,ror#27
585         eor     r11,r11,r10
586         mov     r3,r3,ror#2
587         vshr.u32        q12,q13,#30
588         add     r6,r6,r11
589         bic     r10,r4,r7
590         vshl.u32        q13,q13,#2
591         add     r5,r5,r9
592         and     r11,r3,r7
593         veor    q9,q9,q12
594         ldr     r9,[sp,#32]
595         add     r5,r5,r6,ror#27
596         veor    q9,q9,q13
597         eor     r11,r11,r10
598         mov     r7,r7,ror#2
599         add     r5,r5,r11
600         vext.8  q10,q2,q3,#8
601         bic     r10,r3,r6
602         add     r4,r4,r9
603         and     r11,r7,r6
604         vadd.i32        q13,q9,q14
605         ldr     r9,[sp,#36]
606         add     r4,r4,r5,ror#27
607         vext.8  q12,q9,q15,#4
608         eor     r11,r11,r10
609         mov     r6,r6,ror#2
610         add     r4,r4,r11
611         veor    q10,q10,q2
612         bic     r10,r7,r5
613         add     r3,r3,r9
614         veor    q12,q12,q8
615         and     r11,r6,r5
616         ldr     r9,[sp,#40]
617         veor    q12,q12,q10
618         add     r3,r3,r4,ror#27
619         eor     r11,r11,r10
620         vst1.32 {q13},[r12,:128]!
621         mov     r5,r5,ror#2
622         add     r3,r3,r11
623         vext.8  q13,q15,q12,#4
624         bic     r10,r6,r4
625         add     r7,r7,r9
626         vadd.i32        q10,q12,q12
627         and     r11,r5,r4
628         ldr     r9,[sp,#44]
629         vsri.32 q10,q12,#31
630         add     r7,r7,r3,ror#27
631         eor     r11,r11,r10
632         mov     r4,r4,ror#2
633         vshr.u32        q12,q13,#30
634         add     r7,r7,r11
635         bic     r10,r5,r3
636         vshl.u32        q13,q13,#2
637         add     r6,r6,r9
638         and     r11,r4,r3
639         veor    q10,q10,q12
640         ldr     r9,[sp,#48]
641         add     r6,r6,r7,ror#27
642         veor    q10,q10,q13
643         eor     r11,r11,r10
644         mov     r3,r3,ror#2
645         add     r6,r6,r11
646         vext.8  q11,q3,q8,#8
647         bic     r10,r4,r7
648         add     r5,r5,r9
649         and     r11,r3,r7
650         vadd.i32        q13,q10,q14
651         ldr     r9,[sp,#52]
652         add     r5,r5,r6,ror#27
653         vext.8  q12,q10,q15,#4
654         eor     r11,r11,r10
655         mov     r7,r7,ror#2
656         add     r5,r5,r11
657         veor    q11,q11,q3
658         bic     r10,r3,r6
659         add     r4,r4,r9
660         veor    q12,q12,q9
661         and     r11,r7,r6
662         ldr     r9,[sp,#56]
663         veor    q12,q12,q11
664         add     r4,r4,r5,ror#27
665         eor     r11,r11,r10
666         vst1.32 {q13},[r12,:128]!
667         mov     r6,r6,ror#2
668         add     r4,r4,r11
669         vext.8  q13,q15,q12,#4
670         bic     r10,r7,r5
671         add     r3,r3,r9
672         vadd.i32        q11,q12,q12
673         and     r11,r6,r5
674         ldr     r9,[sp,#60]
675         vsri.32 q11,q12,#31
676         add     r3,r3,r4,ror#27
677         eor     r11,r11,r10
678         mov     r5,r5,ror#2
679         vshr.u32        q12,q13,#30
680         add     r3,r3,r11
681         bic     r10,r6,r4
682         vshl.u32        q13,q13,#2
683         add     r7,r7,r9
684         and     r11,r5,r4
685         veor    q11,q11,q12
686         ldr     r9,[sp,#0]
687         add     r7,r7,r3,ror#27
688         veor    q11,q11,q13
689         eor     r11,r11,r10
690         mov     r4,r4,ror#2
691         add     r7,r7,r11
692         vext.8  q12,q10,q11,#8
693         bic     r10,r5,r3
694         add     r6,r6,r9
695         and     r11,r4,r3
696         veor    q0,q0,q8
697         ldr     r9,[sp,#4]
698         add     r6,r6,r7,ror#27
699         veor    q0,q0,q1
700         eor     r11,r11,r10
701         mov     r3,r3,ror#2
702         vadd.i32        q13,q11,q14
703         add     r6,r6,r11
704         bic     r10,r4,r7
705         veor    q12,q12,q0
706         add     r5,r5,r9
707         and     r11,r3,r7
708         vshr.u32        q0,q12,#30
709         ldr     r9,[sp,#8]
710         add     r5,r5,r6,ror#27
711         vst1.32 {q13},[r12,:128]!
712         sub     r12,r12,#64
713         eor     r11,r11,r10
714         mov     r7,r7,ror#2
715         vsli.32 q0,q12,#2
716         add     r5,r5,r11
717         bic     r10,r3,r6
718         add     r4,r4,r9
719         and     r11,r7,r6
720         ldr     r9,[sp,#12]
721         add     r4,r4,r5,ror#27
722         eor     r11,r11,r10
723         mov     r6,r6,ror#2
724         add     r4,r4,r11
725         bic     r10,r7,r5
726         add     r3,r3,r9
727         and     r11,r6,r5
728         ldr     r9,[sp,#16]
729         add     r3,r3,r4,ror#27
730         eor     r11,r11,r10
731         mov     r5,r5,ror#2
732         add     r3,r3,r11
733         vext.8  q12,q11,q0,#8
734         eor     r10,r4,r6
735         add     r7,r7,r9
736         ldr     r9,[sp,#20]
737         veor    q1,q1,q9
738         eor     r11,r10,r5
739         add     r7,r7,r3,ror#27
740         veor    q1,q1,q2
741         mov     r4,r4,ror#2
742         add     r7,r7,r11
743         vadd.i32        q13,q0,q14
744         eor     r10,r3,r5
745         add     r6,r6,r9
746         veor    q12,q12,q1
747         ldr     r9,[sp,#24]
748         eor     r11,r10,r4
749         vshr.u32        q1,q12,#30
750         add     r6,r6,r7,ror#27
751         mov     r3,r3,ror#2
752         vst1.32 {q13},[r12,:128]!
753         add     r6,r6,r11
754         eor     r10,r7,r4
755         vsli.32 q1,q12,#2
756         add     r5,r5,r9
757         ldr     r9,[sp,#28]
758         eor     r11,r10,r3
759         add     r5,r5,r6,ror#27
760         mov     r7,r7,ror#2
761         add     r5,r5,r11
762         eor     r10,r6,r3
763         add     r4,r4,r9
764         ldr     r9,[sp,#32]
765         eor     r11,r10,r7
766         add     r4,r4,r5,ror#27
767         mov     r6,r6,ror#2
768         add     r4,r4,r11
769         vext.8  q12,q0,q1,#8
770         eor     r10,r5,r7
771         add     r3,r3,r9
772         ldr     r9,[sp,#36]
773         veor    q2,q2,q10
774         eor     r11,r10,r6
775         add     r3,r3,r4,ror#27
776         veor    q2,q2,q3
777         mov     r5,r5,ror#2
778         add     r3,r3,r11
779         vadd.i32        q13,q1,q14
780         eor     r10,r4,r6
781         vld1.32 {d28[],d29[]},[r8,:32]!
782         add     r7,r7,r9
783         veor    q12,q12,q2
784         ldr     r9,[sp,#40]
785         eor     r11,r10,r5
786         vshr.u32        q2,q12,#30
787         add     r7,r7,r3,ror#27
788         mov     r4,r4,ror#2
789         vst1.32 {q13},[r12,:128]!
790         add     r7,r7,r11
791         eor     r10,r3,r5
792         vsli.32 q2,q12,#2
793         add     r6,r6,r9
794         ldr     r9,[sp,#44]
795         eor     r11,r10,r4
796         add     r6,r6,r7,ror#27
797         mov     r3,r3,ror#2
798         add     r6,r6,r11
799         eor     r10,r7,r4
800         add     r5,r5,r9
801         ldr     r9,[sp,#48]
802         eor     r11,r10,r3
803         add     r5,r5,r6,ror#27
804         mov     r7,r7,ror#2
805         add     r5,r5,r11
806         vext.8  q12,q1,q2,#8
807         eor     r10,r6,r3
808         add     r4,r4,r9
809         ldr     r9,[sp,#52]
810         veor    q3,q3,q11
811         eor     r11,r10,r7
812         add     r4,r4,r5,ror#27
813         veor    q3,q3,q8
814         mov     r6,r6,ror#2
815         add     r4,r4,r11
816         vadd.i32        q13,q2,q14
817         eor     r10,r5,r7
818         add     r3,r3,r9
819         veor    q12,q12,q3
820         ldr     r9,[sp,#56]
821         eor     r11,r10,r6
822         vshr.u32        q3,q12,#30
823         add     r3,r3,r4,ror#27
824         mov     r5,r5,ror#2
825         vst1.32 {q13},[r12,:128]!
826         add     r3,r3,r11
827         eor     r10,r4,r6
828         vsli.32 q3,q12,#2
829         add     r7,r7,r9
830         ldr     r9,[sp,#60]
831         eor     r11,r10,r5
832         add     r7,r7,r3,ror#27
833         mov     r4,r4,ror#2
834         add     r7,r7,r11
835         eor     r10,r3,r5
836         add     r6,r6,r9
837         ldr     r9,[sp,#0]
838         eor     r11,r10,r4
839         add     r6,r6,r7,ror#27
840         mov     r3,r3,ror#2
841         add     r6,r6,r11
842         vext.8  q12,q2,q3,#8
843         eor     r10,r7,r4
844         add     r5,r5,r9
845         ldr     r9,[sp,#4]
846         veor    q8,q8,q0
847         eor     r11,r10,r3
848         add     r5,r5,r6,ror#27
849         veor    q8,q8,q9
850         mov     r7,r7,ror#2
851         add     r5,r5,r11
852         vadd.i32        q13,q3,q14
853         eor     r10,r6,r3
854         add     r4,r4,r9
855         veor    q12,q12,q8
856         ldr     r9,[sp,#8]
857         eor     r11,r10,r7
858         vshr.u32        q8,q12,#30
859         add     r4,r4,r5,ror#27
860         mov     r6,r6,ror#2
861         vst1.32 {q13},[r12,:128]!
862         sub     r12,r12,#64
863         add     r4,r4,r11
864         eor     r10,r5,r7
865         vsli.32 q8,q12,#2
866         add     r3,r3,r9
867         ldr     r9,[sp,#12]
868         eor     r11,r10,r6
869         add     r3,r3,r4,ror#27
870         mov     r5,r5,ror#2
871         add     r3,r3,r11
872         eor     r10,r4,r6
873         add     r7,r7,r9
874         ldr     r9,[sp,#16]
875         eor     r11,r10,r5
876         add     r7,r7,r3,ror#27
877         mov     r4,r4,ror#2
878         add     r7,r7,r11
879         vext.8  q12,q3,q8,#8
880         eor     r10,r3,r5
881         add     r6,r6,r9
882         ldr     r9,[sp,#20]
883         veor    q9,q9,q1
884         eor     r11,r10,r4
885         add     r6,r6,r7,ror#27
886         veor    q9,q9,q10
887         mov     r3,r3,ror#2
888         add     r6,r6,r11
889         vadd.i32        q13,q8,q14
890         eor     r10,r7,r4
891         add     r5,r5,r9
892         veor    q12,q12,q9
893         ldr     r9,[sp,#24]
894         eor     r11,r10,r3
895         vshr.u32        q9,q12,#30
896         add     r5,r5,r6,ror#27
897         mov     r7,r7,ror#2
898         vst1.32 {q13},[r12,:128]!
899         add     r5,r5,r11
900         eor     r10,r6,r3
901         vsli.32 q9,q12,#2
902         add     r4,r4,r9
903         ldr     r9,[sp,#28]
904         eor     r11,r10,r7
905         add     r4,r4,r5,ror#27
906         mov     r6,r6,ror#2
907         add     r4,r4,r11
908         eor     r10,r5,r7
909         add     r3,r3,r9
910         ldr     r9,[sp,#32]
911         eor     r11,r10,r6
912         add     r3,r3,r4,ror#27
913         mov     r5,r5,ror#2
914         add     r3,r3,r11
915         vext.8  q12,q8,q9,#8
916         add     r7,r7,r9
917         and     r10,r5,r6
918         ldr     r9,[sp,#36]
919         veor    q10,q10,q2
920         add     r7,r7,r3,ror#27
921         eor     r11,r5,r6
922         veor    q10,q10,q11
923         add     r7,r7,r10
924         and     r11,r11,r4
925         vadd.i32        q13,q9,q14
926         mov     r4,r4,ror#2
927         add     r7,r7,r11
928         veor    q12,q12,q10
929         add     r6,r6,r9
930         and     r10,r4,r5
931         vshr.u32        q10,q12,#30
932         ldr     r9,[sp,#40]
933         add     r6,r6,r7,ror#27
934         vst1.32 {q13},[r12,:128]!
935         eor     r11,r4,r5
936         add     r6,r6,r10
937         vsli.32 q10,q12,#2
938         and     r11,r11,r3
939         mov     r3,r3,ror#2
940         add     r6,r6,r11
941         add     r5,r5,r9
942         and     r10,r3,r4
943         ldr     r9,[sp,#44]
944         add     r5,r5,r6,ror#27
945         eor     r11,r3,r4
946         add     r5,r5,r10
947         and     r11,r11,r7
948         mov     r7,r7,ror#2
949         add     r5,r5,r11
950         add     r4,r4,r9
951         and     r10,r7,r3
952         ldr     r9,[sp,#48]
953         add     r4,r4,r5,ror#27
954         eor     r11,r7,r3
955         add     r4,r4,r10
956         and     r11,r11,r6
957         mov     r6,r6,ror#2
958         add     r4,r4,r11
959         vext.8  q12,q9,q10,#8
960         add     r3,r3,r9
961         and     r10,r6,r7
962         ldr     r9,[sp,#52]
963         veor    q11,q11,q3
964         add     r3,r3,r4,ror#27
965         eor     r11,r6,r7
966         veor    q11,q11,q0
967         add     r3,r3,r10
968         and     r11,r11,r5
969         vadd.i32        q13,q10,q14
970         mov     r5,r5,ror#2
971         vld1.32 {d28[],d29[]},[r8,:32]!
972         add     r3,r3,r11
973         veor    q12,q12,q11
974         add     r7,r7,r9
975         and     r10,r5,r6
976         vshr.u32        q11,q12,#30
977         ldr     r9,[sp,#56]
978         add     r7,r7,r3,ror#27
979         vst1.32 {q13},[r12,:128]!
980         eor     r11,r5,r6
981         add     r7,r7,r10
982         vsli.32 q11,q12,#2
983         and     r11,r11,r4
984         mov     r4,r4,ror#2
985         add     r7,r7,r11
986         add     r6,r6,r9
987         and     r10,r4,r5
988         ldr     r9,[sp,#60]
989         add     r6,r6,r7,ror#27
990         eor     r11,r4,r5
991         add     r6,r6,r10
992         and     r11,r11,r3
993         mov     r3,r3,ror#2
994         add     r6,r6,r11
995         add     r5,r5,r9
996         and     r10,r3,r4
997         ldr     r9,[sp,#0]
998         add     r5,r5,r6,ror#27
999         eor     r11,r3,r4
1000         add     r5,r5,r10
1001         and     r11,r11,r7
1002         mov     r7,r7,ror#2
1003         add     r5,r5,r11
1004         vext.8  q12,q10,q11,#8
1005         add     r4,r4,r9
1006         and     r10,r7,r3
1007         ldr     r9,[sp,#4]
1008         veor    q0,q0,q8
1009         add     r4,r4,r5,ror#27
1010         eor     r11,r7,r3
1011         veor    q0,q0,q1
1012         add     r4,r4,r10
1013         and     r11,r11,r6
1014         vadd.i32        q13,q11,q14
1015         mov     r6,r6,ror#2
1016         add     r4,r4,r11
1017         veor    q12,q12,q0
1018         add     r3,r3,r9
1019         and     r10,r6,r7
1020         vshr.u32        q0,q12,#30
1021         ldr     r9,[sp,#8]
1022         add     r3,r3,r4,ror#27
1023         vst1.32 {q13},[r12,:128]!
1024         sub     r12,r12,#64
1025         eor     r11,r6,r7
1026         add     r3,r3,r10
1027         vsli.32 q0,q12,#2
1028         and     r11,r11,r5
1029         mov     r5,r5,ror#2
1030         add     r3,r3,r11
1031         add     r7,r7,r9
1032         and     r10,r5,r6
1033         ldr     r9,[sp,#12]
1034         add     r7,r7,r3,ror#27
1035         eor     r11,r5,r6
1036         add     r7,r7,r10
1037         and     r11,r11,r4
1038         mov     r4,r4,ror#2
1039         add     r7,r7,r11
1040         add     r6,r6,r9
1041         and     r10,r4,r5
1042         ldr     r9,[sp,#16]
1043         add     r6,r6,r7,ror#27
1044         eor     r11,r4,r5
1045         add     r6,r6,r10
1046         and     r11,r11,r3
1047         mov     r3,r3,ror#2
1048         add     r6,r6,r11
1049         vext.8  q12,q11,q0,#8
1050         add     r5,r5,r9
1051         and     r10,r3,r4
1052         ldr     r9,[sp,#20]
1053         veor    q1,q1,q9
1054         add     r5,r5,r6,ror#27
1055         eor     r11,r3,r4
1056         veor    q1,q1,q2
1057         add     r5,r5,r10
1058         and     r11,r11,r7
1059         vadd.i32        q13,q0,q14
1060         mov     r7,r7,ror#2
1061         add     r5,r5,r11
1062         veor    q12,q12,q1
1063         add     r4,r4,r9
1064         and     r10,r7,r3
1065         vshr.u32        q1,q12,#30
1066         ldr     r9,[sp,#24]
1067         add     r4,r4,r5,ror#27
1068         vst1.32 {q13},[r12,:128]!
1069         eor     r11,r7,r3
1070         add     r4,r4,r10
1071         vsli.32 q1,q12,#2
1072         and     r11,r11,r6
1073         mov     r6,r6,ror#2
1074         add     r4,r4,r11
1075         add     r3,r3,r9
1076         and     r10,r6,r7
1077         ldr     r9,[sp,#28]
1078         add     r3,r3,r4,ror#27
1079         eor     r11,r6,r7
1080         add     r3,r3,r10
1081         and     r11,r11,r5
1082         mov     r5,r5,ror#2
1083         add     r3,r3,r11
1084         add     r7,r7,r9
1085         and     r10,r5,r6
1086         ldr     r9,[sp,#32]
1087         add     r7,r7,r3,ror#27
1088         eor     r11,r5,r6
1089         add     r7,r7,r10
1090         and     r11,r11,r4
1091         mov     r4,r4,ror#2
1092         add     r7,r7,r11
1093         vext.8  q12,q0,q1,#8
1094         add     r6,r6,r9
1095         and     r10,r4,r5
1096         ldr     r9,[sp,#36]
1097         veor    q2,q2,q10
1098         add     r6,r6,r7,ror#27
1099         eor     r11,r4,r5
1100         veor    q2,q2,q3
1101         add     r6,r6,r10
1102         and     r11,r11,r3
1103         vadd.i32        q13,q1,q14
1104         mov     r3,r3,ror#2
1105         add     r6,r6,r11
1106         veor    q12,q12,q2
1107         add     r5,r5,r9
1108         and     r10,r3,r4
1109         vshr.u32        q2,q12,#30
1110         ldr     r9,[sp,#40]
1111         add     r5,r5,r6,ror#27
1112         vst1.32 {q13},[r12,:128]!
1113         eor     r11,r3,r4
1114         add     r5,r5,r10
1115         vsli.32 q2,q12,#2
1116         and     r11,r11,r7
1117         mov     r7,r7,ror#2
1118         add     r5,r5,r11
1119         add     r4,r4,r9
1120         and     r10,r7,r3
1121         ldr     r9,[sp,#44]
1122         add     r4,r4,r5,ror#27
1123         eor     r11,r7,r3
1124         add     r4,r4,r10
1125         and     r11,r11,r6
1126         mov     r6,r6,ror#2
1127         add     r4,r4,r11
1128         add     r3,r3,r9
1129         and     r10,r6,r7
1130         ldr     r9,[sp,#48]
1131         add     r3,r3,r4,ror#27
1132         eor     r11,r6,r7
1133         add     r3,r3,r10
1134         and     r11,r11,r5
1135         mov     r5,r5,ror#2
1136         add     r3,r3,r11
1137         vext.8  q12,q1,q2,#8
1138         eor     r10,r4,r6
1139         add     r7,r7,r9
1140         ldr     r9,[sp,#52]
1141         veor    q3,q3,q11
1142         eor     r11,r10,r5
1143         add     r7,r7,r3,ror#27
1144         veor    q3,q3,q8
1145         mov     r4,r4,ror#2
1146         add     r7,r7,r11
1147         vadd.i32        q13,q2,q14
1148         eor     r10,r3,r5
1149         add     r6,r6,r9
1150         veor    q12,q12,q3
1151         ldr     r9,[sp,#56]
1152         eor     r11,r10,r4
1153         vshr.u32        q3,q12,#30
1154         add     r6,r6,r7,ror#27
1155         mov     r3,r3,ror#2
1156         vst1.32 {q13},[r12,:128]!
1157         add     r6,r6,r11
1158         eor     r10,r7,r4
1159         vsli.32 q3,q12,#2
1160         add     r5,r5,r9
1161         ldr     r9,[sp,#60]
1162         eor     r11,r10,r3
1163         add     r5,r5,r6,ror#27
1164         mov     r7,r7,ror#2
1165         add     r5,r5,r11
1166         eor     r10,r6,r3
1167         add     r4,r4,r9
1168         ldr     r9,[sp,#0]
1169         eor     r11,r10,r7
1170         add     r4,r4,r5,ror#27
1171         mov     r6,r6,ror#2
1172         add     r4,r4,r11
1173         vadd.i32        q13,q3,q14
1174         eor     r10,r5,r7
1175         add     r3,r3,r9
1176         vst1.32 {q13},[r12,:128]!
1177         sub     r12,r12,#64
1178         teq     r1,r2
1179         sub     r8,r8,#16
1180         subeq   r1,r1,#64
1181         vld1.8  {q0-q1},[r1]!
1182         ldr     r9,[sp,#4]
1183         eor     r11,r10,r6
1184         vld1.8  {q2-q3},[r1]!
1185         add     r3,r3,r4,ror#27
1186         mov     r5,r5,ror#2
1187         vld1.32 {d28[],d29[]},[r8,:32]!
1188         add     r3,r3,r11
1189         eor     r10,r4,r6
1190         vrev32.8        q0,q0
1191         add     r7,r7,r9
1192         ldr     r9,[sp,#8]
1193         eor     r11,r10,r5
1194         add     r7,r7,r3,ror#27
1195         mov     r4,r4,ror#2
1196         add     r7,r7,r11
1197         eor     r10,r3,r5
1198         add     r6,r6,r9
1199         ldr     r9,[sp,#12]
1200         eor     r11,r10,r4
1201         add     r6,r6,r7,ror#27
1202         mov     r3,r3,ror#2
1203         add     r6,r6,r11
1204         eor     r10,r7,r4
1205         add     r5,r5,r9
1206         ldr     r9,[sp,#16]
1207         eor     r11,r10,r3
1208         add     r5,r5,r6,ror#27
1209         mov     r7,r7,ror#2
1210         add     r5,r5,r11
1211         vrev32.8        q1,q1
1212         eor     r10,r6,r3
1213         add     r4,r4,r9
1214         vadd.i32        q8,q0,q14
1215         ldr     r9,[sp,#20]
1216         eor     r11,r10,r7
1217         vst1.32 {q8},[r12,:128]!
1218         add     r4,r4,r5,ror#27
1219         mov     r6,r6,ror#2
1220         add     r4,r4,r11
1221         eor     r10,r5,r7
1222         add     r3,r3,r9
1223         ldr     r9,[sp,#24]
1224         eor     r11,r10,r6
1225         add     r3,r3,r4,ror#27
1226         mov     r5,r5,ror#2
1227         add     r3,r3,r11
1228         eor     r10,r4,r6
1229         add     r7,r7,r9
1230         ldr     r9,[sp,#28]
1231         eor     r11,r10,r5
1232         add     r7,r7,r3,ror#27
1233         mov     r4,r4,ror#2
1234         add     r7,r7,r11
1235         eor     r10,r3,r5
1236         add     r6,r6,r9
1237         ldr     r9,[sp,#32]
1238         eor     r11,r10,r4
1239         add     r6,r6,r7,ror#27
1240         mov     r3,r3,ror#2
1241         add     r6,r6,r11
1242         vrev32.8        q2,q2
1243         eor     r10,r7,r4
1244         add     r5,r5,r9
1245         vadd.i32        q9,q1,q14
1246         ldr     r9,[sp,#36]
1247         eor     r11,r10,r3
1248         vst1.32 {q9},[r12,:128]!
1249         add     r5,r5,r6,ror#27
1250         mov     r7,r7,ror#2
1251         add     r5,r5,r11
1252         eor     r10,r6,r3
1253         add     r4,r4,r9
1254         ldr     r9,[sp,#40]
1255         eor     r11,r10,r7
1256         add     r4,r4,r5,ror#27
1257         mov     r6,r6,ror#2
1258         add     r4,r4,r11
1259         eor     r10,r5,r7
1260         add     r3,r3,r9
1261         ldr     r9,[sp,#44]
1262         eor     r11,r10,r6
1263         add     r3,r3,r4,ror#27
1264         mov     r5,r5,ror#2
1265         add     r3,r3,r11
1266         eor     r10,r4,r6
1267         add     r7,r7,r9
1268         ldr     r9,[sp,#48]
1269         eor     r11,r10,r5
1270         add     r7,r7,r3,ror#27
1271         mov     r4,r4,ror#2
1272         add     r7,r7,r11
1273         vrev32.8        q3,q3
1274         eor     r10,r3,r5
1275         add     r6,r6,r9
1276         vadd.i32        q10,q2,q14
1277         ldr     r9,[sp,#52]
1278         eor     r11,r10,r4
1279         vst1.32 {q10},[r12,:128]!
1280         add     r6,r6,r7,ror#27
1281         mov     r3,r3,ror#2
1282         add     r6,r6,r11
1283         eor     r10,r7,r4
1284         add     r5,r5,r9
1285         ldr     r9,[sp,#56]
1286         eor     r11,r10,r3
1287         add     r5,r5,r6,ror#27
1288         mov     r7,r7,ror#2
1289         add     r5,r5,r11
1290         eor     r10,r6,r3
1291         add     r4,r4,r9
1292         ldr     r9,[sp,#60]
1293         eor     r11,r10,r7
1294         add     r4,r4,r5,ror#27
1295         mov     r6,r6,ror#2
1296         add     r4,r4,r11
1297         eor     r10,r5,r7
1298         add     r3,r3,r9
1299         eor     r11,r10,r6
1300         add     r3,r3,r4,ror#27
1301         mov     r5,r5,ror#2
1302         add     r3,r3,r11
1303         ldmia   r0,{r9,r10,r11,r12}     @ accumulate context
1304         add     r3,r3,r9
1305         ldr     r9,[r0,#16]
1306         add     r4,r4,r10
1307         add     r5,r5,r11
1308         add     r6,r6,r12
1309         moveq   sp,r14
1310         add     r7,r7,r9
1311         ldrne   r9,[sp]
1312         stmia   r0,{r3,r4,r5,r6,r7}
1313         addne   r12,sp,#3*16
1314         bne     .Loop_neon
1316         @ vldmia        sp!,{d8-d15}
1317         ldmia   sp!,{r4-r12,pc}
1318 .size   sha1_block_data_order_neon,.-sha1_block_data_order_neon
1319 #endif
1320 #if __ARM_MAX_ARCH__>=7
1321 .type   sha1_block_data_order_armv8,%function
1322 .align  5
1323 sha1_block_data_order_armv8:
1324 .LARMv8:
1325         vstmdb  sp!,{d8-d15}            @ ABI specification says so
1327         veor    q1,q1,q1
1328         adr     r3,.LK_00_19
1329         vld1.32 {q0},[r0]!
1330         vld1.32 {d2[0]},[r0]
1331         sub     r0,r0,#16
1332         vld1.32 {d16[],d17[]},[r3,:32]!
1333         vld1.32 {d18[],d19[]},[r3,:32]!
1334         vld1.32 {d20[],d21[]},[r3,:32]!
1335         vld1.32 {d22[],d23[]},[r3,:32]
1337 .Loop_v8:
1338         vld1.8          {q4-q5},[r1]!
1339         vld1.8          {q6-q7},[r1]!
1340         vrev32.8        q4,q4
1341         vrev32.8        q5,q5
1343         vadd.i32        q12,q8,q4
1344         vrev32.8        q6,q6
1345         vmov            q14,q0  @ offload
1346         subs            r2,r2,#1
1348         vadd.i32        q13,q8,q5
1349         vrev32.8        q7,q7
1350         .inst   0xf3b962c0      @ sha1h q3,q0           @ 0
1351         .inst   0xf2020c68      @ sha1c q0,q1,q12
1352         vadd.i32        q12,q8,q6
1353         .inst   0xf23a8c4c      @ sha1su0 q4,q5,q6
1354         .inst   0xf3b942c0      @ sha1h q2,q0           @ 1
1355         .inst   0xf2060c6a      @ sha1c q0,q3,q13
1356         vadd.i32        q13,q8,q7
1357         .inst   0xf3ba838e      @ sha1su1 q4,q7
1358         .inst   0xf23cac4e      @ sha1su0 q5,q6,q7
1359         .inst   0xf3b962c0      @ sha1h q3,q0           @ 2
1360         .inst   0xf2040c68      @ sha1c q0,q2,q12
1361         vadd.i32        q12,q8,q4
1362         .inst   0xf3baa388      @ sha1su1 q5,q4
1363         .inst   0xf23ecc48      @ sha1su0 q6,q7,q4
1364         .inst   0xf3b942c0      @ sha1h q2,q0           @ 3
1365         .inst   0xf2060c6a      @ sha1c q0,q3,q13
1366         vadd.i32        q13,q9,q5
1367         .inst   0xf3bac38a      @ sha1su1 q6,q5
1368         .inst   0xf238ec4a      @ sha1su0 q7,q4,q5
1369         .inst   0xf3b962c0      @ sha1h q3,q0           @ 4
1370         .inst   0xf2040c68      @ sha1c q0,q2,q12
1371         vadd.i32        q12,q9,q6
1372         .inst   0xf3bae38c      @ sha1su1 q7,q6
1373         .inst   0xf23a8c4c      @ sha1su0 q4,q5,q6
1374         .inst   0xf3b942c0      @ sha1h q2,q0           @ 5
1375         .inst   0xf2160c6a      @ sha1p q0,q3,q13
1376         vadd.i32        q13,q9,q7
1377         .inst   0xf3ba838e      @ sha1su1 q4,q7
1378         .inst   0xf23cac4e      @ sha1su0 q5,q6,q7
1379         .inst   0xf3b962c0      @ sha1h q3,q0           @ 6
1380         .inst   0xf2140c68      @ sha1p q0,q2,q12
1381         vadd.i32        q12,q9,q4
1382         .inst   0xf3baa388      @ sha1su1 q5,q4
1383         .inst   0xf23ecc48      @ sha1su0 q6,q7,q4
1384         .inst   0xf3b942c0      @ sha1h q2,q0           @ 7
1385         .inst   0xf2160c6a      @ sha1p q0,q3,q13
1386         vadd.i32        q13,q9,q5
1387         .inst   0xf3bac38a      @ sha1su1 q6,q5
1388         .inst   0xf238ec4a      @ sha1su0 q7,q4,q5
1389         .inst   0xf3b962c0      @ sha1h q3,q0           @ 8
1390         .inst   0xf2140c68      @ sha1p q0,q2,q12
1391         vadd.i32        q12,q10,q6
1392         .inst   0xf3bae38c      @ sha1su1 q7,q6
1393         .inst   0xf23a8c4c      @ sha1su0 q4,q5,q6
1394         .inst   0xf3b942c0      @ sha1h q2,q0           @ 9
1395         .inst   0xf2160c6a      @ sha1p q0,q3,q13
1396         vadd.i32        q13,q10,q7
1397         .inst   0xf3ba838e      @ sha1su1 q4,q7
1398         .inst   0xf23cac4e      @ sha1su0 q5,q6,q7
1399         .inst   0xf3b962c0      @ sha1h q3,q0           @ 10
1400         .inst   0xf2240c68      @ sha1m q0,q2,q12
1401         vadd.i32        q12,q10,q4
1402         .inst   0xf3baa388      @ sha1su1 q5,q4
1403         .inst   0xf23ecc48      @ sha1su0 q6,q7,q4
1404         .inst   0xf3b942c0      @ sha1h q2,q0           @ 11
1405         .inst   0xf2260c6a      @ sha1m q0,q3,q13
1406         vadd.i32        q13,q10,q5
1407         .inst   0xf3bac38a      @ sha1su1 q6,q5
1408         .inst   0xf238ec4a      @ sha1su0 q7,q4,q5
1409         .inst   0xf3b962c0      @ sha1h q3,q0           @ 12
1410         .inst   0xf2240c68      @ sha1m q0,q2,q12
1411         vadd.i32        q12,q10,q6
1412         .inst   0xf3bae38c      @ sha1su1 q7,q6
1413         .inst   0xf23a8c4c      @ sha1su0 q4,q5,q6
1414         .inst   0xf3b942c0      @ sha1h q2,q0           @ 13
1415         .inst   0xf2260c6a      @ sha1m q0,q3,q13
1416         vadd.i32        q13,q11,q7
1417         .inst   0xf3ba838e      @ sha1su1 q4,q7
1418         .inst   0xf23cac4e      @ sha1su0 q5,q6,q7
1419         .inst   0xf3b962c0      @ sha1h q3,q0           @ 14
1420         .inst   0xf2240c68      @ sha1m q0,q2,q12
1421         vadd.i32        q12,q11,q4
1422         .inst   0xf3baa388      @ sha1su1 q5,q4
1423         .inst   0xf23ecc48      @ sha1su0 q6,q7,q4
1424         .inst   0xf3b942c0      @ sha1h q2,q0           @ 15
1425         .inst   0xf2160c6a      @ sha1p q0,q3,q13
1426         vadd.i32        q13,q11,q5
1427         .inst   0xf3bac38a      @ sha1su1 q6,q5
1428         .inst   0xf238ec4a      @ sha1su0 q7,q4,q5
1429         .inst   0xf3b962c0      @ sha1h q3,q0           @ 16
1430         .inst   0xf2140c68      @ sha1p q0,q2,q12
1431         vadd.i32        q12,q11,q6
1432         .inst   0xf3bae38c      @ sha1su1 q7,q6
1433         .inst   0xf3b942c0      @ sha1h q2,q0           @ 17
1434         .inst   0xf2160c6a      @ sha1p q0,q3,q13
1435         vadd.i32        q13,q11,q7
1437         .inst   0xf3b962c0      @ sha1h q3,q0           @ 18
1438         .inst   0xf2140c68      @ sha1p q0,q2,q12
1440         .inst   0xf3b942c0      @ sha1h q2,q0           @ 19
1441         .inst   0xf2160c6a      @ sha1p q0,q3,q13
1443         vadd.i32        q1,q1,q2
1444         vadd.i32        q0,q0,q14
1445         bne             .Loop_v8
1447         vst1.32         {q0},[r0]!
1448         vst1.32         {d2[0]},[r0]
1450         vldmia  sp!,{d8-d15}
1451         RET                                     @ bx lr
1452 .size   sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
1453 #endif
1454 #if __ARM_MAX_ARCH__>=7
1455 .comm   OPENSSL_armcap_P,4,4
1456 #endif