xref: /aosp_15_r20/external/boringssl/src/gen/bcm/sha512-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@ SHA512 block procedure for ARMv4. September 2007.
25*8fb009dcSAndroid Build Coastguard Worker
26*8fb009dcSAndroid Build Coastguard Worker@ This code is ~4.5 (four and a half) times faster than code generated
27*8fb009dcSAndroid Build Coastguard Worker@ by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue
28*8fb009dcSAndroid Build Coastguard Worker@ 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 6% improvement on
33*8fb009dcSAndroid Build Coastguard Worker@ Cortex A8 core and ~40 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 7%
38*8fb009dcSAndroid Build Coastguard Worker@ improvement on Coxtex A8 core and ~38 cycles per byte.
39*8fb009dcSAndroid Build Coastguard Worker
40*8fb009dcSAndroid Build Coastguard Worker@ March 2011.
41*8fb009dcSAndroid Build Coastguard Worker@
42*8fb009dcSAndroid Build Coastguard Worker@ Add NEON implementation. On Cortex A8 it was measured to process
43*8fb009dcSAndroid Build Coastguard Worker@ one byte in 23.3 cycles or ~60% faster than integer-only code.
44*8fb009dcSAndroid Build Coastguard Worker
45*8fb009dcSAndroid Build Coastguard Worker@ August 2012.
46*8fb009dcSAndroid Build Coastguard Worker@
47*8fb009dcSAndroid Build Coastguard Worker@ Improve NEON performance by 12% on Snapdragon S4. In absolute
48*8fb009dcSAndroid Build Coastguard Worker@ terms it's 22.6 cycles per byte, which is disappointing result.
49*8fb009dcSAndroid Build Coastguard Worker@ Technical writers asserted that 3-way S4 pipeline can sustain
50*8fb009dcSAndroid Build Coastguard Worker@ multiple NEON instructions per cycle, but dual NEON issue could
51*8fb009dcSAndroid Build Coastguard Worker@ not be observed, see http://www.openssl.org/~appro/Snapdragon-S4.html
52*8fb009dcSAndroid Build Coastguard Worker@ for further details. On side note Cortex-A15 processes one byte in
53*8fb009dcSAndroid Build Coastguard Worker@ 16 cycles.
54*8fb009dcSAndroid Build Coastguard Worker
55*8fb009dcSAndroid Build Coastguard Worker@ Byte order [in]dependence. =========================================
56*8fb009dcSAndroid Build Coastguard Worker@
57*8fb009dcSAndroid Build Coastguard Worker@ Originally caller was expected to maintain specific *dword* order in
58*8fb009dcSAndroid Build Coastguard Worker@ h[0-7], namely with most significant dword at *lower* address, which
59*8fb009dcSAndroid Build Coastguard Worker@ was reflected in below two parameters as 0 and 4. Now caller is
60*8fb009dcSAndroid Build Coastguard Worker@ expected to maintain native byte order for whole 64-bit values.
61*8fb009dcSAndroid Build Coastguard Worker#ifndef __KERNEL__
62*8fb009dcSAndroid Build Coastguard Worker# include <openssl/arm_arch.h>
63*8fb009dcSAndroid Build Coastguard Worker# define VFP_ABI_PUSH	vstmdb	sp!,{d8-d15}
64*8fb009dcSAndroid Build Coastguard Worker# define VFP_ABI_POP	vldmia	sp!,{d8-d15}
65*8fb009dcSAndroid Build Coastguard Worker#else
66*8fb009dcSAndroid Build Coastguard Worker# define __ARM_MAX_ARCH__ 7
67*8fb009dcSAndroid Build Coastguard Worker# define VFP_ABI_PUSH
68*8fb009dcSAndroid Build Coastguard Worker# define VFP_ABI_POP
69*8fb009dcSAndroid Build Coastguard Worker#endif
70*8fb009dcSAndroid Build Coastguard Worker
71*8fb009dcSAndroid Build Coastguard Worker@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both
72*8fb009dcSAndroid Build Coastguard Worker@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions.
73*8fb009dcSAndroid Build Coastguard Worker.arch	armv7-a
74*8fb009dcSAndroid Build Coastguard Worker
75*8fb009dcSAndroid Build Coastguard Worker#ifdef __ARMEL__
76*8fb009dcSAndroid Build Coastguard Worker# define LO 0
77*8fb009dcSAndroid Build Coastguard Worker# define HI 4
78*8fb009dcSAndroid Build Coastguard Worker# define WORD64(hi0,lo0,hi1,lo1)	.word	lo0,hi0, lo1,hi1
79*8fb009dcSAndroid Build Coastguard Worker#else
80*8fb009dcSAndroid Build Coastguard Worker# define HI 0
81*8fb009dcSAndroid Build Coastguard Worker# define LO 4
82*8fb009dcSAndroid Build Coastguard Worker# define WORD64(hi0,lo0,hi1,lo1)	.word	hi0,lo0, hi1,lo1
83*8fb009dcSAndroid Build Coastguard Worker#endif
84*8fb009dcSAndroid Build Coastguard Worker
85*8fb009dcSAndroid Build Coastguard Worker.text
86*8fb009dcSAndroid Build Coastguard Worker#if defined(__thumb2__)
87*8fb009dcSAndroid Build Coastguard Worker.syntax	unified
88*8fb009dcSAndroid Build Coastguard Worker.thumb
89*8fb009dcSAndroid Build Coastguard Worker# define adrl adr
90*8fb009dcSAndroid Build Coastguard Worker#else
91*8fb009dcSAndroid Build Coastguard Worker.code	32
92*8fb009dcSAndroid Build Coastguard Worker#endif
93*8fb009dcSAndroid Build Coastguard Worker
94*8fb009dcSAndroid Build Coastguard Worker.type	K512,%object
95*8fb009dcSAndroid Build Coastguard Worker.align	5
96*8fb009dcSAndroid Build Coastguard WorkerK512:
97*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x428a2f98,0xd728ae22,	0x71374491,0x23ef65cd)
98*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xb5c0fbcf,0xec4d3b2f,	0xe9b5dba5,0x8189dbbc)
99*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x3956c25b,0xf348b538,	0x59f111f1,0xb605d019)
100*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x923f82a4,0xaf194f9b,	0xab1c5ed5,0xda6d8118)
101*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xd807aa98,0xa3030242,	0x12835b01,0x45706fbe)
102*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x243185be,0x4ee4b28c,	0x550c7dc3,0xd5ffb4e2)
103*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x72be5d74,0xf27b896f,	0x80deb1fe,0x3b1696b1)
104*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x9bdc06a7,0x25c71235,	0xc19bf174,0xcf692694)
105*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xe49b69c1,0x9ef14ad2,	0xefbe4786,0x384f25e3)
106*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x0fc19dc6,0x8b8cd5b5,	0x240ca1cc,0x77ac9c65)
107*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x2de92c6f,0x592b0275,	0x4a7484aa,0x6ea6e483)
108*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x5cb0a9dc,0xbd41fbd4,	0x76f988da,0x831153b5)
109*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x983e5152,0xee66dfab,	0xa831c66d,0x2db43210)
110*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xb00327c8,0x98fb213f,	0xbf597fc7,0xbeef0ee4)
111*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xc6e00bf3,0x3da88fc2,	0xd5a79147,0x930aa725)
112*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x06ca6351,0xe003826f,	0x14292967,0x0a0e6e70)
113*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x27b70a85,0x46d22ffc,	0x2e1b2138,0x5c26c926)
114*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x4d2c6dfc,0x5ac42aed,	0x53380d13,0x9d95b3df)
115*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x650a7354,0x8baf63de,	0x766a0abb,0x3c77b2a8)
116*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x81c2c92e,0x47edaee6,	0x92722c85,0x1482353b)
117*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xa2bfe8a1,0x4cf10364,	0xa81a664b,0xbc423001)
118*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xc24b8b70,0xd0f89791,	0xc76c51a3,0x0654be30)
119*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xd192e819,0xd6ef5218,	0xd6990624,0x5565a910)
120*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xf40e3585,0x5771202a,	0x106aa070,0x32bbd1b8)
121*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x19a4c116,0xb8d2d0c8,	0x1e376c08,0x5141ab53)
122*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x2748774c,0xdf8eeb99,	0x34b0bcb5,0xe19b48a8)
123*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x391c0cb3,0xc5c95a63,	0x4ed8aa4a,0xe3418acb)
124*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x5b9cca4f,0x7763e373,	0x682e6ff3,0xd6b2b8a3)
125*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x748f82ee,0x5defb2fc,	0x78a5636f,0x43172f60)
126*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x84c87814,0xa1f0ab72,	0x8cc70208,0x1a6439ec)
127*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x90befffa,0x23631e28,	0xa4506ceb,0xde82bde9)
128*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xbef9a3f7,0xb2c67915,	0xc67178f2,0xe372532b)
129*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xca273ece,0xea26619c,	0xd186b8c7,0x21c0c207)
130*8fb009dcSAndroid Build Coastguard Worker	WORD64(0xeada7dd6,0xcde0eb1e,	0xf57d4f7f,0xee6ed178)
131*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x06f067aa,0x72176fba,	0x0a637dc5,0xa2c898a6)
132*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x113f9804,0xbef90dae,	0x1b710b35,0x131c471b)
133*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x28db77f5,0x23047d84,	0x32caab7b,0x40c72493)
134*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x3c9ebe0a,0x15c9bebc,	0x431d67c4,0x9c100d4c)
135*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x4cc5d4be,0xcb3e42b6,	0x597f299c,0xfc657e2a)
136*8fb009dcSAndroid Build Coastguard Worker	WORD64(0x5fcb6fab,0x3ad6faec,	0x6c44198c,0x4a475817)
137*8fb009dcSAndroid Build Coastguard Worker.size	K512,.-K512
138*8fb009dcSAndroid Build Coastguard Worker
139*8fb009dcSAndroid Build Coastguard Worker.globl	sha512_block_data_order_nohw
140*8fb009dcSAndroid Build Coastguard Worker.hidden	sha512_block_data_order_nohw
141*8fb009dcSAndroid Build Coastguard Worker.type	sha512_block_data_order_nohw,%function
142*8fb009dcSAndroid Build Coastguard Workersha512_block_data_order_nohw:
143*8fb009dcSAndroid Build Coastguard Worker	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
144*8fb009dcSAndroid Build Coastguard Worker	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
145*8fb009dcSAndroid Build Coastguard Worker	adr	r14,K512
146*8fb009dcSAndroid Build Coastguard Worker	sub	sp,sp,#9*8
147*8fb009dcSAndroid Build Coastguard Worker
148*8fb009dcSAndroid Build Coastguard Worker	ldr	r7,[r0,#32+LO]
149*8fb009dcSAndroid Build Coastguard Worker	ldr	r8,[r0,#32+HI]
150*8fb009dcSAndroid Build Coastguard Worker	ldr	r9, [r0,#48+LO]
151*8fb009dcSAndroid Build Coastguard Worker	ldr	r10, [r0,#48+HI]
152*8fb009dcSAndroid Build Coastguard Worker	ldr	r11, [r0,#56+LO]
153*8fb009dcSAndroid Build Coastguard Worker	ldr	r12, [r0,#56+HI]
154*8fb009dcSAndroid Build Coastguard Worker.Loop:
155*8fb009dcSAndroid Build Coastguard Worker	str	r9, [sp,#48+0]
156*8fb009dcSAndroid Build Coastguard Worker	str	r10, [sp,#48+4]
157*8fb009dcSAndroid Build Coastguard Worker	str	r11, [sp,#56+0]
158*8fb009dcSAndroid Build Coastguard Worker	str	r12, [sp,#56+4]
159*8fb009dcSAndroid Build Coastguard Worker	ldr	r5,[r0,#0+LO]
160*8fb009dcSAndroid Build Coastguard Worker	ldr	r6,[r0,#0+HI]
161*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r0,#8+LO]
162*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[r0,#8+HI]
163*8fb009dcSAndroid Build Coastguard Worker	ldr	r9, [r0,#16+LO]
164*8fb009dcSAndroid Build Coastguard Worker	ldr	r10, [r0,#16+HI]
165*8fb009dcSAndroid Build Coastguard Worker	ldr	r11, [r0,#24+LO]
166*8fb009dcSAndroid Build Coastguard Worker	ldr	r12, [r0,#24+HI]
167*8fb009dcSAndroid Build Coastguard Worker	str	r3,[sp,#8+0]
168*8fb009dcSAndroid Build Coastguard Worker	str	r4,[sp,#8+4]
169*8fb009dcSAndroid Build Coastguard Worker	str	r9, [sp,#16+0]
170*8fb009dcSAndroid Build Coastguard Worker	str	r10, [sp,#16+4]
171*8fb009dcSAndroid Build Coastguard Worker	str	r11, [sp,#24+0]
172*8fb009dcSAndroid Build Coastguard Worker	str	r12, [sp,#24+4]
173*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r0,#40+LO]
174*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[r0,#40+HI]
175*8fb009dcSAndroid Build Coastguard Worker	str	r3,[sp,#40+0]
176*8fb009dcSAndroid Build Coastguard Worker	str	r4,[sp,#40+4]
177*8fb009dcSAndroid Build Coastguard Worker
178*8fb009dcSAndroid Build Coastguard Worker.L00_15:
179*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH<7
180*8fb009dcSAndroid Build Coastguard Worker	ldrb	r3,[r1,#7]
181*8fb009dcSAndroid Build Coastguard Worker	ldrb	r9, [r1,#6]
182*8fb009dcSAndroid Build Coastguard Worker	ldrb	r10, [r1,#5]
183*8fb009dcSAndroid Build Coastguard Worker	ldrb	r11, [r1,#4]
184*8fb009dcSAndroid Build Coastguard Worker	ldrb	r4,[r1,#3]
185*8fb009dcSAndroid Build Coastguard Worker	ldrb	r12, [r1,#2]
186*8fb009dcSAndroid Build Coastguard Worker	orr	r3,r3,r9,lsl#8
187*8fb009dcSAndroid Build Coastguard Worker	ldrb	r9, [r1,#1]
188*8fb009dcSAndroid Build Coastguard Worker	orr	r3,r3,r10,lsl#16
189*8fb009dcSAndroid Build Coastguard Worker	ldrb	r10, [r1],#8
190*8fb009dcSAndroid Build Coastguard Worker	orr	r3,r3,r11,lsl#24
191*8fb009dcSAndroid Build Coastguard Worker	orr	r4,r4,r12,lsl#8
192*8fb009dcSAndroid Build Coastguard Worker	orr	r4,r4,r9,lsl#16
193*8fb009dcSAndroid Build Coastguard Worker	orr	r4,r4,r10,lsl#24
194*8fb009dcSAndroid Build Coastguard Worker#else
195*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r1,#4]
196*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[r1],#8
197*8fb009dcSAndroid Build Coastguard Worker#ifdef __ARMEL__
198*8fb009dcSAndroid Build Coastguard Worker	rev	r3,r3
199*8fb009dcSAndroid Build Coastguard Worker	rev	r4,r4
200*8fb009dcSAndroid Build Coastguard Worker#endif
201*8fb009dcSAndroid Build Coastguard Worker#endif
202*8fb009dcSAndroid Build Coastguard Worker	@ Sigma1(x)	(ROTR((x),14) ^ ROTR((x),18)  ^ ROTR((x),41))
203*8fb009dcSAndroid Build Coastguard Worker	@ LO		lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
204*8fb009dcSAndroid Build Coastguard Worker	@ HI		hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
205*8fb009dcSAndroid Build Coastguard Worker	mov	r9,r7,lsr#14
206*8fb009dcSAndroid Build Coastguard Worker	str	r3,[sp,#64+0]
207*8fb009dcSAndroid Build Coastguard Worker	mov	r10,r8,lsr#14
208*8fb009dcSAndroid Build Coastguard Worker	str	r4,[sp,#64+4]
209*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r8,lsl#18
210*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#56+0]	@ h.lo
211*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r7,lsl#18
212*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#56+4]	@ h.hi
213*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r7,lsr#18
214*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r8,lsr#18
215*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r8,lsl#14
216*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r7,lsl#14
217*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r8,lsr#9
218*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r7,lsr#9
219*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r7,lsl#23
220*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r8,lsl#23	@ Sigma1(e)
221*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
222*8fb009dcSAndroid Build Coastguard Worker	ldr	r9,[sp,#40+0]	@ f.lo
223*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10		@ T += Sigma1(e)
224*8fb009dcSAndroid Build Coastguard Worker	ldr	r10,[sp,#40+4]	@ f.hi
225*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r11
226*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#48+0]	@ g.lo
227*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r12		@ T += h
228*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#48+4]	@ g.hi
229*8fb009dcSAndroid Build Coastguard Worker
230*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r11
231*8fb009dcSAndroid Build Coastguard Worker	str	r7,[sp,#32+0]
232*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r12
233*8fb009dcSAndroid Build Coastguard Worker	str	r8,[sp,#32+4]
234*8fb009dcSAndroid Build Coastguard Worker	and	r9,r9,r7
235*8fb009dcSAndroid Build Coastguard Worker	str	r5,[sp,#0+0]
236*8fb009dcSAndroid Build Coastguard Worker	and	r10,r10,r8
237*8fb009dcSAndroid Build Coastguard Worker	str	r6,[sp,#0+4]
238*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r11
239*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[r14,#LO]	@ K[i].lo
240*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r12		@ Ch(e,f,g)
241*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14,#HI]	@ K[i].hi
242*8fb009dcSAndroid Build Coastguard Worker
243*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
244*8fb009dcSAndroid Build Coastguard Worker	ldr	r7,[sp,#24+0]	@ d.lo
245*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10		@ T += Ch(e,f,g)
246*8fb009dcSAndroid Build Coastguard Worker	ldr	r8,[sp,#24+4]	@ d.hi
247*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r11
248*8fb009dcSAndroid Build Coastguard Worker	and	r9,r11,#0xff
249*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r12		@ T += K[i]
250*8fb009dcSAndroid Build Coastguard Worker	adds	r7,r7,r3
251*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#8+0]	@ b.lo
252*8fb009dcSAndroid Build Coastguard Worker	adc	r8,r8,r4		@ d += T
253*8fb009dcSAndroid Build Coastguard Worker	teq	r9,#148
254*8fb009dcSAndroid Build Coastguard Worker
255*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#16+0]	@ c.lo
256*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
257*8fb009dcSAndroid Build Coastguard Worker	it	eq			@ Thumb2 thing, sanity check in ARM
258*8fb009dcSAndroid Build Coastguard Worker#endif
259*8fb009dcSAndroid Build Coastguard Worker	orreq	r14,r14,#1
260*8fb009dcSAndroid Build Coastguard Worker	@ Sigma0(x)	(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
261*8fb009dcSAndroid Build Coastguard Worker	@ LO		lo>>28^hi<<4  ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
262*8fb009dcSAndroid Build Coastguard Worker	@ HI		hi>>28^lo<<4  ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
263*8fb009dcSAndroid Build Coastguard Worker	mov	r9,r5,lsr#28
264*8fb009dcSAndroid Build Coastguard Worker	mov	r10,r6,lsr#28
265*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r6,lsl#4
266*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r5,lsl#4
267*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r6,lsr#2
268*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r5,lsr#2
269*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r5,lsl#30
270*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r6,lsl#30
271*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r6,lsr#7
272*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r5,lsr#7
273*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r5,lsl#25
274*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r6,lsl#25	@ Sigma0(a)
275*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
276*8fb009dcSAndroid Build Coastguard Worker	and	r9,r5,r11
277*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10		@ T += Sigma0(a)
278*8fb009dcSAndroid Build Coastguard Worker
279*8fb009dcSAndroid Build Coastguard Worker	ldr	r10,[sp,#8+4]	@ b.hi
280*8fb009dcSAndroid Build Coastguard Worker	orr	r5,r5,r11
281*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#16+4]	@ c.hi
282*8fb009dcSAndroid Build Coastguard Worker	and	r5,r5,r12
283*8fb009dcSAndroid Build Coastguard Worker	and	r12,r6,r10
284*8fb009dcSAndroid Build Coastguard Worker	orr	r6,r6,r10
285*8fb009dcSAndroid Build Coastguard Worker	orr	r5,r5,r9		@ Maj(a,b,c).lo
286*8fb009dcSAndroid Build Coastguard Worker	and	r6,r6,r11
287*8fb009dcSAndroid Build Coastguard Worker	adds	r5,r5,r3
288*8fb009dcSAndroid Build Coastguard Worker	orr	r6,r6,r12		@ Maj(a,b,c).hi
289*8fb009dcSAndroid Build Coastguard Worker	sub	sp,sp,#8
290*8fb009dcSAndroid Build Coastguard Worker	adc	r6,r6,r4		@ h += T
291*8fb009dcSAndroid Build Coastguard Worker	tst	r14,#1
292*8fb009dcSAndroid Build Coastguard Worker	add	r14,r14,#8
293*8fb009dcSAndroid Build Coastguard Worker	tst	r14,#1
294*8fb009dcSAndroid Build Coastguard Worker	beq	.L00_15
295*8fb009dcSAndroid Build Coastguard Worker	ldr	r9,[sp,#184+0]
296*8fb009dcSAndroid Build Coastguard Worker	ldr	r10,[sp,#184+4]
297*8fb009dcSAndroid Build Coastguard Worker	bic	r14,r14,#1
298*8fb009dcSAndroid Build Coastguard Worker.L16_79:
299*8fb009dcSAndroid Build Coastguard Worker	@ sigma0(x)	(ROTR((x),1)  ^ ROTR((x),8)  ^ ((x)>>7))
300*8fb009dcSAndroid Build Coastguard Worker	@ LO		lo>>1^hi<<31  ^ lo>>8^hi<<24 ^ lo>>7^hi<<25
301*8fb009dcSAndroid Build Coastguard Worker	@ HI		hi>>1^lo<<31  ^ hi>>8^lo<<24 ^ hi>>7
302*8fb009dcSAndroid Build Coastguard Worker	mov	r3,r9,lsr#1
303*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#80+0]
304*8fb009dcSAndroid Build Coastguard Worker	mov	r4,r10,lsr#1
305*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#80+4]
306*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r10,lsl#31
307*8fb009dcSAndroid Build Coastguard Worker	eor	r4,r4,r9,lsl#31
308*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9,lsr#8
309*8fb009dcSAndroid Build Coastguard Worker	eor	r4,r4,r10,lsr#8
310*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r10,lsl#24
311*8fb009dcSAndroid Build Coastguard Worker	eor	r4,r4,r9,lsl#24
312*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r9,lsr#7
313*8fb009dcSAndroid Build Coastguard Worker	eor	r4,r4,r10,lsr#7
314*8fb009dcSAndroid Build Coastguard Worker	eor	r3,r3,r10,lsl#25
315*8fb009dcSAndroid Build Coastguard Worker
316*8fb009dcSAndroid Build Coastguard Worker	@ sigma1(x)	(ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
317*8fb009dcSAndroid Build Coastguard Worker	@ LO		lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26
318*8fb009dcSAndroid Build Coastguard Worker	@ HI		hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6
319*8fb009dcSAndroid Build Coastguard Worker	mov	r9,r11,lsr#19
320*8fb009dcSAndroid Build Coastguard Worker	mov	r10,r12,lsr#19
321*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r12,lsl#13
322*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r11,lsl#13
323*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r12,lsr#29
324*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r11,lsr#29
325*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r11,lsl#3
326*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r12,lsl#3
327*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r11,lsr#6
328*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r12,lsr#6
329*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#120+0]
330*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r12,lsl#26
331*8fb009dcSAndroid Build Coastguard Worker
332*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#120+4]
333*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
334*8fb009dcSAndroid Build Coastguard Worker	ldr	r9,[sp,#192+0]
335*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10
336*8fb009dcSAndroid Build Coastguard Worker
337*8fb009dcSAndroid Build Coastguard Worker	ldr	r10,[sp,#192+4]
338*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r11
339*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r12
340*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
341*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10
342*8fb009dcSAndroid Build Coastguard Worker	@ Sigma1(x)	(ROTR((x),14) ^ ROTR((x),18)  ^ ROTR((x),41))
343*8fb009dcSAndroid Build Coastguard Worker	@ LO		lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
344*8fb009dcSAndroid Build Coastguard Worker	@ HI		hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
345*8fb009dcSAndroid Build Coastguard Worker	mov	r9,r7,lsr#14
346*8fb009dcSAndroid Build Coastguard Worker	str	r3,[sp,#64+0]
347*8fb009dcSAndroid Build Coastguard Worker	mov	r10,r8,lsr#14
348*8fb009dcSAndroid Build Coastguard Worker	str	r4,[sp,#64+4]
349*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r8,lsl#18
350*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#56+0]	@ h.lo
351*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r7,lsl#18
352*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#56+4]	@ h.hi
353*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r7,lsr#18
354*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r8,lsr#18
355*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r8,lsl#14
356*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r7,lsl#14
357*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r8,lsr#9
358*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r7,lsr#9
359*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r7,lsl#23
360*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r8,lsl#23	@ Sigma1(e)
361*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
362*8fb009dcSAndroid Build Coastguard Worker	ldr	r9,[sp,#40+0]	@ f.lo
363*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10		@ T += Sigma1(e)
364*8fb009dcSAndroid Build Coastguard Worker	ldr	r10,[sp,#40+4]	@ f.hi
365*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r11
366*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#48+0]	@ g.lo
367*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r12		@ T += h
368*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#48+4]	@ g.hi
369*8fb009dcSAndroid Build Coastguard Worker
370*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r11
371*8fb009dcSAndroid Build Coastguard Worker	str	r7,[sp,#32+0]
372*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r12
373*8fb009dcSAndroid Build Coastguard Worker	str	r8,[sp,#32+4]
374*8fb009dcSAndroid Build Coastguard Worker	and	r9,r9,r7
375*8fb009dcSAndroid Build Coastguard Worker	str	r5,[sp,#0+0]
376*8fb009dcSAndroid Build Coastguard Worker	and	r10,r10,r8
377*8fb009dcSAndroid Build Coastguard Worker	str	r6,[sp,#0+4]
378*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r11
379*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[r14,#LO]	@ K[i].lo
380*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r12		@ Ch(e,f,g)
381*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[r14,#HI]	@ K[i].hi
382*8fb009dcSAndroid Build Coastguard Worker
383*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
384*8fb009dcSAndroid Build Coastguard Worker	ldr	r7,[sp,#24+0]	@ d.lo
385*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10		@ T += Ch(e,f,g)
386*8fb009dcSAndroid Build Coastguard Worker	ldr	r8,[sp,#24+4]	@ d.hi
387*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r11
388*8fb009dcSAndroid Build Coastguard Worker	and	r9,r11,#0xff
389*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r12		@ T += K[i]
390*8fb009dcSAndroid Build Coastguard Worker	adds	r7,r7,r3
391*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#8+0]	@ b.lo
392*8fb009dcSAndroid Build Coastguard Worker	adc	r8,r8,r4		@ d += T
393*8fb009dcSAndroid Build Coastguard Worker	teq	r9,#23
394*8fb009dcSAndroid Build Coastguard Worker
395*8fb009dcSAndroid Build Coastguard Worker	ldr	r12,[sp,#16+0]	@ c.lo
396*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
397*8fb009dcSAndroid Build Coastguard Worker	it	eq			@ Thumb2 thing, sanity check in ARM
398*8fb009dcSAndroid Build Coastguard Worker#endif
399*8fb009dcSAndroid Build Coastguard Worker	orreq	r14,r14,#1
400*8fb009dcSAndroid Build Coastguard Worker	@ Sigma0(x)	(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
401*8fb009dcSAndroid Build Coastguard Worker	@ LO		lo>>28^hi<<4  ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
402*8fb009dcSAndroid Build Coastguard Worker	@ HI		hi>>28^lo<<4  ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
403*8fb009dcSAndroid Build Coastguard Worker	mov	r9,r5,lsr#28
404*8fb009dcSAndroid Build Coastguard Worker	mov	r10,r6,lsr#28
405*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r6,lsl#4
406*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r5,lsl#4
407*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r6,lsr#2
408*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r5,lsr#2
409*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r5,lsl#30
410*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r6,lsl#30
411*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r6,lsr#7
412*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r5,lsr#7
413*8fb009dcSAndroid Build Coastguard Worker	eor	r9,r9,r5,lsl#25
414*8fb009dcSAndroid Build Coastguard Worker	eor	r10,r10,r6,lsl#25	@ Sigma0(a)
415*8fb009dcSAndroid Build Coastguard Worker	adds	r3,r3,r9
416*8fb009dcSAndroid Build Coastguard Worker	and	r9,r5,r11
417*8fb009dcSAndroid Build Coastguard Worker	adc	r4,r4,r10		@ T += Sigma0(a)
418*8fb009dcSAndroid Build Coastguard Worker
419*8fb009dcSAndroid Build Coastguard Worker	ldr	r10,[sp,#8+4]	@ b.hi
420*8fb009dcSAndroid Build Coastguard Worker	orr	r5,r5,r11
421*8fb009dcSAndroid Build Coastguard Worker	ldr	r11,[sp,#16+4]	@ c.hi
422*8fb009dcSAndroid Build Coastguard Worker	and	r5,r5,r12
423*8fb009dcSAndroid Build Coastguard Worker	and	r12,r6,r10
424*8fb009dcSAndroid Build Coastguard Worker	orr	r6,r6,r10
425*8fb009dcSAndroid Build Coastguard Worker	orr	r5,r5,r9		@ Maj(a,b,c).lo
426*8fb009dcSAndroid Build Coastguard Worker	and	r6,r6,r11
427*8fb009dcSAndroid Build Coastguard Worker	adds	r5,r5,r3
428*8fb009dcSAndroid Build Coastguard Worker	orr	r6,r6,r12		@ Maj(a,b,c).hi
429*8fb009dcSAndroid Build Coastguard Worker	sub	sp,sp,#8
430*8fb009dcSAndroid Build Coastguard Worker	adc	r6,r6,r4		@ h += T
431*8fb009dcSAndroid Build Coastguard Worker	tst	r14,#1
432*8fb009dcSAndroid Build Coastguard Worker	add	r14,r14,#8
433*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=7
434*8fb009dcSAndroid Build Coastguard Worker	ittt	eq			@ Thumb2 thing, sanity check in ARM
435*8fb009dcSAndroid Build Coastguard Worker#endif
436*8fb009dcSAndroid Build Coastguard Worker	ldreq	r9,[sp,#184+0]
437*8fb009dcSAndroid Build Coastguard Worker	ldreq	r10,[sp,#184+4]
438*8fb009dcSAndroid Build Coastguard Worker	beq	.L16_79
439*8fb009dcSAndroid Build Coastguard Worker	bic	r14,r14,#1
440*8fb009dcSAndroid Build Coastguard Worker
441*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[sp,#8+0]
442*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[sp,#8+4]
443*8fb009dcSAndroid Build Coastguard Worker	ldr	r9, [r0,#0+LO]
444*8fb009dcSAndroid Build Coastguard Worker	ldr	r10, [r0,#0+HI]
445*8fb009dcSAndroid Build Coastguard Worker	ldr	r11, [r0,#8+LO]
446*8fb009dcSAndroid Build Coastguard Worker	ldr	r12, [r0,#8+HI]
447*8fb009dcSAndroid Build Coastguard Worker	adds	r9,r5,r9
448*8fb009dcSAndroid Build Coastguard Worker	str	r9, [r0,#0+LO]
449*8fb009dcSAndroid Build Coastguard Worker	adc	r10,r6,r10
450*8fb009dcSAndroid Build Coastguard Worker	str	r10, [r0,#0+HI]
451*8fb009dcSAndroid Build Coastguard Worker	adds	r11,r3,r11
452*8fb009dcSAndroid Build Coastguard Worker	str	r11, [r0,#8+LO]
453*8fb009dcSAndroid Build Coastguard Worker	adc	r12,r4,r12
454*8fb009dcSAndroid Build Coastguard Worker	str	r12, [r0,#8+HI]
455*8fb009dcSAndroid Build Coastguard Worker
456*8fb009dcSAndroid Build Coastguard Worker	ldr	r5,[sp,#16+0]
457*8fb009dcSAndroid Build Coastguard Worker	ldr	r6,[sp,#16+4]
458*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[sp,#24+0]
459*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[sp,#24+4]
460*8fb009dcSAndroid Build Coastguard Worker	ldr	r9, [r0,#16+LO]
461*8fb009dcSAndroid Build Coastguard Worker	ldr	r10, [r0,#16+HI]
462*8fb009dcSAndroid Build Coastguard Worker	ldr	r11, [r0,#24+LO]
463*8fb009dcSAndroid Build Coastguard Worker	ldr	r12, [r0,#24+HI]
464*8fb009dcSAndroid Build Coastguard Worker	adds	r9,r5,r9
465*8fb009dcSAndroid Build Coastguard Worker	str	r9, [r0,#16+LO]
466*8fb009dcSAndroid Build Coastguard Worker	adc	r10,r6,r10
467*8fb009dcSAndroid Build Coastguard Worker	str	r10, [r0,#16+HI]
468*8fb009dcSAndroid Build Coastguard Worker	adds	r11,r3,r11
469*8fb009dcSAndroid Build Coastguard Worker	str	r11, [r0,#24+LO]
470*8fb009dcSAndroid Build Coastguard Worker	adc	r12,r4,r12
471*8fb009dcSAndroid Build Coastguard Worker	str	r12, [r0,#24+HI]
472*8fb009dcSAndroid Build Coastguard Worker
473*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[sp,#40+0]
474*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[sp,#40+4]
475*8fb009dcSAndroid Build Coastguard Worker	ldr	r9, [r0,#32+LO]
476*8fb009dcSAndroid Build Coastguard Worker	ldr	r10, [r0,#32+HI]
477*8fb009dcSAndroid Build Coastguard Worker	ldr	r11, [r0,#40+LO]
478*8fb009dcSAndroid Build Coastguard Worker	ldr	r12, [r0,#40+HI]
479*8fb009dcSAndroid Build Coastguard Worker	adds	r7,r7,r9
480*8fb009dcSAndroid Build Coastguard Worker	str	r7,[r0,#32+LO]
481*8fb009dcSAndroid Build Coastguard Worker	adc	r8,r8,r10
482*8fb009dcSAndroid Build Coastguard Worker	str	r8,[r0,#32+HI]
483*8fb009dcSAndroid Build Coastguard Worker	adds	r11,r3,r11
484*8fb009dcSAndroid Build Coastguard Worker	str	r11, [r0,#40+LO]
485*8fb009dcSAndroid Build Coastguard Worker	adc	r12,r4,r12
486*8fb009dcSAndroid Build Coastguard Worker	str	r12, [r0,#40+HI]
487*8fb009dcSAndroid Build Coastguard Worker
488*8fb009dcSAndroid Build Coastguard Worker	ldr	r5,[sp,#48+0]
489*8fb009dcSAndroid Build Coastguard Worker	ldr	r6,[sp,#48+4]
490*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[sp,#56+0]
491*8fb009dcSAndroid Build Coastguard Worker	ldr	r4,[sp,#56+4]
492*8fb009dcSAndroid Build Coastguard Worker	ldr	r9, [r0,#48+LO]
493*8fb009dcSAndroid Build Coastguard Worker	ldr	r10, [r0,#48+HI]
494*8fb009dcSAndroid Build Coastguard Worker	ldr	r11, [r0,#56+LO]
495*8fb009dcSAndroid Build Coastguard Worker	ldr	r12, [r0,#56+HI]
496*8fb009dcSAndroid Build Coastguard Worker	adds	r9,r5,r9
497*8fb009dcSAndroid Build Coastguard Worker	str	r9, [r0,#48+LO]
498*8fb009dcSAndroid Build Coastguard Worker	adc	r10,r6,r10
499*8fb009dcSAndroid Build Coastguard Worker	str	r10, [r0,#48+HI]
500*8fb009dcSAndroid Build Coastguard Worker	adds	r11,r3,r11
501*8fb009dcSAndroid Build Coastguard Worker	str	r11, [r0,#56+LO]
502*8fb009dcSAndroid Build Coastguard Worker	adc	r12,r4,r12
503*8fb009dcSAndroid Build Coastguard Worker	str	r12, [r0,#56+HI]
504*8fb009dcSAndroid Build Coastguard Worker
505*8fb009dcSAndroid Build Coastguard Worker	add	sp,sp,#640
506*8fb009dcSAndroid Build Coastguard Worker	sub	r14,r14,#640
507*8fb009dcSAndroid Build Coastguard Worker
508*8fb009dcSAndroid Build Coastguard Worker	teq	r1,r2
509*8fb009dcSAndroid Build Coastguard Worker	bne	.Loop
510*8fb009dcSAndroid Build Coastguard Worker
511*8fb009dcSAndroid Build Coastguard Worker	add	sp,sp,#8*9		@ destroy frame
512*8fb009dcSAndroid Build Coastguard Worker#if __ARM_ARCH>=5
513*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
514*8fb009dcSAndroid Build Coastguard Worker#else
515*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
516*8fb009dcSAndroid Build Coastguard Worker	tst	lr,#1
517*8fb009dcSAndroid Build Coastguard Worker	moveq	pc,lr			@ be binary compatible with V4, yet
518*8fb009dcSAndroid Build Coastguard Worker.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
519*8fb009dcSAndroid Build Coastguard Worker#endif
520*8fb009dcSAndroid Build Coastguard Worker.size	sha512_block_data_order_nohw,.-sha512_block_data_order_nohw
521*8fb009dcSAndroid Build Coastguard Worker#if __ARM_MAX_ARCH__>=7
522*8fb009dcSAndroid Build Coastguard Worker.arch	armv7-a
523*8fb009dcSAndroid Build Coastguard Worker.fpu	neon
524*8fb009dcSAndroid Build Coastguard Worker
525*8fb009dcSAndroid Build Coastguard Worker.globl	sha512_block_data_order_neon
526*8fb009dcSAndroid Build Coastguard Worker.hidden	sha512_block_data_order_neon
527*8fb009dcSAndroid Build Coastguard Worker.type	sha512_block_data_order_neon,%function
528*8fb009dcSAndroid Build Coastguard Worker.align	4
529*8fb009dcSAndroid Build Coastguard Workersha512_block_data_order_neon:
530*8fb009dcSAndroid Build Coastguard Worker	dmb	@ errata #451034 on early Cortex A8
531*8fb009dcSAndroid Build Coastguard Worker	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
532*8fb009dcSAndroid Build Coastguard Worker	adr	r3,K512
533*8fb009dcSAndroid Build Coastguard Worker	VFP_ABI_PUSH
534*8fb009dcSAndroid Build Coastguard Worker	vldmia	r0,{d16,d17,d18,d19,d20,d21,d22,d23}		@ load context
535*8fb009dcSAndroid Build Coastguard Worker.Loop_neon:
536*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#14	@ 0
537*8fb009dcSAndroid Build Coastguard Worker#if 0<16
538*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d0},[r1]!	@ handles unaligned
539*8fb009dcSAndroid Build Coastguard Worker#endif
540*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#18
541*8fb009dcSAndroid Build Coastguard Worker#if 0>0
542*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d30			@ h+=Maj from the past
543*8fb009dcSAndroid Build Coastguard Worker#endif
544*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#41
545*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
546*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#50
547*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#46
548*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d20
549*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#23
550*8fb009dcSAndroid Build Coastguard Worker#if 0<16 && defined(__ARMEL__)
551*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d0,d0
552*8fb009dcSAndroid Build Coastguard Worker#endif
553*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
554*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d21,d22		@ Ch(e,f,g)
555*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#28
556*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
557*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d23
558*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#34
559*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#36
560*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
561*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#39
562*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d0
563*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#30
564*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d16,d17
565*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#25
566*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d24,d25
567*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
568*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d18,d17		@ Maj(a,b,c)
569*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d26			@ Sigma0(a)
570*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d27
571*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
572*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d23,d30
573*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#14	@ 1
574*8fb009dcSAndroid Build Coastguard Worker#if 1<16
575*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d1},[r1]!	@ handles unaligned
576*8fb009dcSAndroid Build Coastguard Worker#endif
577*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#18
578*8fb009dcSAndroid Build Coastguard Worker#if 1>0
579*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d30			@ h+=Maj from the past
580*8fb009dcSAndroid Build Coastguard Worker#endif
581*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#41
582*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
583*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#50
584*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#46
585*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d19
586*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#23
587*8fb009dcSAndroid Build Coastguard Worker#if 1<16 && defined(__ARMEL__)
588*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d1,d1
589*8fb009dcSAndroid Build Coastguard Worker#endif
590*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
591*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d20,d21		@ Ch(e,f,g)
592*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#28
593*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
594*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d22
595*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#34
596*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#36
597*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
598*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#39
599*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d1
600*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#30
601*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d23,d16
602*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#25
603*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d24,d25
604*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
605*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d17,d16		@ Maj(a,b,c)
606*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d26			@ Sigma0(a)
607*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d27
608*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
609*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d22,d30
610*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#14	@ 2
611*8fb009dcSAndroid Build Coastguard Worker#if 2<16
612*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d2},[r1]!	@ handles unaligned
613*8fb009dcSAndroid Build Coastguard Worker#endif
614*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#18
615*8fb009dcSAndroid Build Coastguard Worker#if 2>0
616*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d30			@ h+=Maj from the past
617*8fb009dcSAndroid Build Coastguard Worker#endif
618*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#41
619*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
620*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#50
621*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#46
622*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d18
623*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#23
624*8fb009dcSAndroid Build Coastguard Worker#if 2<16 && defined(__ARMEL__)
625*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d2,d2
626*8fb009dcSAndroid Build Coastguard Worker#endif
627*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
628*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d19,d20		@ Ch(e,f,g)
629*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#28
630*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
631*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d21
632*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#34
633*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#36
634*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
635*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#39
636*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d2
637*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#30
638*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d22,d23
639*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#25
640*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d24,d25
641*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
642*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d16,d23		@ Maj(a,b,c)
643*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d26			@ Sigma0(a)
644*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d27
645*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
646*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d21,d30
647*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#14	@ 3
648*8fb009dcSAndroid Build Coastguard Worker#if 3<16
649*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d3},[r1]!	@ handles unaligned
650*8fb009dcSAndroid Build Coastguard Worker#endif
651*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#18
652*8fb009dcSAndroid Build Coastguard Worker#if 3>0
653*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d30			@ h+=Maj from the past
654*8fb009dcSAndroid Build Coastguard Worker#endif
655*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#41
656*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
657*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#50
658*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#46
659*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d17
660*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#23
661*8fb009dcSAndroid Build Coastguard Worker#if 3<16 && defined(__ARMEL__)
662*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d3,d3
663*8fb009dcSAndroid Build Coastguard Worker#endif
664*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
665*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d18,d19		@ Ch(e,f,g)
666*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#28
667*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
668*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d20
669*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#34
670*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#36
671*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
672*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#39
673*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d3
674*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#30
675*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d21,d22
676*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#25
677*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d24,d25
678*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
679*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d23,d22		@ Maj(a,b,c)
680*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d26			@ Sigma0(a)
681*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d27
682*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
683*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d20,d30
684*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#14	@ 4
685*8fb009dcSAndroid Build Coastguard Worker#if 4<16
686*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d4},[r1]!	@ handles unaligned
687*8fb009dcSAndroid Build Coastguard Worker#endif
688*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#18
689*8fb009dcSAndroid Build Coastguard Worker#if 4>0
690*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d30			@ h+=Maj from the past
691*8fb009dcSAndroid Build Coastguard Worker#endif
692*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#41
693*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
694*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#50
695*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#46
696*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d16
697*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#23
698*8fb009dcSAndroid Build Coastguard Worker#if 4<16 && defined(__ARMEL__)
699*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d4,d4
700*8fb009dcSAndroid Build Coastguard Worker#endif
701*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
702*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d17,d18		@ Ch(e,f,g)
703*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#28
704*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
705*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d19
706*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#34
707*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#36
708*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
709*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#39
710*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d4
711*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#30
712*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d20,d21
713*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#25
714*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d24,d25
715*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
716*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d22,d21		@ Maj(a,b,c)
717*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d26			@ Sigma0(a)
718*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d27
719*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
720*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d19,d30
721*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#14	@ 5
722*8fb009dcSAndroid Build Coastguard Worker#if 5<16
723*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d5},[r1]!	@ handles unaligned
724*8fb009dcSAndroid Build Coastguard Worker#endif
725*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#18
726*8fb009dcSAndroid Build Coastguard Worker#if 5>0
727*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d30			@ h+=Maj from the past
728*8fb009dcSAndroid Build Coastguard Worker#endif
729*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#41
730*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
731*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#50
732*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#46
733*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d23
734*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#23
735*8fb009dcSAndroid Build Coastguard Worker#if 5<16 && defined(__ARMEL__)
736*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d5,d5
737*8fb009dcSAndroid Build Coastguard Worker#endif
738*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
739*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d16,d17		@ Ch(e,f,g)
740*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#28
741*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
742*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d18
743*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#34
744*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#36
745*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
746*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#39
747*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d5
748*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#30
749*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d19,d20
750*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#25
751*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d24,d25
752*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
753*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d21,d20		@ Maj(a,b,c)
754*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d26			@ Sigma0(a)
755*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d27
756*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
757*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d18,d30
758*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#14	@ 6
759*8fb009dcSAndroid Build Coastguard Worker#if 6<16
760*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d6},[r1]!	@ handles unaligned
761*8fb009dcSAndroid Build Coastguard Worker#endif
762*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#18
763*8fb009dcSAndroid Build Coastguard Worker#if 6>0
764*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d30			@ h+=Maj from the past
765*8fb009dcSAndroid Build Coastguard Worker#endif
766*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#41
767*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
768*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#50
769*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#46
770*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d22
771*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#23
772*8fb009dcSAndroid Build Coastguard Worker#if 6<16 && defined(__ARMEL__)
773*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d6,d6
774*8fb009dcSAndroid Build Coastguard Worker#endif
775*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
776*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d23,d16		@ Ch(e,f,g)
777*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#28
778*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
779*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d17
780*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#34
781*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#36
782*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
783*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#39
784*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d6
785*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#30
786*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d18,d19
787*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#25
788*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d24,d25
789*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
790*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d20,d19		@ Maj(a,b,c)
791*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d26			@ Sigma0(a)
792*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d27
793*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
794*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d17,d30
795*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#14	@ 7
796*8fb009dcSAndroid Build Coastguard Worker#if 7<16
797*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d7},[r1]!	@ handles unaligned
798*8fb009dcSAndroid Build Coastguard Worker#endif
799*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#18
800*8fb009dcSAndroid Build Coastguard Worker#if 7>0
801*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d30			@ h+=Maj from the past
802*8fb009dcSAndroid Build Coastguard Worker#endif
803*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#41
804*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
805*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#50
806*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#46
807*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d21
808*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#23
809*8fb009dcSAndroid Build Coastguard Worker#if 7<16 && defined(__ARMEL__)
810*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d7,d7
811*8fb009dcSAndroid Build Coastguard Worker#endif
812*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
813*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d22,d23		@ Ch(e,f,g)
814*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#28
815*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
816*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d16
817*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#34
818*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#36
819*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
820*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#39
821*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d7
822*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#30
823*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d17,d18
824*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#25
825*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d24,d25
826*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
827*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d19,d18		@ Maj(a,b,c)
828*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d26			@ Sigma0(a)
829*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d27
830*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
831*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d16,d30
832*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#14	@ 8
833*8fb009dcSAndroid Build Coastguard Worker#if 8<16
834*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d8},[r1]!	@ handles unaligned
835*8fb009dcSAndroid Build Coastguard Worker#endif
836*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#18
837*8fb009dcSAndroid Build Coastguard Worker#if 8>0
838*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d30			@ h+=Maj from the past
839*8fb009dcSAndroid Build Coastguard Worker#endif
840*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#41
841*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
842*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#50
843*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#46
844*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d20
845*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#23
846*8fb009dcSAndroid Build Coastguard Worker#if 8<16 && defined(__ARMEL__)
847*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d8,d8
848*8fb009dcSAndroid Build Coastguard Worker#endif
849*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
850*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d21,d22		@ Ch(e,f,g)
851*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#28
852*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
853*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d23
854*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#34
855*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#36
856*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
857*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#39
858*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d8
859*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#30
860*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d16,d17
861*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#25
862*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d24,d25
863*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
864*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d18,d17		@ Maj(a,b,c)
865*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d26			@ Sigma0(a)
866*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d27
867*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
868*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d23,d30
869*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#14	@ 9
870*8fb009dcSAndroid Build Coastguard Worker#if 9<16
871*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d9},[r1]!	@ handles unaligned
872*8fb009dcSAndroid Build Coastguard Worker#endif
873*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#18
874*8fb009dcSAndroid Build Coastguard Worker#if 9>0
875*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d30			@ h+=Maj from the past
876*8fb009dcSAndroid Build Coastguard Worker#endif
877*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#41
878*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
879*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#50
880*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#46
881*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d19
882*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#23
883*8fb009dcSAndroid Build Coastguard Worker#if 9<16 && defined(__ARMEL__)
884*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d9,d9
885*8fb009dcSAndroid Build Coastguard Worker#endif
886*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
887*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d20,d21		@ Ch(e,f,g)
888*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#28
889*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
890*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d22
891*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#34
892*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#36
893*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
894*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#39
895*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d9
896*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#30
897*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d23,d16
898*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#25
899*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d24,d25
900*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
901*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d17,d16		@ Maj(a,b,c)
902*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d26			@ Sigma0(a)
903*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d27
904*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
905*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d22,d30
906*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#14	@ 10
907*8fb009dcSAndroid Build Coastguard Worker#if 10<16
908*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d10},[r1]!	@ handles unaligned
909*8fb009dcSAndroid Build Coastguard Worker#endif
910*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#18
911*8fb009dcSAndroid Build Coastguard Worker#if 10>0
912*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d30			@ h+=Maj from the past
913*8fb009dcSAndroid Build Coastguard Worker#endif
914*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#41
915*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
916*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#50
917*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#46
918*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d18
919*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#23
920*8fb009dcSAndroid Build Coastguard Worker#if 10<16 && defined(__ARMEL__)
921*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d10,d10
922*8fb009dcSAndroid Build Coastguard Worker#endif
923*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
924*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d19,d20		@ Ch(e,f,g)
925*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#28
926*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
927*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d21
928*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#34
929*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#36
930*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
931*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#39
932*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d10
933*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#30
934*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d22,d23
935*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#25
936*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d24,d25
937*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
938*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d16,d23		@ Maj(a,b,c)
939*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d26			@ Sigma0(a)
940*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d27
941*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
942*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d21,d30
943*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#14	@ 11
944*8fb009dcSAndroid Build Coastguard Worker#if 11<16
945*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d11},[r1]!	@ handles unaligned
946*8fb009dcSAndroid Build Coastguard Worker#endif
947*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#18
948*8fb009dcSAndroid Build Coastguard Worker#if 11>0
949*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d30			@ h+=Maj from the past
950*8fb009dcSAndroid Build Coastguard Worker#endif
951*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#41
952*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
953*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#50
954*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#46
955*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d17
956*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#23
957*8fb009dcSAndroid Build Coastguard Worker#if 11<16 && defined(__ARMEL__)
958*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d11,d11
959*8fb009dcSAndroid Build Coastguard Worker#endif
960*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
961*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d18,d19		@ Ch(e,f,g)
962*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#28
963*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
964*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d20
965*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#34
966*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#36
967*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
968*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#39
969*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d11
970*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#30
971*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d21,d22
972*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#25
973*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d24,d25
974*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
975*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d23,d22		@ Maj(a,b,c)
976*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d26			@ Sigma0(a)
977*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d27
978*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
979*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d20,d30
980*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#14	@ 12
981*8fb009dcSAndroid Build Coastguard Worker#if 12<16
982*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d12},[r1]!	@ handles unaligned
983*8fb009dcSAndroid Build Coastguard Worker#endif
984*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#18
985*8fb009dcSAndroid Build Coastguard Worker#if 12>0
986*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d30			@ h+=Maj from the past
987*8fb009dcSAndroid Build Coastguard Worker#endif
988*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#41
989*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
990*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#50
991*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#46
992*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d16
993*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#23
994*8fb009dcSAndroid Build Coastguard Worker#if 12<16 && defined(__ARMEL__)
995*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d12,d12
996*8fb009dcSAndroid Build Coastguard Worker#endif
997*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
998*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d17,d18		@ Ch(e,f,g)
999*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#28
1000*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1001*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d19
1002*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#34
1003*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#36
1004*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1005*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#39
1006*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d12
1007*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#30
1008*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d20,d21
1009*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#25
1010*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d24,d25
1011*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1012*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d22,d21		@ Maj(a,b,c)
1013*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d26			@ Sigma0(a)
1014*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d27
1015*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1016*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d19,d30
1017*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#14	@ 13
1018*8fb009dcSAndroid Build Coastguard Worker#if 13<16
1019*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d13},[r1]!	@ handles unaligned
1020*8fb009dcSAndroid Build Coastguard Worker#endif
1021*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#18
1022*8fb009dcSAndroid Build Coastguard Worker#if 13>0
1023*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d30			@ h+=Maj from the past
1024*8fb009dcSAndroid Build Coastguard Worker#endif
1025*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#41
1026*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1027*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#50
1028*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#46
1029*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d23
1030*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#23
1031*8fb009dcSAndroid Build Coastguard Worker#if 13<16 && defined(__ARMEL__)
1032*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d13,d13
1033*8fb009dcSAndroid Build Coastguard Worker#endif
1034*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1035*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d16,d17		@ Ch(e,f,g)
1036*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#28
1037*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1038*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d18
1039*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#34
1040*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#36
1041*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1042*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#39
1043*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d13
1044*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#30
1045*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d19,d20
1046*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#25
1047*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d24,d25
1048*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1049*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d21,d20		@ Maj(a,b,c)
1050*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d26			@ Sigma0(a)
1051*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d27
1052*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1053*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d18,d30
1054*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#14	@ 14
1055*8fb009dcSAndroid Build Coastguard Worker#if 14<16
1056*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d14},[r1]!	@ handles unaligned
1057*8fb009dcSAndroid Build Coastguard Worker#endif
1058*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#18
1059*8fb009dcSAndroid Build Coastguard Worker#if 14>0
1060*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d30			@ h+=Maj from the past
1061*8fb009dcSAndroid Build Coastguard Worker#endif
1062*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#41
1063*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1064*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#50
1065*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#46
1066*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d22
1067*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#23
1068*8fb009dcSAndroid Build Coastguard Worker#if 14<16 && defined(__ARMEL__)
1069*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d14,d14
1070*8fb009dcSAndroid Build Coastguard Worker#endif
1071*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1072*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d23,d16		@ Ch(e,f,g)
1073*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#28
1074*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1075*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d17
1076*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#34
1077*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#36
1078*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1079*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#39
1080*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d14
1081*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#30
1082*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d18,d19
1083*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#25
1084*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d24,d25
1085*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1086*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d20,d19		@ Maj(a,b,c)
1087*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d26			@ Sigma0(a)
1088*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d27
1089*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1090*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d17,d30
1091*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#14	@ 15
1092*8fb009dcSAndroid Build Coastguard Worker#if 15<16
1093*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d15},[r1]!	@ handles unaligned
1094*8fb009dcSAndroid Build Coastguard Worker#endif
1095*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#18
1096*8fb009dcSAndroid Build Coastguard Worker#if 15>0
1097*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d30			@ h+=Maj from the past
1098*8fb009dcSAndroid Build Coastguard Worker#endif
1099*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#41
1100*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1101*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#50
1102*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#46
1103*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d21
1104*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#23
1105*8fb009dcSAndroid Build Coastguard Worker#if 15<16 && defined(__ARMEL__)
1106*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	d15,d15
1107*8fb009dcSAndroid Build Coastguard Worker#endif
1108*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1109*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d22,d23		@ Ch(e,f,g)
1110*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#28
1111*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1112*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d16
1113*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#34
1114*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#36
1115*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1116*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#39
1117*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d15
1118*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#30
1119*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d17,d18
1120*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#25
1121*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d24,d25
1122*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1123*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d19,d18		@ Maj(a,b,c)
1124*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d26			@ Sigma0(a)
1125*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d27
1126*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1127*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d16,d30
1128*8fb009dcSAndroid Build Coastguard Worker	mov	r12,#4
1129*8fb009dcSAndroid Build Coastguard Worker.L16_79_neon:
1130*8fb009dcSAndroid Build Coastguard Worker	subs	r12,#1
1131*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q7,#19
1132*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q7,#61
1133*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d30			@ h+=Maj from the past
1134*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q7,#6
1135*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q7,#45
1136*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q0,q1,#8	@ X[i+1]
1137*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q7,#3
1138*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1139*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1140*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1141*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1142*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q0,q15
1143*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1144*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1145*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1146*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q4,q5,#8	@ X[i+9]
1147*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1148*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#14		@ from NEON_00_15
1149*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q0,q14
1150*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#18		@ from NEON_00_15
1151*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1152*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#41		@ from NEON_00_15
1153*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q0,q15
1154*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1155*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#50
1156*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#46
1157*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d20
1158*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#23
1159*8fb009dcSAndroid Build Coastguard Worker#if 16<16 && defined(__ARMEL__)
1160*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1161*8fb009dcSAndroid Build Coastguard Worker#endif
1162*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1163*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d21,d22		@ Ch(e,f,g)
1164*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#28
1165*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1166*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d23
1167*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#34
1168*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#36
1169*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1170*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#39
1171*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d0
1172*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#30
1173*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d16,d17
1174*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#25
1175*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d24,d25
1176*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1177*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d18,d17		@ Maj(a,b,c)
1178*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d26			@ Sigma0(a)
1179*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d27
1180*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1181*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d23,d30
1182*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#14	@ 17
1183*8fb009dcSAndroid Build Coastguard Worker#if 17<16
1184*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d1},[r1]!	@ handles unaligned
1185*8fb009dcSAndroid Build Coastguard Worker#endif
1186*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#18
1187*8fb009dcSAndroid Build Coastguard Worker#if 17>0
1188*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d30			@ h+=Maj from the past
1189*8fb009dcSAndroid Build Coastguard Worker#endif
1190*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#41
1191*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1192*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#50
1193*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#46
1194*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d19
1195*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#23
1196*8fb009dcSAndroid Build Coastguard Worker#if 17<16 && defined(__ARMEL__)
1197*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1198*8fb009dcSAndroid Build Coastguard Worker#endif
1199*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1200*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d20,d21		@ Ch(e,f,g)
1201*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#28
1202*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1203*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d22
1204*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#34
1205*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#36
1206*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1207*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#39
1208*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d1
1209*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#30
1210*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d23,d16
1211*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#25
1212*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d24,d25
1213*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1214*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d17,d16		@ Maj(a,b,c)
1215*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d26			@ Sigma0(a)
1216*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d27
1217*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1218*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d22,d30
1219*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q0,#19
1220*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q0,#61
1221*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d30			@ h+=Maj from the past
1222*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q0,#6
1223*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q0,#45
1224*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q1,q2,#8	@ X[i+1]
1225*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q0,#3
1226*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1227*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1228*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1229*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1230*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q1,q15
1231*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1232*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1233*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1234*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q5,q6,#8	@ X[i+9]
1235*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1236*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#14		@ from NEON_00_15
1237*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q1,q14
1238*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#18		@ from NEON_00_15
1239*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1240*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#41		@ from NEON_00_15
1241*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q1,q15
1242*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1243*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#50
1244*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#46
1245*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d18
1246*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#23
1247*8fb009dcSAndroid Build Coastguard Worker#if 18<16 && defined(__ARMEL__)
1248*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1249*8fb009dcSAndroid Build Coastguard Worker#endif
1250*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1251*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d19,d20		@ Ch(e,f,g)
1252*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#28
1253*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1254*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d21
1255*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#34
1256*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#36
1257*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1258*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#39
1259*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d2
1260*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#30
1261*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d22,d23
1262*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#25
1263*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d24,d25
1264*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1265*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d16,d23		@ Maj(a,b,c)
1266*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d26			@ Sigma0(a)
1267*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d27
1268*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1269*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d21,d30
1270*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#14	@ 19
1271*8fb009dcSAndroid Build Coastguard Worker#if 19<16
1272*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d3},[r1]!	@ handles unaligned
1273*8fb009dcSAndroid Build Coastguard Worker#endif
1274*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#18
1275*8fb009dcSAndroid Build Coastguard Worker#if 19>0
1276*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d30			@ h+=Maj from the past
1277*8fb009dcSAndroid Build Coastguard Worker#endif
1278*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#41
1279*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1280*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#50
1281*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#46
1282*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d17
1283*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#23
1284*8fb009dcSAndroid Build Coastguard Worker#if 19<16 && defined(__ARMEL__)
1285*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1286*8fb009dcSAndroid Build Coastguard Worker#endif
1287*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1288*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d18,d19		@ Ch(e,f,g)
1289*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#28
1290*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1291*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d20
1292*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#34
1293*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#36
1294*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1295*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#39
1296*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d3
1297*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#30
1298*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d21,d22
1299*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#25
1300*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d24,d25
1301*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1302*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d23,d22		@ Maj(a,b,c)
1303*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d26			@ Sigma0(a)
1304*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d27
1305*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1306*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d20,d30
1307*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q1,#19
1308*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q1,#61
1309*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d30			@ h+=Maj from the past
1310*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q1,#6
1311*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q1,#45
1312*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q2,q3,#8	@ X[i+1]
1313*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q1,#3
1314*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1315*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1316*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1317*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1318*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q2,q15
1319*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1320*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1321*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1322*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q6,q7,#8	@ X[i+9]
1323*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1324*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#14		@ from NEON_00_15
1325*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q2,q14
1326*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#18		@ from NEON_00_15
1327*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1328*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#41		@ from NEON_00_15
1329*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q2,q15
1330*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1331*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#50
1332*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#46
1333*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d16
1334*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#23
1335*8fb009dcSAndroid Build Coastguard Worker#if 20<16 && defined(__ARMEL__)
1336*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1337*8fb009dcSAndroid Build Coastguard Worker#endif
1338*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1339*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d17,d18		@ Ch(e,f,g)
1340*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#28
1341*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1342*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d19
1343*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#34
1344*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#36
1345*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1346*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#39
1347*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d4
1348*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#30
1349*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d20,d21
1350*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#25
1351*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d24,d25
1352*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1353*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d22,d21		@ Maj(a,b,c)
1354*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d26			@ Sigma0(a)
1355*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d27
1356*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1357*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d19,d30
1358*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#14	@ 21
1359*8fb009dcSAndroid Build Coastguard Worker#if 21<16
1360*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d5},[r1]!	@ handles unaligned
1361*8fb009dcSAndroid Build Coastguard Worker#endif
1362*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#18
1363*8fb009dcSAndroid Build Coastguard Worker#if 21>0
1364*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d30			@ h+=Maj from the past
1365*8fb009dcSAndroid Build Coastguard Worker#endif
1366*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#41
1367*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1368*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#50
1369*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#46
1370*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d23
1371*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#23
1372*8fb009dcSAndroid Build Coastguard Worker#if 21<16 && defined(__ARMEL__)
1373*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1374*8fb009dcSAndroid Build Coastguard Worker#endif
1375*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1376*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d16,d17		@ Ch(e,f,g)
1377*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#28
1378*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1379*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d18
1380*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#34
1381*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#36
1382*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1383*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#39
1384*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d5
1385*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#30
1386*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d19,d20
1387*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#25
1388*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d24,d25
1389*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1390*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d21,d20		@ Maj(a,b,c)
1391*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d26			@ Sigma0(a)
1392*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d27
1393*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1394*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d18,d30
1395*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q2,#19
1396*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q2,#61
1397*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d30			@ h+=Maj from the past
1398*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q2,#6
1399*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q2,#45
1400*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q3,q4,#8	@ X[i+1]
1401*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q2,#3
1402*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1403*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1404*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1405*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1406*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q3,q15
1407*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1408*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1409*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1410*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q7,q0,#8	@ X[i+9]
1411*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1412*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#14		@ from NEON_00_15
1413*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q3,q14
1414*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#18		@ from NEON_00_15
1415*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1416*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#41		@ from NEON_00_15
1417*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q3,q15
1418*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1419*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#50
1420*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#46
1421*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d22
1422*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#23
1423*8fb009dcSAndroid Build Coastguard Worker#if 22<16 && defined(__ARMEL__)
1424*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1425*8fb009dcSAndroid Build Coastguard Worker#endif
1426*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1427*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d23,d16		@ Ch(e,f,g)
1428*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#28
1429*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1430*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d17
1431*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#34
1432*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#36
1433*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1434*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#39
1435*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d6
1436*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#30
1437*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d18,d19
1438*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#25
1439*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d24,d25
1440*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1441*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d20,d19		@ Maj(a,b,c)
1442*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d26			@ Sigma0(a)
1443*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d27
1444*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1445*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d17,d30
1446*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#14	@ 23
1447*8fb009dcSAndroid Build Coastguard Worker#if 23<16
1448*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d7},[r1]!	@ handles unaligned
1449*8fb009dcSAndroid Build Coastguard Worker#endif
1450*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#18
1451*8fb009dcSAndroid Build Coastguard Worker#if 23>0
1452*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d30			@ h+=Maj from the past
1453*8fb009dcSAndroid Build Coastguard Worker#endif
1454*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#41
1455*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1456*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#50
1457*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#46
1458*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d21
1459*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#23
1460*8fb009dcSAndroid Build Coastguard Worker#if 23<16 && defined(__ARMEL__)
1461*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1462*8fb009dcSAndroid Build Coastguard Worker#endif
1463*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1464*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d22,d23		@ Ch(e,f,g)
1465*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#28
1466*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1467*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d16
1468*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#34
1469*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#36
1470*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1471*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#39
1472*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d7
1473*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#30
1474*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d17,d18
1475*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#25
1476*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d24,d25
1477*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1478*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d19,d18		@ Maj(a,b,c)
1479*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d26			@ Sigma0(a)
1480*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d27
1481*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1482*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d16,d30
1483*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q3,#19
1484*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q3,#61
1485*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d30			@ h+=Maj from the past
1486*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q3,#6
1487*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q3,#45
1488*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q4,q5,#8	@ X[i+1]
1489*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q3,#3
1490*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1491*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1492*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1493*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1494*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q4,q15
1495*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1496*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1497*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1498*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q0,q1,#8	@ X[i+9]
1499*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1500*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#14		@ from NEON_00_15
1501*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q4,q14
1502*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#18		@ from NEON_00_15
1503*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1504*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#41		@ from NEON_00_15
1505*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q4,q15
1506*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1507*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#50
1508*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#46
1509*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d20
1510*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#23
1511*8fb009dcSAndroid Build Coastguard Worker#if 24<16 && defined(__ARMEL__)
1512*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1513*8fb009dcSAndroid Build Coastguard Worker#endif
1514*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1515*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d21,d22		@ Ch(e,f,g)
1516*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#28
1517*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1518*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d23
1519*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#34
1520*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#36
1521*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1522*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#39
1523*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d8
1524*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#30
1525*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d16,d17
1526*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#25
1527*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d24,d25
1528*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1529*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d18,d17		@ Maj(a,b,c)
1530*8fb009dcSAndroid Build Coastguard Worker	veor	d23,d26			@ Sigma0(a)
1531*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d27
1532*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1533*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d23,d30
1534*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#14	@ 25
1535*8fb009dcSAndroid Build Coastguard Worker#if 25<16
1536*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d9},[r1]!	@ handles unaligned
1537*8fb009dcSAndroid Build Coastguard Worker#endif
1538*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#18
1539*8fb009dcSAndroid Build Coastguard Worker#if 25>0
1540*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d30			@ h+=Maj from the past
1541*8fb009dcSAndroid Build Coastguard Worker#endif
1542*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#41
1543*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1544*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#50
1545*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#46
1546*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d19
1547*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#23
1548*8fb009dcSAndroid Build Coastguard Worker#if 25<16 && defined(__ARMEL__)
1549*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1550*8fb009dcSAndroid Build Coastguard Worker#endif
1551*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1552*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d20,d21		@ Ch(e,f,g)
1553*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#28
1554*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1555*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d22
1556*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#34
1557*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#36
1558*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1559*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#39
1560*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d9
1561*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#30
1562*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d23,d16
1563*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#25
1564*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d24,d25
1565*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1566*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d17,d16		@ Maj(a,b,c)
1567*8fb009dcSAndroid Build Coastguard Worker	veor	d22,d26			@ Sigma0(a)
1568*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d27
1569*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1570*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d22,d30
1571*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q4,#19
1572*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q4,#61
1573*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d30			@ h+=Maj from the past
1574*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q4,#6
1575*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q4,#45
1576*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q5,q6,#8	@ X[i+1]
1577*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q4,#3
1578*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1579*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1580*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1581*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1582*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q5,q15
1583*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1584*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1585*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1586*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q1,q2,#8	@ X[i+9]
1587*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1588*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#14		@ from NEON_00_15
1589*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q5,q14
1590*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#18		@ from NEON_00_15
1591*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1592*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#41		@ from NEON_00_15
1593*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q5,q15
1594*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1595*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#50
1596*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#46
1597*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d18
1598*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#23
1599*8fb009dcSAndroid Build Coastguard Worker#if 26<16 && defined(__ARMEL__)
1600*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1601*8fb009dcSAndroid Build Coastguard Worker#endif
1602*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1603*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d19,d20		@ Ch(e,f,g)
1604*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#28
1605*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1606*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d21
1607*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#34
1608*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#36
1609*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1610*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#39
1611*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d10
1612*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#30
1613*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d22,d23
1614*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#25
1615*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d24,d25
1616*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1617*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d16,d23		@ Maj(a,b,c)
1618*8fb009dcSAndroid Build Coastguard Worker	veor	d21,d26			@ Sigma0(a)
1619*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d27
1620*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1621*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d21,d30
1622*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#14	@ 27
1623*8fb009dcSAndroid Build Coastguard Worker#if 27<16
1624*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d11},[r1]!	@ handles unaligned
1625*8fb009dcSAndroid Build Coastguard Worker#endif
1626*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#18
1627*8fb009dcSAndroid Build Coastguard Worker#if 27>0
1628*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d30			@ h+=Maj from the past
1629*8fb009dcSAndroid Build Coastguard Worker#endif
1630*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#41
1631*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1632*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#50
1633*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#46
1634*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d17
1635*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#23
1636*8fb009dcSAndroid Build Coastguard Worker#if 27<16 && defined(__ARMEL__)
1637*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1638*8fb009dcSAndroid Build Coastguard Worker#endif
1639*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1640*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d18,d19		@ Ch(e,f,g)
1641*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#28
1642*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1643*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d20
1644*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#34
1645*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#36
1646*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1647*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#39
1648*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d11
1649*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#30
1650*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d21,d22
1651*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#25
1652*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d24,d25
1653*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1654*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d23,d22		@ Maj(a,b,c)
1655*8fb009dcSAndroid Build Coastguard Worker	veor	d20,d26			@ Sigma0(a)
1656*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d27
1657*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1658*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d20,d30
1659*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q5,#19
1660*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q5,#61
1661*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d30			@ h+=Maj from the past
1662*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q5,#6
1663*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q5,#45
1664*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q6,q7,#8	@ X[i+1]
1665*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q5,#3
1666*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1667*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1668*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1669*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1670*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q6,q15
1671*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1672*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1673*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1674*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q2,q3,#8	@ X[i+9]
1675*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1676*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d16,#14		@ from NEON_00_15
1677*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q6,q14
1678*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d16,#18		@ from NEON_00_15
1679*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1680*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d16,#41		@ from NEON_00_15
1681*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q6,q15
1682*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1683*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d16,#50
1684*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d16,#46
1685*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d16
1686*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d16,#23
1687*8fb009dcSAndroid Build Coastguard Worker#if 28<16 && defined(__ARMEL__)
1688*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1689*8fb009dcSAndroid Build Coastguard Worker#endif
1690*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1691*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d17,d18		@ Ch(e,f,g)
1692*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d20,#28
1693*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1694*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d19
1695*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d20,#34
1696*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d20,#36
1697*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1698*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d20,#39
1699*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d12
1700*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d20,#30
1701*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d20,d21
1702*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d20,#25
1703*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d24,d25
1704*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1705*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d22,d21		@ Maj(a,b,c)
1706*8fb009dcSAndroid Build Coastguard Worker	veor	d19,d26			@ Sigma0(a)
1707*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d23,d27
1708*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1709*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d19,d30
1710*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d23,#14	@ 29
1711*8fb009dcSAndroid Build Coastguard Worker#if 29<16
1712*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d13},[r1]!	@ handles unaligned
1713*8fb009dcSAndroid Build Coastguard Worker#endif
1714*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d23,#18
1715*8fb009dcSAndroid Build Coastguard Worker#if 29>0
1716*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d19,d30			@ h+=Maj from the past
1717*8fb009dcSAndroid Build Coastguard Worker#endif
1718*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d23,#41
1719*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1720*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d23,#50
1721*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d23,#46
1722*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d23
1723*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d23,#23
1724*8fb009dcSAndroid Build Coastguard Worker#if 29<16 && defined(__ARMEL__)
1725*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1726*8fb009dcSAndroid Build Coastguard Worker#endif
1727*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1728*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d16,d17		@ Ch(e,f,g)
1729*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d19,#28
1730*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1731*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d18
1732*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d19,#34
1733*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d19,#36
1734*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1735*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d19,#39
1736*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d13
1737*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d19,#30
1738*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d19,d20
1739*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d19,#25
1740*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d24,d25
1741*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1742*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d21,d20		@ Maj(a,b,c)
1743*8fb009dcSAndroid Build Coastguard Worker	veor	d18,d26			@ Sigma0(a)
1744*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d22,d27
1745*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1746*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d18,d30
1747*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q6,#19
1748*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q6,#61
1749*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d18,d30			@ h+=Maj from the past
1750*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q6,#6
1751*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q6,#45
1752*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q7,q0,#8	@ X[i+1]
1753*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q6,#3
1754*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1755*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q12,q14,#1
1756*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma1(X[i+14])
1757*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q13,q14,#8
1758*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q7,q15
1759*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	q15,q14,#7
1760*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q12,q14,#63
1761*8fb009dcSAndroid Build Coastguard Worker	vsli.64	q13,q14,#56
1762*8fb009dcSAndroid Build Coastguard Worker	vext.8	q14,q3,q4,#8	@ X[i+9]
1763*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q12
1764*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d22,#14		@ from NEON_00_15
1765*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q7,q14
1766*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d22,#18		@ from NEON_00_15
1767*8fb009dcSAndroid Build Coastguard Worker	veor	q15,q13				@ sigma0(X[i+1])
1768*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d22,#41		@ from NEON_00_15
1769*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q7,q15
1770*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1771*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d22,#50
1772*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d22,#46
1773*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d22
1774*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d22,#23
1775*8fb009dcSAndroid Build Coastguard Worker#if 30<16 && defined(__ARMEL__)
1776*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1777*8fb009dcSAndroid Build Coastguard Worker#endif
1778*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1779*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d23,d16		@ Ch(e,f,g)
1780*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d18,#28
1781*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1782*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d17
1783*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d18,#34
1784*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d18,#36
1785*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1786*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d18,#39
1787*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d14
1788*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d18,#30
1789*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d18,d19
1790*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d18,#25
1791*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d24,d25
1792*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1793*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d20,d19		@ Maj(a,b,c)
1794*8fb009dcSAndroid Build Coastguard Worker	veor	d17,d26			@ Sigma0(a)
1795*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d21,d27
1796*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1797*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d17,d30
1798*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d21,#14	@ 31
1799*8fb009dcSAndroid Build Coastguard Worker#if 31<16
1800*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d15},[r1]!	@ handles unaligned
1801*8fb009dcSAndroid Build Coastguard Worker#endif
1802*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d21,#18
1803*8fb009dcSAndroid Build Coastguard Worker#if 31>0
1804*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d17,d30			@ h+=Maj from the past
1805*8fb009dcSAndroid Build Coastguard Worker#endif
1806*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d21,#41
1807*8fb009dcSAndroid Build Coastguard Worker	vld1.64	{d28},[r3,:64]!	@ K[i++]
1808*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d21,#50
1809*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d21,#46
1810*8fb009dcSAndroid Build Coastguard Worker	vmov	d29,d21
1811*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d21,#23
1812*8fb009dcSAndroid Build Coastguard Worker#if 31<16 && defined(__ARMEL__)
1813*8fb009dcSAndroid Build Coastguard Worker	vrev64.8	,
1814*8fb009dcSAndroid Build Coastguard Worker#endif
1815*8fb009dcSAndroid Build Coastguard Worker	veor	d25,d24
1816*8fb009dcSAndroid Build Coastguard Worker	vbsl	d29,d22,d23		@ Ch(e,f,g)
1817*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d24,d17,#28
1818*8fb009dcSAndroid Build Coastguard Worker	veor	d26,d25			@ Sigma1(e)
1819*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d29,d16
1820*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d25,d17,#34
1821*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d24,d17,#36
1822*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d26
1823*8fb009dcSAndroid Build Coastguard Worker	vshr.u64	d26,d17,#39
1824*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d28,d15
1825*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d25,d17,#30
1826*8fb009dcSAndroid Build Coastguard Worker	veor	d30,d17,d18
1827*8fb009dcSAndroid Build Coastguard Worker	vsli.64	d26,d17,#25
1828*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d24,d25
1829*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d27,d28
1830*8fb009dcSAndroid Build Coastguard Worker	vbsl	d30,d19,d18		@ Maj(a,b,c)
1831*8fb009dcSAndroid Build Coastguard Worker	veor	d16,d26			@ Sigma0(a)
1832*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d20,d27
1833*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d30,d27
1834*8fb009dcSAndroid Build Coastguard Worker	@ vadd.i64	d16,d30
1835*8fb009dcSAndroid Build Coastguard Worker	bne	.L16_79_neon
1836*8fb009dcSAndroid Build Coastguard Worker
1837*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	d16,d30		@ h+=Maj from the past
1838*8fb009dcSAndroid Build Coastguard Worker	vldmia	r0,{d24,d25,d26,d27,d28,d29,d30,d31}	@ load context to temp
1839*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q8,q12		@ vectorized accumulate
1840*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q9,q13
1841*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q10,q14
1842*8fb009dcSAndroid Build Coastguard Worker	vadd.i64	q11,q15
1843*8fb009dcSAndroid Build Coastguard Worker	vstmia	r0,{d16,d17,d18,d19,d20,d21,d22,d23}	@ save context
1844*8fb009dcSAndroid Build Coastguard Worker	teq	r1,r2
1845*8fb009dcSAndroid Build Coastguard Worker	sub	r3,#640	@ rewind K512
1846*8fb009dcSAndroid Build Coastguard Worker	bne	.Loop_neon
1847*8fb009dcSAndroid Build Coastguard Worker
1848*8fb009dcSAndroid Build Coastguard Worker	VFP_ABI_POP
1849*8fb009dcSAndroid Build Coastguard Worker	bx	lr				@ .word	0xe12fff1e
1850*8fb009dcSAndroid Build Coastguard Worker.size	sha512_block_data_order_neon,.-sha512_block_data_order_neon
1851*8fb009dcSAndroid Build Coastguard Worker#endif
1852*8fb009dcSAndroid Build Coastguard Worker.byte	83,72,65,53,49,50,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,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
1853*8fb009dcSAndroid Build Coastguard Worker.align	2
1854*8fb009dcSAndroid Build Coastguard Worker.align	2
1855*8fb009dcSAndroid Build Coastguard Worker#endif  // !OPENSSL_NO_ASM && defined(OPENSSL_ARM) && defined(__ELF__)
1856