xref: /aosp_15_r20/external/boringssl/src/gen/bcm/sha256-armv8-linux.S (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL
2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand.
3*8fb009dcSAndroid Build Coastguard Worker
4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h>
5*8fb009dcSAndroid Build Coastguard Worker
6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(__ELF__)
7*8fb009dcSAndroid Build Coastguard Worker// Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved.
8*8fb009dcSAndroid Build Coastguard Worker//
9*8fb009dcSAndroid Build Coastguard Worker// Licensed under the OpenSSL license (the "License").  You may not use
10*8fb009dcSAndroid Build Coastguard Worker// this file except in compliance with the License.  You can obtain a copy
11*8fb009dcSAndroid Build Coastguard Worker// in the file LICENSE in the source distribution or at
12*8fb009dcSAndroid Build Coastguard Worker// https://www.openssl.org/source/license.html
13*8fb009dcSAndroid Build Coastguard Worker
14*8fb009dcSAndroid Build Coastguard Worker// ====================================================================
15*8fb009dcSAndroid Build Coastguard Worker// Written by Andy Polyakov <[email protected]> for the OpenSSL
16*8fb009dcSAndroid Build Coastguard Worker// project. The module is, however, dual licensed under OpenSSL and
17*8fb009dcSAndroid Build Coastguard Worker// CRYPTOGAMS licenses depending on where you obtain it. For further
18*8fb009dcSAndroid Build Coastguard Worker// details see http://www.openssl.org/~appro/cryptogams/.
19*8fb009dcSAndroid Build Coastguard Worker//
20*8fb009dcSAndroid Build Coastguard Worker// Permission to use under GPLv2 terms is granted.
21*8fb009dcSAndroid Build Coastguard Worker// ====================================================================
22*8fb009dcSAndroid Build Coastguard Worker//
23*8fb009dcSAndroid Build Coastguard Worker// SHA256/512 for ARMv8.
24*8fb009dcSAndroid Build Coastguard Worker//
25*8fb009dcSAndroid Build Coastguard Worker// Performance in cycles per processed byte and improvement coefficient
26*8fb009dcSAndroid Build Coastguard Worker// over code generated with "default" compiler:
27*8fb009dcSAndroid Build Coastguard Worker//
28*8fb009dcSAndroid Build Coastguard Worker//		SHA256-hw	SHA256(*)	SHA512
29*8fb009dcSAndroid Build Coastguard Worker// Apple A7	1.97		10.5 (+33%)	6.73 (-1%(**))
30*8fb009dcSAndroid Build Coastguard Worker// Cortex-A53	2.38		15.5 (+115%)	10.0 (+150%(***))
31*8fb009dcSAndroid Build Coastguard Worker// Cortex-A57	2.31		11.6 (+86%)	7.51 (+260%(***))
32*8fb009dcSAndroid Build Coastguard Worker// Denver	2.01		10.5 (+26%)	6.70 (+8%)
33*8fb009dcSAndroid Build Coastguard Worker// X-Gene			20.0 (+100%)	12.8 (+300%(***))
34*8fb009dcSAndroid Build Coastguard Worker// Mongoose	2.36		13.0 (+50%)	8.36 (+33%)
35*8fb009dcSAndroid Build Coastguard Worker// Kryo		1.92		17.4 (+30%)	11.2 (+8%)
36*8fb009dcSAndroid Build Coastguard Worker//
37*8fb009dcSAndroid Build Coastguard Worker// (*)	Software SHA256 results are of lesser relevance, presented
38*8fb009dcSAndroid Build Coastguard Worker//	mostly for informational purposes.
39*8fb009dcSAndroid Build Coastguard Worker// (**)	The result is a trade-off: it's possible to improve it by
40*8fb009dcSAndroid Build Coastguard Worker//	10% (or by 1 cycle per round), but at the cost of 20% loss
41*8fb009dcSAndroid Build Coastguard Worker//	on Cortex-A53 (or by 4 cycles per round).
42*8fb009dcSAndroid Build Coastguard Worker// (***)	Super-impressive coefficients over gcc-generated code are
43*8fb009dcSAndroid Build Coastguard Worker//	indication of some compiler "pathology", most notably code
44*8fb009dcSAndroid Build Coastguard Worker//	generated with -mgeneral-regs-only is significantly faster
45*8fb009dcSAndroid Build Coastguard Worker//	and the gap is only 40-90%.
46*8fb009dcSAndroid Build Coastguard Worker
47*8fb009dcSAndroid Build Coastguard Worker#ifndef	__KERNEL__
48*8fb009dcSAndroid Build Coastguard Worker# include <openssl/arm_arch.h>
49*8fb009dcSAndroid Build Coastguard Worker#endif
50*8fb009dcSAndroid Build Coastguard Worker
51*8fb009dcSAndroid Build Coastguard Worker.text
52*8fb009dcSAndroid Build Coastguard Worker
53*8fb009dcSAndroid Build Coastguard Worker.globl	sha256_block_data_order_nohw
54*8fb009dcSAndroid Build Coastguard Worker.hidden	sha256_block_data_order_nohw
55*8fb009dcSAndroid Build Coastguard Worker.type	sha256_block_data_order_nohw,%function
56*8fb009dcSAndroid Build Coastguard Worker.align	6
57*8fb009dcSAndroid Build Coastguard Workersha256_block_data_order_nohw:
58*8fb009dcSAndroid Build Coastguard Worker	AARCH64_SIGN_LINK_REGISTER
59*8fb009dcSAndroid Build Coastguard Worker	stp	x29,x30,[sp,#-128]!
60*8fb009dcSAndroid Build Coastguard Worker	add	x29,sp,#0
61*8fb009dcSAndroid Build Coastguard Worker
62*8fb009dcSAndroid Build Coastguard Worker	stp	x19,x20,[sp,#16]
63*8fb009dcSAndroid Build Coastguard Worker	stp	x21,x22,[sp,#32]
64*8fb009dcSAndroid Build Coastguard Worker	stp	x23,x24,[sp,#48]
65*8fb009dcSAndroid Build Coastguard Worker	stp	x25,x26,[sp,#64]
66*8fb009dcSAndroid Build Coastguard Worker	stp	x27,x28,[sp,#80]
67*8fb009dcSAndroid Build Coastguard Worker	sub	sp,sp,#4*4
68*8fb009dcSAndroid Build Coastguard Worker
69*8fb009dcSAndroid Build Coastguard Worker	ldp	w20,w21,[x0]				// load context
70*8fb009dcSAndroid Build Coastguard Worker	ldp	w22,w23,[x0,#2*4]
71*8fb009dcSAndroid Build Coastguard Worker	ldp	w24,w25,[x0,#4*4]
72*8fb009dcSAndroid Build Coastguard Worker	add	x2,x1,x2,lsl#6	// end of input
73*8fb009dcSAndroid Build Coastguard Worker	ldp	w26,w27,[x0,#6*4]
74*8fb009dcSAndroid Build Coastguard Worker	adrp	x30,.LK256
75*8fb009dcSAndroid Build Coastguard Worker	add	x30,x30,:lo12:.LK256
76*8fb009dcSAndroid Build Coastguard Worker	stp	x0,x2,[x29,#96]
77*8fb009dcSAndroid Build Coastguard Worker
78*8fb009dcSAndroid Build Coastguard Worker.Loop:
79*8fb009dcSAndroid Build Coastguard Worker	ldp	w3,w4,[x1],#2*4
80*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4			// *K++
81*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w21,w22				// magic seed
82*8fb009dcSAndroid Build Coastguard Worker	str	x1,[x29,#112]
83*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
84*8fb009dcSAndroid Build Coastguard Worker	rev	w3,w3			// 0
85*8fb009dcSAndroid Build Coastguard Worker#endif
86*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w24,#6
87*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w19			// h+=K[i]
88*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w24,w24,ror#14
89*8fb009dcSAndroid Build Coastguard Worker	and	w17,w25,w24
90*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w26,w24
91*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w3			// h+=X[i]
92*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
93*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w20,w21			// a^b, b^c in next round
94*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w6,ror#11	// Sigma1(e)
95*8fb009dcSAndroid Build Coastguard Worker	ror	w6,w20,#2
96*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Ch(e,f,g)
97*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w20,w20,ror#9
98*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w16			// h+=Sigma1(e)
99*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
100*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w27			// d+=h
101*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w21			// Maj(a,b,c)
102*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w6,w17,ror#13	// Sigma0(a)
103*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w28			// h+=Maj(a,b,c)
104*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
105*8fb009dcSAndroid Build Coastguard Worker	//add	w27,w27,w17			// h+=Sigma0(a)
106*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
107*8fb009dcSAndroid Build Coastguard Worker	rev	w4,w4			// 1
108*8fb009dcSAndroid Build Coastguard Worker#endif
109*8fb009dcSAndroid Build Coastguard Worker	ldp	w5,w6,[x1],#2*4
110*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Sigma0(a)
111*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w23,#6
112*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w28			// h+=K[i]
113*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w23,w23,ror#14
114*8fb009dcSAndroid Build Coastguard Worker	and	w17,w24,w23
115*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w25,w23
116*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w4			// h+=X[i]
117*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
118*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w27,w20			// a^b, b^c in next round
119*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w7,ror#11	// Sigma1(e)
120*8fb009dcSAndroid Build Coastguard Worker	ror	w7,w27,#2
121*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Ch(e,f,g)
122*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w27,w27,ror#9
123*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w16			// h+=Sigma1(e)
124*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
125*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w26			// d+=h
126*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w20			// Maj(a,b,c)
127*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w7,w17,ror#13	// Sigma0(a)
128*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w19			// h+=Maj(a,b,c)
129*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
130*8fb009dcSAndroid Build Coastguard Worker	//add	w26,w26,w17			// h+=Sigma0(a)
131*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
132*8fb009dcSAndroid Build Coastguard Worker	rev	w5,w5			// 2
133*8fb009dcSAndroid Build Coastguard Worker#endif
134*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Sigma0(a)
135*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w22,#6
136*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w19			// h+=K[i]
137*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w22,w22,ror#14
138*8fb009dcSAndroid Build Coastguard Worker	and	w17,w23,w22
139*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w24,w22
140*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w5			// h+=X[i]
141*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
142*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w26,w27			// a^b, b^c in next round
143*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w8,ror#11	// Sigma1(e)
144*8fb009dcSAndroid Build Coastguard Worker	ror	w8,w26,#2
145*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Ch(e,f,g)
146*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w26,w26,ror#9
147*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w16			// h+=Sigma1(e)
148*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
149*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w25			// d+=h
150*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w27			// Maj(a,b,c)
151*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w8,w17,ror#13	// Sigma0(a)
152*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w28			// h+=Maj(a,b,c)
153*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
154*8fb009dcSAndroid Build Coastguard Worker	//add	w25,w25,w17			// h+=Sigma0(a)
155*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
156*8fb009dcSAndroid Build Coastguard Worker	rev	w6,w6			// 3
157*8fb009dcSAndroid Build Coastguard Worker#endif
158*8fb009dcSAndroid Build Coastguard Worker	ldp	w7,w8,[x1],#2*4
159*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Sigma0(a)
160*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w21,#6
161*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w28			// h+=K[i]
162*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w21,w21,ror#14
163*8fb009dcSAndroid Build Coastguard Worker	and	w17,w22,w21
164*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w23,w21
165*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w6			// h+=X[i]
166*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
167*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w25,w26			// a^b, b^c in next round
168*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w9,ror#11	// Sigma1(e)
169*8fb009dcSAndroid Build Coastguard Worker	ror	w9,w25,#2
170*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Ch(e,f,g)
171*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w25,w25,ror#9
172*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w16			// h+=Sigma1(e)
173*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
174*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w24			// d+=h
175*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w26			// Maj(a,b,c)
176*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w9,w17,ror#13	// Sigma0(a)
177*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w19			// h+=Maj(a,b,c)
178*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
179*8fb009dcSAndroid Build Coastguard Worker	//add	w24,w24,w17			// h+=Sigma0(a)
180*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
181*8fb009dcSAndroid Build Coastguard Worker	rev	w7,w7			// 4
182*8fb009dcSAndroid Build Coastguard Worker#endif
183*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Sigma0(a)
184*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w20,#6
185*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w19			// h+=K[i]
186*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w20,w20,ror#14
187*8fb009dcSAndroid Build Coastguard Worker	and	w17,w21,w20
188*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w22,w20
189*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w7			// h+=X[i]
190*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
191*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w24,w25			// a^b, b^c in next round
192*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w10,ror#11	// Sigma1(e)
193*8fb009dcSAndroid Build Coastguard Worker	ror	w10,w24,#2
194*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Ch(e,f,g)
195*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w24,w24,ror#9
196*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w16			// h+=Sigma1(e)
197*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
198*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w23			// d+=h
199*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w25			// Maj(a,b,c)
200*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w10,w17,ror#13	// Sigma0(a)
201*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w28			// h+=Maj(a,b,c)
202*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
203*8fb009dcSAndroid Build Coastguard Worker	//add	w23,w23,w17			// h+=Sigma0(a)
204*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
205*8fb009dcSAndroid Build Coastguard Worker	rev	w8,w8			// 5
206*8fb009dcSAndroid Build Coastguard Worker#endif
207*8fb009dcSAndroid Build Coastguard Worker	ldp	w9,w10,[x1],#2*4
208*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Sigma0(a)
209*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w27,#6
210*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w28			// h+=K[i]
211*8fb009dcSAndroid Build Coastguard Worker	eor	w11,w27,w27,ror#14
212*8fb009dcSAndroid Build Coastguard Worker	and	w17,w20,w27
213*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w21,w27
214*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w8			// h+=X[i]
215*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
216*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w23,w24			// a^b, b^c in next round
217*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w11,ror#11	// Sigma1(e)
218*8fb009dcSAndroid Build Coastguard Worker	ror	w11,w23,#2
219*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Ch(e,f,g)
220*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w23,w23,ror#9
221*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w16			// h+=Sigma1(e)
222*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
223*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w22			// d+=h
224*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w24			// Maj(a,b,c)
225*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w11,w17,ror#13	// Sigma0(a)
226*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w19			// h+=Maj(a,b,c)
227*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
228*8fb009dcSAndroid Build Coastguard Worker	//add	w22,w22,w17			// h+=Sigma0(a)
229*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
230*8fb009dcSAndroid Build Coastguard Worker	rev	w9,w9			// 6
231*8fb009dcSAndroid Build Coastguard Worker#endif
232*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Sigma0(a)
233*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w26,#6
234*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w19			// h+=K[i]
235*8fb009dcSAndroid Build Coastguard Worker	eor	w12,w26,w26,ror#14
236*8fb009dcSAndroid Build Coastguard Worker	and	w17,w27,w26
237*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w20,w26
238*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w9			// h+=X[i]
239*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
240*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w22,w23			// a^b, b^c in next round
241*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w12,ror#11	// Sigma1(e)
242*8fb009dcSAndroid Build Coastguard Worker	ror	w12,w22,#2
243*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Ch(e,f,g)
244*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w22,w22,ror#9
245*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w16			// h+=Sigma1(e)
246*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
247*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w21			// d+=h
248*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w23			// Maj(a,b,c)
249*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w12,w17,ror#13	// Sigma0(a)
250*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w28			// h+=Maj(a,b,c)
251*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
252*8fb009dcSAndroid Build Coastguard Worker	//add	w21,w21,w17			// h+=Sigma0(a)
253*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
254*8fb009dcSAndroid Build Coastguard Worker	rev	w10,w10			// 7
255*8fb009dcSAndroid Build Coastguard Worker#endif
256*8fb009dcSAndroid Build Coastguard Worker	ldp	w11,w12,[x1],#2*4
257*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Sigma0(a)
258*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w25,#6
259*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w28			// h+=K[i]
260*8fb009dcSAndroid Build Coastguard Worker	eor	w13,w25,w25,ror#14
261*8fb009dcSAndroid Build Coastguard Worker	and	w17,w26,w25
262*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w27,w25
263*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w10			// h+=X[i]
264*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
265*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w21,w22			// a^b, b^c in next round
266*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w13,ror#11	// Sigma1(e)
267*8fb009dcSAndroid Build Coastguard Worker	ror	w13,w21,#2
268*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Ch(e,f,g)
269*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w21,w21,ror#9
270*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w16			// h+=Sigma1(e)
271*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
272*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w20			// d+=h
273*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w22			// Maj(a,b,c)
274*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w13,w17,ror#13	// Sigma0(a)
275*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w19			// h+=Maj(a,b,c)
276*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
277*8fb009dcSAndroid Build Coastguard Worker	//add	w20,w20,w17			// h+=Sigma0(a)
278*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
279*8fb009dcSAndroid Build Coastguard Worker	rev	w11,w11			// 8
280*8fb009dcSAndroid Build Coastguard Worker#endif
281*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Sigma0(a)
282*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w24,#6
283*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w19			// h+=K[i]
284*8fb009dcSAndroid Build Coastguard Worker	eor	w14,w24,w24,ror#14
285*8fb009dcSAndroid Build Coastguard Worker	and	w17,w25,w24
286*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w26,w24
287*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w11			// h+=X[i]
288*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
289*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w20,w21			// a^b, b^c in next round
290*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w14,ror#11	// Sigma1(e)
291*8fb009dcSAndroid Build Coastguard Worker	ror	w14,w20,#2
292*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Ch(e,f,g)
293*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w20,w20,ror#9
294*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w16			// h+=Sigma1(e)
295*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
296*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w27			// d+=h
297*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w21			// Maj(a,b,c)
298*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w14,w17,ror#13	// Sigma0(a)
299*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w28			// h+=Maj(a,b,c)
300*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
301*8fb009dcSAndroid Build Coastguard Worker	//add	w27,w27,w17			// h+=Sigma0(a)
302*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
303*8fb009dcSAndroid Build Coastguard Worker	rev	w12,w12			// 9
304*8fb009dcSAndroid Build Coastguard Worker#endif
305*8fb009dcSAndroid Build Coastguard Worker	ldp	w13,w14,[x1],#2*4
306*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Sigma0(a)
307*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w23,#6
308*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w28			// h+=K[i]
309*8fb009dcSAndroid Build Coastguard Worker	eor	w15,w23,w23,ror#14
310*8fb009dcSAndroid Build Coastguard Worker	and	w17,w24,w23
311*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w25,w23
312*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w12			// h+=X[i]
313*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
314*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w27,w20			// a^b, b^c in next round
315*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w15,ror#11	// Sigma1(e)
316*8fb009dcSAndroid Build Coastguard Worker	ror	w15,w27,#2
317*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Ch(e,f,g)
318*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w27,w27,ror#9
319*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w16			// h+=Sigma1(e)
320*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
321*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w26			// d+=h
322*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w20			// Maj(a,b,c)
323*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w15,w17,ror#13	// Sigma0(a)
324*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w19			// h+=Maj(a,b,c)
325*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
326*8fb009dcSAndroid Build Coastguard Worker	//add	w26,w26,w17			// h+=Sigma0(a)
327*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
328*8fb009dcSAndroid Build Coastguard Worker	rev	w13,w13			// 10
329*8fb009dcSAndroid Build Coastguard Worker#endif
330*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Sigma0(a)
331*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w22,#6
332*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w19			// h+=K[i]
333*8fb009dcSAndroid Build Coastguard Worker	eor	w0,w22,w22,ror#14
334*8fb009dcSAndroid Build Coastguard Worker	and	w17,w23,w22
335*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w24,w22
336*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w13			// h+=X[i]
337*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
338*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w26,w27			// a^b, b^c in next round
339*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w0,ror#11	// Sigma1(e)
340*8fb009dcSAndroid Build Coastguard Worker	ror	w0,w26,#2
341*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Ch(e,f,g)
342*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w26,w26,ror#9
343*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w16			// h+=Sigma1(e)
344*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
345*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w25			// d+=h
346*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w27			// Maj(a,b,c)
347*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w0,w17,ror#13	// Sigma0(a)
348*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w28			// h+=Maj(a,b,c)
349*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
350*8fb009dcSAndroid Build Coastguard Worker	//add	w25,w25,w17			// h+=Sigma0(a)
351*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
352*8fb009dcSAndroid Build Coastguard Worker	rev	w14,w14			// 11
353*8fb009dcSAndroid Build Coastguard Worker#endif
354*8fb009dcSAndroid Build Coastguard Worker	ldp	w15,w0,[x1],#2*4
355*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Sigma0(a)
356*8fb009dcSAndroid Build Coastguard Worker	str	w6,[sp,#12]
357*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w21,#6
358*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w28			// h+=K[i]
359*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w21,w21,ror#14
360*8fb009dcSAndroid Build Coastguard Worker	and	w17,w22,w21
361*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w23,w21
362*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w14			// h+=X[i]
363*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
364*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w25,w26			// a^b, b^c in next round
365*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w6,ror#11	// Sigma1(e)
366*8fb009dcSAndroid Build Coastguard Worker	ror	w6,w25,#2
367*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Ch(e,f,g)
368*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w25,w25,ror#9
369*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w16			// h+=Sigma1(e)
370*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
371*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w24			// d+=h
372*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w26			// Maj(a,b,c)
373*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w6,w17,ror#13	// Sigma0(a)
374*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w19			// h+=Maj(a,b,c)
375*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
376*8fb009dcSAndroid Build Coastguard Worker	//add	w24,w24,w17			// h+=Sigma0(a)
377*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
378*8fb009dcSAndroid Build Coastguard Worker	rev	w15,w15			// 12
379*8fb009dcSAndroid Build Coastguard Worker#endif
380*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Sigma0(a)
381*8fb009dcSAndroid Build Coastguard Worker	str	w7,[sp,#0]
382*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w20,#6
383*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w19			// h+=K[i]
384*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w20,w20,ror#14
385*8fb009dcSAndroid Build Coastguard Worker	and	w17,w21,w20
386*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w22,w20
387*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w15			// h+=X[i]
388*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
389*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w24,w25			// a^b, b^c in next round
390*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w7,ror#11	// Sigma1(e)
391*8fb009dcSAndroid Build Coastguard Worker	ror	w7,w24,#2
392*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Ch(e,f,g)
393*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w24,w24,ror#9
394*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w16			// h+=Sigma1(e)
395*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
396*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w23			// d+=h
397*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w25			// Maj(a,b,c)
398*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w7,w17,ror#13	// Sigma0(a)
399*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w28			// h+=Maj(a,b,c)
400*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
401*8fb009dcSAndroid Build Coastguard Worker	//add	w23,w23,w17			// h+=Sigma0(a)
402*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
403*8fb009dcSAndroid Build Coastguard Worker	rev	w0,w0			// 13
404*8fb009dcSAndroid Build Coastguard Worker#endif
405*8fb009dcSAndroid Build Coastguard Worker	ldp	w1,w2,[x1]
406*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Sigma0(a)
407*8fb009dcSAndroid Build Coastguard Worker	str	w8,[sp,#4]
408*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w27,#6
409*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w28			// h+=K[i]
410*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w27,w27,ror#14
411*8fb009dcSAndroid Build Coastguard Worker	and	w17,w20,w27
412*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w21,w27
413*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w0			// h+=X[i]
414*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
415*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w23,w24			// a^b, b^c in next round
416*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w8,ror#11	// Sigma1(e)
417*8fb009dcSAndroid Build Coastguard Worker	ror	w8,w23,#2
418*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Ch(e,f,g)
419*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w23,w23,ror#9
420*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w16			// h+=Sigma1(e)
421*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
422*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w22			// d+=h
423*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w24			// Maj(a,b,c)
424*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w8,w17,ror#13	// Sigma0(a)
425*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w19			// h+=Maj(a,b,c)
426*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
427*8fb009dcSAndroid Build Coastguard Worker	//add	w22,w22,w17			// h+=Sigma0(a)
428*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
429*8fb009dcSAndroid Build Coastguard Worker	rev	w1,w1			// 14
430*8fb009dcSAndroid Build Coastguard Worker#endif
431*8fb009dcSAndroid Build Coastguard Worker	ldr	w6,[sp,#12]
432*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Sigma0(a)
433*8fb009dcSAndroid Build Coastguard Worker	str	w9,[sp,#8]
434*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w26,#6
435*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w19			// h+=K[i]
436*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w26,w26,ror#14
437*8fb009dcSAndroid Build Coastguard Worker	and	w17,w27,w26
438*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w20,w26
439*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w1			// h+=X[i]
440*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
441*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w22,w23			// a^b, b^c in next round
442*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w9,ror#11	// Sigma1(e)
443*8fb009dcSAndroid Build Coastguard Worker	ror	w9,w22,#2
444*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Ch(e,f,g)
445*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w22,w22,ror#9
446*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w16			// h+=Sigma1(e)
447*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
448*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w21			// d+=h
449*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w23			// Maj(a,b,c)
450*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w9,w17,ror#13	// Sigma0(a)
451*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w28			// h+=Maj(a,b,c)
452*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
453*8fb009dcSAndroid Build Coastguard Worker	//add	w21,w21,w17			// h+=Sigma0(a)
454*8fb009dcSAndroid Build Coastguard Worker#ifndef	__AARCH64EB__
455*8fb009dcSAndroid Build Coastguard Worker	rev	w2,w2			// 15
456*8fb009dcSAndroid Build Coastguard Worker#endif
457*8fb009dcSAndroid Build Coastguard Worker	ldr	w7,[sp,#0]
458*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Sigma0(a)
459*8fb009dcSAndroid Build Coastguard Worker	str	w10,[sp,#12]
460*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w25,#6
461*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w28			// h+=K[i]
462*8fb009dcSAndroid Build Coastguard Worker	ror	w9,w4,#7
463*8fb009dcSAndroid Build Coastguard Worker	and	w17,w26,w25
464*8fb009dcSAndroid Build Coastguard Worker	ror	w8,w1,#17
465*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w27,w25
466*8fb009dcSAndroid Build Coastguard Worker	ror	w10,w21,#2
467*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w2			// h+=X[i]
468*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w25,ror#11
469*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w4,ror#18
470*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
471*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w21,w22			// a^b, b^c in next round
472*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w25,ror#25	// Sigma1(e)
473*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w10,w21,ror#13
474*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Ch(e,f,g)
475*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
476*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w1,ror#19
477*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w4,lsr#3	// sigma0(X[i+1])
478*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w16			// h+=Sigma1(e)
479*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w22			// Maj(a,b,c)
480*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w10,w21,ror#22	// Sigma0(a)
481*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w1,lsr#10	// sigma1(X[i+14])
482*8fb009dcSAndroid Build Coastguard Worker	add	w3,w3,w12
483*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w20			// d+=h
484*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w19			// h+=Maj(a,b,c)
485*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
486*8fb009dcSAndroid Build Coastguard Worker	add	w3,w3,w9
487*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Sigma0(a)
488*8fb009dcSAndroid Build Coastguard Worker	add	w3,w3,w8
489*8fb009dcSAndroid Build Coastguard Worker.Loop_16_xx:
490*8fb009dcSAndroid Build Coastguard Worker	ldr	w8,[sp,#4]
491*8fb009dcSAndroid Build Coastguard Worker	str	w11,[sp,#0]
492*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w24,#6
493*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w19			// h+=K[i]
494*8fb009dcSAndroid Build Coastguard Worker	ror	w10,w5,#7
495*8fb009dcSAndroid Build Coastguard Worker	and	w17,w25,w24
496*8fb009dcSAndroid Build Coastguard Worker	ror	w9,w2,#17
497*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w26,w24
498*8fb009dcSAndroid Build Coastguard Worker	ror	w11,w20,#2
499*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w3			// h+=X[i]
500*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w24,ror#11
501*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w10,w5,ror#18
502*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
503*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w20,w21			// a^b, b^c in next round
504*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w24,ror#25	// Sigma1(e)
505*8fb009dcSAndroid Build Coastguard Worker	eor	w11,w11,w20,ror#13
506*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Ch(e,f,g)
507*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
508*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w2,ror#19
509*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w10,w5,lsr#3	// sigma0(X[i+1])
510*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w16			// h+=Sigma1(e)
511*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w21			// Maj(a,b,c)
512*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w11,w20,ror#22	// Sigma0(a)
513*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w2,lsr#10	// sigma1(X[i+14])
514*8fb009dcSAndroid Build Coastguard Worker	add	w4,w4,w13
515*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w27			// d+=h
516*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w28			// h+=Maj(a,b,c)
517*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
518*8fb009dcSAndroid Build Coastguard Worker	add	w4,w4,w10
519*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Sigma0(a)
520*8fb009dcSAndroid Build Coastguard Worker	add	w4,w4,w9
521*8fb009dcSAndroid Build Coastguard Worker	ldr	w9,[sp,#8]
522*8fb009dcSAndroid Build Coastguard Worker	str	w12,[sp,#4]
523*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w23,#6
524*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w28			// h+=K[i]
525*8fb009dcSAndroid Build Coastguard Worker	ror	w11,w6,#7
526*8fb009dcSAndroid Build Coastguard Worker	and	w17,w24,w23
527*8fb009dcSAndroid Build Coastguard Worker	ror	w10,w3,#17
528*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w25,w23
529*8fb009dcSAndroid Build Coastguard Worker	ror	w12,w27,#2
530*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w4			// h+=X[i]
531*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w23,ror#11
532*8fb009dcSAndroid Build Coastguard Worker	eor	w11,w11,w6,ror#18
533*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
534*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w27,w20			// a^b, b^c in next round
535*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w23,ror#25	// Sigma1(e)
536*8fb009dcSAndroid Build Coastguard Worker	eor	w12,w12,w27,ror#13
537*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Ch(e,f,g)
538*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
539*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w10,w3,ror#19
540*8fb009dcSAndroid Build Coastguard Worker	eor	w11,w11,w6,lsr#3	// sigma0(X[i+1])
541*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w16			// h+=Sigma1(e)
542*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w20			// Maj(a,b,c)
543*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w12,w27,ror#22	// Sigma0(a)
544*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w10,w3,lsr#10	// sigma1(X[i+14])
545*8fb009dcSAndroid Build Coastguard Worker	add	w5,w5,w14
546*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w26			// d+=h
547*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w19			// h+=Maj(a,b,c)
548*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
549*8fb009dcSAndroid Build Coastguard Worker	add	w5,w5,w11
550*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Sigma0(a)
551*8fb009dcSAndroid Build Coastguard Worker	add	w5,w5,w10
552*8fb009dcSAndroid Build Coastguard Worker	ldr	w10,[sp,#12]
553*8fb009dcSAndroid Build Coastguard Worker	str	w13,[sp,#8]
554*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w22,#6
555*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w19			// h+=K[i]
556*8fb009dcSAndroid Build Coastguard Worker	ror	w12,w7,#7
557*8fb009dcSAndroid Build Coastguard Worker	and	w17,w23,w22
558*8fb009dcSAndroid Build Coastguard Worker	ror	w11,w4,#17
559*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w24,w22
560*8fb009dcSAndroid Build Coastguard Worker	ror	w13,w26,#2
561*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w5			// h+=X[i]
562*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w22,ror#11
563*8fb009dcSAndroid Build Coastguard Worker	eor	w12,w12,w7,ror#18
564*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
565*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w26,w27			// a^b, b^c in next round
566*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w22,ror#25	// Sigma1(e)
567*8fb009dcSAndroid Build Coastguard Worker	eor	w13,w13,w26,ror#13
568*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Ch(e,f,g)
569*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
570*8fb009dcSAndroid Build Coastguard Worker	eor	w11,w11,w4,ror#19
571*8fb009dcSAndroid Build Coastguard Worker	eor	w12,w12,w7,lsr#3	// sigma0(X[i+1])
572*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w16			// h+=Sigma1(e)
573*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w27			// Maj(a,b,c)
574*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w13,w26,ror#22	// Sigma0(a)
575*8fb009dcSAndroid Build Coastguard Worker	eor	w11,w11,w4,lsr#10	// sigma1(X[i+14])
576*8fb009dcSAndroid Build Coastguard Worker	add	w6,w6,w15
577*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w25			// d+=h
578*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w28			// h+=Maj(a,b,c)
579*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
580*8fb009dcSAndroid Build Coastguard Worker	add	w6,w6,w12
581*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Sigma0(a)
582*8fb009dcSAndroid Build Coastguard Worker	add	w6,w6,w11
583*8fb009dcSAndroid Build Coastguard Worker	ldr	w11,[sp,#0]
584*8fb009dcSAndroid Build Coastguard Worker	str	w14,[sp,#12]
585*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w21,#6
586*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w28			// h+=K[i]
587*8fb009dcSAndroid Build Coastguard Worker	ror	w13,w8,#7
588*8fb009dcSAndroid Build Coastguard Worker	and	w17,w22,w21
589*8fb009dcSAndroid Build Coastguard Worker	ror	w12,w5,#17
590*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w23,w21
591*8fb009dcSAndroid Build Coastguard Worker	ror	w14,w25,#2
592*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w6			// h+=X[i]
593*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w21,ror#11
594*8fb009dcSAndroid Build Coastguard Worker	eor	w13,w13,w8,ror#18
595*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
596*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w25,w26			// a^b, b^c in next round
597*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w21,ror#25	// Sigma1(e)
598*8fb009dcSAndroid Build Coastguard Worker	eor	w14,w14,w25,ror#13
599*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Ch(e,f,g)
600*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
601*8fb009dcSAndroid Build Coastguard Worker	eor	w12,w12,w5,ror#19
602*8fb009dcSAndroid Build Coastguard Worker	eor	w13,w13,w8,lsr#3	// sigma0(X[i+1])
603*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w16			// h+=Sigma1(e)
604*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w26			// Maj(a,b,c)
605*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w14,w25,ror#22	// Sigma0(a)
606*8fb009dcSAndroid Build Coastguard Worker	eor	w12,w12,w5,lsr#10	// sigma1(X[i+14])
607*8fb009dcSAndroid Build Coastguard Worker	add	w7,w7,w0
608*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w24			// d+=h
609*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w19			// h+=Maj(a,b,c)
610*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
611*8fb009dcSAndroid Build Coastguard Worker	add	w7,w7,w13
612*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Sigma0(a)
613*8fb009dcSAndroid Build Coastguard Worker	add	w7,w7,w12
614*8fb009dcSAndroid Build Coastguard Worker	ldr	w12,[sp,#4]
615*8fb009dcSAndroid Build Coastguard Worker	str	w15,[sp,#0]
616*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w20,#6
617*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w19			// h+=K[i]
618*8fb009dcSAndroid Build Coastguard Worker	ror	w14,w9,#7
619*8fb009dcSAndroid Build Coastguard Worker	and	w17,w21,w20
620*8fb009dcSAndroid Build Coastguard Worker	ror	w13,w6,#17
621*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w22,w20
622*8fb009dcSAndroid Build Coastguard Worker	ror	w15,w24,#2
623*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w7			// h+=X[i]
624*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w20,ror#11
625*8fb009dcSAndroid Build Coastguard Worker	eor	w14,w14,w9,ror#18
626*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
627*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w24,w25			// a^b, b^c in next round
628*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w20,ror#25	// Sigma1(e)
629*8fb009dcSAndroid Build Coastguard Worker	eor	w15,w15,w24,ror#13
630*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Ch(e,f,g)
631*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
632*8fb009dcSAndroid Build Coastguard Worker	eor	w13,w13,w6,ror#19
633*8fb009dcSAndroid Build Coastguard Worker	eor	w14,w14,w9,lsr#3	// sigma0(X[i+1])
634*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w16			// h+=Sigma1(e)
635*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w25			// Maj(a,b,c)
636*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w15,w24,ror#22	// Sigma0(a)
637*8fb009dcSAndroid Build Coastguard Worker	eor	w13,w13,w6,lsr#10	// sigma1(X[i+14])
638*8fb009dcSAndroid Build Coastguard Worker	add	w8,w8,w1
639*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w23			// d+=h
640*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w28			// h+=Maj(a,b,c)
641*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
642*8fb009dcSAndroid Build Coastguard Worker	add	w8,w8,w14
643*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Sigma0(a)
644*8fb009dcSAndroid Build Coastguard Worker	add	w8,w8,w13
645*8fb009dcSAndroid Build Coastguard Worker	ldr	w13,[sp,#8]
646*8fb009dcSAndroid Build Coastguard Worker	str	w0,[sp,#4]
647*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w27,#6
648*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w28			// h+=K[i]
649*8fb009dcSAndroid Build Coastguard Worker	ror	w15,w10,#7
650*8fb009dcSAndroid Build Coastguard Worker	and	w17,w20,w27
651*8fb009dcSAndroid Build Coastguard Worker	ror	w14,w7,#17
652*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w21,w27
653*8fb009dcSAndroid Build Coastguard Worker	ror	w0,w23,#2
654*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w8			// h+=X[i]
655*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w27,ror#11
656*8fb009dcSAndroid Build Coastguard Worker	eor	w15,w15,w10,ror#18
657*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
658*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w23,w24			// a^b, b^c in next round
659*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w27,ror#25	// Sigma1(e)
660*8fb009dcSAndroid Build Coastguard Worker	eor	w0,w0,w23,ror#13
661*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Ch(e,f,g)
662*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
663*8fb009dcSAndroid Build Coastguard Worker	eor	w14,w14,w7,ror#19
664*8fb009dcSAndroid Build Coastguard Worker	eor	w15,w15,w10,lsr#3	// sigma0(X[i+1])
665*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w16			// h+=Sigma1(e)
666*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w24			// Maj(a,b,c)
667*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w0,w23,ror#22	// Sigma0(a)
668*8fb009dcSAndroid Build Coastguard Worker	eor	w14,w14,w7,lsr#10	// sigma1(X[i+14])
669*8fb009dcSAndroid Build Coastguard Worker	add	w9,w9,w2
670*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w22			// d+=h
671*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w19			// h+=Maj(a,b,c)
672*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
673*8fb009dcSAndroid Build Coastguard Worker	add	w9,w9,w15
674*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Sigma0(a)
675*8fb009dcSAndroid Build Coastguard Worker	add	w9,w9,w14
676*8fb009dcSAndroid Build Coastguard Worker	ldr	w14,[sp,#12]
677*8fb009dcSAndroid Build Coastguard Worker	str	w1,[sp,#8]
678*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w26,#6
679*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w19			// h+=K[i]
680*8fb009dcSAndroid Build Coastguard Worker	ror	w0,w11,#7
681*8fb009dcSAndroid Build Coastguard Worker	and	w17,w27,w26
682*8fb009dcSAndroid Build Coastguard Worker	ror	w15,w8,#17
683*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w20,w26
684*8fb009dcSAndroid Build Coastguard Worker	ror	w1,w22,#2
685*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w9			// h+=X[i]
686*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w26,ror#11
687*8fb009dcSAndroid Build Coastguard Worker	eor	w0,w0,w11,ror#18
688*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
689*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w22,w23			// a^b, b^c in next round
690*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w26,ror#25	// Sigma1(e)
691*8fb009dcSAndroid Build Coastguard Worker	eor	w1,w1,w22,ror#13
692*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Ch(e,f,g)
693*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
694*8fb009dcSAndroid Build Coastguard Worker	eor	w15,w15,w8,ror#19
695*8fb009dcSAndroid Build Coastguard Worker	eor	w0,w0,w11,lsr#3	// sigma0(X[i+1])
696*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w16			// h+=Sigma1(e)
697*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w23			// Maj(a,b,c)
698*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w1,w22,ror#22	// Sigma0(a)
699*8fb009dcSAndroid Build Coastguard Worker	eor	w15,w15,w8,lsr#10	// sigma1(X[i+14])
700*8fb009dcSAndroid Build Coastguard Worker	add	w10,w10,w3
701*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w21			// d+=h
702*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w28			// h+=Maj(a,b,c)
703*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
704*8fb009dcSAndroid Build Coastguard Worker	add	w10,w10,w0
705*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Sigma0(a)
706*8fb009dcSAndroid Build Coastguard Worker	add	w10,w10,w15
707*8fb009dcSAndroid Build Coastguard Worker	ldr	w15,[sp,#0]
708*8fb009dcSAndroid Build Coastguard Worker	str	w2,[sp,#12]
709*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w25,#6
710*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w28			// h+=K[i]
711*8fb009dcSAndroid Build Coastguard Worker	ror	w1,w12,#7
712*8fb009dcSAndroid Build Coastguard Worker	and	w17,w26,w25
713*8fb009dcSAndroid Build Coastguard Worker	ror	w0,w9,#17
714*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w27,w25
715*8fb009dcSAndroid Build Coastguard Worker	ror	w2,w21,#2
716*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w10			// h+=X[i]
717*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w25,ror#11
718*8fb009dcSAndroid Build Coastguard Worker	eor	w1,w1,w12,ror#18
719*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
720*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w21,w22			// a^b, b^c in next round
721*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w25,ror#25	// Sigma1(e)
722*8fb009dcSAndroid Build Coastguard Worker	eor	w2,w2,w21,ror#13
723*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Ch(e,f,g)
724*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
725*8fb009dcSAndroid Build Coastguard Worker	eor	w0,w0,w9,ror#19
726*8fb009dcSAndroid Build Coastguard Worker	eor	w1,w1,w12,lsr#3	// sigma0(X[i+1])
727*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w16			// h+=Sigma1(e)
728*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w22			// Maj(a,b,c)
729*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w2,w21,ror#22	// Sigma0(a)
730*8fb009dcSAndroid Build Coastguard Worker	eor	w0,w0,w9,lsr#10	// sigma1(X[i+14])
731*8fb009dcSAndroid Build Coastguard Worker	add	w11,w11,w4
732*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w20			// d+=h
733*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w19			// h+=Maj(a,b,c)
734*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
735*8fb009dcSAndroid Build Coastguard Worker	add	w11,w11,w1
736*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Sigma0(a)
737*8fb009dcSAndroid Build Coastguard Worker	add	w11,w11,w0
738*8fb009dcSAndroid Build Coastguard Worker	ldr	w0,[sp,#4]
739*8fb009dcSAndroid Build Coastguard Worker	str	w3,[sp,#0]
740*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w24,#6
741*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w19			// h+=K[i]
742*8fb009dcSAndroid Build Coastguard Worker	ror	w2,w13,#7
743*8fb009dcSAndroid Build Coastguard Worker	and	w17,w25,w24
744*8fb009dcSAndroid Build Coastguard Worker	ror	w1,w10,#17
745*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w26,w24
746*8fb009dcSAndroid Build Coastguard Worker	ror	w3,w20,#2
747*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w11			// h+=X[i]
748*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w24,ror#11
749*8fb009dcSAndroid Build Coastguard Worker	eor	w2,w2,w13,ror#18
750*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
751*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w20,w21			// a^b, b^c in next round
752*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w24,ror#25	// Sigma1(e)
753*8fb009dcSAndroid Build Coastguard Worker	eor	w3,w3,w20,ror#13
754*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Ch(e,f,g)
755*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
756*8fb009dcSAndroid Build Coastguard Worker	eor	w1,w1,w10,ror#19
757*8fb009dcSAndroid Build Coastguard Worker	eor	w2,w2,w13,lsr#3	// sigma0(X[i+1])
758*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w16			// h+=Sigma1(e)
759*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w21			// Maj(a,b,c)
760*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w3,w20,ror#22	// Sigma0(a)
761*8fb009dcSAndroid Build Coastguard Worker	eor	w1,w1,w10,lsr#10	// sigma1(X[i+14])
762*8fb009dcSAndroid Build Coastguard Worker	add	w12,w12,w5
763*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w27			// d+=h
764*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w28			// h+=Maj(a,b,c)
765*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
766*8fb009dcSAndroid Build Coastguard Worker	add	w12,w12,w2
767*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w17			// h+=Sigma0(a)
768*8fb009dcSAndroid Build Coastguard Worker	add	w12,w12,w1
769*8fb009dcSAndroid Build Coastguard Worker	ldr	w1,[sp,#8]
770*8fb009dcSAndroid Build Coastguard Worker	str	w4,[sp,#4]
771*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w23,#6
772*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w28			// h+=K[i]
773*8fb009dcSAndroid Build Coastguard Worker	ror	w3,w14,#7
774*8fb009dcSAndroid Build Coastguard Worker	and	w17,w24,w23
775*8fb009dcSAndroid Build Coastguard Worker	ror	w2,w11,#17
776*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w25,w23
777*8fb009dcSAndroid Build Coastguard Worker	ror	w4,w27,#2
778*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w12			// h+=X[i]
779*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w23,ror#11
780*8fb009dcSAndroid Build Coastguard Worker	eor	w3,w3,w14,ror#18
781*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
782*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w27,w20			// a^b, b^c in next round
783*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w23,ror#25	// Sigma1(e)
784*8fb009dcSAndroid Build Coastguard Worker	eor	w4,w4,w27,ror#13
785*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Ch(e,f,g)
786*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
787*8fb009dcSAndroid Build Coastguard Worker	eor	w2,w2,w11,ror#19
788*8fb009dcSAndroid Build Coastguard Worker	eor	w3,w3,w14,lsr#3	// sigma0(X[i+1])
789*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w16			// h+=Sigma1(e)
790*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w20			// Maj(a,b,c)
791*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w4,w27,ror#22	// Sigma0(a)
792*8fb009dcSAndroid Build Coastguard Worker	eor	w2,w2,w11,lsr#10	// sigma1(X[i+14])
793*8fb009dcSAndroid Build Coastguard Worker	add	w13,w13,w6
794*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w26			// d+=h
795*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w19			// h+=Maj(a,b,c)
796*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
797*8fb009dcSAndroid Build Coastguard Worker	add	w13,w13,w3
798*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w17			// h+=Sigma0(a)
799*8fb009dcSAndroid Build Coastguard Worker	add	w13,w13,w2
800*8fb009dcSAndroid Build Coastguard Worker	ldr	w2,[sp,#12]
801*8fb009dcSAndroid Build Coastguard Worker	str	w5,[sp,#8]
802*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w22,#6
803*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w19			// h+=K[i]
804*8fb009dcSAndroid Build Coastguard Worker	ror	w4,w15,#7
805*8fb009dcSAndroid Build Coastguard Worker	and	w17,w23,w22
806*8fb009dcSAndroid Build Coastguard Worker	ror	w3,w12,#17
807*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w24,w22
808*8fb009dcSAndroid Build Coastguard Worker	ror	w5,w26,#2
809*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w13			// h+=X[i]
810*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w22,ror#11
811*8fb009dcSAndroid Build Coastguard Worker	eor	w4,w4,w15,ror#18
812*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
813*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w26,w27			// a^b, b^c in next round
814*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w22,ror#25	// Sigma1(e)
815*8fb009dcSAndroid Build Coastguard Worker	eor	w5,w5,w26,ror#13
816*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Ch(e,f,g)
817*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
818*8fb009dcSAndroid Build Coastguard Worker	eor	w3,w3,w12,ror#19
819*8fb009dcSAndroid Build Coastguard Worker	eor	w4,w4,w15,lsr#3	// sigma0(X[i+1])
820*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w16			// h+=Sigma1(e)
821*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w27			// Maj(a,b,c)
822*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w5,w26,ror#22	// Sigma0(a)
823*8fb009dcSAndroid Build Coastguard Worker	eor	w3,w3,w12,lsr#10	// sigma1(X[i+14])
824*8fb009dcSAndroid Build Coastguard Worker	add	w14,w14,w7
825*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w25			// d+=h
826*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w28			// h+=Maj(a,b,c)
827*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
828*8fb009dcSAndroid Build Coastguard Worker	add	w14,w14,w4
829*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w17			// h+=Sigma0(a)
830*8fb009dcSAndroid Build Coastguard Worker	add	w14,w14,w3
831*8fb009dcSAndroid Build Coastguard Worker	ldr	w3,[sp,#0]
832*8fb009dcSAndroid Build Coastguard Worker	str	w6,[sp,#12]
833*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w21,#6
834*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w28			// h+=K[i]
835*8fb009dcSAndroid Build Coastguard Worker	ror	w5,w0,#7
836*8fb009dcSAndroid Build Coastguard Worker	and	w17,w22,w21
837*8fb009dcSAndroid Build Coastguard Worker	ror	w4,w13,#17
838*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w23,w21
839*8fb009dcSAndroid Build Coastguard Worker	ror	w6,w25,#2
840*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w14			// h+=X[i]
841*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w21,ror#11
842*8fb009dcSAndroid Build Coastguard Worker	eor	w5,w5,w0,ror#18
843*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
844*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w25,w26			// a^b, b^c in next round
845*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w21,ror#25	// Sigma1(e)
846*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w6,w25,ror#13
847*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Ch(e,f,g)
848*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
849*8fb009dcSAndroid Build Coastguard Worker	eor	w4,w4,w13,ror#19
850*8fb009dcSAndroid Build Coastguard Worker	eor	w5,w5,w0,lsr#3	// sigma0(X[i+1])
851*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w16			// h+=Sigma1(e)
852*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w26			// Maj(a,b,c)
853*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w6,w25,ror#22	// Sigma0(a)
854*8fb009dcSAndroid Build Coastguard Worker	eor	w4,w4,w13,lsr#10	// sigma1(X[i+14])
855*8fb009dcSAndroid Build Coastguard Worker	add	w15,w15,w8
856*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w24			// d+=h
857*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w19			// h+=Maj(a,b,c)
858*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
859*8fb009dcSAndroid Build Coastguard Worker	add	w15,w15,w5
860*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w17			// h+=Sigma0(a)
861*8fb009dcSAndroid Build Coastguard Worker	add	w15,w15,w4
862*8fb009dcSAndroid Build Coastguard Worker	ldr	w4,[sp,#4]
863*8fb009dcSAndroid Build Coastguard Worker	str	w7,[sp,#0]
864*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w20,#6
865*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w19			// h+=K[i]
866*8fb009dcSAndroid Build Coastguard Worker	ror	w6,w1,#7
867*8fb009dcSAndroid Build Coastguard Worker	and	w17,w21,w20
868*8fb009dcSAndroid Build Coastguard Worker	ror	w5,w14,#17
869*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w22,w20
870*8fb009dcSAndroid Build Coastguard Worker	ror	w7,w24,#2
871*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w15			// h+=X[i]
872*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w20,ror#11
873*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w6,w1,ror#18
874*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
875*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w24,w25			// a^b, b^c in next round
876*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w20,ror#25	// Sigma1(e)
877*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w7,w24,ror#13
878*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Ch(e,f,g)
879*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
880*8fb009dcSAndroid Build Coastguard Worker	eor	w5,w5,w14,ror#19
881*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w6,w1,lsr#3	// sigma0(X[i+1])
882*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w16			// h+=Sigma1(e)
883*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w25			// Maj(a,b,c)
884*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w7,w24,ror#22	// Sigma0(a)
885*8fb009dcSAndroid Build Coastguard Worker	eor	w5,w5,w14,lsr#10	// sigma1(X[i+14])
886*8fb009dcSAndroid Build Coastguard Worker	add	w0,w0,w9
887*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w23			// d+=h
888*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w28			// h+=Maj(a,b,c)
889*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
890*8fb009dcSAndroid Build Coastguard Worker	add	w0,w0,w6
891*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w17			// h+=Sigma0(a)
892*8fb009dcSAndroid Build Coastguard Worker	add	w0,w0,w5
893*8fb009dcSAndroid Build Coastguard Worker	ldr	w5,[sp,#8]
894*8fb009dcSAndroid Build Coastguard Worker	str	w8,[sp,#4]
895*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w27,#6
896*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w28			// h+=K[i]
897*8fb009dcSAndroid Build Coastguard Worker	ror	w7,w2,#7
898*8fb009dcSAndroid Build Coastguard Worker	and	w17,w20,w27
899*8fb009dcSAndroid Build Coastguard Worker	ror	w6,w15,#17
900*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w21,w27
901*8fb009dcSAndroid Build Coastguard Worker	ror	w8,w23,#2
902*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w0			// h+=X[i]
903*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w27,ror#11
904*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w7,w2,ror#18
905*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
906*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w23,w24			// a^b, b^c in next round
907*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w27,ror#25	// Sigma1(e)
908*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w23,ror#13
909*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Ch(e,f,g)
910*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
911*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w6,w15,ror#19
912*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w7,w2,lsr#3	// sigma0(X[i+1])
913*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w16			// h+=Sigma1(e)
914*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w24			// Maj(a,b,c)
915*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w8,w23,ror#22	// Sigma0(a)
916*8fb009dcSAndroid Build Coastguard Worker	eor	w6,w6,w15,lsr#10	// sigma1(X[i+14])
917*8fb009dcSAndroid Build Coastguard Worker	add	w1,w1,w10
918*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w22			// d+=h
919*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w19			// h+=Maj(a,b,c)
920*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
921*8fb009dcSAndroid Build Coastguard Worker	add	w1,w1,w7
922*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w17			// h+=Sigma0(a)
923*8fb009dcSAndroid Build Coastguard Worker	add	w1,w1,w6
924*8fb009dcSAndroid Build Coastguard Worker	ldr	w6,[sp,#12]
925*8fb009dcSAndroid Build Coastguard Worker	str	w9,[sp,#8]
926*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w26,#6
927*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w19			// h+=K[i]
928*8fb009dcSAndroid Build Coastguard Worker	ror	w8,w3,#7
929*8fb009dcSAndroid Build Coastguard Worker	and	w17,w27,w26
930*8fb009dcSAndroid Build Coastguard Worker	ror	w7,w0,#17
931*8fb009dcSAndroid Build Coastguard Worker	bic	w19,w20,w26
932*8fb009dcSAndroid Build Coastguard Worker	ror	w9,w22,#2
933*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w1			// h+=X[i]
934*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w26,ror#11
935*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w3,ror#18
936*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w19			// Ch(e,f,g)
937*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w22,w23			// a^b, b^c in next round
938*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w26,ror#25	// Sigma1(e)
939*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w22,ror#13
940*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Ch(e,f,g)
941*8fb009dcSAndroid Build Coastguard Worker	and	w28,w28,w19			// (b^c)&=(a^b)
942*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w7,w0,ror#19
943*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w3,lsr#3	// sigma0(X[i+1])
944*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w16			// h+=Sigma1(e)
945*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w28,w23			// Maj(a,b,c)
946*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w9,w22,ror#22	// Sigma0(a)
947*8fb009dcSAndroid Build Coastguard Worker	eor	w7,w7,w0,lsr#10	// sigma1(X[i+14])
948*8fb009dcSAndroid Build Coastguard Worker	add	w2,w2,w11
949*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w21			// d+=h
950*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w28			// h+=Maj(a,b,c)
951*8fb009dcSAndroid Build Coastguard Worker	ldr	w28,[x30],#4		// *K++, w19 in next round
952*8fb009dcSAndroid Build Coastguard Worker	add	w2,w2,w8
953*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w17			// h+=Sigma0(a)
954*8fb009dcSAndroid Build Coastguard Worker	add	w2,w2,w7
955*8fb009dcSAndroid Build Coastguard Worker	ldr	w7,[sp,#0]
956*8fb009dcSAndroid Build Coastguard Worker	str	w10,[sp,#12]
957*8fb009dcSAndroid Build Coastguard Worker	ror	w16,w25,#6
958*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w28			// h+=K[i]
959*8fb009dcSAndroid Build Coastguard Worker	ror	w9,w4,#7
960*8fb009dcSAndroid Build Coastguard Worker	and	w17,w26,w25
961*8fb009dcSAndroid Build Coastguard Worker	ror	w8,w1,#17
962*8fb009dcSAndroid Build Coastguard Worker	bic	w28,w27,w25
963*8fb009dcSAndroid Build Coastguard Worker	ror	w10,w21,#2
964*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w2			// h+=X[i]
965*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w25,ror#11
966*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w4,ror#18
967*8fb009dcSAndroid Build Coastguard Worker	orr	w17,w17,w28			// Ch(e,f,g)
968*8fb009dcSAndroid Build Coastguard Worker	eor	w28,w21,w22			// a^b, b^c in next round
969*8fb009dcSAndroid Build Coastguard Worker	eor	w16,w16,w25,ror#25	// Sigma1(e)
970*8fb009dcSAndroid Build Coastguard Worker	eor	w10,w10,w21,ror#13
971*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Ch(e,f,g)
972*8fb009dcSAndroid Build Coastguard Worker	and	w19,w19,w28			// (b^c)&=(a^b)
973*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w1,ror#19
974*8fb009dcSAndroid Build Coastguard Worker	eor	w9,w9,w4,lsr#3	// sigma0(X[i+1])
975*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w16			// h+=Sigma1(e)
976*8fb009dcSAndroid Build Coastguard Worker	eor	w19,w19,w22			// Maj(a,b,c)
977*8fb009dcSAndroid Build Coastguard Worker	eor	w17,w10,w21,ror#22	// Sigma0(a)
978*8fb009dcSAndroid Build Coastguard Worker	eor	w8,w8,w1,lsr#10	// sigma1(X[i+14])
979*8fb009dcSAndroid Build Coastguard Worker	add	w3,w3,w12
980*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w20			// d+=h
981*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w19			// h+=Maj(a,b,c)
982*8fb009dcSAndroid Build Coastguard Worker	ldr	w19,[x30],#4		// *K++, w28 in next round
983*8fb009dcSAndroid Build Coastguard Worker	add	w3,w3,w9
984*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w17			// h+=Sigma0(a)
985*8fb009dcSAndroid Build Coastguard Worker	add	w3,w3,w8
986*8fb009dcSAndroid Build Coastguard Worker	cbnz	w19,.Loop_16_xx
987*8fb009dcSAndroid Build Coastguard Worker
988*8fb009dcSAndroid Build Coastguard Worker	ldp	x0,x2,[x29,#96]
989*8fb009dcSAndroid Build Coastguard Worker	ldr	x1,[x29,#112]
990*8fb009dcSAndroid Build Coastguard Worker	sub	x30,x30,#260		// rewind
991*8fb009dcSAndroid Build Coastguard Worker
992*8fb009dcSAndroid Build Coastguard Worker	ldp	w3,w4,[x0]
993*8fb009dcSAndroid Build Coastguard Worker	ldp	w5,w6,[x0,#2*4]
994*8fb009dcSAndroid Build Coastguard Worker	add	x1,x1,#14*4			// advance input pointer
995*8fb009dcSAndroid Build Coastguard Worker	ldp	w7,w8,[x0,#4*4]
996*8fb009dcSAndroid Build Coastguard Worker	add	w20,w20,w3
997*8fb009dcSAndroid Build Coastguard Worker	ldp	w9,w10,[x0,#6*4]
998*8fb009dcSAndroid Build Coastguard Worker	add	w21,w21,w4
999*8fb009dcSAndroid Build Coastguard Worker	add	w22,w22,w5
1000*8fb009dcSAndroid Build Coastguard Worker	add	w23,w23,w6
1001*8fb009dcSAndroid Build Coastguard Worker	stp	w20,w21,[x0]
1002*8fb009dcSAndroid Build Coastguard Worker	add	w24,w24,w7
1003*8fb009dcSAndroid Build Coastguard Worker	add	w25,w25,w8
1004*8fb009dcSAndroid Build Coastguard Worker	stp	w22,w23,[x0,#2*4]
1005*8fb009dcSAndroid Build Coastguard Worker	add	w26,w26,w9
1006*8fb009dcSAndroid Build Coastguard Worker	add	w27,w27,w10
1007*8fb009dcSAndroid Build Coastguard Worker	cmp	x1,x2
1008*8fb009dcSAndroid Build Coastguard Worker	stp	w24,w25,[x0,#4*4]
1009*8fb009dcSAndroid Build Coastguard Worker	stp	w26,w27,[x0,#6*4]
1010*8fb009dcSAndroid Build Coastguard Worker	b.ne	.Loop
1011*8fb009dcSAndroid Build Coastguard Worker
1012*8fb009dcSAndroid Build Coastguard Worker	ldp	x19,x20,[x29,#16]
1013*8fb009dcSAndroid Build Coastguard Worker	add	sp,sp,#4*4
1014*8fb009dcSAndroid Build Coastguard Worker	ldp	x21,x22,[x29,#32]
1015*8fb009dcSAndroid Build Coastguard Worker	ldp	x23,x24,[x29,#48]
1016*8fb009dcSAndroid Build Coastguard Worker	ldp	x25,x26,[x29,#64]
1017*8fb009dcSAndroid Build Coastguard Worker	ldp	x27,x28,[x29,#80]
1018*8fb009dcSAndroid Build Coastguard Worker	ldp	x29,x30,[sp],#128
1019*8fb009dcSAndroid Build Coastguard Worker	AARCH64_VALIDATE_LINK_REGISTER
1020*8fb009dcSAndroid Build Coastguard Worker	ret
1021*8fb009dcSAndroid Build Coastguard Worker.size	sha256_block_data_order_nohw,.-sha256_block_data_order_nohw
1022*8fb009dcSAndroid Build Coastguard Worker
1023*8fb009dcSAndroid Build Coastguard Worker.section	.rodata
1024*8fb009dcSAndroid Build Coastguard Worker.align	6
1025*8fb009dcSAndroid Build Coastguard Worker.type	.LK256,%object
1026*8fb009dcSAndroid Build Coastguard Worker.LK256:
1027*8fb009dcSAndroid Build Coastguard Worker.long	0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
1028*8fb009dcSAndroid Build Coastguard Worker.long	0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
1029*8fb009dcSAndroid Build Coastguard Worker.long	0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
1030*8fb009dcSAndroid Build Coastguard Worker.long	0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
1031*8fb009dcSAndroid Build Coastguard Worker.long	0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
1032*8fb009dcSAndroid Build Coastguard Worker.long	0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
1033*8fb009dcSAndroid Build Coastguard Worker.long	0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
1034*8fb009dcSAndroid Build Coastguard Worker.long	0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
1035*8fb009dcSAndroid Build Coastguard Worker.long	0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
1036*8fb009dcSAndroid Build Coastguard Worker.long	0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
1037*8fb009dcSAndroid Build Coastguard Worker.long	0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
1038*8fb009dcSAndroid Build Coastguard Worker.long	0xd192e819,0xd6990624,0xf40e3585,0x106aa070
1039*8fb009dcSAndroid Build Coastguard Worker.long	0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
1040*8fb009dcSAndroid Build Coastguard Worker.long	0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
1041*8fb009dcSAndroid Build Coastguard Worker.long	0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
1042*8fb009dcSAndroid Build Coastguard Worker.long	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
1043*8fb009dcSAndroid Build Coastguard Worker.long	0	//terminator
1044*8fb009dcSAndroid Build Coastguard Worker.size	.LK256,.-.LK256
1045*8fb009dcSAndroid Build Coastguard Worker.byte	83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
1046*8fb009dcSAndroid Build Coastguard Worker.align	2
1047*8fb009dcSAndroid Build Coastguard Worker.align	2
1048*8fb009dcSAndroid Build Coastguard Worker.text
1049*8fb009dcSAndroid Build Coastguard Worker#ifndef	__KERNEL__
1050*8fb009dcSAndroid Build Coastguard Worker.globl	sha256_block_data_order_hw
1051*8fb009dcSAndroid Build Coastguard Worker.hidden	sha256_block_data_order_hw
1052*8fb009dcSAndroid Build Coastguard Worker.type	sha256_block_data_order_hw,%function
1053*8fb009dcSAndroid Build Coastguard Worker.align	6
1054*8fb009dcSAndroid Build Coastguard Workersha256_block_data_order_hw:
1055*8fb009dcSAndroid Build Coastguard Worker	// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
1056*8fb009dcSAndroid Build Coastguard Worker	AARCH64_VALID_CALL_TARGET
1057*8fb009dcSAndroid Build Coastguard Worker	stp	x29,x30,[sp,#-16]!
1058*8fb009dcSAndroid Build Coastguard Worker	add	x29,sp,#0
1059*8fb009dcSAndroid Build Coastguard Worker
1060*8fb009dcSAndroid Build Coastguard Worker	ld1	{v0.4s,v1.4s},[x0]
1061*8fb009dcSAndroid Build Coastguard Worker	adrp	x3,.LK256
1062*8fb009dcSAndroid Build Coastguard Worker	add	x3,x3,:lo12:.LK256
1063*8fb009dcSAndroid Build Coastguard Worker
1064*8fb009dcSAndroid Build Coastguard Worker.Loop_hw:
1065*8fb009dcSAndroid Build Coastguard Worker	ld1	{v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
1066*8fb009dcSAndroid Build Coastguard Worker	sub	x2,x2,#1
1067*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1068*8fb009dcSAndroid Build Coastguard Worker	rev32	v4.16b,v4.16b
1069*8fb009dcSAndroid Build Coastguard Worker	rev32	v5.16b,v5.16b
1070*8fb009dcSAndroid Build Coastguard Worker	rev32	v6.16b,v6.16b
1071*8fb009dcSAndroid Build Coastguard Worker	rev32	v7.16b,v7.16b
1072*8fb009dcSAndroid Build Coastguard Worker	orr	v18.16b,v0.16b,v0.16b		// offload
1073*8fb009dcSAndroid Build Coastguard Worker	orr	v19.16b,v1.16b,v1.16b
1074*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1075*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v4.4s
1076*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
1077*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1078*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1079*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1080*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
1081*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1082*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v5.4s
1083*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
1084*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1085*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1086*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1087*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
1088*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1089*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v6.4s
1090*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
1091*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1092*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1093*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1094*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
1095*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1096*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v7.4s
1097*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e282887	//sha256su0 v7.16b,v4.16b
1098*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1099*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1100*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1101*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
1102*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1103*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v4.4s
1104*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
1105*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1106*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1107*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1108*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
1109*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1110*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v5.4s
1111*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
1112*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1113*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1114*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1115*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
1116*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1117*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v6.4s
1118*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
1119*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1120*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1121*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1122*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
1123*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1124*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v7.4s
1125*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e282887	//sha256su0 v7.16b,v4.16b
1126*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1127*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1128*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1129*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
1130*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1131*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v4.4s
1132*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828a4	//sha256su0 v4.16b,v5.16b
1133*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1134*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1135*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1136*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0760c4	//sha256su1 v4.16b,v6.16b,v7.16b
1137*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1138*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v5.4s
1139*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828c5	//sha256su0 v5.16b,v6.16b
1140*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1141*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1142*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1143*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0460e5	//sha256su1 v5.16b,v7.16b,v4.16b
1144*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1145*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v6.4s
1146*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e2828e6	//sha256su0 v6.16b,v7.16b
1147*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1148*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1149*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1150*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e056086	//sha256su1 v6.16b,v4.16b,v5.16b
1151*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1152*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v7.4s
1153*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e282887	//sha256su0 v7.16b,v4.16b
1154*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1155*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1156*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1157*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e0660a7	//sha256su1 v7.16b,v5.16b,v6.16b
1158*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3],#16
1159*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v4.4s
1160*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1161*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1162*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1163*8fb009dcSAndroid Build Coastguard Worker
1164*8fb009dcSAndroid Build Coastguard Worker	ld1	{v16.4s},[x3],#16
1165*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v5.4s
1166*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1167*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1168*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1169*8fb009dcSAndroid Build Coastguard Worker
1170*8fb009dcSAndroid Build Coastguard Worker	ld1	{v17.4s},[x3]
1171*8fb009dcSAndroid Build Coastguard Worker	add	v16.4s,v16.4s,v6.4s
1172*8fb009dcSAndroid Build Coastguard Worker	sub	x3,x3,#64*4-16	// rewind
1173*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1174*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e104020	//sha256h v0.16b,v1.16b,v16.4s
1175*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e105041	//sha256h2 v1.16b,v2.16b,v16.4s
1176*8fb009dcSAndroid Build Coastguard Worker
1177*8fb009dcSAndroid Build Coastguard Worker	add	v17.4s,v17.4s,v7.4s
1178*8fb009dcSAndroid Build Coastguard Worker	orr	v2.16b,v0.16b,v0.16b
1179*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e114020	//sha256h v0.16b,v1.16b,v17.4s
1180*8fb009dcSAndroid Build Coastguard Worker.inst	0x5e115041	//sha256h2 v1.16b,v2.16b,v17.4s
1181*8fb009dcSAndroid Build Coastguard Worker
1182*8fb009dcSAndroid Build Coastguard Worker	add	v0.4s,v0.4s,v18.4s
1183*8fb009dcSAndroid Build Coastguard Worker	add	v1.4s,v1.4s,v19.4s
1184*8fb009dcSAndroid Build Coastguard Worker
1185*8fb009dcSAndroid Build Coastguard Worker	cbnz	x2,.Loop_hw
1186*8fb009dcSAndroid Build Coastguard Worker
1187*8fb009dcSAndroid Build Coastguard Worker	st1	{v0.4s,v1.4s},[x0]
1188*8fb009dcSAndroid Build Coastguard Worker
1189*8fb009dcSAndroid Build Coastguard Worker	ldr	x29,[sp],#16
1190*8fb009dcSAndroid Build Coastguard Worker	ret
1191*8fb009dcSAndroid Build Coastguard Worker.size	sha256_block_data_order_hw,.-sha256_block_data_order_hw
1192*8fb009dcSAndroid Build Coastguard Worker#endif
1193*8fb009dcSAndroid Build Coastguard Worker#endif  // !OPENSSL_NO_ASM && defined(OPENSSL_AARCH64) && defined(__ELF__)
1194