GNU Linux-libre 4.14.290-gnu1
[releases.git] / arch / arm64 / crypto / sha256-core.S_shipped
1 // Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
2 //
3 // Licensed under the OpenSSL license (the "License").  You may not use
4 // this file except in compliance with the License.  You can obtain a copy
5 // in the file LICENSE in the source distribution or at
6 // https://www.openssl.org/source/license.html
7
8 // ====================================================================
9 // Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
10 // project. The module is, however, dual licensed under OpenSSL and
11 // CRYPTOGAMS licenses depending on where you obtain it. For further
12 // details see http://www.openssl.org/~appro/cryptogams/.
13 //
14 // Permission to use under GPLv2 terms is granted.
15 // ====================================================================
16 //
17 // SHA256/512 for ARMv8.
18 //
19 // Performance in cycles per processed byte and improvement coefficient
20 // over code generated with "default" compiler:
21 //
22 //              SHA256-hw       SHA256(*)       SHA512
23 // Apple A7     1.97            10.5 (+33%)     6.73 (-1%(**))
24 // Cortex-A53   2.38            15.5 (+115%)    10.0 (+150%(***))
25 // Cortex-A57   2.31            11.6 (+86%)     7.51 (+260%(***))
26 // Denver       2.01            10.5 (+26%)     6.70 (+8%)
27 // X-Gene                       20.0 (+100%)    12.8 (+300%(***))
28 // Mongoose     2.36            13.0 (+50%)     8.36 (+33%)
29 //
30 // (*)  Software SHA256 results are of lesser relevance, presented
31 //      mostly for informational purposes.
32 // (**) The result is a trade-off: it's possible to improve it by
33 //      10% (or by 1 cycle per round), but at the cost of 20% loss
34 //      on Cortex-A53 (or by 4 cycles per round).
35 // (***)        Super-impressive coefficients over gcc-generated code are
36 //      indication of some compiler "pathology", most notably code
37 //      generated with -mgeneral-regs-only is significanty faster
38 //      and the gap is only 40-90%.
39 //
40 // October 2016.
41 //
42 // Originally it was reckoned that it makes no sense to implement NEON
43 // version of SHA256 for 64-bit processors. This is because performance
44 // improvement on most wide-spread Cortex-A5x processors was observed
45 // to be marginal, same on Cortex-A53 and ~10% on A57. But then it was
46 // observed that 32-bit NEON SHA256 performs significantly better than
47 // 64-bit scalar version on *some* of the more recent processors. As
48 // result 64-bit NEON version of SHA256 was added to provide best
49 // all-round performance. For example it executes ~30% faster on X-Gene
50 // and Mongoose. [For reference, NEON version of SHA512 is bound to
51 // deliver much less improvement, likely *negative* on Cortex-A5x.
52 // Which is why NEON support is limited to SHA256.]
53
54 #ifndef __KERNEL__
55 # include "arm_arch.h"
56 #endif
57
58 .text
59
60 .extern OPENSSL_armcap_P
61 .globl  sha256_block_data_order
62 .type   sha256_block_data_order,%function
63 .align  6
64 sha256_block_data_order:
65 #ifndef __KERNEL__
66 # ifdef __ILP32__
67         ldrsw   x16,.LOPENSSL_armcap_P
68 # else
69         ldr     x16,.LOPENSSL_armcap_P
70 # endif
71         adr     x17,.LOPENSSL_armcap_P
72         add     x16,x16,x17
73         ldr     w16,[x16]
74         tst     w16,#ARMV8_SHA256
75         b.ne    .Lv8_entry
76         tst     w16,#ARMV7_NEON
77         b.ne    .Lneon_entry
78 #endif
79         stp     x29,x30,[sp,#-128]!
80         add     x29,sp,#0
81
82         stp     x19,x20,[sp,#16]
83         stp     x21,x22,[sp,#32]
84         stp     x23,x24,[sp,#48]
85         stp     x25,x26,[sp,#64]
86         stp     x27,x28,[sp,#80]
87         sub     sp,sp,#4*4
88
89         ldp     w20,w21,[x0]                            // load context
90         ldp     w22,w23,[x0,#2*4]
91         ldp     w24,w25,[x0,#4*4]
92         add     x2,x1,x2,lsl#6  // end of input
93         ldp     w26,w27,[x0,#6*4]
94         adr     x30,.LK256
95         stp     x0,x2,[x29,#96]
96
97 .Loop:
98         ldp     w3,w4,[x1],#2*4
99         ldr     w19,[x30],#4                    // *K++
100         eor     w28,w21,w22                             // magic seed
101         str     x1,[x29,#112]
102 #ifndef __AARCH64EB__
103         rev     w3,w3                   // 0
104 #endif
105         ror     w16,w24,#6
106         add     w27,w27,w19                     // h+=K[i]
107         eor     w6,w24,w24,ror#14
108         and     w17,w25,w24
109         bic     w19,w26,w24
110         add     w27,w27,w3                      // h+=X[i]
111         orr     w17,w17,w19                     // Ch(e,f,g)
112         eor     w19,w20,w21                     // a^b, b^c in next round
113         eor     w16,w16,w6,ror#11       // Sigma1(e)
114         ror     w6,w20,#2
115         add     w27,w27,w17                     // h+=Ch(e,f,g)
116         eor     w17,w20,w20,ror#9
117         add     w27,w27,w16                     // h+=Sigma1(e)
118         and     w28,w28,w19                     // (b^c)&=(a^b)
119         add     w23,w23,w27                     // d+=h
120         eor     w28,w28,w21                     // Maj(a,b,c)
121         eor     w17,w6,w17,ror#13       // Sigma0(a)
122         add     w27,w27,w28                     // h+=Maj(a,b,c)
123         ldr     w28,[x30],#4            // *K++, w19 in next round
124         //add   w27,w27,w17                     // h+=Sigma0(a)
125 #ifndef __AARCH64EB__
126         rev     w4,w4                   // 1
127 #endif
128         ldp     w5,w6,[x1],#2*4
129         add     w27,w27,w17                     // h+=Sigma0(a)
130         ror     w16,w23,#6
131         add     w26,w26,w28                     // h+=K[i]
132         eor     w7,w23,w23,ror#14
133         and     w17,w24,w23
134         bic     w28,w25,w23
135         add     w26,w26,w4                      // h+=X[i]
136         orr     w17,w17,w28                     // Ch(e,f,g)
137         eor     w28,w27,w20                     // a^b, b^c in next round
138         eor     w16,w16,w7,ror#11       // Sigma1(e)
139         ror     w7,w27,#2
140         add     w26,w26,w17                     // h+=Ch(e,f,g)
141         eor     w17,w27,w27,ror#9
142         add     w26,w26,w16                     // h+=Sigma1(e)
143         and     w19,w19,w28                     // (b^c)&=(a^b)
144         add     w22,w22,w26                     // d+=h
145         eor     w19,w19,w20                     // Maj(a,b,c)
146         eor     w17,w7,w17,ror#13       // Sigma0(a)
147         add     w26,w26,w19                     // h+=Maj(a,b,c)
148         ldr     w19,[x30],#4            // *K++, w28 in next round
149         //add   w26,w26,w17                     // h+=Sigma0(a)
150 #ifndef __AARCH64EB__
151         rev     w5,w5                   // 2
152 #endif
153         add     w26,w26,w17                     // h+=Sigma0(a)
154         ror     w16,w22,#6
155         add     w25,w25,w19                     // h+=K[i]
156         eor     w8,w22,w22,ror#14
157         and     w17,w23,w22
158         bic     w19,w24,w22
159         add     w25,w25,w5                      // h+=X[i]
160         orr     w17,w17,w19                     // Ch(e,f,g)
161         eor     w19,w26,w27                     // a^b, b^c in next round
162         eor     w16,w16,w8,ror#11       // Sigma1(e)
163         ror     w8,w26,#2
164         add     w25,w25,w17                     // h+=Ch(e,f,g)
165         eor     w17,w26,w26,ror#9
166         add     w25,w25,w16                     // h+=Sigma1(e)
167         and     w28,w28,w19                     // (b^c)&=(a^b)
168         add     w21,w21,w25                     // d+=h
169         eor     w28,w28,w27                     // Maj(a,b,c)
170         eor     w17,w8,w17,ror#13       // Sigma0(a)
171         add     w25,w25,w28                     // h+=Maj(a,b,c)
172         ldr     w28,[x30],#4            // *K++, w19 in next round
173         //add   w25,w25,w17                     // h+=Sigma0(a)
174 #ifndef __AARCH64EB__
175         rev     w6,w6                   // 3
176 #endif
177         ldp     w7,w8,[x1],#2*4
178         add     w25,w25,w17                     // h+=Sigma0(a)
179         ror     w16,w21,#6
180         add     w24,w24,w28                     // h+=K[i]
181         eor     w9,w21,w21,ror#14
182         and     w17,w22,w21
183         bic     w28,w23,w21
184         add     w24,w24,w6                      // h+=X[i]
185         orr     w17,w17,w28                     // Ch(e,f,g)
186         eor     w28,w25,w26                     // a^b, b^c in next round
187         eor     w16,w16,w9,ror#11       // Sigma1(e)
188         ror     w9,w25,#2
189         add     w24,w24,w17                     // h+=Ch(e,f,g)
190         eor     w17,w25,w25,ror#9
191         add     w24,w24,w16                     // h+=Sigma1(e)
192         and     w19,w19,w28                     // (b^c)&=(a^b)
193         add     w20,w20,w24                     // d+=h
194         eor     w19,w19,w26                     // Maj(a,b,c)
195         eor     w17,w9,w17,ror#13       // Sigma0(a)
196         add     w24,w24,w19                     // h+=Maj(a,b,c)
197         ldr     w19,[x30],#4            // *K++, w28 in next round
198         //add   w24,w24,w17                     // h+=Sigma0(a)
199 #ifndef __AARCH64EB__
200         rev     w7,w7                   // 4
201 #endif
202         add     w24,w24,w17                     // h+=Sigma0(a)
203         ror     w16,w20,#6
204         add     w23,w23,w19                     // h+=K[i]
205         eor     w10,w20,w20,ror#14
206         and     w17,w21,w20
207         bic     w19,w22,w20
208         add     w23,w23,w7                      // h+=X[i]
209         orr     w17,w17,w19                     // Ch(e,f,g)
210         eor     w19,w24,w25                     // a^b, b^c in next round
211         eor     w16,w16,w10,ror#11      // Sigma1(e)
212         ror     w10,w24,#2
213         add     w23,w23,w17                     // h+=Ch(e,f,g)
214         eor     w17,w24,w24,ror#9
215         add     w23,w23,w16                     // h+=Sigma1(e)
216         and     w28,w28,w19                     // (b^c)&=(a^b)
217         add     w27,w27,w23                     // d+=h
218         eor     w28,w28,w25                     // Maj(a,b,c)
219         eor     w17,w10,w17,ror#13      // Sigma0(a)
220         add     w23,w23,w28                     // h+=Maj(a,b,c)
221         ldr     w28,[x30],#4            // *K++, w19 in next round
222         //add   w23,w23,w17                     // h+=Sigma0(a)
223 #ifndef __AARCH64EB__
224         rev     w8,w8                   // 5
225 #endif
226         ldp     w9,w10,[x1],#2*4
227         add     w23,w23,w17                     // h+=Sigma0(a)
228         ror     w16,w27,#6
229         add     w22,w22,w28                     // h+=K[i]
230         eor     w11,w27,w27,ror#14
231         and     w17,w20,w27
232         bic     w28,w21,w27
233         add     w22,w22,w8                      // h+=X[i]
234         orr     w17,w17,w28                     // Ch(e,f,g)
235         eor     w28,w23,w24                     // a^b, b^c in next round
236         eor     w16,w16,w11,ror#11      // Sigma1(e)
237         ror     w11,w23,#2
238         add     w22,w22,w17                     // h+=Ch(e,f,g)
239         eor     w17,w23,w23,ror#9
240         add     w22,w22,w16                     // h+=Sigma1(e)
241         and     w19,w19,w28                     // (b^c)&=(a^b)
242         add     w26,w26,w22                     // d+=h
243         eor     w19,w19,w24                     // Maj(a,b,c)
244         eor     w17,w11,w17,ror#13      // Sigma0(a)
245         add     w22,w22,w19                     // h+=Maj(a,b,c)
246         ldr     w19,[x30],#4            // *K++, w28 in next round
247         //add   w22,w22,w17                     // h+=Sigma0(a)
248 #ifndef __AARCH64EB__
249         rev     w9,w9                   // 6
250 #endif
251         add     w22,w22,w17                     // h+=Sigma0(a)
252         ror     w16,w26,#6
253         add     w21,w21,w19                     // h+=K[i]
254         eor     w12,w26,w26,ror#14
255         and     w17,w27,w26
256         bic     w19,w20,w26
257         add     w21,w21,w9                      // h+=X[i]
258         orr     w17,w17,w19                     // Ch(e,f,g)
259         eor     w19,w22,w23                     // a^b, b^c in next round
260         eor     w16,w16,w12,ror#11      // Sigma1(e)
261         ror     w12,w22,#2
262         add     w21,w21,w17                     // h+=Ch(e,f,g)
263         eor     w17,w22,w22,ror#9
264         add     w21,w21,w16                     // h+=Sigma1(e)
265         and     w28,w28,w19                     // (b^c)&=(a^b)
266         add     w25,w25,w21                     // d+=h
267         eor     w28,w28,w23                     // Maj(a,b,c)
268         eor     w17,w12,w17,ror#13      // Sigma0(a)
269         add     w21,w21,w28                     // h+=Maj(a,b,c)
270         ldr     w28,[x30],#4            // *K++, w19 in next round
271         //add   w21,w21,w17                     // h+=Sigma0(a)
272 #ifndef __AARCH64EB__
273         rev     w10,w10                 // 7
274 #endif
275         ldp     w11,w12,[x1],#2*4
276         add     w21,w21,w17                     // h+=Sigma0(a)
277         ror     w16,w25,#6
278         add     w20,w20,w28                     // h+=K[i]
279         eor     w13,w25,w25,ror#14
280         and     w17,w26,w25
281         bic     w28,w27,w25
282         add     w20,w20,w10                     // h+=X[i]
283         orr     w17,w17,w28                     // Ch(e,f,g)
284         eor     w28,w21,w22                     // a^b, b^c in next round
285         eor     w16,w16,w13,ror#11      // Sigma1(e)
286         ror     w13,w21,#2
287         add     w20,w20,w17                     // h+=Ch(e,f,g)
288         eor     w17,w21,w21,ror#9
289         add     w20,w20,w16                     // h+=Sigma1(e)
290         and     w19,w19,w28                     // (b^c)&=(a^b)
291         add     w24,w24,w20                     // d+=h
292         eor     w19,w19,w22                     // Maj(a,b,c)
293         eor     w17,w13,w17,ror#13      // Sigma0(a)
294         add     w20,w20,w19                     // h+=Maj(a,b,c)
295         ldr     w19,[x30],#4            // *K++, w28 in next round
296         //add   w20,w20,w17                     // h+=Sigma0(a)
297 #ifndef __AARCH64EB__
298         rev     w11,w11                 // 8
299 #endif
300         add     w20,w20,w17                     // h+=Sigma0(a)
301         ror     w16,w24,#6
302         add     w27,w27,w19                     // h+=K[i]
303         eor     w14,w24,w24,ror#14
304         and     w17,w25,w24
305         bic     w19,w26,w24
306         add     w27,w27,w11                     // h+=X[i]
307         orr     w17,w17,w19                     // Ch(e,f,g)
308         eor     w19,w20,w21                     // a^b, b^c in next round
309         eor     w16,w16,w14,ror#11      // Sigma1(e)
310         ror     w14,w20,#2
311         add     w27,w27,w17                     // h+=Ch(e,f,g)
312         eor     w17,w20,w20,ror#9
313         add     w27,w27,w16                     // h+=Sigma1(e)
314         and     w28,w28,w19                     // (b^c)&=(a^b)
315         add     w23,w23,w27                     // d+=h
316         eor     w28,w28,w21                     // Maj(a,b,c)
317         eor     w17,w14,w17,ror#13      // Sigma0(a)
318         add     w27,w27,w28                     // h+=Maj(a,b,c)
319         ldr     w28,[x30],#4            // *K++, w19 in next round
320         //add   w27,w27,w17                     // h+=Sigma0(a)
321 #ifndef __AARCH64EB__
322         rev     w12,w12                 // 9
323 #endif
324         ldp     w13,w14,[x1],#2*4
325         add     w27,w27,w17                     // h+=Sigma0(a)
326         ror     w16,w23,#6
327         add     w26,w26,w28                     // h+=K[i]
328         eor     w15,w23,w23,ror#14
329         and     w17,w24,w23
330         bic     w28,w25,w23
331         add     w26,w26,w12                     // h+=X[i]
332         orr     w17,w17,w28                     // Ch(e,f,g)
333         eor     w28,w27,w20                     // a^b, b^c in next round
334         eor     w16,w16,w15,ror#11      // Sigma1(e)
335         ror     w15,w27,#2
336         add     w26,w26,w17                     // h+=Ch(e,f,g)
337         eor     w17,w27,w27,ror#9
338         add     w26,w26,w16                     // h+=Sigma1(e)
339         and     w19,w19,w28                     // (b^c)&=(a^b)
340         add     w22,w22,w26                     // d+=h
341         eor     w19,w19,w20                     // Maj(a,b,c)
342         eor     w17,w15,w17,ror#13      // Sigma0(a)
343         add     w26,w26,w19                     // h+=Maj(a,b,c)
344         ldr     w19,[x30],#4            // *K++, w28 in next round
345         //add   w26,w26,w17                     // h+=Sigma0(a)
346 #ifndef __AARCH64EB__
347         rev     w13,w13                 // 10
348 #endif
349         add     w26,w26,w17                     // h+=Sigma0(a)
350         ror     w16,w22,#6
351         add     w25,w25,w19                     // h+=K[i]
352         eor     w0,w22,w22,ror#14
353         and     w17,w23,w22
354         bic     w19,w24,w22
355         add     w25,w25,w13                     // h+=X[i]
356         orr     w17,w17,w19                     // Ch(e,f,g)
357         eor     w19,w26,w27                     // a^b, b^c in next round
358         eor     w16,w16,w0,ror#11       // Sigma1(e)
359         ror     w0,w26,#2
360         add     w25,w25,w17                     // h+=Ch(e,f,g)
361         eor     w17,w26,w26,ror#9
362         add     w25,w25,w16                     // h+=Sigma1(e)
363         and     w28,w28,w19                     // (b^c)&=(a^b)
364         add     w21,w21,w25                     // d+=h
365         eor     w28,w28,w27                     // Maj(a,b,c)
366         eor     w17,w0,w17,ror#13       // Sigma0(a)
367         add     w25,w25,w28                     // h+=Maj(a,b,c)
368         ldr     w28,[x30],#4            // *K++, w19 in next round
369         //add   w25,w25,w17                     // h+=Sigma0(a)
370 #ifndef __AARCH64EB__
371         rev     w14,w14                 // 11
372 #endif
373         ldp     w15,w0,[x1],#2*4
374         add     w25,w25,w17                     // h+=Sigma0(a)
375         str     w6,[sp,#12]
376         ror     w16,w21,#6
377         add     w24,w24,w28                     // h+=K[i]
378         eor     w6,w21,w21,ror#14
379         and     w17,w22,w21
380         bic     w28,w23,w21
381         add     w24,w24,w14                     // h+=X[i]
382         orr     w17,w17,w28                     // Ch(e,f,g)
383         eor     w28,w25,w26                     // a^b, b^c in next round
384         eor     w16,w16,w6,ror#11       // Sigma1(e)
385         ror     w6,w25,#2
386         add     w24,w24,w17                     // h+=Ch(e,f,g)
387         eor     w17,w25,w25,ror#9
388         add     w24,w24,w16                     // h+=Sigma1(e)
389         and     w19,w19,w28                     // (b^c)&=(a^b)
390         add     w20,w20,w24                     // d+=h
391         eor     w19,w19,w26                     // Maj(a,b,c)
392         eor     w17,w6,w17,ror#13       // Sigma0(a)
393         add     w24,w24,w19                     // h+=Maj(a,b,c)
394         ldr     w19,[x30],#4            // *K++, w28 in next round
395         //add   w24,w24,w17                     // h+=Sigma0(a)
396 #ifndef __AARCH64EB__
397         rev     w15,w15                 // 12
398 #endif
399         add     w24,w24,w17                     // h+=Sigma0(a)
400         str     w7,[sp,#0]
401         ror     w16,w20,#6
402         add     w23,w23,w19                     // h+=K[i]
403         eor     w7,w20,w20,ror#14
404         and     w17,w21,w20
405         bic     w19,w22,w20
406         add     w23,w23,w15                     // h+=X[i]
407         orr     w17,w17,w19                     // Ch(e,f,g)
408         eor     w19,w24,w25                     // a^b, b^c in next round
409         eor     w16,w16,w7,ror#11       // Sigma1(e)
410         ror     w7,w24,#2
411         add     w23,w23,w17                     // h+=Ch(e,f,g)
412         eor     w17,w24,w24,ror#9
413         add     w23,w23,w16                     // h+=Sigma1(e)
414         and     w28,w28,w19                     // (b^c)&=(a^b)
415         add     w27,w27,w23                     // d+=h
416         eor     w28,w28,w25                     // Maj(a,b,c)
417         eor     w17,w7,w17,ror#13       // Sigma0(a)
418         add     w23,w23,w28                     // h+=Maj(a,b,c)
419         ldr     w28,[x30],#4            // *K++, w19 in next round
420         //add   w23,w23,w17                     // h+=Sigma0(a)
421 #ifndef __AARCH64EB__
422         rev     w0,w0                   // 13
423 #endif
424         ldp     w1,w2,[x1]
425         add     w23,w23,w17                     // h+=Sigma0(a)
426         str     w8,[sp,#4]
427         ror     w16,w27,#6
428         add     w22,w22,w28                     // h+=K[i]
429         eor     w8,w27,w27,ror#14
430         and     w17,w20,w27
431         bic     w28,w21,w27
432         add     w22,w22,w0                      // h+=X[i]
433         orr     w17,w17,w28                     // Ch(e,f,g)
434         eor     w28,w23,w24                     // a^b, b^c in next round
435         eor     w16,w16,w8,ror#11       // Sigma1(e)
436         ror     w8,w23,#2
437         add     w22,w22,w17                     // h+=Ch(e,f,g)
438         eor     w17,w23,w23,ror#9
439         add     w22,w22,w16                     // h+=Sigma1(e)
440         and     w19,w19,w28                     // (b^c)&=(a^b)
441         add     w26,w26,w22                     // d+=h
442         eor     w19,w19,w24                     // Maj(a,b,c)
443         eor     w17,w8,w17,ror#13       // Sigma0(a)
444         add     w22,w22,w19                     // h+=Maj(a,b,c)
445         ldr     w19,[x30],#4            // *K++, w28 in next round
446         //add   w22,w22,w17                     // h+=Sigma0(a)
447 #ifndef __AARCH64EB__
448         rev     w1,w1                   // 14
449 #endif
450         ldr     w6,[sp,#12]
451         add     w22,w22,w17                     // h+=Sigma0(a)
452         str     w9,[sp,#8]
453         ror     w16,w26,#6
454         add     w21,w21,w19                     // h+=K[i]
455         eor     w9,w26,w26,ror#14
456         and     w17,w27,w26
457         bic     w19,w20,w26
458         add     w21,w21,w1                      // h+=X[i]
459         orr     w17,w17,w19                     // Ch(e,f,g)
460         eor     w19,w22,w23                     // a^b, b^c in next round
461         eor     w16,w16,w9,ror#11       // Sigma1(e)
462         ror     w9,w22,#2
463         add     w21,w21,w17                     // h+=Ch(e,f,g)
464         eor     w17,w22,w22,ror#9
465         add     w21,w21,w16                     // h+=Sigma1(e)
466         and     w28,w28,w19                     // (b^c)&=(a^b)
467         add     w25,w25,w21                     // d+=h
468         eor     w28,w28,w23                     // Maj(a,b,c)
469         eor     w17,w9,w17,ror#13       // Sigma0(a)
470         add     w21,w21,w28                     // h+=Maj(a,b,c)
471         ldr     w28,[x30],#4            // *K++, w19 in next round
472         //add   w21,w21,w17                     // h+=Sigma0(a)
473 #ifndef __AARCH64EB__
474         rev     w2,w2                   // 15
475 #endif
476         ldr     w7,[sp,#0]
477         add     w21,w21,w17                     // h+=Sigma0(a)
478         str     w10,[sp,#12]
479         ror     w16,w25,#6
480         add     w20,w20,w28                     // h+=K[i]
481         ror     w9,w4,#7
482         and     w17,w26,w25
483         ror     w8,w1,#17
484         bic     w28,w27,w25
485         ror     w10,w21,#2
486         add     w20,w20,w2                      // h+=X[i]
487         eor     w16,w16,w25,ror#11
488         eor     w9,w9,w4,ror#18
489         orr     w17,w17,w28                     // Ch(e,f,g)
490         eor     w28,w21,w22                     // a^b, b^c in next round
491         eor     w16,w16,w25,ror#25      // Sigma1(e)
492         eor     w10,w10,w21,ror#13
493         add     w20,w20,w17                     // h+=Ch(e,f,g)
494         and     w19,w19,w28                     // (b^c)&=(a^b)
495         eor     w8,w8,w1,ror#19
496         eor     w9,w9,w4,lsr#3  // sigma0(X[i+1])
497         add     w20,w20,w16                     // h+=Sigma1(e)
498         eor     w19,w19,w22                     // Maj(a,b,c)
499         eor     w17,w10,w21,ror#22      // Sigma0(a)
500         eor     w8,w8,w1,lsr#10 // sigma1(X[i+14])
501         add     w3,w3,w12
502         add     w24,w24,w20                     // d+=h
503         add     w20,w20,w19                     // h+=Maj(a,b,c)
504         ldr     w19,[x30],#4            // *K++, w28 in next round
505         add     w3,w3,w9
506         add     w20,w20,w17                     // h+=Sigma0(a)
507         add     w3,w3,w8
508 .Loop_16_xx:
509         ldr     w8,[sp,#4]
510         str     w11,[sp,#0]
511         ror     w16,w24,#6
512         add     w27,w27,w19                     // h+=K[i]
513         ror     w10,w5,#7
514         and     w17,w25,w24
515         ror     w9,w2,#17
516         bic     w19,w26,w24
517         ror     w11,w20,#2
518         add     w27,w27,w3                      // h+=X[i]
519         eor     w16,w16,w24,ror#11
520         eor     w10,w10,w5,ror#18
521         orr     w17,w17,w19                     // Ch(e,f,g)
522         eor     w19,w20,w21                     // a^b, b^c in next round
523         eor     w16,w16,w24,ror#25      // Sigma1(e)
524         eor     w11,w11,w20,ror#13
525         add     w27,w27,w17                     // h+=Ch(e,f,g)
526         and     w28,w28,w19                     // (b^c)&=(a^b)
527         eor     w9,w9,w2,ror#19
528         eor     w10,w10,w5,lsr#3        // sigma0(X[i+1])
529         add     w27,w27,w16                     // h+=Sigma1(e)
530         eor     w28,w28,w21                     // Maj(a,b,c)
531         eor     w17,w11,w20,ror#22      // Sigma0(a)
532         eor     w9,w9,w2,lsr#10 // sigma1(X[i+14])
533         add     w4,w4,w13
534         add     w23,w23,w27                     // d+=h
535         add     w27,w27,w28                     // h+=Maj(a,b,c)
536         ldr     w28,[x30],#4            // *K++, w19 in next round
537         add     w4,w4,w10
538         add     w27,w27,w17                     // h+=Sigma0(a)
539         add     w4,w4,w9
540         ldr     w9,[sp,#8]
541         str     w12,[sp,#4]
542         ror     w16,w23,#6
543         add     w26,w26,w28                     // h+=K[i]
544         ror     w11,w6,#7
545         and     w17,w24,w23
546         ror     w10,w3,#17
547         bic     w28,w25,w23
548         ror     w12,w27,#2
549         add     w26,w26,w4                      // h+=X[i]
550         eor     w16,w16,w23,ror#11
551         eor     w11,w11,w6,ror#18
552         orr     w17,w17,w28                     // Ch(e,f,g)
553         eor     w28,w27,w20                     // a^b, b^c in next round
554         eor     w16,w16,w23,ror#25      // Sigma1(e)
555         eor     w12,w12,w27,ror#13
556         add     w26,w26,w17                     // h+=Ch(e,f,g)
557         and     w19,w19,w28                     // (b^c)&=(a^b)
558         eor     w10,w10,w3,ror#19
559         eor     w11,w11,w6,lsr#3        // sigma0(X[i+1])
560         add     w26,w26,w16                     // h+=Sigma1(e)
561         eor     w19,w19,w20                     // Maj(a,b,c)
562         eor     w17,w12,w27,ror#22      // Sigma0(a)
563         eor     w10,w10,w3,lsr#10       // sigma1(X[i+14])
564         add     w5,w5,w14
565         add     w22,w22,w26                     // d+=h
566         add     w26,w26,w19                     // h+=Maj(a,b,c)
567         ldr     w19,[x30],#4            // *K++, w28 in next round
568         add     w5,w5,w11
569         add     w26,w26,w17                     // h+=Sigma0(a)
570         add     w5,w5,w10
571         ldr     w10,[sp,#12]
572         str     w13,[sp,#8]
573         ror     w16,w22,#6
574         add     w25,w25,w19                     // h+=K[i]
575         ror     w12,w7,#7
576         and     w17,w23,w22
577         ror     w11,w4,#17
578         bic     w19,w24,w22
579         ror     w13,w26,#2
580         add     w25,w25,w5                      // h+=X[i]
581         eor     w16,w16,w22,ror#11
582         eor     w12,w12,w7,ror#18
583         orr     w17,w17,w19                     // Ch(e,f,g)
584         eor     w19,w26,w27                     // a^b, b^c in next round
585         eor     w16,w16,w22,ror#25      // Sigma1(e)
586         eor     w13,w13,w26,ror#13
587         add     w25,w25,w17                     // h+=Ch(e,f,g)
588         and     w28,w28,w19                     // (b^c)&=(a^b)
589         eor     w11,w11,w4,ror#19
590         eor     w12,w12,w7,lsr#3        // sigma0(X[i+1])
591         add     w25,w25,w16                     // h+=Sigma1(e)
592         eor     w28,w28,w27                     // Maj(a,b,c)
593         eor     w17,w13,w26,ror#22      // Sigma0(a)
594         eor     w11,w11,w4,lsr#10       // sigma1(X[i+14])
595         add     w6,w6,w15
596         add     w21,w21,w25                     // d+=h
597         add     w25,w25,w28                     // h+=Maj(a,b,c)
598         ldr     w28,[x30],#4            // *K++, w19 in next round
599         add     w6,w6,w12
600         add     w25,w25,w17                     // h+=Sigma0(a)
601         add     w6,w6,w11
602         ldr     w11,[sp,#0]
603         str     w14,[sp,#12]
604         ror     w16,w21,#6
605         add     w24,w24,w28                     // h+=K[i]
606         ror     w13,w8,#7
607         and     w17,w22,w21
608         ror     w12,w5,#17
609         bic     w28,w23,w21
610         ror     w14,w25,#2
611         add     w24,w24,w6                      // h+=X[i]
612         eor     w16,w16,w21,ror#11
613         eor     w13,w13,w8,ror#18
614         orr     w17,w17,w28                     // Ch(e,f,g)
615         eor     w28,w25,w26                     // a^b, b^c in next round
616         eor     w16,w16,w21,ror#25      // Sigma1(e)
617         eor     w14,w14,w25,ror#13
618         add     w24,w24,w17                     // h+=Ch(e,f,g)
619         and     w19,w19,w28                     // (b^c)&=(a^b)
620         eor     w12,w12,w5,ror#19
621         eor     w13,w13,w8,lsr#3        // sigma0(X[i+1])
622         add     w24,w24,w16                     // h+=Sigma1(e)
623         eor     w19,w19,w26                     // Maj(a,b,c)
624         eor     w17,w14,w25,ror#22      // Sigma0(a)
625         eor     w12,w12,w5,lsr#10       // sigma1(X[i+14])
626         add     w7,w7,w0
627         add     w20,w20,w24                     // d+=h
628         add     w24,w24,w19                     // h+=Maj(a,b,c)
629         ldr     w19,[x30],#4            // *K++, w28 in next round
630         add     w7,w7,w13
631         add     w24,w24,w17                     // h+=Sigma0(a)
632         add     w7,w7,w12
633         ldr     w12,[sp,#4]
634         str     w15,[sp,#0]
635         ror     w16,w20,#6
636         add     w23,w23,w19                     // h+=K[i]
637         ror     w14,w9,#7
638         and     w17,w21,w20
639         ror     w13,w6,#17
640         bic     w19,w22,w20
641         ror     w15,w24,#2
642         add     w23,w23,w7                      // h+=X[i]
643         eor     w16,w16,w20,ror#11
644         eor     w14,w14,w9,ror#18
645         orr     w17,w17,w19                     // Ch(e,f,g)
646         eor     w19,w24,w25                     // a^b, b^c in next round
647         eor     w16,w16,w20,ror#25      // Sigma1(e)
648         eor     w15,w15,w24,ror#13
649         add     w23,w23,w17                     // h+=Ch(e,f,g)
650         and     w28,w28,w19                     // (b^c)&=(a^b)
651         eor     w13,w13,w6,ror#19
652         eor     w14,w14,w9,lsr#3        // sigma0(X[i+1])
653         add     w23,w23,w16                     // h+=Sigma1(e)
654         eor     w28,w28,w25                     // Maj(a,b,c)
655         eor     w17,w15,w24,ror#22      // Sigma0(a)
656         eor     w13,w13,w6,lsr#10       // sigma1(X[i+14])
657         add     w8,w8,w1
658         add     w27,w27,w23                     // d+=h
659         add     w23,w23,w28                     // h+=Maj(a,b,c)
660         ldr     w28,[x30],#4            // *K++, w19 in next round
661         add     w8,w8,w14
662         add     w23,w23,w17                     // h+=Sigma0(a)
663         add     w8,w8,w13
664         ldr     w13,[sp,#8]
665         str     w0,[sp,#4]
666         ror     w16,w27,#6
667         add     w22,w22,w28                     // h+=K[i]
668         ror     w15,w10,#7
669         and     w17,w20,w27
670         ror     w14,w7,#17
671         bic     w28,w21,w27
672         ror     w0,w23,#2
673         add     w22,w22,w8                      // h+=X[i]
674         eor     w16,w16,w27,ror#11
675         eor     w15,w15,w10,ror#18
676         orr     w17,w17,w28                     // Ch(e,f,g)
677         eor     w28,w23,w24                     // a^b, b^c in next round
678         eor     w16,w16,w27,ror#25      // Sigma1(e)
679         eor     w0,w0,w23,ror#13
680         add     w22,w22,w17                     // h+=Ch(e,f,g)
681         and     w19,w19,w28                     // (b^c)&=(a^b)
682         eor     w14,w14,w7,ror#19
683         eor     w15,w15,w10,lsr#3       // sigma0(X[i+1])
684         add     w22,w22,w16                     // h+=Sigma1(e)
685         eor     w19,w19,w24                     // Maj(a,b,c)
686         eor     w17,w0,w23,ror#22       // Sigma0(a)
687         eor     w14,w14,w7,lsr#10       // sigma1(X[i+14])
688         add     w9,w9,w2
689         add     w26,w26,w22                     // d+=h
690         add     w22,w22,w19                     // h+=Maj(a,b,c)
691         ldr     w19,[x30],#4            // *K++, w28 in next round
692         add     w9,w9,w15
693         add     w22,w22,w17                     // h+=Sigma0(a)
694         add     w9,w9,w14
695         ldr     w14,[sp,#12]
696         str     w1,[sp,#8]
697         ror     w16,w26,#6
698         add     w21,w21,w19                     // h+=K[i]
699         ror     w0,w11,#7
700         and     w17,w27,w26
701         ror     w15,w8,#17
702         bic     w19,w20,w26
703         ror     w1,w22,#2
704         add     w21,w21,w9                      // h+=X[i]
705         eor     w16,w16,w26,ror#11
706         eor     w0,w0,w11,ror#18
707         orr     w17,w17,w19                     // Ch(e,f,g)
708         eor     w19,w22,w23                     // a^b, b^c in next round
709         eor     w16,w16,w26,ror#25      // Sigma1(e)
710         eor     w1,w1,w22,ror#13
711         add     w21,w21,w17                     // h+=Ch(e,f,g)
712         and     w28,w28,w19                     // (b^c)&=(a^b)
713         eor     w15,w15,w8,ror#19
714         eor     w0,w0,w11,lsr#3 // sigma0(X[i+1])
715         add     w21,w21,w16                     // h+=Sigma1(e)
716         eor     w28,w28,w23                     // Maj(a,b,c)
717         eor     w17,w1,w22,ror#22       // Sigma0(a)
718         eor     w15,w15,w8,lsr#10       // sigma1(X[i+14])
719         add     w10,w10,w3
720         add     w25,w25,w21                     // d+=h
721         add     w21,w21,w28                     // h+=Maj(a,b,c)
722         ldr     w28,[x30],#4            // *K++, w19 in next round
723         add     w10,w10,w0
724         add     w21,w21,w17                     // h+=Sigma0(a)
725         add     w10,w10,w15
726         ldr     w15,[sp,#0]
727         str     w2,[sp,#12]
728         ror     w16,w25,#6
729         add     w20,w20,w28                     // h+=K[i]
730         ror     w1,w12,#7
731         and     w17,w26,w25
732         ror     w0,w9,#17
733         bic     w28,w27,w25
734         ror     w2,w21,#2
735         add     w20,w20,w10                     // h+=X[i]
736         eor     w16,w16,w25,ror#11
737         eor     w1,w1,w12,ror#18
738         orr     w17,w17,w28                     // Ch(e,f,g)
739         eor     w28,w21,w22                     // a^b, b^c in next round
740         eor     w16,w16,w25,ror#25      // Sigma1(e)
741         eor     w2,w2,w21,ror#13
742         add     w20,w20,w17                     // h+=Ch(e,f,g)
743         and     w19,w19,w28                     // (b^c)&=(a^b)
744         eor     w0,w0,w9,ror#19
745         eor     w1,w1,w12,lsr#3 // sigma0(X[i+1])
746         add     w20,w20,w16                     // h+=Sigma1(e)
747         eor     w19,w19,w22                     // Maj(a,b,c)
748         eor     w17,w2,w21,ror#22       // Sigma0(a)
749         eor     w0,w0,w9,lsr#10 // sigma1(X[i+14])
750         add     w11,w11,w4
751         add     w24,w24,w20                     // d+=h
752         add     w20,w20,w19                     // h+=Maj(a,b,c)
753         ldr     w19,[x30],#4            // *K++, w28 in next round
754         add     w11,w11,w1
755         add     w20,w20,w17                     // h+=Sigma0(a)
756         add     w11,w11,w0
757         ldr     w0,[sp,#4]
758         str     w3,[sp,#0]
759         ror     w16,w24,#6
760         add     w27,w27,w19                     // h+=K[i]
761         ror     w2,w13,#7
762         and     w17,w25,w24
763         ror     w1,w10,#17
764         bic     w19,w26,w24
765         ror     w3,w20,#2
766         add     w27,w27,w11                     // h+=X[i]
767         eor     w16,w16,w24,ror#11
768         eor     w2,w2,w13,ror#18
769         orr     w17,w17,w19                     // Ch(e,f,g)
770         eor     w19,w20,w21                     // a^b, b^c in next round
771         eor     w16,w16,w24,ror#25      // Sigma1(e)
772         eor     w3,w3,w20,ror#13
773         add     w27,w27,w17                     // h+=Ch(e,f,g)
774         and     w28,w28,w19                     // (b^c)&=(a^b)
775         eor     w1,w1,w10,ror#19
776         eor     w2,w2,w13,lsr#3 // sigma0(X[i+1])
777         add     w27,w27,w16                     // h+=Sigma1(e)
778         eor     w28,w28,w21                     // Maj(a,b,c)
779         eor     w17,w3,w20,ror#22       // Sigma0(a)
780         eor     w1,w1,w10,lsr#10        // sigma1(X[i+14])
781         add     w12,w12,w5
782         add     w23,w23,w27                     // d+=h
783         add     w27,w27,w28                     // h+=Maj(a,b,c)
784         ldr     w28,[x30],#4            // *K++, w19 in next round
785         add     w12,w12,w2
786         add     w27,w27,w17                     // h+=Sigma0(a)
787         add     w12,w12,w1
788         ldr     w1,[sp,#8]
789         str     w4,[sp,#4]
790         ror     w16,w23,#6
791         add     w26,w26,w28                     // h+=K[i]
792         ror     w3,w14,#7
793         and     w17,w24,w23
794         ror     w2,w11,#17
795         bic     w28,w25,w23
796         ror     w4,w27,#2
797         add     w26,w26,w12                     // h+=X[i]
798         eor     w16,w16,w23,ror#11
799         eor     w3,w3,w14,ror#18
800         orr     w17,w17,w28                     // Ch(e,f,g)
801         eor     w28,w27,w20                     // a^b, b^c in next round
802         eor     w16,w16,w23,ror#25      // Sigma1(e)
803         eor     w4,w4,w27,ror#13
804         add     w26,w26,w17                     // h+=Ch(e,f,g)
805         and     w19,w19,w28                     // (b^c)&=(a^b)
806         eor     w2,w2,w11,ror#19
807         eor     w3,w3,w14,lsr#3 // sigma0(X[i+1])
808         add     w26,w26,w16                     // h+=Sigma1(e)
809         eor     w19,w19,w20                     // Maj(a,b,c)
810         eor     w17,w4,w27,ror#22       // Sigma0(a)
811         eor     w2,w2,w11,lsr#10        // sigma1(X[i+14])
812         add     w13,w13,w6
813         add     w22,w22,w26                     // d+=h
814         add     w26,w26,w19                     // h+=Maj(a,b,c)
815         ldr     w19,[x30],#4            // *K++, w28 in next round
816         add     w13,w13,w3
817         add     w26,w26,w17                     // h+=Sigma0(a)
818         add     w13,w13,w2
819         ldr     w2,[sp,#12]
820         str     w5,[sp,#8]
821         ror     w16,w22,#6
822         add     w25,w25,w19                     // h+=K[i]
823         ror     w4,w15,#7
824         and     w17,w23,w22
825         ror     w3,w12,#17
826         bic     w19,w24,w22
827         ror     w5,w26,#2
828         add     w25,w25,w13                     // h+=X[i]
829         eor     w16,w16,w22,ror#11
830         eor     w4,w4,w15,ror#18
831         orr     w17,w17,w19                     // Ch(e,f,g)
832         eor     w19,w26,w27                     // a^b, b^c in next round
833         eor     w16,w16,w22,ror#25      // Sigma1(e)
834         eor     w5,w5,w26,ror#13
835         add     w25,w25,w17                     // h+=Ch(e,f,g)
836         and     w28,w28,w19                     // (b^c)&=(a^b)
837         eor     w3,w3,w12,ror#19
838         eor     w4,w4,w15,lsr#3 // sigma0(X[i+1])
839         add     w25,w25,w16                     // h+=Sigma1(e)
840         eor     w28,w28,w27                     // Maj(a,b,c)
841         eor     w17,w5,w26,ror#22       // Sigma0(a)
842         eor     w3,w3,w12,lsr#10        // sigma1(X[i+14])
843         add     w14,w14,w7
844         add     w21,w21,w25                     // d+=h
845         add     w25,w25,w28                     // h+=Maj(a,b,c)
846         ldr     w28,[x30],#4            // *K++, w19 in next round
847         add     w14,w14,w4
848         add     w25,w25,w17                     // h+=Sigma0(a)
849         add     w14,w14,w3
850         ldr     w3,[sp,#0]
851         str     w6,[sp,#12]
852         ror     w16,w21,#6
853         add     w24,w24,w28                     // h+=K[i]
854         ror     w5,w0,#7
855         and     w17,w22,w21
856         ror     w4,w13,#17
857         bic     w28,w23,w21
858         ror     w6,w25,#2
859         add     w24,w24,w14                     // h+=X[i]
860         eor     w16,w16,w21,ror#11
861         eor     w5,w5,w0,ror#18
862         orr     w17,w17,w28                     // Ch(e,f,g)
863         eor     w28,w25,w26                     // a^b, b^c in next round
864         eor     w16,w16,w21,ror#25      // Sigma1(e)
865         eor     w6,w6,w25,ror#13
866         add     w24,w24,w17                     // h+=Ch(e,f,g)
867         and     w19,w19,w28                     // (b^c)&=(a^b)
868         eor     w4,w4,w13,ror#19
869         eor     w5,w5,w0,lsr#3  // sigma0(X[i+1])
870         add     w24,w24,w16                     // h+=Sigma1(e)
871         eor     w19,w19,w26                     // Maj(a,b,c)
872         eor     w17,w6,w25,ror#22       // Sigma0(a)
873         eor     w4,w4,w13,lsr#10        // sigma1(X[i+14])
874         add     w15,w15,w8
875         add     w20,w20,w24                     // d+=h
876         add     w24,w24,w19                     // h+=Maj(a,b,c)
877         ldr     w19,[x30],#4            // *K++, w28 in next round
878         add     w15,w15,w5
879         add     w24,w24,w17                     // h+=Sigma0(a)
880         add     w15,w15,w4
881         ldr     w4,[sp,#4]
882         str     w7,[sp,#0]
883         ror     w16,w20,#6
884         add     w23,w23,w19                     // h+=K[i]
885         ror     w6,w1,#7
886         and     w17,w21,w20
887         ror     w5,w14,#17
888         bic     w19,w22,w20
889         ror     w7,w24,#2
890         add     w23,w23,w15                     // h+=X[i]
891         eor     w16,w16,w20,ror#11
892         eor     w6,w6,w1,ror#18
893         orr     w17,w17,w19                     // Ch(e,f,g)
894         eor     w19,w24,w25                     // a^b, b^c in next round
895         eor     w16,w16,w20,ror#25      // Sigma1(e)
896         eor     w7,w7,w24,ror#13
897         add     w23,w23,w17                     // h+=Ch(e,f,g)
898         and     w28,w28,w19                     // (b^c)&=(a^b)
899         eor     w5,w5,w14,ror#19
900         eor     w6,w6,w1,lsr#3  // sigma0(X[i+1])
901         add     w23,w23,w16                     // h+=Sigma1(e)
902         eor     w28,w28,w25                     // Maj(a,b,c)
903         eor     w17,w7,w24,ror#22       // Sigma0(a)
904         eor     w5,w5,w14,lsr#10        // sigma1(X[i+14])
905         add     w0,w0,w9
906         add     w27,w27,w23                     // d+=h
907         add     w23,w23,w28                     // h+=Maj(a,b,c)
908         ldr     w28,[x30],#4            // *K++, w19 in next round
909         add     w0,w0,w6
910         add     w23,w23,w17                     // h+=Sigma0(a)
911         add     w0,w0,w5
912         ldr     w5,[sp,#8]
913         str     w8,[sp,#4]
914         ror     w16,w27,#6
915         add     w22,w22,w28                     // h+=K[i]
916         ror     w7,w2,#7
917         and     w17,w20,w27
918         ror     w6,w15,#17
919         bic     w28,w21,w27
920         ror     w8,w23,#2
921         add     w22,w22,w0                      // h+=X[i]
922         eor     w16,w16,w27,ror#11
923         eor     w7,w7,w2,ror#18
924         orr     w17,w17,w28                     // Ch(e,f,g)
925         eor     w28,w23,w24                     // a^b, b^c in next round
926         eor     w16,w16,w27,ror#25      // Sigma1(e)
927         eor     w8,w8,w23,ror#13
928         add     w22,w22,w17                     // h+=Ch(e,f,g)
929         and     w19,w19,w28                     // (b^c)&=(a^b)
930         eor     w6,w6,w15,ror#19
931         eor     w7,w7,w2,lsr#3  // sigma0(X[i+1])
932         add     w22,w22,w16                     // h+=Sigma1(e)
933         eor     w19,w19,w24                     // Maj(a,b,c)
934         eor     w17,w8,w23,ror#22       // Sigma0(a)
935         eor     w6,w6,w15,lsr#10        // sigma1(X[i+14])
936         add     w1,w1,w10
937         add     w26,w26,w22                     // d+=h
938         add     w22,w22,w19                     // h+=Maj(a,b,c)
939         ldr     w19,[x30],#4            // *K++, w28 in next round
940         add     w1,w1,w7
941         add     w22,w22,w17                     // h+=Sigma0(a)
942         add     w1,w1,w6
943         ldr     w6,[sp,#12]
944         str     w9,[sp,#8]
945         ror     w16,w26,#6
946         add     w21,w21,w19                     // h+=K[i]
947         ror     w8,w3,#7
948         and     w17,w27,w26
949         ror     w7,w0,#17
950         bic     w19,w20,w26
951         ror     w9,w22,#2
952         add     w21,w21,w1                      // h+=X[i]
953         eor     w16,w16,w26,ror#11
954         eor     w8,w8,w3,ror#18
955         orr     w17,w17,w19                     // Ch(e,f,g)
956         eor     w19,w22,w23                     // a^b, b^c in next round
957         eor     w16,w16,w26,ror#25      // Sigma1(e)
958         eor     w9,w9,w22,ror#13
959         add     w21,w21,w17                     // h+=Ch(e,f,g)
960         and     w28,w28,w19                     // (b^c)&=(a^b)
961         eor     w7,w7,w0,ror#19
962         eor     w8,w8,w3,lsr#3  // sigma0(X[i+1])
963         add     w21,w21,w16                     // h+=Sigma1(e)
964         eor     w28,w28,w23                     // Maj(a,b,c)
965         eor     w17,w9,w22,ror#22       // Sigma0(a)
966         eor     w7,w7,w0,lsr#10 // sigma1(X[i+14])
967         add     w2,w2,w11
968         add     w25,w25,w21                     // d+=h
969         add     w21,w21,w28                     // h+=Maj(a,b,c)
970         ldr     w28,[x30],#4            // *K++, w19 in next round
971         add     w2,w2,w8
972         add     w21,w21,w17                     // h+=Sigma0(a)
973         add     w2,w2,w7
974         ldr     w7,[sp,#0]
975         str     w10,[sp,#12]
976         ror     w16,w25,#6
977         add     w20,w20,w28                     // h+=K[i]
978         ror     w9,w4,#7
979         and     w17,w26,w25
980         ror     w8,w1,#17
981         bic     w28,w27,w25
982         ror     w10,w21,#2
983         add     w20,w20,w2                      // h+=X[i]
984         eor     w16,w16,w25,ror#11
985         eor     w9,w9,w4,ror#18
986         orr     w17,w17,w28                     // Ch(e,f,g)
987         eor     w28,w21,w22                     // a^b, b^c in next round
988         eor     w16,w16,w25,ror#25      // Sigma1(e)
989         eor     w10,w10,w21,ror#13
990         add     w20,w20,w17                     // h+=Ch(e,f,g)
991         and     w19,w19,w28                     // (b^c)&=(a^b)
992         eor     w8,w8,w1,ror#19
993         eor     w9,w9,w4,lsr#3  // sigma0(X[i+1])
994         add     w20,w20,w16                     // h+=Sigma1(e)
995         eor     w19,w19,w22                     // Maj(a,b,c)
996         eor     w17,w10,w21,ror#22      // Sigma0(a)
997         eor     w8,w8,w1,lsr#10 // sigma1(X[i+14])
998         add     w3,w3,w12
999         add     w24,w24,w20                     // d+=h
1000         add     w20,w20,w19                     // h+=Maj(a,b,c)
1001         ldr     w19,[x30],#4            // *K++, w28 in next round
1002         add     w3,w3,w9
1003         add     w20,w20,w17                     // h+=Sigma0(a)
1004         add     w3,w3,w8
1005         cbnz    w19,.Loop_16_xx
1006
1007         ldp     x0,x2,[x29,#96]
1008         ldr     x1,[x29,#112]
1009         sub     x30,x30,#260            // rewind
1010
1011         ldp     w3,w4,[x0]
1012         ldp     w5,w6,[x0,#2*4]
1013         add     x1,x1,#14*4                     // advance input pointer
1014         ldp     w7,w8,[x0,#4*4]
1015         add     w20,w20,w3
1016         ldp     w9,w10,[x0,#6*4]
1017         add     w21,w21,w4
1018         add     w22,w22,w5
1019         add     w23,w23,w6
1020         stp     w20,w21,[x0]
1021         add     w24,w24,w7
1022         add     w25,w25,w8
1023         stp     w22,w23,[x0,#2*4]
1024         add     w26,w26,w9
1025         add     w27,w27,w10
1026         cmp     x1,x2
1027         stp     w24,w25,[x0,#4*4]
1028         stp     w26,w27,[x0,#6*4]
1029         b.ne    .Loop
1030
1031         ldp     x19,x20,[x29,#16]
1032         add     sp,sp,#4*4
1033         ldp     x21,x22,[x29,#32]
1034         ldp     x23,x24,[x29,#48]
1035         ldp     x25,x26,[x29,#64]
1036         ldp     x27,x28,[x29,#80]
1037         ldp     x29,x30,[sp],#128
1038         ret
1039 .size   sha256_block_data_order,.-sha256_block_data_order
1040
1041 .align  6
1042 .type   .LK256,%object
1043 .LK256:
1044         .long   0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
1045         .long   0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
1046         .long   0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
1047         .long   0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
1048         .long   0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
1049         .long   0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
1050         .long   0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
1051         .long   0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
1052         .long   0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
1053         .long   0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
1054         .long   0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
1055         .long   0xd192e819,0xd6990624,0xf40e3585,0x106aa070
1056         .long   0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
1057         .long   0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
1058         .long   0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
1059         .long   0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
1060         .long   0       //terminator
1061 .size   .LK256,.-.LK256
1062 #ifndef __KERNEL__
1063 .align  3
1064 .LOPENSSL_armcap_P:
1065 # ifdef __ILP32__
1066         .long   OPENSSL_armcap_P-.
1067 # else
1068         .quad   OPENSSL_armcap_P-.
1069 # endif
1070 #endif
1071 .asciz  "SHA256 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
1072 .align  2
1073 #ifndef __KERNEL__
1074 .type   sha256_block_armv8,%function
1075 .align  6
1076 sha256_block_armv8:
1077 .Lv8_entry:
1078         stp             x29,x30,[sp,#-16]!
1079         add             x29,sp,#0
1080
1081         ld1             {v0.4s,v1.4s},[x0]
1082         adr             x3,.LK256
1083
1084 .Loop_hw:
1085         ld1             {v4.16b-v7.16b},[x1],#64
1086         sub             x2,x2,#1
1087         ld1             {v16.4s},[x3],#16
1088         rev32           v4.16b,v4.16b
1089         rev32           v5.16b,v5.16b
1090         rev32           v6.16b,v6.16b
1091         rev32           v7.16b,v7.16b
1092         orr             v18.16b,v0.16b,v0.16b           // offload
1093         orr             v19.16b,v1.16b,v1.16b
1094         ld1             {v17.4s},[x3],#16
1095         add             v16.4s,v16.4s,v4.4s
1096         .inst   0x5e2828a4      //sha256su0 v4.16b,v5.16b
1097         orr             v2.16b,v0.16b,v0.16b
1098         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1099         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1100         .inst   0x5e0760c4      //sha256su1 v4.16b,v6.16b,v7.16b
1101         ld1             {v16.4s},[x3],#16
1102         add             v17.4s,v17.4s,v5.4s
1103         .inst   0x5e2828c5      //sha256su0 v5.16b,v6.16b
1104         orr             v2.16b,v0.16b,v0.16b
1105         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1106         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1107         .inst   0x5e0460e5      //sha256su1 v5.16b,v7.16b,v4.16b
1108         ld1             {v17.4s},[x3],#16
1109         add             v16.4s,v16.4s,v6.4s
1110         .inst   0x5e2828e6      //sha256su0 v6.16b,v7.16b
1111         orr             v2.16b,v0.16b,v0.16b
1112         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1113         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1114         .inst   0x5e056086      //sha256su1 v6.16b,v4.16b,v5.16b
1115         ld1             {v16.4s},[x3],#16
1116         add             v17.4s,v17.4s,v7.4s
1117         .inst   0x5e282887      //sha256su0 v7.16b,v4.16b
1118         orr             v2.16b,v0.16b,v0.16b
1119         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1120         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1121         .inst   0x5e0660a7      //sha256su1 v7.16b,v5.16b,v6.16b
1122         ld1             {v17.4s},[x3],#16
1123         add             v16.4s,v16.4s,v4.4s
1124         .inst   0x5e2828a4      //sha256su0 v4.16b,v5.16b
1125         orr             v2.16b,v0.16b,v0.16b
1126         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1127         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1128         .inst   0x5e0760c4      //sha256su1 v4.16b,v6.16b,v7.16b
1129         ld1             {v16.4s},[x3],#16
1130         add             v17.4s,v17.4s,v5.4s
1131         .inst   0x5e2828c5      //sha256su0 v5.16b,v6.16b
1132         orr             v2.16b,v0.16b,v0.16b
1133         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1134         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1135         .inst   0x5e0460e5      //sha256su1 v5.16b,v7.16b,v4.16b
1136         ld1             {v17.4s},[x3],#16
1137         add             v16.4s,v16.4s,v6.4s
1138         .inst   0x5e2828e6      //sha256su0 v6.16b,v7.16b
1139         orr             v2.16b,v0.16b,v0.16b
1140         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1141         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1142         .inst   0x5e056086      //sha256su1 v6.16b,v4.16b,v5.16b
1143         ld1             {v16.4s},[x3],#16
1144         add             v17.4s,v17.4s,v7.4s
1145         .inst   0x5e282887      //sha256su0 v7.16b,v4.16b
1146         orr             v2.16b,v0.16b,v0.16b
1147         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1148         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1149         .inst   0x5e0660a7      //sha256su1 v7.16b,v5.16b,v6.16b
1150         ld1             {v17.4s},[x3],#16
1151         add             v16.4s,v16.4s,v4.4s
1152         .inst   0x5e2828a4      //sha256su0 v4.16b,v5.16b
1153         orr             v2.16b,v0.16b,v0.16b
1154         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1155         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1156         .inst   0x5e0760c4      //sha256su1 v4.16b,v6.16b,v7.16b
1157         ld1             {v16.4s},[x3],#16
1158         add             v17.4s,v17.4s,v5.4s
1159         .inst   0x5e2828c5      //sha256su0 v5.16b,v6.16b
1160         orr             v2.16b,v0.16b,v0.16b
1161         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1162         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1163         .inst   0x5e0460e5      //sha256su1 v5.16b,v7.16b,v4.16b
1164         ld1             {v17.4s},[x3],#16
1165         add             v16.4s,v16.4s,v6.4s
1166         .inst   0x5e2828e6      //sha256su0 v6.16b,v7.16b
1167         orr             v2.16b,v0.16b,v0.16b
1168         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1169         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1170         .inst   0x5e056086      //sha256su1 v6.16b,v4.16b,v5.16b
1171         ld1             {v16.4s},[x3],#16
1172         add             v17.4s,v17.4s,v7.4s
1173         .inst   0x5e282887      //sha256su0 v7.16b,v4.16b
1174         orr             v2.16b,v0.16b,v0.16b
1175         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1176         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1177         .inst   0x5e0660a7      //sha256su1 v7.16b,v5.16b,v6.16b
1178         ld1             {v17.4s},[x3],#16
1179         add             v16.4s,v16.4s,v4.4s
1180         orr             v2.16b,v0.16b,v0.16b
1181         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1182         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1183
1184         ld1             {v16.4s},[x3],#16
1185         add             v17.4s,v17.4s,v5.4s
1186         orr             v2.16b,v0.16b,v0.16b
1187         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1188         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1189
1190         ld1             {v17.4s},[x3]
1191         add             v16.4s,v16.4s,v6.4s
1192         sub             x3,x3,#64*4-16  // rewind
1193         orr             v2.16b,v0.16b,v0.16b
1194         .inst   0x5e104020      //sha256h v0.16b,v1.16b,v16.4s
1195         .inst   0x5e105041      //sha256h2 v1.16b,v2.16b,v16.4s
1196
1197         add             v17.4s,v17.4s,v7.4s
1198         orr             v2.16b,v0.16b,v0.16b
1199         .inst   0x5e114020      //sha256h v0.16b,v1.16b,v17.4s
1200         .inst   0x5e115041      //sha256h2 v1.16b,v2.16b,v17.4s
1201
1202         add             v0.4s,v0.4s,v18.4s
1203         add             v1.4s,v1.4s,v19.4s
1204
1205         cbnz            x2,.Loop_hw
1206
1207         st1             {v0.4s,v1.4s},[x0]
1208
1209         ldr             x29,[sp],#16
1210         ret
1211 .size   sha256_block_armv8,.-sha256_block_armv8
1212 #endif
1213 #ifdef  __KERNEL__
1214 .globl  sha256_block_neon
1215 #endif
1216 .type   sha256_block_neon,%function
1217 .align  4
1218 sha256_block_neon:
1219 .Lneon_entry:
1220         stp     x29, x30, [sp, #-16]!
1221         mov     x29, sp
1222         sub     sp,sp,#16*4
1223
1224         adr     x16,.LK256
1225         add     x2,x1,x2,lsl#6  // len to point at the end of inp
1226
1227         ld1     {v0.16b},[x1], #16
1228         ld1     {v1.16b},[x1], #16
1229         ld1     {v2.16b},[x1], #16
1230         ld1     {v3.16b},[x1], #16
1231         ld1     {v4.4s},[x16], #16
1232         ld1     {v5.4s},[x16], #16
1233         ld1     {v6.4s},[x16], #16
1234         ld1     {v7.4s},[x16], #16
1235         rev32   v0.16b,v0.16b           // yes, even on
1236         rev32   v1.16b,v1.16b           // big-endian
1237         rev32   v2.16b,v2.16b
1238         rev32   v3.16b,v3.16b
1239         mov     x17,sp
1240         add     v4.4s,v4.4s,v0.4s
1241         add     v5.4s,v5.4s,v1.4s
1242         add     v6.4s,v6.4s,v2.4s
1243         st1     {v4.4s-v5.4s},[x17], #32
1244         add     v7.4s,v7.4s,v3.4s
1245         st1     {v6.4s-v7.4s},[x17]
1246         sub     x17,x17,#32
1247
1248         ldp     w3,w4,[x0]
1249         ldp     w5,w6,[x0,#8]
1250         ldp     w7,w8,[x0,#16]
1251         ldp     w9,w10,[x0,#24]
1252         ldr     w12,[sp,#0]
1253         mov     w13,wzr
1254         eor     w14,w4,w5
1255         mov     w15,wzr
1256         b       .L_00_48
1257
1258 .align  4
1259 .L_00_48:
1260         ext     v4.16b,v0.16b,v1.16b,#4
1261         add     w10,w10,w12
1262         add     w3,w3,w15
1263         and     w12,w8,w7
1264         bic     w15,w9,w7
1265         ext     v7.16b,v2.16b,v3.16b,#4
1266         eor     w11,w7,w7,ror#5
1267         add     w3,w3,w13
1268         mov     d19,v3.d[1]
1269         orr     w12,w12,w15
1270         eor     w11,w11,w7,ror#19
1271         ushr    v6.4s,v4.4s,#7
1272         eor     w15,w3,w3,ror#11
1273         ushr    v5.4s,v4.4s,#3
1274         add     w10,w10,w12
1275         add     v0.4s,v0.4s,v7.4s
1276         ror     w11,w11,#6
1277         sli     v6.4s,v4.4s,#25
1278         eor     w13,w3,w4
1279         eor     w15,w15,w3,ror#20
1280         ushr    v7.4s,v4.4s,#18
1281         add     w10,w10,w11
1282         ldr     w12,[sp,#4]
1283         and     w14,w14,w13
1284         eor     v5.16b,v5.16b,v6.16b
1285         ror     w15,w15,#2
1286         add     w6,w6,w10
1287         sli     v7.4s,v4.4s,#14
1288         eor     w14,w14,w4
1289         ushr    v16.4s,v19.4s,#17
1290         add     w9,w9,w12
1291         add     w10,w10,w15
1292         and     w12,w7,w6
1293         eor     v5.16b,v5.16b,v7.16b
1294         bic     w15,w8,w6
1295         eor     w11,w6,w6,ror#5
1296         sli     v16.4s,v19.4s,#15
1297         add     w10,w10,w14
1298         orr     w12,w12,w15
1299         ushr    v17.4s,v19.4s,#10
1300         eor     w11,w11,w6,ror#19
1301         eor     w15,w10,w10,ror#11
1302         ushr    v7.4s,v19.4s,#19
1303         add     w9,w9,w12
1304         ror     w11,w11,#6
1305         add     v0.4s,v0.4s,v5.4s
1306         eor     w14,w10,w3
1307         eor     w15,w15,w10,ror#20
1308         sli     v7.4s,v19.4s,#13
1309         add     w9,w9,w11
1310         ldr     w12,[sp,#8]
1311         and     w13,w13,w14
1312         eor     v17.16b,v17.16b,v16.16b
1313         ror     w15,w15,#2
1314         add     w5,w5,w9
1315         eor     w13,w13,w3
1316         eor     v17.16b,v17.16b,v7.16b
1317         add     w8,w8,w12
1318         add     w9,w9,w15
1319         and     w12,w6,w5
1320         add     v0.4s,v0.4s,v17.4s
1321         bic     w15,w7,w5
1322         eor     w11,w5,w5,ror#5
1323         add     w9,w9,w13
1324         ushr    v18.4s,v0.4s,#17
1325         orr     w12,w12,w15
1326         ushr    v19.4s,v0.4s,#10
1327         eor     w11,w11,w5,ror#19
1328         eor     w15,w9,w9,ror#11
1329         sli     v18.4s,v0.4s,#15
1330         add     w8,w8,w12
1331         ushr    v17.4s,v0.4s,#19
1332         ror     w11,w11,#6
1333         eor     w13,w9,w10
1334         eor     v19.16b,v19.16b,v18.16b
1335         eor     w15,w15,w9,ror#20
1336         add     w8,w8,w11
1337         sli     v17.4s,v0.4s,#13
1338         ldr     w12,[sp,#12]
1339         and     w14,w14,w13
1340         ror     w15,w15,#2
1341         ld1     {v4.4s},[x16], #16
1342         add     w4,w4,w8
1343         eor     v19.16b,v19.16b,v17.16b
1344         eor     w14,w14,w10
1345         eor     v17.16b,v17.16b,v17.16b
1346         add     w7,w7,w12
1347         add     w8,w8,w15
1348         and     w12,w5,w4
1349         mov     v17.d[1],v19.d[0]
1350         bic     w15,w6,w4
1351         eor     w11,w4,w4,ror#5
1352         add     w8,w8,w14
1353         add     v0.4s,v0.4s,v17.4s
1354         orr     w12,w12,w15
1355         eor     w11,w11,w4,ror#19
1356         eor     w15,w8,w8,ror#11
1357         add     v4.4s,v4.4s,v0.4s
1358         add     w7,w7,w12
1359         ror     w11,w11,#6
1360         eor     w14,w8,w9
1361         eor     w15,w15,w8,ror#20
1362         add     w7,w7,w11
1363         ldr     w12,[sp,#16]
1364         and     w13,w13,w14
1365         ror     w15,w15,#2
1366         add     w3,w3,w7
1367         eor     w13,w13,w9
1368         st1     {v4.4s},[x17], #16
1369         ext     v4.16b,v1.16b,v2.16b,#4
1370         add     w6,w6,w12
1371         add     w7,w7,w15
1372         and     w12,w4,w3
1373         bic     w15,w5,w3
1374         ext     v7.16b,v3.16b,v0.16b,#4
1375         eor     w11,w3,w3,ror#5
1376         add     w7,w7,w13
1377         mov     d19,v0.d[1]
1378         orr     w12,w12,w15
1379         eor     w11,w11,w3,ror#19
1380         ushr    v6.4s,v4.4s,#7
1381         eor     w15,w7,w7,ror#11
1382         ushr    v5.4s,v4.4s,#3
1383         add     w6,w6,w12
1384         add     v1.4s,v1.4s,v7.4s
1385         ror     w11,w11,#6
1386         sli     v6.4s,v4.4s,#25
1387         eor     w13,w7,w8
1388         eor     w15,w15,w7,ror#20
1389         ushr    v7.4s,v4.4s,#18
1390         add     w6,w6,w11
1391         ldr     w12,[sp,#20]
1392         and     w14,w14,w13
1393         eor     v5.16b,v5.16b,v6.16b
1394         ror     w15,w15,#2
1395         add     w10,w10,w6
1396         sli     v7.4s,v4.4s,#14
1397         eor     w14,w14,w8
1398         ushr    v16.4s,v19.4s,#17
1399         add     w5,w5,w12
1400         add     w6,w6,w15
1401         and     w12,w3,w10
1402         eor     v5.16b,v5.16b,v7.16b
1403         bic     w15,w4,w10
1404         eor     w11,w10,w10,ror#5
1405         sli     v16.4s,v19.4s,#15
1406         add     w6,w6,w14
1407         orr     w12,w12,w15
1408         ushr    v17.4s,v19.4s,#10
1409         eor     w11,w11,w10,ror#19
1410         eor     w15,w6,w6,ror#11
1411         ushr    v7.4s,v19.4s,#19
1412         add     w5,w5,w12
1413         ror     w11,w11,#6
1414         add     v1.4s,v1.4s,v5.4s
1415         eor     w14,w6,w7
1416         eor     w15,w15,w6,ror#20
1417         sli     v7.4s,v19.4s,#13
1418         add     w5,w5,w11
1419         ldr     w12,[sp,#24]
1420         and     w13,w13,w14
1421         eor     v17.16b,v17.16b,v16.16b
1422         ror     w15,w15,#2
1423         add     w9,w9,w5
1424         eor     w13,w13,w7
1425         eor     v17.16b,v17.16b,v7.16b
1426         add     w4,w4,w12
1427         add     w5,w5,w15
1428         and     w12,w10,w9
1429         add     v1.4s,v1.4s,v17.4s
1430         bic     w15,w3,w9
1431         eor     w11,w9,w9,ror#5
1432         add     w5,w5,w13
1433         ushr    v18.4s,v1.4s,#17
1434         orr     w12,w12,w15
1435         ushr    v19.4s,v1.4s,#10
1436         eor     w11,w11,w9,ror#19
1437         eor     w15,w5,w5,ror#11
1438         sli     v18.4s,v1.4s,#15
1439         add     w4,w4,w12
1440         ushr    v17.4s,v1.4s,#19
1441         ror     w11,w11,#6
1442         eor     w13,w5,w6
1443         eor     v19.16b,v19.16b,v18.16b
1444         eor     w15,w15,w5,ror#20
1445         add     w4,w4,w11
1446         sli     v17.4s,v1.4s,#13
1447         ldr     w12,[sp,#28]
1448         and     w14,w14,w13
1449         ror     w15,w15,#2
1450         ld1     {v4.4s},[x16], #16
1451         add     w8,w8,w4
1452         eor     v19.16b,v19.16b,v17.16b
1453         eor     w14,w14,w6
1454         eor     v17.16b,v17.16b,v17.16b
1455         add     w3,w3,w12
1456         add     w4,w4,w15
1457         and     w12,w9,w8
1458         mov     v17.d[1],v19.d[0]
1459         bic     w15,w10,w8
1460         eor     w11,w8,w8,ror#5
1461         add     w4,w4,w14
1462         add     v1.4s,v1.4s,v17.4s
1463         orr     w12,w12,w15
1464         eor     w11,w11,w8,ror#19
1465         eor     w15,w4,w4,ror#11
1466         add     v4.4s,v4.4s,v1.4s
1467         add     w3,w3,w12
1468         ror     w11,w11,#6
1469         eor     w14,w4,w5
1470         eor     w15,w15,w4,ror#20
1471         add     w3,w3,w11
1472         ldr     w12,[sp,#32]
1473         and     w13,w13,w14
1474         ror     w15,w15,#2
1475         add     w7,w7,w3
1476         eor     w13,w13,w5
1477         st1     {v4.4s},[x17], #16
1478         ext     v4.16b,v2.16b,v3.16b,#4
1479         add     w10,w10,w12
1480         add     w3,w3,w15
1481         and     w12,w8,w7
1482         bic     w15,w9,w7
1483         ext     v7.16b,v0.16b,v1.16b,#4
1484         eor     w11,w7,w7,ror#5
1485         add     w3,w3,w13
1486         mov     d19,v1.d[1]
1487         orr     w12,w12,w15
1488         eor     w11,w11,w7,ror#19
1489         ushr    v6.4s,v4.4s,#7
1490         eor     w15,w3,w3,ror#11
1491         ushr    v5.4s,v4.4s,#3
1492         add     w10,w10,w12
1493         add     v2.4s,v2.4s,v7.4s
1494         ror     w11,w11,#6
1495         sli     v6.4s,v4.4s,#25
1496         eor     w13,w3,w4
1497         eor     w15,w15,w3,ror#20
1498         ushr    v7.4s,v4.4s,#18
1499         add     w10,w10,w11
1500         ldr     w12,[sp,#36]
1501         and     w14,w14,w13
1502         eor     v5.16b,v5.16b,v6.16b
1503         ror     w15,w15,#2
1504         add     w6,w6,w10
1505         sli     v7.4s,v4.4s,#14
1506         eor     w14,w14,w4
1507         ushr    v16.4s,v19.4s,#17
1508         add     w9,w9,w12
1509         add     w10,w10,w15
1510         and     w12,w7,w6
1511         eor     v5.16b,v5.16b,v7.16b
1512         bic     w15,w8,w6
1513         eor     w11,w6,w6,ror#5
1514         sli     v16.4s,v19.4s,#15
1515         add     w10,w10,w14
1516         orr     w12,w12,w15
1517         ushr    v17.4s,v19.4s,#10
1518         eor     w11,w11,w6,ror#19
1519         eor     w15,w10,w10,ror#11
1520         ushr    v7.4s,v19.4s,#19
1521         add     w9,w9,w12
1522         ror     w11,w11,#6
1523         add     v2.4s,v2.4s,v5.4s
1524         eor     w14,w10,w3
1525         eor     w15,w15,w10,ror#20
1526         sli     v7.4s,v19.4s,#13
1527         add     w9,w9,w11
1528         ldr     w12,[sp,#40]
1529         and     w13,w13,w14
1530         eor     v17.16b,v17.16b,v16.16b
1531         ror     w15,w15,#2
1532         add     w5,w5,w9
1533         eor     w13,w13,w3
1534         eor     v17.16b,v17.16b,v7.16b
1535         add     w8,w8,w12
1536         add     w9,w9,w15
1537         and     w12,w6,w5
1538         add     v2.4s,v2.4s,v17.4s
1539         bic     w15,w7,w5
1540         eor     w11,w5,w5,ror#5
1541         add     w9,w9,w13
1542         ushr    v18.4s,v2.4s,#17
1543         orr     w12,w12,w15
1544         ushr    v19.4s,v2.4s,#10
1545         eor     w11,w11,w5,ror#19
1546         eor     w15,w9,w9,ror#11
1547         sli     v18.4s,v2.4s,#15
1548         add     w8,w8,w12
1549         ushr    v17.4s,v2.4s,#19
1550         ror     w11,w11,#6
1551         eor     w13,w9,w10
1552         eor     v19.16b,v19.16b,v18.16b
1553         eor     w15,w15,w9,ror#20
1554         add     w8,w8,w11
1555         sli     v17.4s,v2.4s,#13
1556         ldr     w12,[sp,#44]
1557         and     w14,w14,w13
1558         ror     w15,w15,#2
1559         ld1     {v4.4s},[x16], #16
1560         add     w4,w4,w8
1561         eor     v19.16b,v19.16b,v17.16b
1562         eor     w14,w14,w10
1563         eor     v17.16b,v17.16b,v17.16b
1564         add     w7,w7,w12
1565         add     w8,w8,w15
1566         and     w12,w5,w4
1567         mov     v17.d[1],v19.d[0]
1568         bic     w15,w6,w4
1569         eor     w11,w4,w4,ror#5
1570         add     w8,w8,w14
1571         add     v2.4s,v2.4s,v17.4s
1572         orr     w12,w12,w15
1573         eor     w11,w11,w4,ror#19
1574         eor     w15,w8,w8,ror#11
1575         add     v4.4s,v4.4s,v2.4s
1576         add     w7,w7,w12
1577         ror     w11,w11,#6
1578         eor     w14,w8,w9
1579         eor     w15,w15,w8,ror#20
1580         add     w7,w7,w11
1581         ldr     w12,[sp,#48]
1582         and     w13,w13,w14
1583         ror     w15,w15,#2
1584         add     w3,w3,w7
1585         eor     w13,w13,w9
1586         st1     {v4.4s},[x17], #16
1587         ext     v4.16b,v3.16b,v0.16b,#4
1588         add     w6,w6,w12
1589         add     w7,w7,w15
1590         and     w12,w4,w3
1591         bic     w15,w5,w3
1592         ext     v7.16b,v1.16b,v2.16b,#4
1593         eor     w11,w3,w3,ror#5
1594         add     w7,w7,w13
1595         mov     d19,v2.d[1]
1596         orr     w12,w12,w15
1597         eor     w11,w11,w3,ror#19
1598         ushr    v6.4s,v4.4s,#7
1599         eor     w15,w7,w7,ror#11
1600         ushr    v5.4s,v4.4s,#3
1601         add     w6,w6,w12
1602         add     v3.4s,v3.4s,v7.4s
1603         ror     w11,w11,#6
1604         sli     v6.4s,v4.4s,#25
1605         eor     w13,w7,w8
1606         eor     w15,w15,w7,ror#20
1607         ushr    v7.4s,v4.4s,#18
1608         add     w6,w6,w11
1609         ldr     w12,[sp,#52]
1610         and     w14,w14,w13
1611         eor     v5.16b,v5.16b,v6.16b
1612         ror     w15,w15,#2
1613         add     w10,w10,w6
1614         sli     v7.4s,v4.4s,#14
1615         eor     w14,w14,w8
1616         ushr    v16.4s,v19.4s,#17
1617         add     w5,w5,w12
1618         add     w6,w6,w15
1619         and     w12,w3,w10
1620         eor     v5.16b,v5.16b,v7.16b
1621         bic     w15,w4,w10
1622         eor     w11,w10,w10,ror#5
1623         sli     v16.4s,v19.4s,#15
1624         add     w6,w6,w14
1625         orr     w12,w12,w15
1626         ushr    v17.4s,v19.4s,#10
1627         eor     w11,w11,w10,ror#19
1628         eor     w15,w6,w6,ror#11
1629         ushr    v7.4s,v19.4s,#19
1630         add     w5,w5,w12
1631         ror     w11,w11,#6
1632         add     v3.4s,v3.4s,v5.4s
1633         eor     w14,w6,w7
1634         eor     w15,w15,w6,ror#20
1635         sli     v7.4s,v19.4s,#13
1636         add     w5,w5,w11
1637         ldr     w12,[sp,#56]
1638         and     w13,w13,w14
1639         eor     v17.16b,v17.16b,v16.16b
1640         ror     w15,w15,#2
1641         add     w9,w9,w5
1642         eor     w13,w13,w7
1643         eor     v17.16b,v17.16b,v7.16b
1644         add     w4,w4,w12
1645         add     w5,w5,w15
1646         and     w12,w10,w9
1647         add     v3.4s,v3.4s,v17.4s
1648         bic     w15,w3,w9
1649         eor     w11,w9,w9,ror#5
1650         add     w5,w5,w13
1651         ushr    v18.4s,v3.4s,#17
1652         orr     w12,w12,w15
1653         ushr    v19.4s,v3.4s,#10
1654         eor     w11,w11,w9,ror#19
1655         eor     w15,w5,w5,ror#11
1656         sli     v18.4s,v3.4s,#15
1657         add     w4,w4,w12
1658         ushr    v17.4s,v3.4s,#19
1659         ror     w11,w11,#6
1660         eor     w13,w5,w6
1661         eor     v19.16b,v19.16b,v18.16b
1662         eor     w15,w15,w5,ror#20
1663         add     w4,w4,w11
1664         sli     v17.4s,v3.4s,#13
1665         ldr     w12,[sp,#60]
1666         and     w14,w14,w13
1667         ror     w15,w15,#2
1668         ld1     {v4.4s},[x16], #16
1669         add     w8,w8,w4
1670         eor     v19.16b,v19.16b,v17.16b
1671         eor     w14,w14,w6
1672         eor     v17.16b,v17.16b,v17.16b
1673         add     w3,w3,w12
1674         add     w4,w4,w15
1675         and     w12,w9,w8
1676         mov     v17.d[1],v19.d[0]
1677         bic     w15,w10,w8
1678         eor     w11,w8,w8,ror#5
1679         add     w4,w4,w14
1680         add     v3.4s,v3.4s,v17.4s
1681         orr     w12,w12,w15
1682         eor     w11,w11,w8,ror#19
1683         eor     w15,w4,w4,ror#11
1684         add     v4.4s,v4.4s,v3.4s
1685         add     w3,w3,w12
1686         ror     w11,w11,#6
1687         eor     w14,w4,w5
1688         eor     w15,w15,w4,ror#20
1689         add     w3,w3,w11
1690         ldr     w12,[x16]
1691         and     w13,w13,w14
1692         ror     w15,w15,#2
1693         add     w7,w7,w3
1694         eor     w13,w13,w5
1695         st1     {v4.4s},[x17], #16
1696         cmp     w12,#0                          // check for K256 terminator
1697         ldr     w12,[sp,#0]
1698         sub     x17,x17,#64
1699         bne     .L_00_48
1700
1701         sub     x16,x16,#256            // rewind x16
1702         cmp     x1,x2
1703         mov     x17, #64
1704         csel    x17, x17, xzr, eq
1705         sub     x1,x1,x17                       // avoid SEGV
1706         mov     x17,sp
1707         add     w10,w10,w12
1708         add     w3,w3,w15
1709         and     w12,w8,w7
1710         ld1     {v0.16b},[x1],#16
1711         bic     w15,w9,w7
1712         eor     w11,w7,w7,ror#5
1713         ld1     {v4.4s},[x16],#16
1714         add     w3,w3,w13
1715         orr     w12,w12,w15
1716         eor     w11,w11,w7,ror#19
1717         eor     w15,w3,w3,ror#11
1718         rev32   v0.16b,v0.16b
1719         add     w10,w10,w12
1720         ror     w11,w11,#6
1721         eor     w13,w3,w4
1722         eor     w15,w15,w3,ror#20
1723         add     v4.4s,v4.4s,v0.4s
1724         add     w10,w10,w11
1725         ldr     w12,[sp,#4]
1726         and     w14,w14,w13
1727         ror     w15,w15,#2
1728         add     w6,w6,w10
1729         eor     w14,w14,w4
1730         add     w9,w9,w12
1731         add     w10,w10,w15
1732         and     w12,w7,w6
1733         bic     w15,w8,w6
1734         eor     w11,w6,w6,ror#5
1735         add     w10,w10,w14
1736         orr     w12,w12,w15
1737         eor     w11,w11,w6,ror#19
1738         eor     w15,w10,w10,ror#11
1739         add     w9,w9,w12
1740         ror     w11,w11,#6
1741         eor     w14,w10,w3
1742         eor     w15,w15,w10,ror#20
1743         add     w9,w9,w11
1744         ldr     w12,[sp,#8]
1745         and     w13,w13,w14
1746         ror     w15,w15,#2
1747         add     w5,w5,w9
1748         eor     w13,w13,w3
1749         add     w8,w8,w12
1750         add     w9,w9,w15
1751         and     w12,w6,w5
1752         bic     w15,w7,w5
1753         eor     w11,w5,w5,ror#5
1754         add     w9,w9,w13
1755         orr     w12,w12,w15
1756         eor     w11,w11,w5,ror#19
1757         eor     w15,w9,w9,ror#11
1758         add     w8,w8,w12
1759         ror     w11,w11,#6
1760         eor     w13,w9,w10
1761         eor     w15,w15,w9,ror#20
1762         add     w8,w8,w11
1763         ldr     w12,[sp,#12]
1764         and     w14,w14,w13
1765         ror     w15,w15,#2
1766         add     w4,w4,w8
1767         eor     w14,w14,w10
1768         add     w7,w7,w12
1769         add     w8,w8,w15
1770         and     w12,w5,w4
1771         bic     w15,w6,w4
1772         eor     w11,w4,w4,ror#5
1773         add     w8,w8,w14
1774         orr     w12,w12,w15
1775         eor     w11,w11,w4,ror#19
1776         eor     w15,w8,w8,ror#11
1777         add     w7,w7,w12
1778         ror     w11,w11,#6
1779         eor     w14,w8,w9
1780         eor     w15,w15,w8,ror#20
1781         add     w7,w7,w11
1782         ldr     w12,[sp,#16]
1783         and     w13,w13,w14
1784         ror     w15,w15,#2
1785         add     w3,w3,w7
1786         eor     w13,w13,w9
1787         st1     {v4.4s},[x17], #16
1788         add     w6,w6,w12
1789         add     w7,w7,w15
1790         and     w12,w4,w3
1791         ld1     {v1.16b},[x1],#16
1792         bic     w15,w5,w3
1793         eor     w11,w3,w3,ror#5
1794         ld1     {v4.4s},[x16],#16
1795         add     w7,w7,w13
1796         orr     w12,w12,w15
1797         eor     w11,w11,w3,ror#19
1798         eor     w15,w7,w7,ror#11
1799         rev32   v1.16b,v1.16b
1800         add     w6,w6,w12
1801         ror     w11,w11,#6
1802         eor     w13,w7,w8
1803         eor     w15,w15,w7,ror#20
1804         add     v4.4s,v4.4s,v1.4s
1805         add     w6,w6,w11
1806         ldr     w12,[sp,#20]
1807         and     w14,w14,w13
1808         ror     w15,w15,#2
1809         add     w10,w10,w6
1810         eor     w14,w14,w8
1811         add     w5,w5,w12
1812         add     w6,w6,w15
1813         and     w12,w3,w10
1814         bic     w15,w4,w10
1815         eor     w11,w10,w10,ror#5
1816         add     w6,w6,w14
1817         orr     w12,w12,w15
1818         eor     w11,w11,w10,ror#19
1819         eor     w15,w6,w6,ror#11
1820         add     w5,w5,w12
1821         ror     w11,w11,#6
1822         eor     w14,w6,w7
1823         eor     w15,w15,w6,ror#20
1824         add     w5,w5,w11
1825         ldr     w12,[sp,#24]
1826         and     w13,w13,w14
1827         ror     w15,w15,#2
1828         add     w9,w9,w5
1829         eor     w13,w13,w7
1830         add     w4,w4,w12
1831         add     w5,w5,w15
1832         and     w12,w10,w9
1833         bic     w15,w3,w9
1834         eor     w11,w9,w9,ror#5
1835         add     w5,w5,w13
1836         orr     w12,w12,w15
1837         eor     w11,w11,w9,ror#19
1838         eor     w15,w5,w5,ror#11
1839         add     w4,w4,w12
1840         ror     w11,w11,#6
1841         eor     w13,w5,w6
1842         eor     w15,w15,w5,ror#20
1843         add     w4,w4,w11
1844         ldr     w12,[sp,#28]
1845         and     w14,w14,w13
1846         ror     w15,w15,#2
1847         add     w8,w8,w4
1848         eor     w14,w14,w6
1849         add     w3,w3,w12
1850         add     w4,w4,w15
1851         and     w12,w9,w8
1852         bic     w15,w10,w8
1853         eor     w11,w8,w8,ror#5
1854         add     w4,w4,w14
1855         orr     w12,w12,w15
1856         eor     w11,w11,w8,ror#19
1857         eor     w15,w4,w4,ror#11
1858         add     w3,w3,w12
1859         ror     w11,w11,#6
1860         eor     w14,w4,w5
1861         eor     w15,w15,w4,ror#20
1862         add     w3,w3,w11
1863         ldr     w12,[sp,#32]
1864         and     w13,w13,w14
1865         ror     w15,w15,#2
1866         add     w7,w7,w3
1867         eor     w13,w13,w5
1868         st1     {v4.4s},[x17], #16
1869         add     w10,w10,w12
1870         add     w3,w3,w15
1871         and     w12,w8,w7
1872         ld1     {v2.16b},[x1],#16
1873         bic     w15,w9,w7
1874         eor     w11,w7,w7,ror#5
1875         ld1     {v4.4s},[x16],#16
1876         add     w3,w3,w13
1877         orr     w12,w12,w15
1878         eor     w11,w11,w7,ror#19
1879         eor     w15,w3,w3,ror#11
1880         rev32   v2.16b,v2.16b
1881         add     w10,w10,w12
1882         ror     w11,w11,#6
1883         eor     w13,w3,w4
1884         eor     w15,w15,w3,ror#20
1885         add     v4.4s,v4.4s,v2.4s
1886         add     w10,w10,w11
1887         ldr     w12,[sp,#36]
1888         and     w14,w14,w13
1889         ror     w15,w15,#2
1890         add     w6,w6,w10
1891         eor     w14,w14,w4
1892         add     w9,w9,w12
1893         add     w10,w10,w15
1894         and     w12,w7,w6
1895         bic     w15,w8,w6
1896         eor     w11,w6,w6,ror#5
1897         add     w10,w10,w14
1898         orr     w12,w12,w15
1899         eor     w11,w11,w6,ror#19
1900         eor     w15,w10,w10,ror#11
1901         add     w9,w9,w12
1902         ror     w11,w11,#6
1903         eor     w14,w10,w3
1904         eor     w15,w15,w10,ror#20
1905         add     w9,w9,w11
1906         ldr     w12,[sp,#40]
1907         and     w13,w13,w14
1908         ror     w15,w15,#2
1909         add     w5,w5,w9
1910         eor     w13,w13,w3
1911         add     w8,w8,w12
1912         add     w9,w9,w15
1913         and     w12,w6,w5
1914         bic     w15,w7,w5
1915         eor     w11,w5,w5,ror#5
1916         add     w9,w9,w13
1917         orr     w12,w12,w15
1918         eor     w11,w11,w5,ror#19
1919         eor     w15,w9,w9,ror#11
1920         add     w8,w8,w12
1921         ror     w11,w11,#6
1922         eor     w13,w9,w10
1923         eor     w15,w15,w9,ror#20
1924         add     w8,w8,w11
1925         ldr     w12,[sp,#44]
1926         and     w14,w14,w13
1927         ror     w15,w15,#2
1928         add     w4,w4,w8
1929         eor     w14,w14,w10
1930         add     w7,w7,w12
1931         add     w8,w8,w15
1932         and     w12,w5,w4
1933         bic     w15,w6,w4
1934         eor     w11,w4,w4,ror#5
1935         add     w8,w8,w14
1936         orr     w12,w12,w15
1937         eor     w11,w11,w4,ror#19
1938         eor     w15,w8,w8,ror#11
1939         add     w7,w7,w12
1940         ror     w11,w11,#6
1941         eor     w14,w8,w9
1942         eor     w15,w15,w8,ror#20
1943         add     w7,w7,w11
1944         ldr     w12,[sp,#48]
1945         and     w13,w13,w14
1946         ror     w15,w15,#2
1947         add     w3,w3,w7
1948         eor     w13,w13,w9
1949         st1     {v4.4s},[x17], #16
1950         add     w6,w6,w12
1951         add     w7,w7,w15
1952         and     w12,w4,w3
1953         ld1     {v3.16b},[x1],#16
1954         bic     w15,w5,w3
1955         eor     w11,w3,w3,ror#5
1956         ld1     {v4.4s},[x16],#16
1957         add     w7,w7,w13
1958         orr     w12,w12,w15
1959         eor     w11,w11,w3,ror#19
1960         eor     w15,w7,w7,ror#11
1961         rev32   v3.16b,v3.16b
1962         add     w6,w6,w12
1963         ror     w11,w11,#6
1964         eor     w13,w7,w8
1965         eor     w15,w15,w7,ror#20
1966         add     v4.4s,v4.4s,v3.4s
1967         add     w6,w6,w11
1968         ldr     w12,[sp,#52]
1969         and     w14,w14,w13
1970         ror     w15,w15,#2
1971         add     w10,w10,w6
1972         eor     w14,w14,w8
1973         add     w5,w5,w12
1974         add     w6,w6,w15
1975         and     w12,w3,w10
1976         bic     w15,w4,w10
1977         eor     w11,w10,w10,ror#5
1978         add     w6,w6,w14
1979         orr     w12,w12,w15
1980         eor     w11,w11,w10,ror#19
1981         eor     w15,w6,w6,ror#11
1982         add     w5,w5,w12
1983         ror     w11,w11,#6
1984         eor     w14,w6,w7
1985         eor     w15,w15,w6,ror#20
1986         add     w5,w5,w11
1987         ldr     w12,[sp,#56]
1988         and     w13,w13,w14
1989         ror     w15,w15,#2
1990         add     w9,w9,w5
1991         eor     w13,w13,w7
1992         add     w4,w4,w12
1993         add     w5,w5,w15
1994         and     w12,w10,w9
1995         bic     w15,w3,w9
1996         eor     w11,w9,w9,ror#5
1997         add     w5,w5,w13
1998         orr     w12,w12,w15
1999         eor     w11,w11,w9,ror#19
2000         eor     w15,w5,w5,ror#11
2001         add     w4,w4,w12
2002         ror     w11,w11,#6
2003         eor     w13,w5,w6
2004         eor     w15,w15,w5,ror#20
2005         add     w4,w4,w11
2006         ldr     w12,[sp,#60]
2007         and     w14,w14,w13
2008         ror     w15,w15,#2
2009         add     w8,w8,w4
2010         eor     w14,w14,w6
2011         add     w3,w3,w12
2012         add     w4,w4,w15
2013         and     w12,w9,w8
2014         bic     w15,w10,w8
2015         eor     w11,w8,w8,ror#5
2016         add     w4,w4,w14
2017         orr     w12,w12,w15
2018         eor     w11,w11,w8,ror#19
2019         eor     w15,w4,w4,ror#11
2020         add     w3,w3,w12
2021         ror     w11,w11,#6
2022         eor     w14,w4,w5
2023         eor     w15,w15,w4,ror#20
2024         add     w3,w3,w11
2025         and     w13,w13,w14
2026         ror     w15,w15,#2
2027         add     w7,w7,w3
2028         eor     w13,w13,w5
2029         st1     {v4.4s},[x17], #16
2030         add     w3,w3,w15                       // h+=Sigma0(a) from the past
2031         ldp     w11,w12,[x0,#0]
2032         add     w3,w3,w13                       // h+=Maj(a,b,c) from the past
2033         ldp     w13,w14,[x0,#8]
2034         add     w3,w3,w11                       // accumulate
2035         add     w4,w4,w12
2036         ldp     w11,w12,[x0,#16]
2037         add     w5,w5,w13
2038         add     w6,w6,w14
2039         ldp     w13,w14,[x0,#24]
2040         add     w7,w7,w11
2041         add     w8,w8,w12
2042          ldr    w12,[sp,#0]
2043         stp     w3,w4,[x0,#0]
2044         add     w9,w9,w13
2045          mov    w13,wzr
2046         stp     w5,w6,[x0,#8]
2047         add     w10,w10,w14
2048         stp     w7,w8,[x0,#16]
2049          eor    w14,w4,w5
2050         stp     w9,w10,[x0,#24]
2051          mov    w15,wzr
2052          mov    x17,sp
2053         b.ne    .L_00_48
2054
2055         ldr     x29,[x29]
2056         add     sp,sp,#16*4+16
2057         ret
2058 .size   sha256_block_neon,.-sha256_block_neon
2059 #ifndef __KERNEL__
2060 .comm   OPENSSL_armcap_P,4,4
2061 #endif