xref: /aosp_15_r20/external/boringssl/src/gen/bcm/sha256-armv4-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_ARM) && defined(__ELF__)
7*8fb009dcSAndroid Build Coastguard Worker@ Copyright 2007-2016 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@ ====================================================================
16*8fb009dcSAndroid Build Coastguard Worker@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
17*8fb009dcSAndroid Build Coastguard Worker@ project. The module is, however, dual licensed under OpenSSL and
18*8fb009dcSAndroid Build Coastguard Worker@ CRYPTOGAMS licenses depending on where you obtain it. For further
19*8fb009dcSAndroid Build Coastguard Worker@ details see http://www.openssl.org/~appro/cryptogams/.
20*8fb009dcSAndroid Build Coastguard Worker@
21*8fb009dcSAndroid Build Coastguard Worker@ Permission to use under GPL terms is granted.
22*8fb009dcSAndroid Build Coastguard Worker@ ====================================================================
23*8fb009dcSAndroid Build Coastguard Worker
24*8fb009dcSAndroid Build Coastguard Worker@ SHA256 block procedure for ARMv4. May 2007.
25*8fb009dcSAndroid Build Coastguard Worker
26*8fb009dcSAndroid Build Coastguard Worker@ Performance is ~2x better than gcc 3.4 generated code and in "abso-
27*8fb009dcSAndroid Build Coastguard Worker@ lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
28*8fb009dcSAndroid Build Coastguard Worker@ byte [on single-issue Xscale PXA250 core].
29*8fb009dcSAndroid Build Coastguard Worker
30*8fb009dcSAndroid Build Coastguard Worker@ July 2010.
31*8fb009dcSAndroid Build Coastguard Worker@
32*8fb009dcSAndroid Build Coastguard Worker@ Rescheduling for dual-issue pipeline resulted in 22% improvement on
33*8fb009dcSAndroid Build Coastguard Worker@ Cortex A8 core and ~20 cycles per processed byte.
34*8fb009dcSAndroid Build Coastguard Worker
35*8fb009dcSAndroid Build Coastguard Worker@ February 2011.
36*8fb009dcSAndroid Build Coastguard Worker@
37*8fb009dcSAndroid Build Coastguard Worker@ Profiler-assisted and platform-specific optimization resulted in 16%
38*8fb009dcSAndroid Build Coastguard Worker@ improvement on Cortex A8 core and ~15.4 cycles per processed byte.
39*8fb009dcSAndroid Build Coastguard Worker
40*8fb009dcSAndroid Build Coastguard Worker@ September 2013.
41*8fb009dcSAndroid Build Coastguard Worker@
42*8fb009dcSAndroid Build Coastguard Worker@ Add NEON implementation. On Cortex A8 it was measured to process one
43*8fb009dcSAndroid Build Coastguard Worker@ byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon
44*8fb009dcSAndroid Build Coastguard Worker@ S4 does it in 12.5 cycles too, but it's 50% faster than integer-only
45*8fb009dcSAndroid Build Coastguard Worker@ code (meaning that latter performs sub-optimally, nothing was done
46*8fb009dcSAndroid Build Coastguard Worker@ about it).
47*8fb009dcSAndroid Build Coastguard Worker
48*8fb009dcSAndroid Build Coastguard Worker@ May 2014.
49*8fb009dcSAndroid Build Coastguard Worker@
50*8fb009dcSAndroid Build Coastguard Worker@ Add ARMv8 code path performing at 2.0 cpb on Apple A7.
51*8fb009dcSAndroid Build Coastguard Worker
52*8fb009dcSAndroid Build Coastguard Worker#ifndef __KERNEL__
53*8fb009dcSAndroid Build Coastguard Worker# include <openssl/arm_arch.h>
54*8fb009dcSAndroid Build Coastguard Worker#else
55*8fb009dcSAndroid Build Coastguard Worker# define __ARM_ARCH __LINUX_ARM_ARCH__
56*8fb009dcSAndroid Build Coastguard Worker# define __ARM_MAX_ARCH__ 7
57*8fb009dcSAndroid Build Coastguard Worker#endif
58*8fb009dcSAndroid Build Coastguard Worker
59*8fb009dcSAndroid Build Coastguard Worker@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both
60*8fb009dcSAndroid Build Coastguard Worker@ ARMv7 and ARMv8 processors. It does have ARMv8-only code, but those
61*8fb009dcSAndroid Build Coastguard Worker@ instructions are manually-encoded. (See unsha256.)
62*8fb009dcSAndroid Build Coastguard Worker.arch	armv7-a
63*8fb009dcSAndroid Build Coastguard Worker
64*8fb009dcSAndroid Build Coastguard Worker.text
65*8fb009dcSAndroid Build Coastguard Worker#if defined(__thumb2__)
66*8fb009dcSAndroid Build Coastguard Worker.syntax	unified
67*8fb009dcSAndroid Build Coastguard Worker.thumb
68*8fb009dcSAndroid Build Coastguard Worker#else
69*8fb009dcSAndroid Build Coastguard Worker.code	32
70*8fb009dcSAndroid Build Coastguard Worker#endif
71*8fb009dcSAndroid Build Coastguard Worker
72*8fb009dcSAndroid Build Coastguard Worker.type	K256,%object
73*8fb009dcSAndroid Build Coastguard Worker.align	5
74*8fb009dcSAndroid Build Coastguard WorkerK256:
75*8fb009dcSAndroid Build Coastguard Worker.word	0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
76*8fb009dcSAndroid Build Coastguard Worker.word	0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
77*8fb009dcSAndroid Build Coastguard Worker.word	0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
78*8fb009dcSAndroid Build Coastguard Worker.word	0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
79*8fb009dcSAndroid Build Coastguard Worker.word	0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
80*8fb009dcSAndroid Build Coastguard Worker.word	0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
81*8fb009dcSAndroid Build Coastguard Worker.word	0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
82*8fb009dcSAndroid Build Coastguard Worker.word	0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
83*8fb009dcSAndroid Build Coastguard Worker.word	0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
84*8fb009dcSAndroid Build Coastguard Worker.word	0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
85*8fb009dcSAndroid Build Coastguard Worker.word	0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
86*8fb009dcSAndroid Build Coastguard Worker.word	0xd192e819,0xd6990624,0xf40e3585,0x106aa070
87*8fb009dcSAndroid Build Coastguard Worker.word	0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
88*8fb009dcSAndroid Build Coastguard Worker.word	0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
89*8fb009dcSAndroid Build Coastguard Worker.word	0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
90*8fb009dcSAndroid Build Coastguard Worker.word	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
91*8fb009dcSAndroid Build Coastguard Worker.size	K256,.-K256
92*8fb009dcSAndroid Build Coastguard Worker.word	0				@ terminator
93*8fb009dcSAndroid Build Coastguard Worker.align	5
94*8fb009dcSAndroid Build Coastguard Worker
95*8fb009dcSAndroid Build Coastguard Worker.globl	sha256_block_data_order_nohw
96*8fb009dcSAndroid Build Coastguard Worker.hidden	sha256_block_data_order_nohw
97*8fb009dcSAndroid Build Coastguard Worker.type	sha256_block_data_order_nohw,%function
98*8fb009dcSAndroid Build Coastguard Workersha256_block_data_order_nohw:
99*8fb009dcSAndroid Build Coastguard Worker	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
100*8fb009dcSAndroid Build Coastguard Worker	stmdb	sp!,{r0,r1,r2,r4-r11,lr}
101*8fb009dcSAndroid Build Coastguard Worker	ldmia	r0,{r4,r5,r6,r7,r8,r9,r10,r11}
102*8fb009dcSAndroid Build Coastguard Worker	adr	r14,K256
103*8fb009dcSAndroid Build Coastguard Worker	sub	sp,sp,#16*4		@ alloca(X[16])
104*8fb009dcSAndroid Build Coastguard Worker.Loop:
105*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
106*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4
107*8fb009dcSAndroid Build Coastguard Worker# else
108*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
109*8fb009dcSAndroid Build Coastguard Worker# endif
110*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6		@ magic
111*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r12
112*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
113*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 0
114*8fb009dcSAndroid Build Coastguard Worker# if 0==15
115*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
116*8fb009dcSAndroid Build Coastguard Worker# endif
117*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
118*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
119*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#19	@ Sigma1(e)
120*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
121*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
122*8fb009dcSAndroid Build Coastguard Worker# endif
123*8fb009dcSAndroid Build Coastguard Worker#else
124*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 0
125*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
126*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
127*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
128*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
129*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
130*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
131*8fb009dcSAndroid Build Coastguard Worker# if 0==15
132*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
133*8fb009dcSAndroid Build Coastguard Worker# endif
134*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
135*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
136*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#19	@ Sigma1(e)
137*8fb009dcSAndroid Build Coastguard Worker#endif
138*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
139*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=X[i]
140*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#0*4]
141*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
142*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
143*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
144*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12			@ h+=K256[i]
145*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10			@ Ch(e,f,g)
146*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
147*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=Ch(e,f,g)
148*8fb009dcSAndroid Build Coastguard Worker#if 0==31
149*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
150*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
151*8fb009dcSAndroid Build Coastguard Worker#endif
152*8fb009dcSAndroid Build Coastguard Worker#if 0<15
153*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
154*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
155*8fb009dcSAndroid Build Coastguard Worker# else
156*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
157*8fb009dcSAndroid Build Coastguard Worker# endif
158*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
159*8fb009dcSAndroid Build Coastguard Worker#else
160*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#2*4]		@ from future BODY_16_xx
161*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
162*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#15*4]	@ from future BODY_16_xx
163*8fb009dcSAndroid Build Coastguard Worker#endif
164*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20	@ Sigma0(a)
165*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
166*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11			@ d+=h
167*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5			@ Maj(a,b,c)
168*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
169*8fb009dcSAndroid Build Coastguard Worker	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
170*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
171*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 1
172*8fb009dcSAndroid Build Coastguard Worker# if 1==15
173*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
174*8fb009dcSAndroid Build Coastguard Worker# endif
175*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
176*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
177*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#19	@ Sigma1(e)
178*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
179*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
180*8fb009dcSAndroid Build Coastguard Worker# endif
181*8fb009dcSAndroid Build Coastguard Worker#else
182*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 1
183*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
184*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
185*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
186*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
187*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
188*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
189*8fb009dcSAndroid Build Coastguard Worker# if 1==15
190*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
191*8fb009dcSAndroid Build Coastguard Worker# endif
192*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
193*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
194*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#19	@ Sigma1(e)
195*8fb009dcSAndroid Build Coastguard Worker#endif
196*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
197*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=X[i]
198*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#1*4]
199*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
200*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
201*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
202*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3			@ h+=K256[i]
203*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9			@ Ch(e,f,g)
204*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
205*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=Ch(e,f,g)
206*8fb009dcSAndroid Build Coastguard Worker#if 1==31
207*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
208*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
209*8fb009dcSAndroid Build Coastguard Worker#endif
210*8fb009dcSAndroid Build Coastguard Worker#if 1<15
211*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
212*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
213*8fb009dcSAndroid Build Coastguard Worker# else
214*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
215*8fb009dcSAndroid Build Coastguard Worker# endif
216*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
217*8fb009dcSAndroid Build Coastguard Worker#else
218*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#3*4]		@ from future BODY_16_xx
219*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
220*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#0*4]	@ from future BODY_16_xx
221*8fb009dcSAndroid Build Coastguard Worker#endif
222*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20	@ Sigma0(a)
223*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
224*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10			@ d+=h
225*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4			@ Maj(a,b,c)
226*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
227*8fb009dcSAndroid Build Coastguard Worker	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
228*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
229*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 2
230*8fb009dcSAndroid Build Coastguard Worker# if 2==15
231*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
232*8fb009dcSAndroid Build Coastguard Worker# endif
233*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
234*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
235*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#19	@ Sigma1(e)
236*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
237*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
238*8fb009dcSAndroid Build Coastguard Worker# endif
239*8fb009dcSAndroid Build Coastguard Worker#else
240*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 2
241*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
242*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
243*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
244*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
245*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
246*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
247*8fb009dcSAndroid Build Coastguard Worker# if 2==15
248*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
249*8fb009dcSAndroid Build Coastguard Worker# endif
250*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
251*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
252*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#19	@ Sigma1(e)
253*8fb009dcSAndroid Build Coastguard Worker#endif
254*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
255*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=X[i]
256*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#2*4]
257*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
258*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
259*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
260*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12			@ h+=K256[i]
261*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8			@ Ch(e,f,g)
262*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
263*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=Ch(e,f,g)
264*8fb009dcSAndroid Build Coastguard Worker#if 2==31
265*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
266*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
267*8fb009dcSAndroid Build Coastguard Worker#endif
268*8fb009dcSAndroid Build Coastguard Worker#if 2<15
269*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
270*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
271*8fb009dcSAndroid Build Coastguard Worker# else
272*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
273*8fb009dcSAndroid Build Coastguard Worker# endif
274*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
275*8fb009dcSAndroid Build Coastguard Worker#else
276*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#4*4]		@ from future BODY_16_xx
277*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
278*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#1*4]	@ from future BODY_16_xx
279*8fb009dcSAndroid Build Coastguard Worker#endif
280*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20	@ Sigma0(a)
281*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
282*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9			@ d+=h
283*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11			@ Maj(a,b,c)
284*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
285*8fb009dcSAndroid Build Coastguard Worker	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
286*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
287*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 3
288*8fb009dcSAndroid Build Coastguard Worker# if 3==15
289*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
290*8fb009dcSAndroid Build Coastguard Worker# endif
291*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
292*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
293*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#19	@ Sigma1(e)
294*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
295*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
296*8fb009dcSAndroid Build Coastguard Worker# endif
297*8fb009dcSAndroid Build Coastguard Worker#else
298*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 3
299*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
300*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
301*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
302*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
303*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
304*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
305*8fb009dcSAndroid Build Coastguard Worker# if 3==15
306*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
307*8fb009dcSAndroid Build Coastguard Worker# endif
308*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
309*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
310*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#19	@ Sigma1(e)
311*8fb009dcSAndroid Build Coastguard Worker#endif
312*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
313*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=X[i]
314*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#3*4]
315*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
316*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
317*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
318*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3			@ h+=K256[i]
319*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7			@ Ch(e,f,g)
320*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
321*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=Ch(e,f,g)
322*8fb009dcSAndroid Build Coastguard Worker#if 3==31
323*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
324*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
325*8fb009dcSAndroid Build Coastguard Worker#endif
326*8fb009dcSAndroid Build Coastguard Worker#if 3<15
327*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
328*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
329*8fb009dcSAndroid Build Coastguard Worker# else
330*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
331*8fb009dcSAndroid Build Coastguard Worker# endif
332*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
333*8fb009dcSAndroid Build Coastguard Worker#else
334*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#5*4]		@ from future BODY_16_xx
335*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
336*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#2*4]	@ from future BODY_16_xx
337*8fb009dcSAndroid Build Coastguard Worker#endif
338*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20	@ Sigma0(a)
339*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
340*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8			@ d+=h
341*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10			@ Maj(a,b,c)
342*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
343*8fb009dcSAndroid Build Coastguard Worker	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
344*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
345*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 4
346*8fb009dcSAndroid Build Coastguard Worker# if 4==15
347*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
348*8fb009dcSAndroid Build Coastguard Worker# endif
349*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
350*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
351*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#19	@ Sigma1(e)
352*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
353*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
354*8fb009dcSAndroid Build Coastguard Worker# endif
355*8fb009dcSAndroid Build Coastguard Worker#else
356*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 4
357*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
358*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
359*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
360*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
361*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
362*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
363*8fb009dcSAndroid Build Coastguard Worker# if 4==15
364*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
365*8fb009dcSAndroid Build Coastguard Worker# endif
366*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
367*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
368*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#19	@ Sigma1(e)
369*8fb009dcSAndroid Build Coastguard Worker#endif
370*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
371*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=X[i]
372*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#4*4]
373*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
374*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
375*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
376*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12			@ h+=K256[i]
377*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6			@ Ch(e,f,g)
378*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
379*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=Ch(e,f,g)
380*8fb009dcSAndroid Build Coastguard Worker#if 4==31
381*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
382*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
383*8fb009dcSAndroid Build Coastguard Worker#endif
384*8fb009dcSAndroid Build Coastguard Worker#if 4<15
385*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
386*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
387*8fb009dcSAndroid Build Coastguard Worker# else
388*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
389*8fb009dcSAndroid Build Coastguard Worker# endif
390*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
391*8fb009dcSAndroid Build Coastguard Worker#else
392*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#6*4]		@ from future BODY_16_xx
393*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
394*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#3*4]	@ from future BODY_16_xx
395*8fb009dcSAndroid Build Coastguard Worker#endif
396*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20	@ Sigma0(a)
397*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
398*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7			@ d+=h
399*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9			@ Maj(a,b,c)
400*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
401*8fb009dcSAndroid Build Coastguard Worker	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
402*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
403*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 5
404*8fb009dcSAndroid Build Coastguard Worker# if 5==15
405*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
406*8fb009dcSAndroid Build Coastguard Worker# endif
407*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
408*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
409*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#19	@ Sigma1(e)
410*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
411*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
412*8fb009dcSAndroid Build Coastguard Worker# endif
413*8fb009dcSAndroid Build Coastguard Worker#else
414*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 5
415*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
416*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
417*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
418*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
419*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
420*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
421*8fb009dcSAndroid Build Coastguard Worker# if 5==15
422*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
423*8fb009dcSAndroid Build Coastguard Worker# endif
424*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
425*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
426*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#19	@ Sigma1(e)
427*8fb009dcSAndroid Build Coastguard Worker#endif
428*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
429*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=X[i]
430*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#5*4]
431*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
432*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
433*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
434*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3			@ h+=K256[i]
435*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5			@ Ch(e,f,g)
436*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
437*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=Ch(e,f,g)
438*8fb009dcSAndroid Build Coastguard Worker#if 5==31
439*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
440*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
441*8fb009dcSAndroid Build Coastguard Worker#endif
442*8fb009dcSAndroid Build Coastguard Worker#if 5<15
443*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
444*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
445*8fb009dcSAndroid Build Coastguard Worker# else
446*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
447*8fb009dcSAndroid Build Coastguard Worker# endif
448*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
449*8fb009dcSAndroid Build Coastguard Worker#else
450*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#7*4]		@ from future BODY_16_xx
451*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
452*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#4*4]	@ from future BODY_16_xx
453*8fb009dcSAndroid Build Coastguard Worker#endif
454*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20	@ Sigma0(a)
455*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
456*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6			@ d+=h
457*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8			@ Maj(a,b,c)
458*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
459*8fb009dcSAndroid Build Coastguard Worker	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
460*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
461*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 6
462*8fb009dcSAndroid Build Coastguard Worker# if 6==15
463*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
464*8fb009dcSAndroid Build Coastguard Worker# endif
465*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
466*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
467*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#19	@ Sigma1(e)
468*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
469*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
470*8fb009dcSAndroid Build Coastguard Worker# endif
471*8fb009dcSAndroid Build Coastguard Worker#else
472*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 6
473*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
474*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
475*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
476*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
477*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
478*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
479*8fb009dcSAndroid Build Coastguard Worker# if 6==15
480*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
481*8fb009dcSAndroid Build Coastguard Worker# endif
482*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
483*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
484*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#19	@ Sigma1(e)
485*8fb009dcSAndroid Build Coastguard Worker#endif
486*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
487*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=X[i]
488*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#6*4]
489*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
490*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
491*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
492*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12			@ h+=K256[i]
493*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4			@ Ch(e,f,g)
494*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
495*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=Ch(e,f,g)
496*8fb009dcSAndroid Build Coastguard Worker#if 6==31
497*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
498*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
499*8fb009dcSAndroid Build Coastguard Worker#endif
500*8fb009dcSAndroid Build Coastguard Worker#if 6<15
501*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
502*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
503*8fb009dcSAndroid Build Coastguard Worker# else
504*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
505*8fb009dcSAndroid Build Coastguard Worker# endif
506*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
507*8fb009dcSAndroid Build Coastguard Worker#else
508*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#8*4]		@ from future BODY_16_xx
509*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
510*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#5*4]	@ from future BODY_16_xx
511*8fb009dcSAndroid Build Coastguard Worker#endif
512*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20	@ Sigma0(a)
513*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
514*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5			@ d+=h
515*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7			@ Maj(a,b,c)
516*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
517*8fb009dcSAndroid Build Coastguard Worker	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
518*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
519*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 7
520*8fb009dcSAndroid Build Coastguard Worker# if 7==15
521*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
522*8fb009dcSAndroid Build Coastguard Worker# endif
523*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
524*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
525*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#19	@ Sigma1(e)
526*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
527*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
528*8fb009dcSAndroid Build Coastguard Worker# endif
529*8fb009dcSAndroid Build Coastguard Worker#else
530*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 7
531*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
532*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
533*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
534*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
535*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
536*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
537*8fb009dcSAndroid Build Coastguard Worker# if 7==15
538*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
539*8fb009dcSAndroid Build Coastguard Worker# endif
540*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
541*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
542*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#19	@ Sigma1(e)
543*8fb009dcSAndroid Build Coastguard Worker#endif
544*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
545*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=X[i]
546*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#7*4]
547*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
548*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
549*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
550*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3			@ h+=K256[i]
551*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11			@ Ch(e,f,g)
552*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
553*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=Ch(e,f,g)
554*8fb009dcSAndroid Build Coastguard Worker#if 7==31
555*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
556*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
557*8fb009dcSAndroid Build Coastguard Worker#endif
558*8fb009dcSAndroid Build Coastguard Worker#if 7<15
559*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
560*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
561*8fb009dcSAndroid Build Coastguard Worker# else
562*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
563*8fb009dcSAndroid Build Coastguard Worker# endif
564*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
565*8fb009dcSAndroid Build Coastguard Worker#else
566*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#9*4]		@ from future BODY_16_xx
567*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
568*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#6*4]	@ from future BODY_16_xx
569*8fb009dcSAndroid Build Coastguard Worker#endif
570*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20	@ Sigma0(a)
571*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
572*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4			@ d+=h
573*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6			@ Maj(a,b,c)
574*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
575*8fb009dcSAndroid Build Coastguard Worker	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
576*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
577*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 8
578*8fb009dcSAndroid Build Coastguard Worker# if 8==15
579*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
580*8fb009dcSAndroid Build Coastguard Worker# endif
581*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
582*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
583*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#19	@ Sigma1(e)
584*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
585*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
586*8fb009dcSAndroid Build Coastguard Worker# endif
587*8fb009dcSAndroid Build Coastguard Worker#else
588*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 8
589*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
590*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
591*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
592*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
593*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
594*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
595*8fb009dcSAndroid Build Coastguard Worker# if 8==15
596*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
597*8fb009dcSAndroid Build Coastguard Worker# endif
598*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
599*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
600*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#19	@ Sigma1(e)
601*8fb009dcSAndroid Build Coastguard Worker#endif
602*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
603*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=X[i]
604*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#8*4]
605*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
606*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
607*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
608*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12			@ h+=K256[i]
609*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10			@ Ch(e,f,g)
610*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
611*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=Ch(e,f,g)
612*8fb009dcSAndroid Build Coastguard Worker#if 8==31
613*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
614*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
615*8fb009dcSAndroid Build Coastguard Worker#endif
616*8fb009dcSAndroid Build Coastguard Worker#if 8<15
617*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
618*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
619*8fb009dcSAndroid Build Coastguard Worker# else
620*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
621*8fb009dcSAndroid Build Coastguard Worker# endif
622*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
623*8fb009dcSAndroid Build Coastguard Worker#else
624*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#10*4]		@ from future BODY_16_xx
625*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
626*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#7*4]	@ from future BODY_16_xx
627*8fb009dcSAndroid Build Coastguard Worker#endif
628*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20	@ Sigma0(a)
629*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
630*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11			@ d+=h
631*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5			@ Maj(a,b,c)
632*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
633*8fb009dcSAndroid Build Coastguard Worker	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
634*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
635*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 9
636*8fb009dcSAndroid Build Coastguard Worker# if 9==15
637*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
638*8fb009dcSAndroid Build Coastguard Worker# endif
639*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
640*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
641*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#19	@ Sigma1(e)
642*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
643*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
644*8fb009dcSAndroid Build Coastguard Worker# endif
645*8fb009dcSAndroid Build Coastguard Worker#else
646*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 9
647*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
648*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
649*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
650*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
651*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
652*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
653*8fb009dcSAndroid Build Coastguard Worker# if 9==15
654*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
655*8fb009dcSAndroid Build Coastguard Worker# endif
656*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
657*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
658*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#19	@ Sigma1(e)
659*8fb009dcSAndroid Build Coastguard Worker#endif
660*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
661*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=X[i]
662*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#9*4]
663*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
664*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
665*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
666*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3			@ h+=K256[i]
667*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9			@ Ch(e,f,g)
668*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
669*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=Ch(e,f,g)
670*8fb009dcSAndroid Build Coastguard Worker#if 9==31
671*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
672*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
673*8fb009dcSAndroid Build Coastguard Worker#endif
674*8fb009dcSAndroid Build Coastguard Worker#if 9<15
675*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
676*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
677*8fb009dcSAndroid Build Coastguard Worker# else
678*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
679*8fb009dcSAndroid Build Coastguard Worker# endif
680*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
681*8fb009dcSAndroid Build Coastguard Worker#else
682*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#11*4]		@ from future BODY_16_xx
683*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
684*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#8*4]	@ from future BODY_16_xx
685*8fb009dcSAndroid Build Coastguard Worker#endif
686*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20	@ Sigma0(a)
687*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
688*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10			@ d+=h
689*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4			@ Maj(a,b,c)
690*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
691*8fb009dcSAndroid Build Coastguard Worker	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
692*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
693*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 10
694*8fb009dcSAndroid Build Coastguard Worker# if 10==15
695*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
696*8fb009dcSAndroid Build Coastguard Worker# endif
697*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
698*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
699*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#19	@ Sigma1(e)
700*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
701*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
702*8fb009dcSAndroid Build Coastguard Worker# endif
703*8fb009dcSAndroid Build Coastguard Worker#else
704*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 10
705*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
706*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
707*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
708*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
709*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
710*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
711*8fb009dcSAndroid Build Coastguard Worker# if 10==15
712*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
713*8fb009dcSAndroid Build Coastguard Worker# endif
714*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
715*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
716*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#19	@ Sigma1(e)
717*8fb009dcSAndroid Build Coastguard Worker#endif
718*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
719*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=X[i]
720*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#10*4]
721*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
722*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
723*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
724*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12			@ h+=K256[i]
725*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8			@ Ch(e,f,g)
726*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
727*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=Ch(e,f,g)
728*8fb009dcSAndroid Build Coastguard Worker#if 10==31
729*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
730*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
731*8fb009dcSAndroid Build Coastguard Worker#endif
732*8fb009dcSAndroid Build Coastguard Worker#if 10<15
733*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
734*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
735*8fb009dcSAndroid Build Coastguard Worker# else
736*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
737*8fb009dcSAndroid Build Coastguard Worker# endif
738*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
739*8fb009dcSAndroid Build Coastguard Worker#else
740*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#12*4]		@ from future BODY_16_xx
741*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
742*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#9*4]	@ from future BODY_16_xx
743*8fb009dcSAndroid Build Coastguard Worker#endif
744*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20	@ Sigma0(a)
745*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
746*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9			@ d+=h
747*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11			@ Maj(a,b,c)
748*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
749*8fb009dcSAndroid Build Coastguard Worker	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
750*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
751*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 11
752*8fb009dcSAndroid Build Coastguard Worker# if 11==15
753*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
754*8fb009dcSAndroid Build Coastguard Worker# endif
755*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
756*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
757*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#19	@ Sigma1(e)
758*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
759*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
760*8fb009dcSAndroid Build Coastguard Worker# endif
761*8fb009dcSAndroid Build Coastguard Worker#else
762*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 11
763*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
764*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
765*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
766*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
767*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
768*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
769*8fb009dcSAndroid Build Coastguard Worker# if 11==15
770*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
771*8fb009dcSAndroid Build Coastguard Worker# endif
772*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
773*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
774*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#19	@ Sigma1(e)
775*8fb009dcSAndroid Build Coastguard Worker#endif
776*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
777*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=X[i]
778*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#11*4]
779*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
780*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
781*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
782*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3			@ h+=K256[i]
783*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7			@ Ch(e,f,g)
784*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
785*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=Ch(e,f,g)
786*8fb009dcSAndroid Build Coastguard Worker#if 11==31
787*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
788*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
789*8fb009dcSAndroid Build Coastguard Worker#endif
790*8fb009dcSAndroid Build Coastguard Worker#if 11<15
791*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
792*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
793*8fb009dcSAndroid Build Coastguard Worker# else
794*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
795*8fb009dcSAndroid Build Coastguard Worker# endif
796*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
797*8fb009dcSAndroid Build Coastguard Worker#else
798*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#13*4]		@ from future BODY_16_xx
799*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
800*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#10*4]	@ from future BODY_16_xx
801*8fb009dcSAndroid Build Coastguard Worker#endif
802*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20	@ Sigma0(a)
803*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
804*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8			@ d+=h
805*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10			@ Maj(a,b,c)
806*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
807*8fb009dcSAndroid Build Coastguard Worker	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
808*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
809*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 12
810*8fb009dcSAndroid Build Coastguard Worker# if 12==15
811*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
812*8fb009dcSAndroid Build Coastguard Worker# endif
813*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
814*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
815*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#19	@ Sigma1(e)
816*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
817*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
818*8fb009dcSAndroid Build Coastguard Worker# endif
819*8fb009dcSAndroid Build Coastguard Worker#else
820*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 12
821*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
822*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
823*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
824*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
825*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
826*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
827*8fb009dcSAndroid Build Coastguard Worker# if 12==15
828*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
829*8fb009dcSAndroid Build Coastguard Worker# endif
830*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
831*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
832*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#19	@ Sigma1(e)
833*8fb009dcSAndroid Build Coastguard Worker#endif
834*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
835*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=X[i]
836*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#12*4]
837*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
838*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
839*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
840*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12			@ h+=K256[i]
841*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6			@ Ch(e,f,g)
842*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
843*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=Ch(e,f,g)
844*8fb009dcSAndroid Build Coastguard Worker#if 12==31
845*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
846*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
847*8fb009dcSAndroid Build Coastguard Worker#endif
848*8fb009dcSAndroid Build Coastguard Worker#if 12<15
849*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
850*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
851*8fb009dcSAndroid Build Coastguard Worker# else
852*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
853*8fb009dcSAndroid Build Coastguard Worker# endif
854*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
855*8fb009dcSAndroid Build Coastguard Worker#else
856*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#14*4]		@ from future BODY_16_xx
857*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
858*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#11*4]	@ from future BODY_16_xx
859*8fb009dcSAndroid Build Coastguard Worker#endif
860*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20	@ Sigma0(a)
861*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
862*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7			@ d+=h
863*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9			@ Maj(a,b,c)
864*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
865*8fb009dcSAndroid Build Coastguard Worker	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
866*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
867*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 13
868*8fb009dcSAndroid Build Coastguard Worker# if 13==15
869*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
870*8fb009dcSAndroid Build Coastguard Worker# endif
871*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
872*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
873*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#19	@ Sigma1(e)
874*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
875*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
876*8fb009dcSAndroid Build Coastguard Worker# endif
877*8fb009dcSAndroid Build Coastguard Worker#else
878*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 13
879*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
880*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
881*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
882*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
883*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
884*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
885*8fb009dcSAndroid Build Coastguard Worker# if 13==15
886*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
887*8fb009dcSAndroid Build Coastguard Worker# endif
888*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
889*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
890*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#19	@ Sigma1(e)
891*8fb009dcSAndroid Build Coastguard Worker#endif
892*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
893*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=X[i]
894*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#13*4]
895*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
896*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
897*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
898*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3			@ h+=K256[i]
899*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5			@ Ch(e,f,g)
900*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
901*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=Ch(e,f,g)
902*8fb009dcSAndroid Build Coastguard Worker#if 13==31
903*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
904*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
905*8fb009dcSAndroid Build Coastguard Worker#endif
906*8fb009dcSAndroid Build Coastguard Worker#if 13<15
907*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
908*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
909*8fb009dcSAndroid Build Coastguard Worker# else
910*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
911*8fb009dcSAndroid Build Coastguard Worker# endif
912*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
913*8fb009dcSAndroid Build Coastguard Worker#else
914*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#15*4]		@ from future BODY_16_xx
915*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
916*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#12*4]	@ from future BODY_16_xx
917*8fb009dcSAndroid Build Coastguard Worker#endif
918*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20	@ Sigma0(a)
919*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
920*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6			@ d+=h
921*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8			@ Maj(a,b,c)
922*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
923*8fb009dcSAndroid Build Coastguard Worker	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
924*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
925*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 14
926*8fb009dcSAndroid Build Coastguard Worker# if 14==15
927*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
928*8fb009dcSAndroid Build Coastguard Worker# endif
929*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
930*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
931*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#19	@ Sigma1(e)
932*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
933*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
934*8fb009dcSAndroid Build Coastguard Worker# endif
935*8fb009dcSAndroid Build Coastguard Worker#else
936*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 14
937*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
938*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1,#2]
939*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
940*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#8
941*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12,[r1],#4
942*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
943*8fb009dcSAndroid Build Coastguard Worker# if 14==15
944*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
945*8fb009dcSAndroid Build Coastguard Worker# endif
946*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
947*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r12,lsl#24
948*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#19	@ Sigma1(e)
949*8fb009dcSAndroid Build Coastguard Worker#endif
950*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
951*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=X[i]
952*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#14*4]
953*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
954*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
955*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
956*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12			@ h+=K256[i]
957*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4			@ Ch(e,f,g)
958*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
959*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=Ch(e,f,g)
960*8fb009dcSAndroid Build Coastguard Worker#if 14==31
961*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
962*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
963*8fb009dcSAndroid Build Coastguard Worker#endif
964*8fb009dcSAndroid Build Coastguard Worker#if 14<15
965*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
966*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
967*8fb009dcSAndroid Build Coastguard Worker# else
968*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
969*8fb009dcSAndroid Build Coastguard Worker# endif
970*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
971*8fb009dcSAndroid Build Coastguard Worker#else
972*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#0*4]		@ from future BODY_16_xx
973*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
974*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#13*4]	@ from future BODY_16_xx
975*8fb009dcSAndroid Build Coastguard Worker#endif
976*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20	@ Sigma0(a)
977*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
978*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5			@ d+=h
979*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7			@ Maj(a,b,c)
980*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
981*8fb009dcSAndroid Build Coastguard Worker	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
982*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
983*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[r1],#4			@ 15
984*8fb009dcSAndroid Build Coastguard Worker# if 15==15
985*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
986*8fb009dcSAndroid Build Coastguard Worker# endif
987*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
988*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
989*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#19	@ Sigma1(e)
990*8fb009dcSAndroid Build Coastguard Worker# ifndef __ARMEB__
991*8fb009dcSAndroid Build Coastguard Worker	rev	r2,r2
992*8fb009dcSAndroid Build Coastguard Worker# endif
993*8fb009dcSAndroid Build Coastguard Worker#else
994*8fb009dcSAndroid Build Coastguard Worker	@ ldrb	r2,[r1,#3]			@ 15
995*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
996*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#2]
997*8fb009dcSAndroid Build Coastguard Worker	ldrb	r0,[r1,#1]
998*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#8
999*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1],#4
1000*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r0,lsl#16
1001*8fb009dcSAndroid Build Coastguard Worker# if 15==15
1002*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#17*4]			@ make room for r1
1003*8fb009dcSAndroid Build Coastguard Worker# endif
1004*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
1005*8fb009dcSAndroid Build Coastguard Worker	orr	r2,r2,r3,lsl#24
1006*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1007*8fb009dcSAndroid Build Coastguard Worker#endif
1008*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1009*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=X[i]
1010*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#15*4]
1011*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
1012*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1013*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
1014*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3			@ h+=K256[i]
1015*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11			@ Ch(e,f,g)
1016*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
1017*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=Ch(e,f,g)
1018*8fb009dcSAndroid Build Coastguard Worker#if 15==31
1019*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1020*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1021*8fb009dcSAndroid Build Coastguard Worker#endif
1022*8fb009dcSAndroid Build Coastguard Worker#if 15<15
1023*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1024*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1025*8fb009dcSAndroid Build Coastguard Worker# else
1026*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1027*8fb009dcSAndroid Build Coastguard Worker# endif
1028*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
1029*8fb009dcSAndroid Build Coastguard Worker#else
1030*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#1*4]		@ from future BODY_16_xx
1031*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
1032*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#14*4]	@ from future BODY_16_xx
1033*8fb009dcSAndroid Build Coastguard Worker#endif
1034*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1035*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1036*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4			@ d+=h
1037*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6			@ Maj(a,b,c)
1038*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1039*8fb009dcSAndroid Build Coastguard Worker	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1040*8fb009dcSAndroid Build Coastguard Worker.Lrounds_16_xx:
1041*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#1*4]		@ 16
1042*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#14*4]
1043*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1044*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
1045*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1046*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1047*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1048*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1049*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#0*4]
1050*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1051*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#9*4]
1052*8fb009dcSAndroid Build Coastguard Worker
1053*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1054*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5	@ from BODY_00_15
1055*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1056*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#19	@ Sigma1(e)
1057*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1058*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1059*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=X[i]
1060*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#0*4]
1061*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
1062*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
1063*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
1064*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12			@ h+=K256[i]
1065*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10			@ Ch(e,f,g)
1066*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
1067*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=Ch(e,f,g)
1068*8fb009dcSAndroid Build Coastguard Worker#if 16==31
1069*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1070*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1071*8fb009dcSAndroid Build Coastguard Worker#endif
1072*8fb009dcSAndroid Build Coastguard Worker#if 16<15
1073*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1074*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1075*8fb009dcSAndroid Build Coastguard Worker# else
1076*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1077*8fb009dcSAndroid Build Coastguard Worker# endif
1078*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
1079*8fb009dcSAndroid Build Coastguard Worker#else
1080*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#2*4]		@ from future BODY_16_xx
1081*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
1082*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#15*4]	@ from future BODY_16_xx
1083*8fb009dcSAndroid Build Coastguard Worker#endif
1084*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20	@ Sigma0(a)
1085*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1086*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11			@ d+=h
1087*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5			@ Maj(a,b,c)
1088*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
1089*8fb009dcSAndroid Build Coastguard Worker	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
1090*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#2*4]		@ 17
1091*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#15*4]
1092*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1093*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
1094*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1095*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1096*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1097*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1098*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#1*4]
1099*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1100*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#10*4]
1101*8fb009dcSAndroid Build Coastguard Worker
1102*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1103*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5	@ from BODY_00_15
1104*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1105*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#19	@ Sigma1(e)
1106*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1107*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1108*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=X[i]
1109*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#1*4]
1110*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
1111*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
1112*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
1113*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3			@ h+=K256[i]
1114*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9			@ Ch(e,f,g)
1115*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
1116*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=Ch(e,f,g)
1117*8fb009dcSAndroid Build Coastguard Worker#if 17==31
1118*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1119*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1120*8fb009dcSAndroid Build Coastguard Worker#endif
1121*8fb009dcSAndroid Build Coastguard Worker#if 17<15
1122*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1123*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1124*8fb009dcSAndroid Build Coastguard Worker# else
1125*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1126*8fb009dcSAndroid Build Coastguard Worker# endif
1127*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
1128*8fb009dcSAndroid Build Coastguard Worker#else
1129*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#3*4]		@ from future BODY_16_xx
1130*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
1131*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#0*4]	@ from future BODY_16_xx
1132*8fb009dcSAndroid Build Coastguard Worker#endif
1133*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20	@ Sigma0(a)
1134*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1135*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10			@ d+=h
1136*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4			@ Maj(a,b,c)
1137*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
1138*8fb009dcSAndroid Build Coastguard Worker	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
1139*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#3*4]		@ 18
1140*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#0*4]
1141*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1142*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
1143*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1144*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1145*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1146*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1147*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#2*4]
1148*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1149*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#11*4]
1150*8fb009dcSAndroid Build Coastguard Worker
1151*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1152*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5	@ from BODY_00_15
1153*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1154*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#19	@ Sigma1(e)
1155*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1156*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1157*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=X[i]
1158*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#2*4]
1159*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
1160*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
1161*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
1162*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12			@ h+=K256[i]
1163*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8			@ Ch(e,f,g)
1164*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
1165*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=Ch(e,f,g)
1166*8fb009dcSAndroid Build Coastguard Worker#if 18==31
1167*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1168*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1169*8fb009dcSAndroid Build Coastguard Worker#endif
1170*8fb009dcSAndroid Build Coastguard Worker#if 18<15
1171*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1172*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1173*8fb009dcSAndroid Build Coastguard Worker# else
1174*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1175*8fb009dcSAndroid Build Coastguard Worker# endif
1176*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
1177*8fb009dcSAndroid Build Coastguard Worker#else
1178*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#4*4]		@ from future BODY_16_xx
1179*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
1180*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#1*4]	@ from future BODY_16_xx
1181*8fb009dcSAndroid Build Coastguard Worker#endif
1182*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20	@ Sigma0(a)
1183*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1184*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9			@ d+=h
1185*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11			@ Maj(a,b,c)
1186*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
1187*8fb009dcSAndroid Build Coastguard Worker	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
1188*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#4*4]		@ 19
1189*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#1*4]
1190*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1191*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
1192*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1193*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1194*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1195*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1196*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#3*4]
1197*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1198*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#12*4]
1199*8fb009dcSAndroid Build Coastguard Worker
1200*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1201*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5	@ from BODY_00_15
1202*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1203*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#19	@ Sigma1(e)
1204*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1205*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1206*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=X[i]
1207*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#3*4]
1208*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
1209*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
1210*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
1211*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3			@ h+=K256[i]
1212*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7			@ Ch(e,f,g)
1213*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
1214*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=Ch(e,f,g)
1215*8fb009dcSAndroid Build Coastguard Worker#if 19==31
1216*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1217*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1218*8fb009dcSAndroid Build Coastguard Worker#endif
1219*8fb009dcSAndroid Build Coastguard Worker#if 19<15
1220*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1221*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1222*8fb009dcSAndroid Build Coastguard Worker# else
1223*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1224*8fb009dcSAndroid Build Coastguard Worker# endif
1225*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
1226*8fb009dcSAndroid Build Coastguard Worker#else
1227*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#5*4]		@ from future BODY_16_xx
1228*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
1229*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#2*4]	@ from future BODY_16_xx
1230*8fb009dcSAndroid Build Coastguard Worker#endif
1231*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20	@ Sigma0(a)
1232*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1233*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8			@ d+=h
1234*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10			@ Maj(a,b,c)
1235*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
1236*8fb009dcSAndroid Build Coastguard Worker	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
1237*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#5*4]		@ 20
1238*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#2*4]
1239*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1240*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
1241*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1242*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1243*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1244*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1245*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#4*4]
1246*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1247*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#13*4]
1248*8fb009dcSAndroid Build Coastguard Worker
1249*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1250*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5	@ from BODY_00_15
1251*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1252*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#19	@ Sigma1(e)
1253*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1254*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1255*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=X[i]
1256*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#4*4]
1257*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
1258*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
1259*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
1260*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12			@ h+=K256[i]
1261*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6			@ Ch(e,f,g)
1262*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
1263*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=Ch(e,f,g)
1264*8fb009dcSAndroid Build Coastguard Worker#if 20==31
1265*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1266*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1267*8fb009dcSAndroid Build Coastguard Worker#endif
1268*8fb009dcSAndroid Build Coastguard Worker#if 20<15
1269*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1270*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1271*8fb009dcSAndroid Build Coastguard Worker# else
1272*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1273*8fb009dcSAndroid Build Coastguard Worker# endif
1274*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
1275*8fb009dcSAndroid Build Coastguard Worker#else
1276*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#6*4]		@ from future BODY_16_xx
1277*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
1278*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#3*4]	@ from future BODY_16_xx
1279*8fb009dcSAndroid Build Coastguard Worker#endif
1280*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20	@ Sigma0(a)
1281*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1282*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7			@ d+=h
1283*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9			@ Maj(a,b,c)
1284*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
1285*8fb009dcSAndroid Build Coastguard Worker	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
1286*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#6*4]		@ 21
1287*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#3*4]
1288*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1289*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
1290*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1291*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1292*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1293*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1294*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#5*4]
1295*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1296*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#14*4]
1297*8fb009dcSAndroid Build Coastguard Worker
1298*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1299*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5	@ from BODY_00_15
1300*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1301*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#19	@ Sigma1(e)
1302*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1303*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1304*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=X[i]
1305*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#5*4]
1306*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
1307*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
1308*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
1309*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3			@ h+=K256[i]
1310*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5			@ Ch(e,f,g)
1311*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
1312*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=Ch(e,f,g)
1313*8fb009dcSAndroid Build Coastguard Worker#if 21==31
1314*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1315*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1316*8fb009dcSAndroid Build Coastguard Worker#endif
1317*8fb009dcSAndroid Build Coastguard Worker#if 21<15
1318*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1319*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1320*8fb009dcSAndroid Build Coastguard Worker# else
1321*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1322*8fb009dcSAndroid Build Coastguard Worker# endif
1323*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
1324*8fb009dcSAndroid Build Coastguard Worker#else
1325*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#7*4]		@ from future BODY_16_xx
1326*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
1327*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#4*4]	@ from future BODY_16_xx
1328*8fb009dcSAndroid Build Coastguard Worker#endif
1329*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20	@ Sigma0(a)
1330*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1331*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6			@ d+=h
1332*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8			@ Maj(a,b,c)
1333*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
1334*8fb009dcSAndroid Build Coastguard Worker	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
1335*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#7*4]		@ 22
1336*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#4*4]
1337*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1338*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
1339*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1340*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1341*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1342*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1343*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#6*4]
1344*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1345*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#15*4]
1346*8fb009dcSAndroid Build Coastguard Worker
1347*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1348*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5	@ from BODY_00_15
1349*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1350*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#19	@ Sigma1(e)
1351*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1352*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1353*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=X[i]
1354*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#6*4]
1355*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
1356*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
1357*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
1358*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12			@ h+=K256[i]
1359*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4			@ Ch(e,f,g)
1360*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
1361*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=Ch(e,f,g)
1362*8fb009dcSAndroid Build Coastguard Worker#if 22==31
1363*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1364*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1365*8fb009dcSAndroid Build Coastguard Worker#endif
1366*8fb009dcSAndroid Build Coastguard Worker#if 22<15
1367*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1368*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1369*8fb009dcSAndroid Build Coastguard Worker# else
1370*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1371*8fb009dcSAndroid Build Coastguard Worker# endif
1372*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
1373*8fb009dcSAndroid Build Coastguard Worker#else
1374*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#8*4]		@ from future BODY_16_xx
1375*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
1376*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#5*4]	@ from future BODY_16_xx
1377*8fb009dcSAndroid Build Coastguard Worker#endif
1378*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20	@ Sigma0(a)
1379*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1380*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5			@ d+=h
1381*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7			@ Maj(a,b,c)
1382*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
1383*8fb009dcSAndroid Build Coastguard Worker	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
1384*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#8*4]		@ 23
1385*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#5*4]
1386*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1387*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
1388*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1389*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1390*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1391*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1392*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#7*4]
1393*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1394*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#0*4]
1395*8fb009dcSAndroid Build Coastguard Worker
1396*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1397*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5	@ from BODY_00_15
1398*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1399*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1400*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1401*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1402*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=X[i]
1403*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#7*4]
1404*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
1405*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1406*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
1407*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3			@ h+=K256[i]
1408*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11			@ Ch(e,f,g)
1409*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
1410*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=Ch(e,f,g)
1411*8fb009dcSAndroid Build Coastguard Worker#if 23==31
1412*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1413*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1414*8fb009dcSAndroid Build Coastguard Worker#endif
1415*8fb009dcSAndroid Build Coastguard Worker#if 23<15
1416*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1417*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1418*8fb009dcSAndroid Build Coastguard Worker# else
1419*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1420*8fb009dcSAndroid Build Coastguard Worker# endif
1421*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
1422*8fb009dcSAndroid Build Coastguard Worker#else
1423*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#9*4]		@ from future BODY_16_xx
1424*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
1425*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#6*4]	@ from future BODY_16_xx
1426*8fb009dcSAndroid Build Coastguard Worker#endif
1427*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1428*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1429*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4			@ d+=h
1430*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6			@ Maj(a,b,c)
1431*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1432*8fb009dcSAndroid Build Coastguard Worker	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1433*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#9*4]		@ 24
1434*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#6*4]
1435*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1436*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
1437*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1438*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1439*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1440*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1441*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#8*4]
1442*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1443*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#1*4]
1444*8fb009dcSAndroid Build Coastguard Worker
1445*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1446*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5	@ from BODY_00_15
1447*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1448*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#19	@ Sigma1(e)
1449*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1450*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1451*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=X[i]
1452*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#8*4]
1453*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
1454*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
1455*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
1456*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12			@ h+=K256[i]
1457*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10			@ Ch(e,f,g)
1458*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
1459*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2			@ h+=Ch(e,f,g)
1460*8fb009dcSAndroid Build Coastguard Worker#if 24==31
1461*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1462*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1463*8fb009dcSAndroid Build Coastguard Worker#endif
1464*8fb009dcSAndroid Build Coastguard Worker#if 24<15
1465*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1466*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1467*8fb009dcSAndroid Build Coastguard Worker# else
1468*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1469*8fb009dcSAndroid Build Coastguard Worker# endif
1470*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
1471*8fb009dcSAndroid Build Coastguard Worker#else
1472*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#10*4]		@ from future BODY_16_xx
1473*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5			@ a^b, b^c in next round
1474*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#7*4]	@ from future BODY_16_xx
1475*8fb009dcSAndroid Build Coastguard Worker#endif
1476*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20	@ Sigma0(a)
1477*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1478*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11			@ d+=h
1479*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5			@ Maj(a,b,c)
1480*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
1481*8fb009dcSAndroid Build Coastguard Worker	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
1482*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#10*4]		@ 25
1483*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#7*4]
1484*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1485*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
1486*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1487*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1488*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1489*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1490*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#9*4]
1491*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1492*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#2*4]
1493*8fb009dcSAndroid Build Coastguard Worker
1494*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1495*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5	@ from BODY_00_15
1496*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1497*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#19	@ Sigma1(e)
1498*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1499*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1500*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=X[i]
1501*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#9*4]
1502*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
1503*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
1504*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
1505*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3			@ h+=K256[i]
1506*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9			@ Ch(e,f,g)
1507*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
1508*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2			@ h+=Ch(e,f,g)
1509*8fb009dcSAndroid Build Coastguard Worker#if 25==31
1510*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1511*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1512*8fb009dcSAndroid Build Coastguard Worker#endif
1513*8fb009dcSAndroid Build Coastguard Worker#if 25<15
1514*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1515*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1516*8fb009dcSAndroid Build Coastguard Worker# else
1517*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1518*8fb009dcSAndroid Build Coastguard Worker# endif
1519*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
1520*8fb009dcSAndroid Build Coastguard Worker#else
1521*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#11*4]		@ from future BODY_16_xx
1522*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4			@ a^b, b^c in next round
1523*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#8*4]	@ from future BODY_16_xx
1524*8fb009dcSAndroid Build Coastguard Worker#endif
1525*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20	@ Sigma0(a)
1526*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1527*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10			@ d+=h
1528*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4			@ Maj(a,b,c)
1529*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
1530*8fb009dcSAndroid Build Coastguard Worker	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
1531*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#11*4]		@ 26
1532*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#8*4]
1533*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1534*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
1535*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1536*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1537*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1538*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1539*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#10*4]
1540*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1541*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#3*4]
1542*8fb009dcSAndroid Build Coastguard Worker
1543*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1544*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5	@ from BODY_00_15
1545*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1546*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#19	@ Sigma1(e)
1547*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1548*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1549*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=X[i]
1550*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#10*4]
1551*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
1552*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
1553*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
1554*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12			@ h+=K256[i]
1555*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8			@ Ch(e,f,g)
1556*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
1557*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2			@ h+=Ch(e,f,g)
1558*8fb009dcSAndroid Build Coastguard Worker#if 26==31
1559*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1560*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1561*8fb009dcSAndroid Build Coastguard Worker#endif
1562*8fb009dcSAndroid Build Coastguard Worker#if 26<15
1563*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1564*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1565*8fb009dcSAndroid Build Coastguard Worker# else
1566*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1567*8fb009dcSAndroid Build Coastguard Worker# endif
1568*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
1569*8fb009dcSAndroid Build Coastguard Worker#else
1570*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#12*4]		@ from future BODY_16_xx
1571*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11			@ a^b, b^c in next round
1572*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#9*4]	@ from future BODY_16_xx
1573*8fb009dcSAndroid Build Coastguard Worker#endif
1574*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20	@ Sigma0(a)
1575*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1576*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9			@ d+=h
1577*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11			@ Maj(a,b,c)
1578*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
1579*8fb009dcSAndroid Build Coastguard Worker	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
1580*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#12*4]		@ 27
1581*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#9*4]
1582*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1583*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
1584*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1585*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1586*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1587*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1588*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#11*4]
1589*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1590*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#4*4]
1591*8fb009dcSAndroid Build Coastguard Worker
1592*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1593*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5	@ from BODY_00_15
1594*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1595*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#19	@ Sigma1(e)
1596*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1597*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1598*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=X[i]
1599*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#11*4]
1600*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
1601*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
1602*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
1603*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3			@ h+=K256[i]
1604*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7			@ Ch(e,f,g)
1605*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
1606*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2			@ h+=Ch(e,f,g)
1607*8fb009dcSAndroid Build Coastguard Worker#if 27==31
1608*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1609*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1610*8fb009dcSAndroid Build Coastguard Worker#endif
1611*8fb009dcSAndroid Build Coastguard Worker#if 27<15
1612*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1613*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1614*8fb009dcSAndroid Build Coastguard Worker# else
1615*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1616*8fb009dcSAndroid Build Coastguard Worker# endif
1617*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
1618*8fb009dcSAndroid Build Coastguard Worker#else
1619*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#13*4]		@ from future BODY_16_xx
1620*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10			@ a^b, b^c in next round
1621*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#10*4]	@ from future BODY_16_xx
1622*8fb009dcSAndroid Build Coastguard Worker#endif
1623*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20	@ Sigma0(a)
1624*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1625*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8			@ d+=h
1626*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10			@ Maj(a,b,c)
1627*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
1628*8fb009dcSAndroid Build Coastguard Worker	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
1629*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#13*4]		@ 28
1630*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#10*4]
1631*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1632*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
1633*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1634*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1635*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1636*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1637*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#12*4]
1638*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1639*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#5*4]
1640*8fb009dcSAndroid Build Coastguard Worker
1641*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1642*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5	@ from BODY_00_15
1643*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1644*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#19	@ Sigma1(e)
1645*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1646*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1647*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=X[i]
1648*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#12*4]
1649*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
1650*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
1651*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
1652*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12			@ h+=K256[i]
1653*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6			@ Ch(e,f,g)
1654*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
1655*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2			@ h+=Ch(e,f,g)
1656*8fb009dcSAndroid Build Coastguard Worker#if 28==31
1657*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1658*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1659*8fb009dcSAndroid Build Coastguard Worker#endif
1660*8fb009dcSAndroid Build Coastguard Worker#if 28<15
1661*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1662*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1663*8fb009dcSAndroid Build Coastguard Worker# else
1664*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1665*8fb009dcSAndroid Build Coastguard Worker# endif
1666*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
1667*8fb009dcSAndroid Build Coastguard Worker#else
1668*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#14*4]		@ from future BODY_16_xx
1669*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9			@ a^b, b^c in next round
1670*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#11*4]	@ from future BODY_16_xx
1671*8fb009dcSAndroid Build Coastguard Worker#endif
1672*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20	@ Sigma0(a)
1673*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1674*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7			@ d+=h
1675*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9			@ Maj(a,b,c)
1676*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
1677*8fb009dcSAndroid Build Coastguard Worker	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
1678*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#14*4]		@ 29
1679*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#11*4]
1680*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1681*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
1682*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1683*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1684*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1685*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1686*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#13*4]
1687*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1688*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#6*4]
1689*8fb009dcSAndroid Build Coastguard Worker
1690*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1691*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5	@ from BODY_00_15
1692*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1693*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#19	@ Sigma1(e)
1694*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1695*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1696*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=X[i]
1697*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#13*4]
1698*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
1699*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
1700*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
1701*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3			@ h+=K256[i]
1702*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5			@ Ch(e,f,g)
1703*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
1704*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2			@ h+=Ch(e,f,g)
1705*8fb009dcSAndroid Build Coastguard Worker#if 29==31
1706*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1707*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1708*8fb009dcSAndroid Build Coastguard Worker#endif
1709*8fb009dcSAndroid Build Coastguard Worker#if 29<15
1710*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1711*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1712*8fb009dcSAndroid Build Coastguard Worker# else
1713*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1714*8fb009dcSAndroid Build Coastguard Worker# endif
1715*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
1716*8fb009dcSAndroid Build Coastguard Worker#else
1717*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#15*4]		@ from future BODY_16_xx
1718*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8			@ a^b, b^c in next round
1719*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#12*4]	@ from future BODY_16_xx
1720*8fb009dcSAndroid Build Coastguard Worker#endif
1721*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20	@ Sigma0(a)
1722*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1723*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6			@ d+=h
1724*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8			@ Maj(a,b,c)
1725*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
1726*8fb009dcSAndroid Build Coastguard Worker	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
1727*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#15*4]		@ 30
1728*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#12*4]
1729*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1730*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
1731*8fb009dcSAndroid Build Coastguard Worker	mov	r12,r1,ror#17
1732*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1733*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,ror#19
1734*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1735*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#14*4]
1736*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1737*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#7*4]
1738*8fb009dcSAndroid Build Coastguard Worker
1739*8fb009dcSAndroid Build Coastguard Worker	add	r12,r12,r0
1740*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5	@ from BODY_00_15
1741*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r12
1742*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#19	@ Sigma1(e)
1743*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1744*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14],#4			@ *K256++
1745*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=X[i]
1746*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#14*4]
1747*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
1748*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
1749*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
1750*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12			@ h+=K256[i]
1751*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4			@ Ch(e,f,g)
1752*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
1753*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2			@ h+=Ch(e,f,g)
1754*8fb009dcSAndroid Build Coastguard Worker#if 30==31
1755*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,#0xff
1756*8fb009dcSAndroid Build Coastguard Worker	cmp	r12,#0xf2			@ done?
1757*8fb009dcSAndroid Build Coastguard Worker#endif
1758*8fb009dcSAndroid Build Coastguard Worker#if 30<15
1759*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1760*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1761*8fb009dcSAndroid Build Coastguard Worker# else
1762*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1763*8fb009dcSAndroid Build Coastguard Worker# endif
1764*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
1765*8fb009dcSAndroid Build Coastguard Worker#else
1766*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#0*4]		@ from future BODY_16_xx
1767*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7			@ a^b, b^c in next round
1768*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#13*4]	@ from future BODY_16_xx
1769*8fb009dcSAndroid Build Coastguard Worker#endif
1770*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20	@ Sigma0(a)
1771*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12			@ (b^c)&=(a^b)
1772*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5			@ d+=h
1773*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7			@ Maj(a,b,c)
1774*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
1775*8fb009dcSAndroid Build Coastguard Worker	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
1776*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r2,[sp,#0*4]		@ 31
1777*8fb009dcSAndroid Build Coastguard Worker	@ ldr	r1,[sp,#13*4]
1778*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r2,ror#7
1779*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
1780*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r1,ror#17
1781*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,ror#18
1782*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,ror#19
1783*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1784*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#15*4]
1785*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1786*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#8*4]
1787*8fb009dcSAndroid Build Coastguard Worker
1788*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,r0
1789*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5	@ from BODY_00_15
1790*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r3
1791*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1792*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,r1			@ X[i]
1793*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r14],#4			@ *K256++
1794*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=X[i]
1795*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#15*4]
1796*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
1797*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1798*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
1799*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3			@ h+=K256[i]
1800*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11			@ Ch(e,f,g)
1801*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
1802*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2			@ h+=Ch(e,f,g)
1803*8fb009dcSAndroid Build Coastguard Worker#if 31==31
1804*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,#0xff
1805*8fb009dcSAndroid Build Coastguard Worker	cmp	r3,#0xf2			@ done?
1806*8fb009dcSAndroid Build Coastguard Worker#endif
1807*8fb009dcSAndroid Build Coastguard Worker#if 31<15
1808*8fb009dcSAndroid Build Coastguard Worker# if __ARM_ARCH>=7
1809*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r1],#4			@ prefetch
1810*8fb009dcSAndroid Build Coastguard Worker# else
1811*8fb009dcSAndroid Build Coastguard Worker	ldrb	r2,[r1,#3]
1812*8fb009dcSAndroid Build Coastguard Worker# endif
1813*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
1814*8fb009dcSAndroid Build Coastguard Worker#else
1815*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#1*4]		@ from future BODY_16_xx
1816*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6			@ a^b, b^c in next round
1817*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#14*4]	@ from future BODY_16_xx
1818*8fb009dcSAndroid Build Coastguard Worker#endif
1819*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1820*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3			@ (b^c)&=(a^b)
1821*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4			@ d+=h
1822*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6			@ Maj(a,b,c)
1823*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1824*8fb009dcSAndroid Build Coastguard Worker	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1825*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
1826*8fb009dcSAndroid Build Coastguard Worker	ite	eq			@ Thumb2 thing, sanity check in ARM
1827*8fb009dcSAndroid Build Coastguard Worker#endif
1828*8fb009dcSAndroid Build Coastguard Worker	ldreq	r3,[sp,#16*4]		@ pull ctx
1829*8fb009dcSAndroid Build Coastguard Worker	bne	.Lrounds_16_xx
1830*8fb009dcSAndroid Build Coastguard Worker
1831*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12		@ h+=Maj(a,b,c) from the past
1832*8fb009dcSAndroid Build Coastguard Worker	ldr	r0,[r3,#0]
1833*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r3,#4]
1834*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r3,#8]
1835*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0
1836*8fb009dcSAndroid Build Coastguard Worker	ldr	r0,[r3,#12]
1837*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
1838*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r3,#16]
1839*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12
1840*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r3,#20]
1841*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0
1842*8fb009dcSAndroid Build Coastguard Worker	ldr	r0,[r3,#24]
1843*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
1844*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r3,#28]
1845*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12
1846*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#17*4]		@ pull inp
1847*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#18*4]		@ pull inp+len
1848*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0
1849*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
1850*8fb009dcSAndroid Build Coastguard Worker	stmia	r3,{r4,r5,r6,r7,r8,r9,r10,r11}
1851*8fb009dcSAndroid Build Coastguard Worker	cmp	r1,r12
1852*8fb009dcSAndroid Build Coastguard Worker	sub	r14,r14,#256	@ rewind Ktbl
1853*8fb009dcSAndroid Build Coastguard Worker	bne	.Loop
1854*8fb009dcSAndroid Build Coastguard Worker
1855*8fb009dcSAndroid Build Coastguard Worker	add	sp,sp,#19*4	@ destroy frame
1856*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=5
1857*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
1858*8fb009dcSAndroid Build Coastguard Worker#else
1859*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
1860*8fb009dcSAndroid Build Coastguard Worker	tst	lr,#1
1861*8fb009dcSAndroid Build Coastguard Worker	moveq	pc,lr			@ be binary compatible with V4, yet
1862*8fb009dcSAndroid Build Coastguard Worker.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
1863*8fb009dcSAndroid Build Coastguard Worker#endif
1864*8fb009dcSAndroid Build Coastguard Worker.size	sha256_block_data_order_nohw,.-sha256_block_data_order_nohw
1865*8fb009dcSAndroid Build Coastguard Worker#if __ARM_MAX_ARCH__>=7
1866*8fb009dcSAndroid Build Coastguard Worker.arch	armv7-a
1867*8fb009dcSAndroid Build Coastguard Worker.fpu	neon
1868*8fb009dcSAndroid Build Coastguard Worker
1869*8fb009dcSAndroid Build Coastguard Worker.LK256_shortcut_neon:
1870*8fb009dcSAndroid Build Coastguard Worker@ PC is 8 bytes ahead in Arm mode and 4 bytes ahead in Thumb mode.
1871*8fb009dcSAndroid Build Coastguard Worker#if defined(__thumb2__)
1872*8fb009dcSAndroid Build Coastguard Worker.word	K256-(.LK256_add_neon+4)
1873*8fb009dcSAndroid Build Coastguard Worker#else
1874*8fb009dcSAndroid Build Coastguard Worker.word	K256-(.LK256_add_neon+8)
1875*8fb009dcSAndroid Build Coastguard Worker#endif
1876*8fb009dcSAndroid Build Coastguard Worker
1877*8fb009dcSAndroid Build Coastguard Worker.globl	sha256_block_data_order_neon
1878*8fb009dcSAndroid Build Coastguard Worker.hidden	sha256_block_data_order_neon
1879*8fb009dcSAndroid Build Coastguard Worker.type	sha256_block_data_order_neon,%function
1880*8fb009dcSAndroid Build Coastguard Worker.align	5
1881*8fb009dcSAndroid Build Coastguard Worker.skip	16
1882*8fb009dcSAndroid Build Coastguard Workersha256_block_data_order_neon:
1883*8fb009dcSAndroid Build Coastguard Worker	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
1884*8fb009dcSAndroid Build Coastguard Worker
1885*8fb009dcSAndroid Build Coastguard Worker	sub	r11,sp,#16*4+16
1886*8fb009dcSAndroid Build Coastguard Worker
1887*8fb009dcSAndroid Build Coastguard Worker	@ K256 is just at the boundary of being easily referenced by an ADR from
1888*8fb009dcSAndroid Build Coastguard Worker	@ this function. In Arm mode, when building with __ARM_ARCH=6, it does
1889*8fb009dcSAndroid Build Coastguard Worker	@ not fit. By moving code around, we could make it fit, but this is too
1890*8fb009dcSAndroid Build Coastguard Worker	@ fragile. For simplicity, just load the offset from
1891*8fb009dcSAndroid Build Coastguard Worker	@ .LK256_shortcut_neon.
1892*8fb009dcSAndroid Build Coastguard Worker	@
1893*8fb009dcSAndroid Build Coastguard Worker	@ TODO(davidben): adrl would avoid a load, but clang-assembler does not
1894*8fb009dcSAndroid Build Coastguard Worker	@ support it. We might be able to emulate it with a macro, but Android's
1895*8fb009dcSAndroid Build Coastguard Worker	@ did not work when I tried it.
1896*8fb009dcSAndroid Build Coastguard Worker	@ https://android.googlesource.com/platform/ndk/+/refs/heads/master/docs/ClangMigration.md#arm
1897*8fb009dcSAndroid Build Coastguard Worker	ldr	r14,.LK256_shortcut_neon
1898*8fb009dcSAndroid Build Coastguard Worker.LK256_add_neon:
1899*8fb009dcSAndroid Build Coastguard Worker	add	r14,pc,r14
1900*8fb009dcSAndroid Build Coastguard Worker
1901*8fb009dcSAndroid Build Coastguard Worker	bic	r11,r11,#15		@ align for 128-bit stores
1902*8fb009dcSAndroid Build Coastguard Worker	mov	r12,sp
1903*8fb009dcSAndroid Build Coastguard Worker	mov	sp,r11			@ alloca
1904*8fb009dcSAndroid Build Coastguard Worker	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
1905*8fb009dcSAndroid Build Coastguard Worker
1906*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q0},[r1]!
1907*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q1},[r1]!
1908*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r1]!
1909*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q3},[r1]!
1910*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
1911*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r14,:128]!
1912*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q10},[r14,:128]!
1913*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q11},[r14,:128]!
1914*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q0,q0		@ yes, even on
1915*8fb009dcSAndroid Build Coastguard Worker	str	r0,[sp,#64]
1916*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q1,q1		@ big-endian
1917*8fb009dcSAndroid Build Coastguard Worker	str	r1,[sp,#68]
1918*8fb009dcSAndroid Build Coastguard Worker	mov	r1,sp
1919*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q2,q2
1920*8fb009dcSAndroid Build Coastguard Worker	str	r2,[sp,#72]
1921*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q3,q3
1922*8fb009dcSAndroid Build Coastguard Worker	str	r12,[sp,#76]		@ save original sp
1923*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q0
1924*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q9,q9,q1
1925*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
1926*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q10,q10,q2
1927*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q9},[r1,:128]!
1928*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q11,q11,q3
1929*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q10},[r1,:128]!
1930*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q11},[r1,:128]!
1931*8fb009dcSAndroid Build Coastguard Worker
1932*8fb009dcSAndroid Build Coastguard Worker	ldmia	r0,{r4,r5,r6,r7,r8,r9,r10,r11}
1933*8fb009dcSAndroid Build Coastguard Worker	sub	r1,r1,#64
1934*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#0]
1935*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r12
1936*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6
1937*8fb009dcSAndroid Build Coastguard Worker	b	.L_00_48
1938*8fb009dcSAndroid Build Coastguard Worker
1939*8fb009dcSAndroid Build Coastguard Worker.align	4
1940*8fb009dcSAndroid Build Coastguard Worker.L_00_48:
1941*8fb009dcSAndroid Build Coastguard Worker	vext.8	q8,q0,q1,#4
1942*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
1943*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
1944*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
1945*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q2,q3,#4
1946*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12
1947*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
1948*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r8,ror#19
1949*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q10,q8,#7
1950*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
1951*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10
1952*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q0,q0,q9
1953*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12,ror#6
1954*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5
1955*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q9,q8,#3
1956*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20
1957*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
1958*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q10,q8,#25
1959*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#4]
1960*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
1961*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q11,q8,#18
1962*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11
1963*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2
1964*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5
1965*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q10
1966*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
1967*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q11,q8,#14
1968*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
1969*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
1970*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d7,#17
1971*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3
1972*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
1973*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q11
1974*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r7,ror#19
1975*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
1976*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d7,#15
1977*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9
1978*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3,ror#6
1979*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d7,#10
1980*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4
1981*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20
1982*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q0,q0,q9
1983*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
1984*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#8]
1985*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
1986*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
1987*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10
1988*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d7,#19
1989*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2
1990*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4
1991*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d7,#13
1992*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
1993*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
1994*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
1995*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
1996*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12
1997*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d0,d0,d25
1998*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
1999*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r6,ror#19
2000*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d0,#17
2001*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
2002*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8
2003*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d0,#15
2004*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12,ror#6
2005*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11
2006*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d0,#10
2007*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20
2008*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2009*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2010*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#12]
2011*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2012*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d0,#19
2013*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9
2014*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2
2015*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11
2016*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2017*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2018*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d0,#13
2019*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
2020*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
2021*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2022*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3
2023*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
2024*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d1,d1,d25
2025*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r5,ror#19
2026*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
2027*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q0
2028*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7
2029*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3,ror#6
2030*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10
2031*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20
2032*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2033*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#16]
2034*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2035*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8
2036*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2037*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2
2038*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10
2039*8fb009dcSAndroid Build Coastguard Worker	vext.8	q8,q1,q2,#4
2040*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2041*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
2042*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
2043*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q3,q0,#4
2044*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12
2045*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
2046*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r4,ror#19
2047*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q10,q8,#7
2048*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
2049*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6
2050*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q1,q1,q9
2051*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12,ror#6
2052*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9
2053*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q9,q8,#3
2054*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20
2055*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2056*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q10,q8,#25
2057*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#20]
2058*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2059*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q11,q8,#18
2060*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7
2061*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2
2062*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9
2063*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q10
2064*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2065*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q11,q8,#14
2066*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
2067*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
2068*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d1,#17
2069*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3
2070*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
2071*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q11
2072*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r11,ror#19
2073*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
2074*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d1,#15
2075*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5
2076*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3,ror#6
2077*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d1,#10
2078*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8
2079*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20
2080*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q1,q1,q9
2081*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2082*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#24]
2083*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2084*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2085*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6
2086*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d1,#19
2087*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2
2088*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8
2089*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d1,#13
2090*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2091*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
2092*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2093*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
2094*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12
2095*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d2,d2,d25
2096*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
2097*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r10,ror#19
2098*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d2,#17
2099*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
2100*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4
2101*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d2,#15
2102*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12,ror#6
2103*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7
2104*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d2,#10
2105*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20
2106*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2107*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2108*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#28]
2109*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2110*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d2,#19
2111*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5
2112*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2
2113*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7
2114*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2115*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2116*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d2,#13
2117*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
2118*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
2119*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2120*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3
2121*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
2122*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d3,d3,d25
2123*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r9,ror#19
2124*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
2125*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q1
2126*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11
2127*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3,ror#6
2128*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6
2129*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20
2130*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2131*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#32]
2132*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2133*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4
2134*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2135*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2
2136*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6
2137*8fb009dcSAndroid Build Coastguard Worker	vext.8	q8,q2,q3,#4
2138*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
2139*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
2140*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
2141*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q1,#4
2142*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12
2143*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
2144*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r8,ror#19
2145*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q10,q8,#7
2146*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
2147*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10
2148*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q2,q2,q9
2149*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12,ror#6
2150*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5
2151*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q9,q8,#3
2152*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20
2153*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
2154*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q10,q8,#25
2155*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#36]
2156*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2157*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q11,q8,#18
2158*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11
2159*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2
2160*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5
2161*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q10
2162*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
2163*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q11,q8,#14
2164*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
2165*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
2166*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d3,#17
2167*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3
2168*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
2169*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q11
2170*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r7,ror#19
2171*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
2172*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d3,#15
2173*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9
2174*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3,ror#6
2175*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d3,#10
2176*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4
2177*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20
2178*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q2,q2,q9
2179*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
2180*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#40]
2181*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2182*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2183*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10
2184*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d3,#19
2185*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2
2186*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4
2187*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d3,#13
2188*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2189*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
2190*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2191*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
2192*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12
2193*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d4,d4,d25
2194*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
2195*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r6,ror#19
2196*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d4,#17
2197*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
2198*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8
2199*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d4,#15
2200*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12,ror#6
2201*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11
2202*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d4,#10
2203*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20
2204*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2205*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2206*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#44]
2207*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2208*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d4,#19
2209*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9
2210*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2
2211*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11
2212*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2213*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2214*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d4,#13
2215*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
2216*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
2217*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2218*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3
2219*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
2220*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d5,d5,d25
2221*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r5,ror#19
2222*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
2223*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q2
2224*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7
2225*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3,ror#6
2226*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10
2227*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20
2228*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2229*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#48]
2230*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2231*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8
2232*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2233*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2
2234*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10
2235*8fb009dcSAndroid Build Coastguard Worker	vext.8	q8,q3,q0,#4
2236*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2237*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
2238*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
2239*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q1,q2,#4
2240*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12
2241*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
2242*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r4,ror#19
2243*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q10,q8,#7
2244*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
2245*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6
2246*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q3,q3,q9
2247*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12,ror#6
2248*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9
2249*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q9,q8,#3
2250*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20
2251*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2252*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q10,q8,#25
2253*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#52]
2254*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2255*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	q11,q8,#18
2256*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7
2257*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2
2258*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9
2259*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q10
2260*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2261*8fb009dcSAndroid Build Coastguard Worker	vsli.32	q11,q8,#14
2262*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
2263*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
2264*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d5,#17
2265*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3
2266*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
2267*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q11
2268*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r11,ror#19
2269*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
2270*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d5,#15
2271*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5
2272*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3,ror#6
2273*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d5,#10
2274*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8
2275*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20
2276*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q3,q3,q9
2277*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2278*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#56]
2279*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2280*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2281*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6
2282*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d5,#19
2283*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2
2284*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8
2285*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d5,#13
2286*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2287*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
2288*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2289*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
2290*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12
2291*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d6,d6,d25
2292*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
2293*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r10,ror#19
2294*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d6,#17
2295*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
2296*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4
2297*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d6,#15
2298*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12,ror#6
2299*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7
2300*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d25,d6,#10
2301*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20
2302*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2303*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2304*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#60]
2305*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2306*8fb009dcSAndroid Build Coastguard Worker	vshr.u32	d24,d6,#19
2307*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5
2308*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2
2309*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7
2310*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2311*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2312*8fb009dcSAndroid Build Coastguard Worker	vsli.32	d24,d6,#13
2313*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
2314*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
2315*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d25,d24
2316*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3
2317*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
2318*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	d7,d7,d25
2319*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r9,ror#19
2320*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
2321*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q3
2322*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11
2323*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3,ror#6
2324*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6
2325*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20
2326*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2327*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[r14]
2328*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2329*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4
2330*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2331*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2
2332*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6
2333*8fb009dcSAndroid Build Coastguard Worker	teq	r2,#0				@ check for K256 terminator
2334*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#0]
2335*8fb009dcSAndroid Build Coastguard Worker	sub	r1,r1,#64
2336*8fb009dcSAndroid Build Coastguard Worker	bne	.L_00_48
2337*8fb009dcSAndroid Build Coastguard Worker
2338*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[sp,#68]
2339*8fb009dcSAndroid Build Coastguard Worker	ldr	r0,[sp,#72]
2340*8fb009dcSAndroid Build Coastguard Worker	sub	r14,r14,#256	@ rewind r14
2341*8fb009dcSAndroid Build Coastguard Worker	teq	r1,r0
2342*8fb009dcSAndroid Build Coastguard Worker	it	eq
2343*8fb009dcSAndroid Build Coastguard Worker	subeq	r1,r1,#64		@ avoid SEGV
2344*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q0},[r1]!		@ load next input block
2345*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q1},[r1]!
2346*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r1]!
2347*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q3},[r1]!
2348*8fb009dcSAndroid Build Coastguard Worker	it	ne
2349*8fb009dcSAndroid Build Coastguard Worker	strne	r1,[sp,#68]
2350*8fb009dcSAndroid Build Coastguard Worker	mov	r1,sp
2351*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
2352*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
2353*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
2354*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12
2355*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2356*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
2357*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r8,ror#19
2358*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
2359*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10
2360*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q0,q0
2361*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12,ror#6
2362*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5
2363*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20
2364*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
2365*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q0
2366*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#4]
2367*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2368*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11
2369*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2
2370*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5
2371*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
2372*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
2373*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
2374*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3
2375*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
2376*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r7,ror#19
2377*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
2378*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9
2379*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3,ror#6
2380*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4
2381*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20
2382*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
2383*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#8]
2384*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2385*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10
2386*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2
2387*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4
2388*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2389*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
2390*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
2391*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12
2392*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
2393*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r6,ror#19
2394*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
2395*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8
2396*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12,ror#6
2397*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11
2398*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20
2399*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2400*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#12]
2401*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2402*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9
2403*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2
2404*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11
2405*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2406*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
2407*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
2408*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3
2409*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
2410*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r5,ror#19
2411*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
2412*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7
2413*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3,ror#6
2414*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10
2415*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20
2416*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2417*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#16]
2418*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2419*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8
2420*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2
2421*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10
2422*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2423*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2424*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
2425*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
2426*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12
2427*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2428*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
2429*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r4,ror#19
2430*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
2431*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6
2432*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q1,q1
2433*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12,ror#6
2434*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9
2435*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20
2436*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2437*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q1
2438*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#20]
2439*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2440*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7
2441*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2
2442*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9
2443*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2444*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
2445*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
2446*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3
2447*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
2448*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r11,ror#19
2449*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
2450*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5
2451*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3,ror#6
2452*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8
2453*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20
2454*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2455*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#24]
2456*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2457*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6
2458*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2
2459*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8
2460*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2461*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
2462*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
2463*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12
2464*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
2465*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r10,ror#19
2466*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
2467*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4
2468*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12,ror#6
2469*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7
2470*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20
2471*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2472*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#28]
2473*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2474*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5
2475*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2
2476*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7
2477*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2478*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
2479*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
2480*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3
2481*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
2482*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r9,ror#19
2483*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
2484*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11
2485*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3,ror#6
2486*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6
2487*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20
2488*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2489*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#32]
2490*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2491*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4
2492*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2
2493*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6
2494*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2495*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
2496*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r9,r10
2497*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#5
2498*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12
2499*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2500*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r8
2501*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r8,ror#19
2502*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#11
2503*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r10
2504*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q2,q2
2505*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r12,ror#6
2506*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r4,r5
2507*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r4,ror#20
2508*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r2
2509*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q2
2510*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#36]
2511*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2512*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r11
2513*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r0,ror#2
2514*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r5
2515*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
2516*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r8,r9
2517*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#5
2518*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r3
2519*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r7
2520*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r7,ror#19
2521*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#11
2522*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r9
2523*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3,ror#6
2524*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r11,r4
2525*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r11,ror#20
2526*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r2
2527*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#40]
2528*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2529*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r10
2530*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r0,ror#2
2531*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r4
2532*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2533*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r7,r8
2534*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#5
2535*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r12
2536*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r6
2537*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r6,ror#19
2538*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#11
2539*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r8
2540*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12,ror#6
2541*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r10,r11
2542*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r10,ror#20
2543*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r2
2544*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#44]
2545*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2546*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r9
2547*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r0,ror#2
2548*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r11
2549*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2550*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r6,r7
2551*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#5
2552*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r3
2553*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r5
2554*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r5,ror#19
2555*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#11
2556*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r7
2557*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r3,ror#6
2558*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r9,r10
2559*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r9,ror#20
2560*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r2
2561*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#48]
2562*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2563*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r8
2564*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0,ror#2
2565*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r10
2566*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2567*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2568*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r5,r6
2569*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r4,r4,ror#5
2570*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r12
2571*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14,:128]!
2572*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r4
2573*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r4,ror#19
2574*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r8,r8,ror#11
2575*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r6
2576*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q3,q3
2577*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r12,ror#6
2578*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r8,r9
2579*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r8,ror#20
2580*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r2
2581*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q8,q8,q3
2582*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#52]
2583*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2584*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r7
2585*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r0,ror#2
2586*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9
2587*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2588*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r4,r5
2589*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r11,r11,ror#5
2590*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r3
2591*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r11
2592*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r11,ror#19
2593*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r7,r7,ror#11
2594*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r5
2595*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3,ror#6
2596*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r7,r8
2597*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r7,ror#20
2598*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r2
2599*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#56]
2600*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2601*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r6
2602*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r0,ror#2
2603*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r8
2604*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2605*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r11,r4
2606*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r10,r10,ror#5
2607*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r12
2608*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r10
2609*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r0,r10,ror#19
2610*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r6,r6,ror#11
2611*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r4
2612*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12,ror#6
2613*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r6,r7
2614*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r6,ror#20
2615*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r2
2616*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#60]
2617*8fb009dcSAndroid Build Coastguard Worker	and	r3,r3,r12
2618*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r5
2619*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r0,ror#2
2620*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r7
2621*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2622*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r10,r11
2623*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r9,r9,ror#5
2624*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r3
2625*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,r9
2626*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r0,r9,ror#19
2627*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r5,r5,ror#11
2628*8fb009dcSAndroid Build Coastguard Worker	eor	r2,r2,r11
2629*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r3,ror#6
2630*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r5,r6
2631*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r5,ror#20
2632*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r2
2633*8fb009dcSAndroid Build Coastguard Worker	ldr	r2,[sp,#64]
2634*8fb009dcSAndroid Build Coastguard Worker	and	r12,r12,r3
2635*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r4
2636*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0,ror#2
2637*8fb009dcSAndroid Build Coastguard Worker	eor	r12,r12,r6
2638*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r1,:128]!
2639*8fb009dcSAndroid Build Coastguard Worker	ldr	r0,[r2,#0]
2640*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
2641*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r2,#4]
2642*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r2,#8]
2643*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[r2,#12]
2644*8fb009dcSAndroid Build Coastguard Worker	add	r4,r4,r0			@ accumulate
2645*8fb009dcSAndroid Build Coastguard Worker	ldr	r0,[r2,#16]
2646*8fb009dcSAndroid Build Coastguard Worker	add	r5,r5,r12
2647*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r2,#20]
2648*8fb009dcSAndroid Build Coastguard Worker	add	r6,r6,r3
2649*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r2,#24]
2650*8fb009dcSAndroid Build Coastguard Worker	add	r7,r7,r1
2651*8fb009dcSAndroid Build Coastguard Worker	ldr	r1,[r2,#28]
2652*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,r0
2653*8fb009dcSAndroid Build Coastguard Worker	str	r4,[r2],#4
2654*8fb009dcSAndroid Build Coastguard Worker	add	r9,r9,r12
2655*8fb009dcSAndroid Build Coastguard Worker	str	r5,[r2],#4
2656*8fb009dcSAndroid Build Coastguard Worker	add	r10,r10,r3
2657*8fb009dcSAndroid Build Coastguard Worker	str	r6,[r2],#4
2658*8fb009dcSAndroid Build Coastguard Worker	add	r11,r11,r1
2659*8fb009dcSAndroid Build Coastguard Worker	str	r7,[r2],#4
2660*8fb009dcSAndroid Build Coastguard Worker	stmia	r2,{r8,r9,r10,r11}
2661*8fb009dcSAndroid Build Coastguard Worker
2662*8fb009dcSAndroid Build Coastguard Worker	ittte	ne
2663*8fb009dcSAndroid Build Coastguard Worker	movne	r1,sp
2664*8fb009dcSAndroid Build Coastguard Worker	ldrne	r2,[sp,#0]
2665*8fb009dcSAndroid Build Coastguard Worker	eorne	r12,r12,r12
2666*8fb009dcSAndroid Build Coastguard Worker	ldreq	sp,[sp,#76]			@ restore original sp
2667*8fb009dcSAndroid Build Coastguard Worker	itt	ne
2668*8fb009dcSAndroid Build Coastguard Worker	eorne	r3,r5,r6
2669*8fb009dcSAndroid Build Coastguard Worker	bne	.L_00_48
2670*8fb009dcSAndroid Build Coastguard Worker
2671*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
2672*8fb009dcSAndroid Build Coastguard Worker.size	sha256_block_data_order_neon,.-sha256_block_data_order_neon
2673*8fb009dcSAndroid Build Coastguard Worker#endif
2674*8fb009dcSAndroid Build Coastguard Worker#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
2675*8fb009dcSAndroid Build Coastguard Worker
2676*8fb009dcSAndroid Build Coastguard Worker# if defined(__thumb2__)
2677*8fb009dcSAndroid Build Coastguard Worker#  define INST(a,b,c,d)	.byte	c,d|0xc,a,b
2678*8fb009dcSAndroid Build Coastguard Worker# else
2679*8fb009dcSAndroid Build Coastguard Worker#  define INST(a,b,c,d)	.byte	a,b,c,d
2680*8fb009dcSAndroid Build Coastguard Worker# endif
2681*8fb009dcSAndroid Build Coastguard Worker
2682*8fb009dcSAndroid Build Coastguard Worker.LK256_shortcut_hw:
2683*8fb009dcSAndroid Build Coastguard Worker@ PC is 8 bytes ahead in Arm mode and 4 bytes ahead in Thumb mode.
2684*8fb009dcSAndroid Build Coastguard Worker#if defined(__thumb2__)
2685*8fb009dcSAndroid Build Coastguard Worker.word	K256-(.LK256_add_hw+4)
2686*8fb009dcSAndroid Build Coastguard Worker#else
2687*8fb009dcSAndroid Build Coastguard Worker.word	K256-(.LK256_add_hw+8)
2688*8fb009dcSAndroid Build Coastguard Worker#endif
2689*8fb009dcSAndroid Build Coastguard Worker
2690*8fb009dcSAndroid Build Coastguard Worker.globl	sha256_block_data_order_hw
2691*8fb009dcSAndroid Build Coastguard Worker.hidden	sha256_block_data_order_hw
2692*8fb009dcSAndroid Build Coastguard Worker.type	sha256_block_data_order_hw,%function
2693*8fb009dcSAndroid Build Coastguard Worker.align	5
2694*8fb009dcSAndroid Build Coastguard Workersha256_block_data_order_hw:
2695*8fb009dcSAndroid Build Coastguard Worker	@ K256 is too far to reference from one ADR command in Thumb mode. In
2696*8fb009dcSAndroid Build Coastguard Worker	@ Arm mode, we could make it fit by aligning the ADR offset to a 64-byte
2697*8fb009dcSAndroid Build Coastguard Worker	@ boundary. For simplicity, just load the offset from .LK256_shortcut_hw.
2698*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,.LK256_shortcut_hw
2699*8fb009dcSAndroid Build Coastguard Worker.LK256_add_hw:
2700*8fb009dcSAndroid Build Coastguard Worker	add	r3,pc,r3
2701*8fb009dcSAndroid Build Coastguard Worker
2702*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0,q1},[r0]
2703*8fb009dcSAndroid Build Coastguard Worker	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
2704*8fb009dcSAndroid Build Coastguard Worker	b	.Loop_v8
2705*8fb009dcSAndroid Build Coastguard Worker
2706*8fb009dcSAndroid Build Coastguard Worker.align	4
2707*8fb009dcSAndroid Build Coastguard Worker.Loop_v8:
2708*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q8,q9},[r1]!
2709*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q10,q11},[r1]!
2710*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2711*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q8,q8
2712*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q9,q9
2713*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q10,q10
2714*8fb009dcSAndroid Build Coastguard Worker	vrev32.8	q11,q11
2715*8fb009dcSAndroid Build Coastguard Worker	vmov	q14,q0	@ offload
2716*8fb009dcSAndroid Build Coastguard Worker	vmov	q15,q1
2717*8fb009dcSAndroid Build Coastguard Worker	teq	r1,r2
2718*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2719*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q8
2720*8fb009dcSAndroid Build Coastguard Worker	INST(0xe2,0x03,0xfa,0xf3)	@ sha256su0 q8,q9
2721*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2722*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2723*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2724*8fb009dcSAndroid Build Coastguard Worker	INST(0xe6,0x0c,0x64,0xf3)	@ sha256su1 q8,q10,q11
2725*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2726*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q9
2727*8fb009dcSAndroid Build Coastguard Worker	INST(0xe4,0x23,0xfa,0xf3)	@ sha256su0 q9,q10
2728*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2729*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2730*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2731*8fb009dcSAndroid Build Coastguard Worker	INST(0xe0,0x2c,0x66,0xf3)	@ sha256su1 q9,q11,q8
2732*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2733*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q10
2734*8fb009dcSAndroid Build Coastguard Worker	INST(0xe6,0x43,0xfa,0xf3)	@ sha256su0 q10,q11
2735*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2736*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2737*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2738*8fb009dcSAndroid Build Coastguard Worker	INST(0xe2,0x4c,0x60,0xf3)	@ sha256su1 q10,q8,q9
2739*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2740*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q11
2741*8fb009dcSAndroid Build Coastguard Worker	INST(0xe0,0x63,0xfa,0xf3)	@ sha256su0 q11,q8
2742*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2743*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2744*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2745*8fb009dcSAndroid Build Coastguard Worker	INST(0xe4,0x6c,0x62,0xf3)	@ sha256su1 q11,q9,q10
2746*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2747*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q8
2748*8fb009dcSAndroid Build Coastguard Worker	INST(0xe2,0x03,0xfa,0xf3)	@ sha256su0 q8,q9
2749*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2750*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2751*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2752*8fb009dcSAndroid Build Coastguard Worker	INST(0xe6,0x0c,0x64,0xf3)	@ sha256su1 q8,q10,q11
2753*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2754*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q9
2755*8fb009dcSAndroid Build Coastguard Worker	INST(0xe4,0x23,0xfa,0xf3)	@ sha256su0 q9,q10
2756*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2757*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2758*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2759*8fb009dcSAndroid Build Coastguard Worker	INST(0xe0,0x2c,0x66,0xf3)	@ sha256su1 q9,q11,q8
2760*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2761*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q10
2762*8fb009dcSAndroid Build Coastguard Worker	INST(0xe6,0x43,0xfa,0xf3)	@ sha256su0 q10,q11
2763*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2764*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2765*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2766*8fb009dcSAndroid Build Coastguard Worker	INST(0xe2,0x4c,0x60,0xf3)	@ sha256su1 q10,q8,q9
2767*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2768*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q11
2769*8fb009dcSAndroid Build Coastguard Worker	INST(0xe0,0x63,0xfa,0xf3)	@ sha256su0 q11,q8
2770*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2771*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2772*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2773*8fb009dcSAndroid Build Coastguard Worker	INST(0xe4,0x6c,0x62,0xf3)	@ sha256su1 q11,q9,q10
2774*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2775*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q8
2776*8fb009dcSAndroid Build Coastguard Worker	INST(0xe2,0x03,0xfa,0xf3)	@ sha256su0 q8,q9
2777*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2778*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2779*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2780*8fb009dcSAndroid Build Coastguard Worker	INST(0xe6,0x0c,0x64,0xf3)	@ sha256su1 q8,q10,q11
2781*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2782*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q9
2783*8fb009dcSAndroid Build Coastguard Worker	INST(0xe4,0x23,0xfa,0xf3)	@ sha256su0 q9,q10
2784*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2785*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2786*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2787*8fb009dcSAndroid Build Coastguard Worker	INST(0xe0,0x2c,0x66,0xf3)	@ sha256su1 q9,q11,q8
2788*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2789*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q10
2790*8fb009dcSAndroid Build Coastguard Worker	INST(0xe6,0x43,0xfa,0xf3)	@ sha256su0 q10,q11
2791*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2792*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2793*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2794*8fb009dcSAndroid Build Coastguard Worker	INST(0xe2,0x4c,0x60,0xf3)	@ sha256su1 q10,q8,q9
2795*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2796*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q11
2797*8fb009dcSAndroid Build Coastguard Worker	INST(0xe0,0x63,0xfa,0xf3)	@ sha256su0 q11,q8
2798*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2799*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2800*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2801*8fb009dcSAndroid Build Coastguard Worker	INST(0xe4,0x6c,0x62,0xf3)	@ sha256su1 q11,q9,q10
2802*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]!
2803*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q8
2804*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2805*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2806*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2807*8fb009dcSAndroid Build Coastguard Worker
2808*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12},[r3]!
2809*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q9
2810*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2811*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2812*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2813*8fb009dcSAndroid Build Coastguard Worker
2814*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q13},[r3]
2815*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q12,q12,q10
2816*8fb009dcSAndroid Build Coastguard Worker	sub	r3,r3,#256-16	@ rewind
2817*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2818*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
2819*8fb009dcSAndroid Build Coastguard Worker	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
2820*8fb009dcSAndroid Build Coastguard Worker
2821*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q13,q13,q11
2822*8fb009dcSAndroid Build Coastguard Worker	vmov	q2,q0
2823*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
2824*8fb009dcSAndroid Build Coastguard Worker	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
2825*8fb009dcSAndroid Build Coastguard Worker
2826*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q0,q0,q14
2827*8fb009dcSAndroid Build Coastguard Worker	vadd.i32	q1,q1,q15
2828*8fb009dcSAndroid Build Coastguard Worker	it	ne
2829*8fb009dcSAndroid Build Coastguard Worker	bne	.Loop_v8
2830*8fb009dcSAndroid Build Coastguard Worker
2831*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q0,q1},[r0]
2832*8fb009dcSAndroid Build Coastguard Worker
2833*8fb009dcSAndroid Build Coastguard Worker	bx	lr		@ bx lr
2834*8fb009dcSAndroid Build Coastguard Worker.size	sha256_block_data_order_hw,.-sha256_block_data_order_hw
2835*8fb009dcSAndroid Build Coastguard Worker#endif
2836*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,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
2837*8fb009dcSAndroid Build Coastguard Worker.align	2
2838*8fb009dcSAndroid Build Coastguard Worker.align	2
2839*8fb009dcSAndroid Build Coastguard Worker#endif  // !OPENSSL_NO_ASM && defined(OPENSSL_ARM) && defined(__ELF__)
2840