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