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