]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libcrypto/aarch64/sha512-armv8.S
Update the GNU DTS file from Linux 4.11
[FreeBSD/FreeBSD.git] / secure / lib / libcrypto / aarch64 / sha512-armv8.S
1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from sha512-armv8.pl. */
3 #include "arm_arch.h"
4
5 .text
6
7 .globl  sha512_block_data_order
8 .type   sha512_block_data_order,%function
9 .align  6
10 sha512_block_data_order:
11         stp     x29,x30,[sp,#-128]!
12         add     x29,sp,#0
13
14         stp     x19,x20,[sp,#16]
15         stp     x21,x22,[sp,#32]
16         stp     x23,x24,[sp,#48]
17         stp     x25,x26,[sp,#64]
18         stp     x27,x28,[sp,#80]
19         sub     sp,sp,#4*8
20
21         ldp     x20,x21,[x0]                            // load context
22         ldp     x22,x23,[x0,#2*8]
23         ldp     x24,x25,[x0,#4*8]
24         add     x2,x1,x2,lsl#7  // end of input
25         ldp     x26,x27,[x0,#6*8]
26         adr     x30,K512
27         stp     x0,x2,[x29,#96]
28
29 .Loop:
30         ldp     x3,x4,[x1],#2*8
31         ldr     x19,[x30],#8                    // *K++
32         eor     x28,x21,x22                             // magic seed
33         str     x1,[x29,#112]
34 #ifndef __ARMEB__
35         rev     x3,x3                   // 0
36 #endif
37         ror     x16,x24,#14
38         add     x27,x27,x19                     // h+=K[i]
39         eor     x6,x24,x24,ror#23
40         and     x17,x25,x24
41         bic     x19,x26,x24
42         add     x27,x27,x3                      // h+=X[i]
43         orr     x17,x17,x19                     // Ch(e,f,g)
44         eor     x19,x20,x21                     // a^b, b^c in next round
45         eor     x16,x16,x6,ror#18       // Sigma1(e)
46         ror     x6,x20,#28
47         add     x27,x27,x17                     // h+=Ch(e,f,g)
48         eor     x17,x20,x20,ror#5
49         add     x27,x27,x16                     // h+=Sigma1(e)
50         and     x28,x28,x19                     // (b^c)&=(a^b)
51         add     x23,x23,x27                     // d+=h
52         eor     x28,x28,x21                     // Maj(a,b,c)
53         eor     x17,x6,x17,ror#34       // Sigma0(a)
54         add     x27,x27,x28                     // h+=Maj(a,b,c)
55         ldr     x28,[x30],#8            // *K++, x19 in next round
56         //add   x27,x27,x17                     // h+=Sigma0(a)
57 #ifndef __ARMEB__
58         rev     x4,x4                   // 1
59 #endif
60         ldp     x5,x6,[x1],#2*8
61         add     x27,x27,x17                     // h+=Sigma0(a)
62         ror     x16,x23,#14
63         add     x26,x26,x28                     // h+=K[i]
64         eor     x7,x23,x23,ror#23
65         and     x17,x24,x23
66         bic     x28,x25,x23
67         add     x26,x26,x4                      // h+=X[i]
68         orr     x17,x17,x28                     // Ch(e,f,g)
69         eor     x28,x27,x20                     // a^b, b^c in next round
70         eor     x16,x16,x7,ror#18       // Sigma1(e)
71         ror     x7,x27,#28
72         add     x26,x26,x17                     // h+=Ch(e,f,g)
73         eor     x17,x27,x27,ror#5
74         add     x26,x26,x16                     // h+=Sigma1(e)
75         and     x19,x19,x28                     // (b^c)&=(a^b)
76         add     x22,x22,x26                     // d+=h
77         eor     x19,x19,x20                     // Maj(a,b,c)
78         eor     x17,x7,x17,ror#34       // Sigma0(a)
79         add     x26,x26,x19                     // h+=Maj(a,b,c)
80         ldr     x19,[x30],#8            // *K++, x28 in next round
81         //add   x26,x26,x17                     // h+=Sigma0(a)
82 #ifndef __ARMEB__
83         rev     x5,x5                   // 2
84 #endif
85         add     x26,x26,x17                     // h+=Sigma0(a)
86         ror     x16,x22,#14
87         add     x25,x25,x19                     // h+=K[i]
88         eor     x8,x22,x22,ror#23
89         and     x17,x23,x22
90         bic     x19,x24,x22
91         add     x25,x25,x5                      // h+=X[i]
92         orr     x17,x17,x19                     // Ch(e,f,g)
93         eor     x19,x26,x27                     // a^b, b^c in next round
94         eor     x16,x16,x8,ror#18       // Sigma1(e)
95         ror     x8,x26,#28
96         add     x25,x25,x17                     // h+=Ch(e,f,g)
97         eor     x17,x26,x26,ror#5
98         add     x25,x25,x16                     // h+=Sigma1(e)
99         and     x28,x28,x19                     // (b^c)&=(a^b)
100         add     x21,x21,x25                     // d+=h
101         eor     x28,x28,x27                     // Maj(a,b,c)
102         eor     x17,x8,x17,ror#34       // Sigma0(a)
103         add     x25,x25,x28                     // h+=Maj(a,b,c)
104         ldr     x28,[x30],#8            // *K++, x19 in next round
105         //add   x25,x25,x17                     // h+=Sigma0(a)
106 #ifndef __ARMEB__
107         rev     x6,x6                   // 3
108 #endif
109         ldp     x7,x8,[x1],#2*8
110         add     x25,x25,x17                     // h+=Sigma0(a)
111         ror     x16,x21,#14
112         add     x24,x24,x28                     // h+=K[i]
113         eor     x9,x21,x21,ror#23
114         and     x17,x22,x21
115         bic     x28,x23,x21
116         add     x24,x24,x6                      // h+=X[i]
117         orr     x17,x17,x28                     // Ch(e,f,g)
118         eor     x28,x25,x26                     // a^b, b^c in next round
119         eor     x16,x16,x9,ror#18       // Sigma1(e)
120         ror     x9,x25,#28
121         add     x24,x24,x17                     // h+=Ch(e,f,g)
122         eor     x17,x25,x25,ror#5
123         add     x24,x24,x16                     // h+=Sigma1(e)
124         and     x19,x19,x28                     // (b^c)&=(a^b)
125         add     x20,x20,x24                     // d+=h
126         eor     x19,x19,x26                     // Maj(a,b,c)
127         eor     x17,x9,x17,ror#34       // Sigma0(a)
128         add     x24,x24,x19                     // h+=Maj(a,b,c)
129         ldr     x19,[x30],#8            // *K++, x28 in next round
130         //add   x24,x24,x17                     // h+=Sigma0(a)
131 #ifndef __ARMEB__
132         rev     x7,x7                   // 4
133 #endif
134         add     x24,x24,x17                     // h+=Sigma0(a)
135         ror     x16,x20,#14
136         add     x23,x23,x19                     // h+=K[i]
137         eor     x10,x20,x20,ror#23
138         and     x17,x21,x20
139         bic     x19,x22,x20
140         add     x23,x23,x7                      // h+=X[i]
141         orr     x17,x17,x19                     // Ch(e,f,g)
142         eor     x19,x24,x25                     // a^b, b^c in next round
143         eor     x16,x16,x10,ror#18      // Sigma1(e)
144         ror     x10,x24,#28
145         add     x23,x23,x17                     // h+=Ch(e,f,g)
146         eor     x17,x24,x24,ror#5
147         add     x23,x23,x16                     // h+=Sigma1(e)
148         and     x28,x28,x19                     // (b^c)&=(a^b)
149         add     x27,x27,x23                     // d+=h
150         eor     x28,x28,x25                     // Maj(a,b,c)
151         eor     x17,x10,x17,ror#34      // Sigma0(a)
152         add     x23,x23,x28                     // h+=Maj(a,b,c)
153         ldr     x28,[x30],#8            // *K++, x19 in next round
154         //add   x23,x23,x17                     // h+=Sigma0(a)
155 #ifndef __ARMEB__
156         rev     x8,x8                   // 5
157 #endif
158         ldp     x9,x10,[x1],#2*8
159         add     x23,x23,x17                     // h+=Sigma0(a)
160         ror     x16,x27,#14
161         add     x22,x22,x28                     // h+=K[i]
162         eor     x11,x27,x27,ror#23
163         and     x17,x20,x27
164         bic     x28,x21,x27
165         add     x22,x22,x8                      // h+=X[i]
166         orr     x17,x17,x28                     // Ch(e,f,g)
167         eor     x28,x23,x24                     // a^b, b^c in next round
168         eor     x16,x16,x11,ror#18      // Sigma1(e)
169         ror     x11,x23,#28
170         add     x22,x22,x17                     // h+=Ch(e,f,g)
171         eor     x17,x23,x23,ror#5
172         add     x22,x22,x16                     // h+=Sigma1(e)
173         and     x19,x19,x28                     // (b^c)&=(a^b)
174         add     x26,x26,x22                     // d+=h
175         eor     x19,x19,x24                     // Maj(a,b,c)
176         eor     x17,x11,x17,ror#34      // Sigma0(a)
177         add     x22,x22,x19                     // h+=Maj(a,b,c)
178         ldr     x19,[x30],#8            // *K++, x28 in next round
179         //add   x22,x22,x17                     // h+=Sigma0(a)
180 #ifndef __ARMEB__
181         rev     x9,x9                   // 6
182 #endif
183         add     x22,x22,x17                     // h+=Sigma0(a)
184         ror     x16,x26,#14
185         add     x21,x21,x19                     // h+=K[i]
186         eor     x12,x26,x26,ror#23
187         and     x17,x27,x26
188         bic     x19,x20,x26
189         add     x21,x21,x9                      // h+=X[i]
190         orr     x17,x17,x19                     // Ch(e,f,g)
191         eor     x19,x22,x23                     // a^b, b^c in next round
192         eor     x16,x16,x12,ror#18      // Sigma1(e)
193         ror     x12,x22,#28
194         add     x21,x21,x17                     // h+=Ch(e,f,g)
195         eor     x17,x22,x22,ror#5
196         add     x21,x21,x16                     // h+=Sigma1(e)
197         and     x28,x28,x19                     // (b^c)&=(a^b)
198         add     x25,x25,x21                     // d+=h
199         eor     x28,x28,x23                     // Maj(a,b,c)
200         eor     x17,x12,x17,ror#34      // Sigma0(a)
201         add     x21,x21,x28                     // h+=Maj(a,b,c)
202         ldr     x28,[x30],#8            // *K++, x19 in next round
203         //add   x21,x21,x17                     // h+=Sigma0(a)
204 #ifndef __ARMEB__
205         rev     x10,x10                 // 7
206 #endif
207         ldp     x11,x12,[x1],#2*8
208         add     x21,x21,x17                     // h+=Sigma0(a)
209         ror     x16,x25,#14
210         add     x20,x20,x28                     // h+=K[i]
211         eor     x13,x25,x25,ror#23
212         and     x17,x26,x25
213         bic     x28,x27,x25
214         add     x20,x20,x10                     // h+=X[i]
215         orr     x17,x17,x28                     // Ch(e,f,g)
216         eor     x28,x21,x22                     // a^b, b^c in next round
217         eor     x16,x16,x13,ror#18      // Sigma1(e)
218         ror     x13,x21,#28
219         add     x20,x20,x17                     // h+=Ch(e,f,g)
220         eor     x17,x21,x21,ror#5
221         add     x20,x20,x16                     // h+=Sigma1(e)
222         and     x19,x19,x28                     // (b^c)&=(a^b)
223         add     x24,x24,x20                     // d+=h
224         eor     x19,x19,x22                     // Maj(a,b,c)
225         eor     x17,x13,x17,ror#34      // Sigma0(a)
226         add     x20,x20,x19                     // h+=Maj(a,b,c)
227         ldr     x19,[x30],#8            // *K++, x28 in next round
228         //add   x20,x20,x17                     // h+=Sigma0(a)
229 #ifndef __ARMEB__
230         rev     x11,x11                 // 8
231 #endif
232         add     x20,x20,x17                     // h+=Sigma0(a)
233         ror     x16,x24,#14
234         add     x27,x27,x19                     // h+=K[i]
235         eor     x14,x24,x24,ror#23
236         and     x17,x25,x24
237         bic     x19,x26,x24
238         add     x27,x27,x11                     // h+=X[i]
239         orr     x17,x17,x19                     // Ch(e,f,g)
240         eor     x19,x20,x21                     // a^b, b^c in next round
241         eor     x16,x16,x14,ror#18      // Sigma1(e)
242         ror     x14,x20,#28
243         add     x27,x27,x17                     // h+=Ch(e,f,g)
244         eor     x17,x20,x20,ror#5
245         add     x27,x27,x16                     // h+=Sigma1(e)
246         and     x28,x28,x19                     // (b^c)&=(a^b)
247         add     x23,x23,x27                     // d+=h
248         eor     x28,x28,x21                     // Maj(a,b,c)
249         eor     x17,x14,x17,ror#34      // Sigma0(a)
250         add     x27,x27,x28                     // h+=Maj(a,b,c)
251         ldr     x28,[x30],#8            // *K++, x19 in next round
252         //add   x27,x27,x17                     // h+=Sigma0(a)
253 #ifndef __ARMEB__
254         rev     x12,x12                 // 9
255 #endif
256         ldp     x13,x14,[x1],#2*8
257         add     x27,x27,x17                     // h+=Sigma0(a)
258         ror     x16,x23,#14
259         add     x26,x26,x28                     // h+=K[i]
260         eor     x15,x23,x23,ror#23
261         and     x17,x24,x23
262         bic     x28,x25,x23
263         add     x26,x26,x12                     // h+=X[i]
264         orr     x17,x17,x28                     // Ch(e,f,g)
265         eor     x28,x27,x20                     // a^b, b^c in next round
266         eor     x16,x16,x15,ror#18      // Sigma1(e)
267         ror     x15,x27,#28
268         add     x26,x26,x17                     // h+=Ch(e,f,g)
269         eor     x17,x27,x27,ror#5
270         add     x26,x26,x16                     // h+=Sigma1(e)
271         and     x19,x19,x28                     // (b^c)&=(a^b)
272         add     x22,x22,x26                     // d+=h
273         eor     x19,x19,x20                     // Maj(a,b,c)
274         eor     x17,x15,x17,ror#34      // Sigma0(a)
275         add     x26,x26,x19                     // h+=Maj(a,b,c)
276         ldr     x19,[x30],#8            // *K++, x28 in next round
277         //add   x26,x26,x17                     // h+=Sigma0(a)
278 #ifndef __ARMEB__
279         rev     x13,x13                 // 10
280 #endif
281         add     x26,x26,x17                     // h+=Sigma0(a)
282         ror     x16,x22,#14
283         add     x25,x25,x19                     // h+=K[i]
284         eor     x0,x22,x22,ror#23
285         and     x17,x23,x22
286         bic     x19,x24,x22
287         add     x25,x25,x13                     // h+=X[i]
288         orr     x17,x17,x19                     // Ch(e,f,g)
289         eor     x19,x26,x27                     // a^b, b^c in next round
290         eor     x16,x16,x0,ror#18       // Sigma1(e)
291         ror     x0,x26,#28
292         add     x25,x25,x17                     // h+=Ch(e,f,g)
293         eor     x17,x26,x26,ror#5
294         add     x25,x25,x16                     // h+=Sigma1(e)
295         and     x28,x28,x19                     // (b^c)&=(a^b)
296         add     x21,x21,x25                     // d+=h
297         eor     x28,x28,x27                     // Maj(a,b,c)
298         eor     x17,x0,x17,ror#34       // Sigma0(a)
299         add     x25,x25,x28                     // h+=Maj(a,b,c)
300         ldr     x28,[x30],#8            // *K++, x19 in next round
301         //add   x25,x25,x17                     // h+=Sigma0(a)
302 #ifndef __ARMEB__
303         rev     x14,x14                 // 11
304 #endif
305         ldp     x15,x0,[x1],#2*8
306         add     x25,x25,x17                     // h+=Sigma0(a)
307         str     x6,[sp,#24]
308         ror     x16,x21,#14
309         add     x24,x24,x28                     // h+=K[i]
310         eor     x6,x21,x21,ror#23
311         and     x17,x22,x21
312         bic     x28,x23,x21
313         add     x24,x24,x14                     // h+=X[i]
314         orr     x17,x17,x28                     // Ch(e,f,g)
315         eor     x28,x25,x26                     // a^b, b^c in next round
316         eor     x16,x16,x6,ror#18       // Sigma1(e)
317         ror     x6,x25,#28
318         add     x24,x24,x17                     // h+=Ch(e,f,g)
319         eor     x17,x25,x25,ror#5
320         add     x24,x24,x16                     // h+=Sigma1(e)
321         and     x19,x19,x28                     // (b^c)&=(a^b)
322         add     x20,x20,x24                     // d+=h
323         eor     x19,x19,x26                     // Maj(a,b,c)
324         eor     x17,x6,x17,ror#34       // Sigma0(a)
325         add     x24,x24,x19                     // h+=Maj(a,b,c)
326         ldr     x19,[x30],#8            // *K++, x28 in next round
327         //add   x24,x24,x17                     // h+=Sigma0(a)
328 #ifndef __ARMEB__
329         rev     x15,x15                 // 12
330 #endif
331         add     x24,x24,x17                     // h+=Sigma0(a)
332         str     x7,[sp,#0]
333         ror     x16,x20,#14
334         add     x23,x23,x19                     // h+=K[i]
335         eor     x7,x20,x20,ror#23
336         and     x17,x21,x20
337         bic     x19,x22,x20
338         add     x23,x23,x15                     // h+=X[i]
339         orr     x17,x17,x19                     // Ch(e,f,g)
340         eor     x19,x24,x25                     // a^b, b^c in next round
341         eor     x16,x16,x7,ror#18       // Sigma1(e)
342         ror     x7,x24,#28
343         add     x23,x23,x17                     // h+=Ch(e,f,g)
344         eor     x17,x24,x24,ror#5
345         add     x23,x23,x16                     // h+=Sigma1(e)
346         and     x28,x28,x19                     // (b^c)&=(a^b)
347         add     x27,x27,x23                     // d+=h
348         eor     x28,x28,x25                     // Maj(a,b,c)
349         eor     x17,x7,x17,ror#34       // Sigma0(a)
350         add     x23,x23,x28                     // h+=Maj(a,b,c)
351         ldr     x28,[x30],#8            // *K++, x19 in next round
352         //add   x23,x23,x17                     // h+=Sigma0(a)
353 #ifndef __ARMEB__
354         rev     x0,x0                   // 13
355 #endif
356         ldp     x1,x2,[x1]
357         add     x23,x23,x17                     // h+=Sigma0(a)
358         str     x8,[sp,#8]
359         ror     x16,x27,#14
360         add     x22,x22,x28                     // h+=K[i]
361         eor     x8,x27,x27,ror#23
362         and     x17,x20,x27
363         bic     x28,x21,x27
364         add     x22,x22,x0                      // h+=X[i]
365         orr     x17,x17,x28                     // Ch(e,f,g)
366         eor     x28,x23,x24                     // a^b, b^c in next round
367         eor     x16,x16,x8,ror#18       // Sigma1(e)
368         ror     x8,x23,#28
369         add     x22,x22,x17                     // h+=Ch(e,f,g)
370         eor     x17,x23,x23,ror#5
371         add     x22,x22,x16                     // h+=Sigma1(e)
372         and     x19,x19,x28                     // (b^c)&=(a^b)
373         add     x26,x26,x22                     // d+=h
374         eor     x19,x19,x24                     // Maj(a,b,c)
375         eor     x17,x8,x17,ror#34       // Sigma0(a)
376         add     x22,x22,x19                     // h+=Maj(a,b,c)
377         ldr     x19,[x30],#8            // *K++, x28 in next round
378         //add   x22,x22,x17                     // h+=Sigma0(a)
379 #ifndef __ARMEB__
380         rev     x1,x1                   // 14
381 #endif
382         ldr     x6,[sp,#24]
383         add     x22,x22,x17                     // h+=Sigma0(a)
384         str     x9,[sp,#16]
385         ror     x16,x26,#14
386         add     x21,x21,x19                     // h+=K[i]
387         eor     x9,x26,x26,ror#23
388         and     x17,x27,x26
389         bic     x19,x20,x26
390         add     x21,x21,x1                      // h+=X[i]
391         orr     x17,x17,x19                     // Ch(e,f,g)
392         eor     x19,x22,x23                     // a^b, b^c in next round
393         eor     x16,x16,x9,ror#18       // Sigma1(e)
394         ror     x9,x22,#28
395         add     x21,x21,x17                     // h+=Ch(e,f,g)
396         eor     x17,x22,x22,ror#5
397         add     x21,x21,x16                     // h+=Sigma1(e)
398         and     x28,x28,x19                     // (b^c)&=(a^b)
399         add     x25,x25,x21                     // d+=h
400         eor     x28,x28,x23                     // Maj(a,b,c)
401         eor     x17,x9,x17,ror#34       // Sigma0(a)
402         add     x21,x21,x28                     // h+=Maj(a,b,c)
403         ldr     x28,[x30],#8            // *K++, x19 in next round
404         //add   x21,x21,x17                     // h+=Sigma0(a)
405 #ifndef __ARMEB__
406         rev     x2,x2                   // 15
407 #endif
408         ldr     x7,[sp,#0]
409         add     x21,x21,x17                     // h+=Sigma0(a)
410         str     x10,[sp,#24]
411         ror     x16,x25,#14
412         add     x20,x20,x28                     // h+=K[i]
413         ror     x9,x4,#1
414         and     x17,x26,x25
415         ror     x8,x1,#19
416         bic     x28,x27,x25
417         ror     x10,x21,#28
418         add     x20,x20,x2                      // h+=X[i]
419         eor     x16,x16,x25,ror#18
420         eor     x9,x9,x4,ror#8
421         orr     x17,x17,x28                     // Ch(e,f,g)
422         eor     x28,x21,x22                     // a^b, b^c in next round
423         eor     x16,x16,x25,ror#41      // Sigma1(e)
424         eor     x10,x10,x21,ror#34
425         add     x20,x20,x17                     // h+=Ch(e,f,g)
426         and     x19,x19,x28                     // (b^c)&=(a^b)
427         eor     x8,x8,x1,ror#61
428         eor     x9,x9,x4,lsr#7  // sigma0(X[i+1])
429         add     x20,x20,x16                     // h+=Sigma1(e)
430         eor     x19,x19,x22                     // Maj(a,b,c)
431         eor     x17,x10,x21,ror#39      // Sigma0(a)
432         eor     x8,x8,x1,lsr#6  // sigma1(X[i+14])
433         add     x3,x3,x12
434         add     x24,x24,x20                     // d+=h
435         add     x20,x20,x19                     // h+=Maj(a,b,c)
436         ldr     x19,[x30],#8            // *K++, x28 in next round
437         add     x3,x3,x9
438         add     x20,x20,x17                     // h+=Sigma0(a)
439         add     x3,x3,x8
440 .Loop_16_xx:
441         ldr     x8,[sp,#8]
442         str     x11,[sp,#0]
443         ror     x16,x24,#14
444         add     x27,x27,x19                     // h+=K[i]
445         ror     x10,x5,#1
446         and     x17,x25,x24
447         ror     x9,x2,#19
448         bic     x19,x26,x24
449         ror     x11,x20,#28
450         add     x27,x27,x3                      // h+=X[i]
451         eor     x16,x16,x24,ror#18
452         eor     x10,x10,x5,ror#8
453         orr     x17,x17,x19                     // Ch(e,f,g)
454         eor     x19,x20,x21                     // a^b, b^c in next round
455         eor     x16,x16,x24,ror#41      // Sigma1(e)
456         eor     x11,x11,x20,ror#34
457         add     x27,x27,x17                     // h+=Ch(e,f,g)
458         and     x28,x28,x19                     // (b^c)&=(a^b)
459         eor     x9,x9,x2,ror#61
460         eor     x10,x10,x5,lsr#7        // sigma0(X[i+1])
461         add     x27,x27,x16                     // h+=Sigma1(e)
462         eor     x28,x28,x21                     // Maj(a,b,c)
463         eor     x17,x11,x20,ror#39      // Sigma0(a)
464         eor     x9,x9,x2,lsr#6  // sigma1(X[i+14])
465         add     x4,x4,x13
466         add     x23,x23,x27                     // d+=h
467         add     x27,x27,x28                     // h+=Maj(a,b,c)
468         ldr     x28,[x30],#8            // *K++, x19 in next round
469         add     x4,x4,x10
470         add     x27,x27,x17                     // h+=Sigma0(a)
471         add     x4,x4,x9
472         ldr     x9,[sp,#16]
473         str     x12,[sp,#8]
474         ror     x16,x23,#14
475         add     x26,x26,x28                     // h+=K[i]
476         ror     x11,x6,#1
477         and     x17,x24,x23
478         ror     x10,x3,#19
479         bic     x28,x25,x23
480         ror     x12,x27,#28
481         add     x26,x26,x4                      // h+=X[i]
482         eor     x16,x16,x23,ror#18
483         eor     x11,x11,x6,ror#8
484         orr     x17,x17,x28                     // Ch(e,f,g)
485         eor     x28,x27,x20                     // a^b, b^c in next round
486         eor     x16,x16,x23,ror#41      // Sigma1(e)
487         eor     x12,x12,x27,ror#34
488         add     x26,x26,x17                     // h+=Ch(e,f,g)
489         and     x19,x19,x28                     // (b^c)&=(a^b)
490         eor     x10,x10,x3,ror#61
491         eor     x11,x11,x6,lsr#7        // sigma0(X[i+1])
492         add     x26,x26,x16                     // h+=Sigma1(e)
493         eor     x19,x19,x20                     // Maj(a,b,c)
494         eor     x17,x12,x27,ror#39      // Sigma0(a)
495         eor     x10,x10,x3,lsr#6        // sigma1(X[i+14])
496         add     x5,x5,x14
497         add     x22,x22,x26                     // d+=h
498         add     x26,x26,x19                     // h+=Maj(a,b,c)
499         ldr     x19,[x30],#8            // *K++, x28 in next round
500         add     x5,x5,x11
501         add     x26,x26,x17                     // h+=Sigma0(a)
502         add     x5,x5,x10
503         ldr     x10,[sp,#24]
504         str     x13,[sp,#16]
505         ror     x16,x22,#14
506         add     x25,x25,x19                     // h+=K[i]
507         ror     x12,x7,#1
508         and     x17,x23,x22
509         ror     x11,x4,#19
510         bic     x19,x24,x22
511         ror     x13,x26,#28
512         add     x25,x25,x5                      // h+=X[i]
513         eor     x16,x16,x22,ror#18
514         eor     x12,x12,x7,ror#8
515         orr     x17,x17,x19                     // Ch(e,f,g)
516         eor     x19,x26,x27                     // a^b, b^c in next round
517         eor     x16,x16,x22,ror#41      // Sigma1(e)
518         eor     x13,x13,x26,ror#34
519         add     x25,x25,x17                     // h+=Ch(e,f,g)
520         and     x28,x28,x19                     // (b^c)&=(a^b)
521         eor     x11,x11,x4,ror#61
522         eor     x12,x12,x7,lsr#7        // sigma0(X[i+1])
523         add     x25,x25,x16                     // h+=Sigma1(e)
524         eor     x28,x28,x27                     // Maj(a,b,c)
525         eor     x17,x13,x26,ror#39      // Sigma0(a)
526         eor     x11,x11,x4,lsr#6        // sigma1(X[i+14])
527         add     x6,x6,x15
528         add     x21,x21,x25                     // d+=h
529         add     x25,x25,x28                     // h+=Maj(a,b,c)
530         ldr     x28,[x30],#8            // *K++, x19 in next round
531         add     x6,x6,x12
532         add     x25,x25,x17                     // h+=Sigma0(a)
533         add     x6,x6,x11
534         ldr     x11,[sp,#0]
535         str     x14,[sp,#24]
536         ror     x16,x21,#14
537         add     x24,x24,x28                     // h+=K[i]
538         ror     x13,x8,#1
539         and     x17,x22,x21
540         ror     x12,x5,#19
541         bic     x28,x23,x21
542         ror     x14,x25,#28
543         add     x24,x24,x6                      // h+=X[i]
544         eor     x16,x16,x21,ror#18
545         eor     x13,x13,x8,ror#8
546         orr     x17,x17,x28                     // Ch(e,f,g)
547         eor     x28,x25,x26                     // a^b, b^c in next round
548         eor     x16,x16,x21,ror#41      // Sigma1(e)
549         eor     x14,x14,x25,ror#34
550         add     x24,x24,x17                     // h+=Ch(e,f,g)
551         and     x19,x19,x28                     // (b^c)&=(a^b)
552         eor     x12,x12,x5,ror#61
553         eor     x13,x13,x8,lsr#7        // sigma0(X[i+1])
554         add     x24,x24,x16                     // h+=Sigma1(e)
555         eor     x19,x19,x26                     // Maj(a,b,c)
556         eor     x17,x14,x25,ror#39      // Sigma0(a)
557         eor     x12,x12,x5,lsr#6        // sigma1(X[i+14])
558         add     x7,x7,x0
559         add     x20,x20,x24                     // d+=h
560         add     x24,x24,x19                     // h+=Maj(a,b,c)
561         ldr     x19,[x30],#8            // *K++, x28 in next round
562         add     x7,x7,x13
563         add     x24,x24,x17                     // h+=Sigma0(a)
564         add     x7,x7,x12
565         ldr     x12,[sp,#8]
566         str     x15,[sp,#0]
567         ror     x16,x20,#14
568         add     x23,x23,x19                     // h+=K[i]
569         ror     x14,x9,#1
570         and     x17,x21,x20
571         ror     x13,x6,#19
572         bic     x19,x22,x20
573         ror     x15,x24,#28
574         add     x23,x23,x7                      // h+=X[i]
575         eor     x16,x16,x20,ror#18
576         eor     x14,x14,x9,ror#8
577         orr     x17,x17,x19                     // Ch(e,f,g)
578         eor     x19,x24,x25                     // a^b, b^c in next round
579         eor     x16,x16,x20,ror#41      // Sigma1(e)
580         eor     x15,x15,x24,ror#34
581         add     x23,x23,x17                     // h+=Ch(e,f,g)
582         and     x28,x28,x19                     // (b^c)&=(a^b)
583         eor     x13,x13,x6,ror#61
584         eor     x14,x14,x9,lsr#7        // sigma0(X[i+1])
585         add     x23,x23,x16                     // h+=Sigma1(e)
586         eor     x28,x28,x25                     // Maj(a,b,c)
587         eor     x17,x15,x24,ror#39      // Sigma0(a)
588         eor     x13,x13,x6,lsr#6        // sigma1(X[i+14])
589         add     x8,x8,x1
590         add     x27,x27,x23                     // d+=h
591         add     x23,x23,x28                     // h+=Maj(a,b,c)
592         ldr     x28,[x30],#8            // *K++, x19 in next round
593         add     x8,x8,x14
594         add     x23,x23,x17                     // h+=Sigma0(a)
595         add     x8,x8,x13
596         ldr     x13,[sp,#16]
597         str     x0,[sp,#8]
598         ror     x16,x27,#14
599         add     x22,x22,x28                     // h+=K[i]
600         ror     x15,x10,#1
601         and     x17,x20,x27
602         ror     x14,x7,#19
603         bic     x28,x21,x27
604         ror     x0,x23,#28
605         add     x22,x22,x8                      // h+=X[i]
606         eor     x16,x16,x27,ror#18
607         eor     x15,x15,x10,ror#8
608         orr     x17,x17,x28                     // Ch(e,f,g)
609         eor     x28,x23,x24                     // a^b, b^c in next round
610         eor     x16,x16,x27,ror#41      // Sigma1(e)
611         eor     x0,x0,x23,ror#34
612         add     x22,x22,x17                     // h+=Ch(e,f,g)
613         and     x19,x19,x28                     // (b^c)&=(a^b)
614         eor     x14,x14,x7,ror#61
615         eor     x15,x15,x10,lsr#7       // sigma0(X[i+1])
616         add     x22,x22,x16                     // h+=Sigma1(e)
617         eor     x19,x19,x24                     // Maj(a,b,c)
618         eor     x17,x0,x23,ror#39       // Sigma0(a)
619         eor     x14,x14,x7,lsr#6        // sigma1(X[i+14])
620         add     x9,x9,x2
621         add     x26,x26,x22                     // d+=h
622         add     x22,x22,x19                     // h+=Maj(a,b,c)
623         ldr     x19,[x30],#8            // *K++, x28 in next round
624         add     x9,x9,x15
625         add     x22,x22,x17                     // h+=Sigma0(a)
626         add     x9,x9,x14
627         ldr     x14,[sp,#24]
628         str     x1,[sp,#16]
629         ror     x16,x26,#14
630         add     x21,x21,x19                     // h+=K[i]
631         ror     x0,x11,#1
632         and     x17,x27,x26
633         ror     x15,x8,#19
634         bic     x19,x20,x26
635         ror     x1,x22,#28
636         add     x21,x21,x9                      // h+=X[i]
637         eor     x16,x16,x26,ror#18
638         eor     x0,x0,x11,ror#8
639         orr     x17,x17,x19                     // Ch(e,f,g)
640         eor     x19,x22,x23                     // a^b, b^c in next round
641         eor     x16,x16,x26,ror#41      // Sigma1(e)
642         eor     x1,x1,x22,ror#34
643         add     x21,x21,x17                     // h+=Ch(e,f,g)
644         and     x28,x28,x19                     // (b^c)&=(a^b)
645         eor     x15,x15,x8,ror#61
646         eor     x0,x0,x11,lsr#7 // sigma0(X[i+1])
647         add     x21,x21,x16                     // h+=Sigma1(e)
648         eor     x28,x28,x23                     // Maj(a,b,c)
649         eor     x17,x1,x22,ror#39       // Sigma0(a)
650         eor     x15,x15,x8,lsr#6        // sigma1(X[i+14])
651         add     x10,x10,x3
652         add     x25,x25,x21                     // d+=h
653         add     x21,x21,x28                     // h+=Maj(a,b,c)
654         ldr     x28,[x30],#8            // *K++, x19 in next round
655         add     x10,x10,x0
656         add     x21,x21,x17                     // h+=Sigma0(a)
657         add     x10,x10,x15
658         ldr     x15,[sp,#0]
659         str     x2,[sp,#24]
660         ror     x16,x25,#14
661         add     x20,x20,x28                     // h+=K[i]
662         ror     x1,x12,#1
663         and     x17,x26,x25
664         ror     x0,x9,#19
665         bic     x28,x27,x25
666         ror     x2,x21,#28
667         add     x20,x20,x10                     // h+=X[i]
668         eor     x16,x16,x25,ror#18
669         eor     x1,x1,x12,ror#8
670         orr     x17,x17,x28                     // Ch(e,f,g)
671         eor     x28,x21,x22                     // a^b, b^c in next round
672         eor     x16,x16,x25,ror#41      // Sigma1(e)
673         eor     x2,x2,x21,ror#34
674         add     x20,x20,x17                     // h+=Ch(e,f,g)
675         and     x19,x19,x28                     // (b^c)&=(a^b)
676         eor     x0,x0,x9,ror#61
677         eor     x1,x1,x12,lsr#7 // sigma0(X[i+1])
678         add     x20,x20,x16                     // h+=Sigma1(e)
679         eor     x19,x19,x22                     // Maj(a,b,c)
680         eor     x17,x2,x21,ror#39       // Sigma0(a)
681         eor     x0,x0,x9,lsr#6  // sigma1(X[i+14])
682         add     x11,x11,x4
683         add     x24,x24,x20                     // d+=h
684         add     x20,x20,x19                     // h+=Maj(a,b,c)
685         ldr     x19,[x30],#8            // *K++, x28 in next round
686         add     x11,x11,x1
687         add     x20,x20,x17                     // h+=Sigma0(a)
688         add     x11,x11,x0
689         ldr     x0,[sp,#8]
690         str     x3,[sp,#0]
691         ror     x16,x24,#14
692         add     x27,x27,x19                     // h+=K[i]
693         ror     x2,x13,#1
694         and     x17,x25,x24
695         ror     x1,x10,#19
696         bic     x19,x26,x24
697         ror     x3,x20,#28
698         add     x27,x27,x11                     // h+=X[i]
699         eor     x16,x16,x24,ror#18
700         eor     x2,x2,x13,ror#8
701         orr     x17,x17,x19                     // Ch(e,f,g)
702         eor     x19,x20,x21                     // a^b, b^c in next round
703         eor     x16,x16,x24,ror#41      // Sigma1(e)
704         eor     x3,x3,x20,ror#34
705         add     x27,x27,x17                     // h+=Ch(e,f,g)
706         and     x28,x28,x19                     // (b^c)&=(a^b)
707         eor     x1,x1,x10,ror#61
708         eor     x2,x2,x13,lsr#7 // sigma0(X[i+1])
709         add     x27,x27,x16                     // h+=Sigma1(e)
710         eor     x28,x28,x21                     // Maj(a,b,c)
711         eor     x17,x3,x20,ror#39       // Sigma0(a)
712         eor     x1,x1,x10,lsr#6 // sigma1(X[i+14])
713         add     x12,x12,x5
714         add     x23,x23,x27                     // d+=h
715         add     x27,x27,x28                     // h+=Maj(a,b,c)
716         ldr     x28,[x30],#8            // *K++, x19 in next round
717         add     x12,x12,x2
718         add     x27,x27,x17                     // h+=Sigma0(a)
719         add     x12,x12,x1
720         ldr     x1,[sp,#16]
721         str     x4,[sp,#8]
722         ror     x16,x23,#14
723         add     x26,x26,x28                     // h+=K[i]
724         ror     x3,x14,#1
725         and     x17,x24,x23
726         ror     x2,x11,#19
727         bic     x28,x25,x23
728         ror     x4,x27,#28
729         add     x26,x26,x12                     // h+=X[i]
730         eor     x16,x16,x23,ror#18
731         eor     x3,x3,x14,ror#8
732         orr     x17,x17,x28                     // Ch(e,f,g)
733         eor     x28,x27,x20                     // a^b, b^c in next round
734         eor     x16,x16,x23,ror#41      // Sigma1(e)
735         eor     x4,x4,x27,ror#34
736         add     x26,x26,x17                     // h+=Ch(e,f,g)
737         and     x19,x19,x28                     // (b^c)&=(a^b)
738         eor     x2,x2,x11,ror#61
739         eor     x3,x3,x14,lsr#7 // sigma0(X[i+1])
740         add     x26,x26,x16                     // h+=Sigma1(e)
741         eor     x19,x19,x20                     // Maj(a,b,c)
742         eor     x17,x4,x27,ror#39       // Sigma0(a)
743         eor     x2,x2,x11,lsr#6 // sigma1(X[i+14])
744         add     x13,x13,x6
745         add     x22,x22,x26                     // d+=h
746         add     x26,x26,x19                     // h+=Maj(a,b,c)
747         ldr     x19,[x30],#8            // *K++, x28 in next round
748         add     x13,x13,x3
749         add     x26,x26,x17                     // h+=Sigma0(a)
750         add     x13,x13,x2
751         ldr     x2,[sp,#24]
752         str     x5,[sp,#16]
753         ror     x16,x22,#14
754         add     x25,x25,x19                     // h+=K[i]
755         ror     x4,x15,#1
756         and     x17,x23,x22
757         ror     x3,x12,#19
758         bic     x19,x24,x22
759         ror     x5,x26,#28
760         add     x25,x25,x13                     // h+=X[i]
761         eor     x16,x16,x22,ror#18
762         eor     x4,x4,x15,ror#8
763         orr     x17,x17,x19                     // Ch(e,f,g)
764         eor     x19,x26,x27                     // a^b, b^c in next round
765         eor     x16,x16,x22,ror#41      // Sigma1(e)
766         eor     x5,x5,x26,ror#34
767         add     x25,x25,x17                     // h+=Ch(e,f,g)
768         and     x28,x28,x19                     // (b^c)&=(a^b)
769         eor     x3,x3,x12,ror#61
770         eor     x4,x4,x15,lsr#7 // sigma0(X[i+1])
771         add     x25,x25,x16                     // h+=Sigma1(e)
772         eor     x28,x28,x27                     // Maj(a,b,c)
773         eor     x17,x5,x26,ror#39       // Sigma0(a)
774         eor     x3,x3,x12,lsr#6 // sigma1(X[i+14])
775         add     x14,x14,x7
776         add     x21,x21,x25                     // d+=h
777         add     x25,x25,x28                     // h+=Maj(a,b,c)
778         ldr     x28,[x30],#8            // *K++, x19 in next round
779         add     x14,x14,x4
780         add     x25,x25,x17                     // h+=Sigma0(a)
781         add     x14,x14,x3
782         ldr     x3,[sp,#0]
783         str     x6,[sp,#24]
784         ror     x16,x21,#14
785         add     x24,x24,x28                     // h+=K[i]
786         ror     x5,x0,#1
787         and     x17,x22,x21
788         ror     x4,x13,#19
789         bic     x28,x23,x21
790         ror     x6,x25,#28
791         add     x24,x24,x14                     // h+=X[i]
792         eor     x16,x16,x21,ror#18
793         eor     x5,x5,x0,ror#8
794         orr     x17,x17,x28                     // Ch(e,f,g)
795         eor     x28,x25,x26                     // a^b, b^c in next round
796         eor     x16,x16,x21,ror#41      // Sigma1(e)
797         eor     x6,x6,x25,ror#34
798         add     x24,x24,x17                     // h+=Ch(e,f,g)
799         and     x19,x19,x28                     // (b^c)&=(a^b)
800         eor     x4,x4,x13,ror#61
801         eor     x5,x5,x0,lsr#7  // sigma0(X[i+1])
802         add     x24,x24,x16                     // h+=Sigma1(e)
803         eor     x19,x19,x26                     // Maj(a,b,c)
804         eor     x17,x6,x25,ror#39       // Sigma0(a)
805         eor     x4,x4,x13,lsr#6 // sigma1(X[i+14])
806         add     x15,x15,x8
807         add     x20,x20,x24                     // d+=h
808         add     x24,x24,x19                     // h+=Maj(a,b,c)
809         ldr     x19,[x30],#8            // *K++, x28 in next round
810         add     x15,x15,x5
811         add     x24,x24,x17                     // h+=Sigma0(a)
812         add     x15,x15,x4
813         ldr     x4,[sp,#8]
814         str     x7,[sp,#0]
815         ror     x16,x20,#14
816         add     x23,x23,x19                     // h+=K[i]
817         ror     x6,x1,#1
818         and     x17,x21,x20
819         ror     x5,x14,#19
820         bic     x19,x22,x20
821         ror     x7,x24,#28
822         add     x23,x23,x15                     // h+=X[i]
823         eor     x16,x16,x20,ror#18
824         eor     x6,x6,x1,ror#8
825         orr     x17,x17,x19                     // Ch(e,f,g)
826         eor     x19,x24,x25                     // a^b, b^c in next round
827         eor     x16,x16,x20,ror#41      // Sigma1(e)
828         eor     x7,x7,x24,ror#34
829         add     x23,x23,x17                     // h+=Ch(e,f,g)
830         and     x28,x28,x19                     // (b^c)&=(a^b)
831         eor     x5,x5,x14,ror#61
832         eor     x6,x6,x1,lsr#7  // sigma0(X[i+1])
833         add     x23,x23,x16                     // h+=Sigma1(e)
834         eor     x28,x28,x25                     // Maj(a,b,c)
835         eor     x17,x7,x24,ror#39       // Sigma0(a)
836         eor     x5,x5,x14,lsr#6 // sigma1(X[i+14])
837         add     x0,x0,x9
838         add     x27,x27,x23                     // d+=h
839         add     x23,x23,x28                     // h+=Maj(a,b,c)
840         ldr     x28,[x30],#8            // *K++, x19 in next round
841         add     x0,x0,x6
842         add     x23,x23,x17                     // h+=Sigma0(a)
843         add     x0,x0,x5
844         ldr     x5,[sp,#16]
845         str     x8,[sp,#8]
846         ror     x16,x27,#14
847         add     x22,x22,x28                     // h+=K[i]
848         ror     x7,x2,#1
849         and     x17,x20,x27
850         ror     x6,x15,#19
851         bic     x28,x21,x27
852         ror     x8,x23,#28
853         add     x22,x22,x0                      // h+=X[i]
854         eor     x16,x16,x27,ror#18
855         eor     x7,x7,x2,ror#8
856         orr     x17,x17,x28                     // Ch(e,f,g)
857         eor     x28,x23,x24                     // a^b, b^c in next round
858         eor     x16,x16,x27,ror#41      // Sigma1(e)
859         eor     x8,x8,x23,ror#34
860         add     x22,x22,x17                     // h+=Ch(e,f,g)
861         and     x19,x19,x28                     // (b^c)&=(a^b)
862         eor     x6,x6,x15,ror#61
863         eor     x7,x7,x2,lsr#7  // sigma0(X[i+1])
864         add     x22,x22,x16                     // h+=Sigma1(e)
865         eor     x19,x19,x24                     // Maj(a,b,c)
866         eor     x17,x8,x23,ror#39       // Sigma0(a)
867         eor     x6,x6,x15,lsr#6 // sigma1(X[i+14])
868         add     x1,x1,x10
869         add     x26,x26,x22                     // d+=h
870         add     x22,x22,x19                     // h+=Maj(a,b,c)
871         ldr     x19,[x30],#8            // *K++, x28 in next round
872         add     x1,x1,x7
873         add     x22,x22,x17                     // h+=Sigma0(a)
874         add     x1,x1,x6
875         ldr     x6,[sp,#24]
876         str     x9,[sp,#16]
877         ror     x16,x26,#14
878         add     x21,x21,x19                     // h+=K[i]
879         ror     x8,x3,#1
880         and     x17,x27,x26
881         ror     x7,x0,#19
882         bic     x19,x20,x26
883         ror     x9,x22,#28
884         add     x21,x21,x1                      // h+=X[i]
885         eor     x16,x16,x26,ror#18
886         eor     x8,x8,x3,ror#8
887         orr     x17,x17,x19                     // Ch(e,f,g)
888         eor     x19,x22,x23                     // a^b, b^c in next round
889         eor     x16,x16,x26,ror#41      // Sigma1(e)
890         eor     x9,x9,x22,ror#34
891         add     x21,x21,x17                     // h+=Ch(e,f,g)
892         and     x28,x28,x19                     // (b^c)&=(a^b)
893         eor     x7,x7,x0,ror#61
894         eor     x8,x8,x3,lsr#7  // sigma0(X[i+1])
895         add     x21,x21,x16                     // h+=Sigma1(e)
896         eor     x28,x28,x23                     // Maj(a,b,c)
897         eor     x17,x9,x22,ror#39       // Sigma0(a)
898         eor     x7,x7,x0,lsr#6  // sigma1(X[i+14])
899         add     x2,x2,x11
900         add     x25,x25,x21                     // d+=h
901         add     x21,x21,x28                     // h+=Maj(a,b,c)
902         ldr     x28,[x30],#8            // *K++, x19 in next round
903         add     x2,x2,x8
904         add     x21,x21,x17                     // h+=Sigma0(a)
905         add     x2,x2,x7
906         ldr     x7,[sp,#0]
907         str     x10,[sp,#24]
908         ror     x16,x25,#14
909         add     x20,x20,x28                     // h+=K[i]
910         ror     x9,x4,#1
911         and     x17,x26,x25
912         ror     x8,x1,#19
913         bic     x28,x27,x25
914         ror     x10,x21,#28
915         add     x20,x20,x2                      // h+=X[i]
916         eor     x16,x16,x25,ror#18
917         eor     x9,x9,x4,ror#8
918         orr     x17,x17,x28                     // Ch(e,f,g)
919         eor     x28,x21,x22                     // a^b, b^c in next round
920         eor     x16,x16,x25,ror#41      // Sigma1(e)
921         eor     x10,x10,x21,ror#34
922         add     x20,x20,x17                     // h+=Ch(e,f,g)
923         and     x19,x19,x28                     // (b^c)&=(a^b)
924         eor     x8,x8,x1,ror#61
925         eor     x9,x9,x4,lsr#7  // sigma0(X[i+1])
926         add     x20,x20,x16                     // h+=Sigma1(e)
927         eor     x19,x19,x22                     // Maj(a,b,c)
928         eor     x17,x10,x21,ror#39      // Sigma0(a)
929         eor     x8,x8,x1,lsr#6  // sigma1(X[i+14])
930         add     x3,x3,x12
931         add     x24,x24,x20                     // d+=h
932         add     x20,x20,x19                     // h+=Maj(a,b,c)
933         ldr     x19,[x30],#8            // *K++, x28 in next round
934         add     x3,x3,x9
935         add     x20,x20,x17                     // h+=Sigma0(a)
936         add     x3,x3,x8
937         cbnz    x19,.Loop_16_xx
938
939         ldp     x0,x2,[x29,#96]
940         ldr     x1,[x29,#112]
941         sub     x30,x30,#648            // rewind
942
943         ldp     x3,x4,[x0]
944         ldp     x5,x6,[x0,#2*8]
945         add     x1,x1,#14*8                     // advance input pointer
946         ldp     x7,x8,[x0,#4*8]
947         add     x20,x20,x3
948         ldp     x9,x10,[x0,#6*8]
949         add     x21,x21,x4
950         add     x22,x22,x5
951         add     x23,x23,x6
952         stp     x20,x21,[x0]
953         add     x24,x24,x7
954         add     x25,x25,x8
955         stp     x22,x23,[x0,#2*8]
956         add     x26,x26,x9
957         add     x27,x27,x10
958         cmp     x1,x2
959         stp     x24,x25,[x0,#4*8]
960         stp     x26,x27,[x0,#6*8]
961         b.ne    .Loop
962
963         ldp     x19,x20,[x29,#16]
964         add     sp,sp,#4*8
965         ldp     x21,x22,[x29,#32]
966         ldp     x23,x24,[x29,#48]
967         ldp     x25,x26,[x29,#64]
968         ldp     x27,x28,[x29,#80]
969         ldp     x29,x30,[sp],#128
970         ret
971 .size   sha512_block_data_order,.-sha512_block_data_order
972
973 .align  6
974 .type   K512,%object
975 K512:
976         .quad   0x428a2f98d728ae22,0x7137449123ef65cd
977         .quad   0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
978         .quad   0x3956c25bf348b538,0x59f111f1b605d019
979         .quad   0x923f82a4af194f9b,0xab1c5ed5da6d8118
980         .quad   0xd807aa98a3030242,0x12835b0145706fbe
981         .quad   0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
982         .quad   0x72be5d74f27b896f,0x80deb1fe3b1696b1
983         .quad   0x9bdc06a725c71235,0xc19bf174cf692694
984         .quad   0xe49b69c19ef14ad2,0xefbe4786384f25e3
985         .quad   0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
986         .quad   0x2de92c6f592b0275,0x4a7484aa6ea6e483
987         .quad   0x5cb0a9dcbd41fbd4,0x76f988da831153b5
988         .quad   0x983e5152ee66dfab,0xa831c66d2db43210
989         .quad   0xb00327c898fb213f,0xbf597fc7beef0ee4
990         .quad   0xc6e00bf33da88fc2,0xd5a79147930aa725
991         .quad   0x06ca6351e003826f,0x142929670a0e6e70
992         .quad   0x27b70a8546d22ffc,0x2e1b21385c26c926
993         .quad   0x4d2c6dfc5ac42aed,0x53380d139d95b3df
994         .quad   0x650a73548baf63de,0x766a0abb3c77b2a8
995         .quad   0x81c2c92e47edaee6,0x92722c851482353b
996         .quad   0xa2bfe8a14cf10364,0xa81a664bbc423001
997         .quad   0xc24b8b70d0f89791,0xc76c51a30654be30
998         .quad   0xd192e819d6ef5218,0xd69906245565a910
999         .quad   0xf40e35855771202a,0x106aa07032bbd1b8
1000         .quad   0x19a4c116b8d2d0c8,0x1e376c085141ab53
1001         .quad   0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
1002         .quad   0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
1003         .quad   0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
1004         .quad   0x748f82ee5defb2fc,0x78a5636f43172f60
1005         .quad   0x84c87814a1f0ab72,0x8cc702081a6439ec
1006         .quad   0x90befffa23631e28,0xa4506cebde82bde9
1007         .quad   0xbef9a3f7b2c67915,0xc67178f2e372532b
1008         .quad   0xca273eceea26619c,0xd186b8c721c0c207
1009         .quad   0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
1010         .quad   0x06f067aa72176fba,0x0a637dc5a2c898a6
1011         .quad   0x113f9804bef90dae,0x1b710b35131c471b
1012         .quad   0x28db77f523047d84,0x32caab7b40c72493
1013         .quad   0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
1014         .quad   0x4cc5d4becb3e42b6,0x597f299cfc657e2a
1015         .quad   0x5fcb6fab3ad6faec,0x6c44198c4a475817
1016         .quad   0       // terminator
1017 .size   K512,.-K512
1018 .align  3
1019 .LOPENSSL_armcap_P:
1020         .quad   OPENSSL_armcap_P-.
1021 .asciz  "SHA512 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
1022 .align  2
1023 .comm   OPENSSL_armcap_P,4,4