1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "arm_arch.h"
2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# define LO 0
4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# define HI 4
5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# define WORD64(hi0,lo0,hi1,lo1)	.word	lo0,hi0, lo1,hi1
6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# define HI 0
8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# define LO 4
9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# define WORD64(hi0,lo0,hi1,lo1)	.word	hi0,lo0, hi1,lo1
10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.code	32
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type	K512,%object
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align	5
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectK512:
17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd)
18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc)
19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019)
20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118)
21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe)
22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2)
23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1)
24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694)
25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3)
26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65)
27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483)
28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5)
29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210)
30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4)
31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725)
32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70)
33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926)
34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df)
35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8)
36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b)
37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001)
38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30)
39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910)
40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8)
41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53)
42392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8)
43392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb)
44392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3)
45392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60)
46392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec)
47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9)
48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b)
49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207)
50392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178)
51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6)
52392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b)
53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493)
54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)
55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)
56392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromWORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size	K512,.-K512
58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.LOPENSSL_armcap:
59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.word	OPENSSL_armcap_P-sha512_block_data_order
60392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.skip	32-4
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global	sha512_block_data_order
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type	sha512_block_data_order,%function
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsha512_block_data_order:
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r3,pc,#8		@ sha512_block_data_order
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7
68392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,.LOPENSSL_armcap
69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	tst	r12,#1
71392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bne	.LNEON
72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	stmdb	sp!,{r4-r12,lr}
74392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sub	r14,r3,#672		@ K512
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	sp,sp,#9*8
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
77392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r7,[r0,#32+LO]
78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r8,[r0,#32+HI]
79392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9, [r0,#48+LO]
80392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r10, [r0,#48+HI]
81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11, [r0,#56+LO]
82392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12, [r0,#56+HI]
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Loop:
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r9, [sp,#48+0]
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r10, [sp,#48+4]
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r11, [sp,#56+0]
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r12, [sp,#56+4]
88392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r5,[r0,#0+LO]
89392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r6,[r0,#0+HI]
90392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r0,#8+LO]
91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r4,[r0,#8+HI]
92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9, [r0,#16+LO]
93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r10, [r0,#16+HI]
94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11, [r0,#24+LO]
95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12, [r0,#24+HI]
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r3,[sp,#8+0]
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r4,[sp,#8+4]
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r9, [sp,#16+0]
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r10, [sp,#16+4]
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r11, [sp,#24+0]
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r12, [sp,#24+4]
102392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r0,#40+LO]
103392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r4,[r0,#40+HI]
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r3,[sp,#40+0]
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	str	r4,[sp,#40+4]
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L00_15:
108392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r3,[r1,#7]
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9, [r1,#6]
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r10, [r1,#5]
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r11, [r1,#4]
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r4,[r1,#3]
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r12, [r1,#2]
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r9,lsl#8
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r9, [r1,#1]
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r10,lsl#16
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldrb	r10, [r1],#8
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r3,r3,r11,lsl#24
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r4,r4,r12,lsl#8
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r4,r4,r9,lsl#16
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r4,r4,r10,lsl#24
123392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
124392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r3,[r1,#4]
125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r4,[r1],#8
126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__
127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r3,r3
128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	rev	r4,r4
129392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
130392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ Sigma1(x)	(ROTR((x),14) ^ ROTR((x),18)  ^ ROTR((x),41))
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ LO		lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ HI		hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r9,r7,lsr#14
135392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r3,[sp,#64+0]
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r10,r8,lsr#14
137392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r4,[sp,#64+4]
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r8,lsl#18
139392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[sp,#56+0]	@ h.lo
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r7,lsl#18
141392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,[sp,#56+4]	@ h.hi
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r7,lsr#18
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r8,lsr#18
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r8,lsl#14
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r7,lsl#14
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r8,lsr#9
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r7,lsr#9
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r7,lsl#23
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r8,lsl#23	@ Sigma1(e)
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[sp,#40+0]	@ f.lo
15243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	adc	r4,r4,r10		@ T += Sigma1(e)
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r10,[sp,#40+4]	@ f.hi
15443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	adds	r3,r3,r11
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r11,[sp,#48+0]	@ g.lo
15643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	adc	r4,r4,r12		@ T += h
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp,#48+4]	@ g.hi
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r11
16043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r7,[sp,#32+0]
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r12
16243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r8,[sp,#32+4]
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,r9,r7
16443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r5,[sp,#0+0]
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r10,r10,r8
16643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r6,[sp,#0+4]
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r11
168392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[r14,#LO]	@ K[i].lo
16943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r10,r10,r12		@ Ch(e,f,g)
170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,[r14,#HI]	@ K[i].hi
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
17343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r7,[sp,#24+0]	@ d.lo
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r10		@ T += Ch(e,f,g)
17543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r8,[sp,#24+4]	@ d.hi
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r11
177392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	and	r9,r11,#0xff
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r12		@ T += K[i]
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r7,r7,r3
180392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[sp,#8+0]	@ b.lo
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r8,r8,r4		@ d += T
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r9,#148
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp,#16+0]	@ c.lo
185392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orreq	r14,r14,#1
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ Sigma0(x)	(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ LO		lo>>28^hi<<4  ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ HI		hi>>28^lo<<4  ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r9,r5,lsr#28
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r10,r6,lsr#28
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r6,lsl#4
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r5,lsl#4
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r6,lsr#2
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r5,lsr#2
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r5,lsl#30
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r6,lsl#30
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r6,lsr#7
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r5,lsr#7
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r5,lsl#25
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r6,lsl#25	@ Sigma0(a)
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
202392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	and	r9,r5,r11
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r10		@ T += Sigma0(a)
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r10,[sp,#8+4]	@ b.hi
206392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orr	r5,r5,r11
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r11,[sp,#16+4]	@ c.hi
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r5,r5,r12
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r12,r6,r10
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r6,r6,r10
211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orr	r5,r5,r9		@ Maj(a,b,c).lo
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r6,r6,r11
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r5,r5,r3
214392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orr	r6,r6,r12		@ Maj(a,b,c).hi
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	sp,sp,#8
216392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	adc	r6,r6,r4		@ h += T
217392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	tst	r14,#1
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	r14,r14,#8
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	r14,#1
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.L00_15
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[sp,#184+0]
222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r10,[sp,#184+4]
223392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bic	r14,r14,#1
224392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.L16_79:
225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ sigma0(x)	(ROTR((x),1)  ^ ROTR((x),8)  ^ ((x)>>7))
226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ LO		lo>>1^hi<<31  ^ lo>>8^hi<<24 ^ lo>>7^hi<<25
227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ HI		hi>>1^lo<<31  ^ hi>>8^lo<<24 ^ hi>>7
228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r3,r9,lsr#1
229392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[sp,#80+0]
230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r4,r10,lsr#1
231392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,[sp,#80+4]
232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r10,lsl#31
233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r9,lsl#31
234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r9,lsr#8
235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r10,lsr#8
236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r10,lsl#24
237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r9,lsl#24
238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r9,lsr#7
239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r4,r4,r10,lsr#7
240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r3,r3,r10,lsl#25
241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ sigma1(x)	(ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ LO		lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26
244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ HI		hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6
245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r9,r11,lsr#19
246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r10,r12,lsr#19
247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r12,lsl#13
248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r11,lsl#13
249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r12,lsr#29
250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r11,lsr#29
251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r11,lsl#3
252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r12,lsl#3
253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r11,lsr#6
254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r12,lsr#6
255392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[sp,#120+0]
256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r12,lsl#26
257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp,#120+4]
259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9,[sp,#192+0]
261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r10
262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r10,[sp,#192+4]
264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r11
265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r12
266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r10
268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ Sigma1(x)	(ROTR((x),14) ^ ROTR((x),18)  ^ ROTR((x),41))
269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ LO		lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ HI		hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r9,r7,lsr#14
272392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r3,[sp,#64+0]
273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r10,r8,lsr#14
274392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r4,[sp,#64+4]
275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r8,lsl#18
276392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[sp,#56+0]	@ h.lo
277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r7,lsl#18
278392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,[sp,#56+4]	@ h.hi
279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r7,lsr#18
280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r8,lsr#18
281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r8,lsl#14
282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r7,lsl#14
283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r8,lsr#9
284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r7,lsr#9
285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r7,lsl#23
286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r8,lsl#23	@ Sigma1(e)
287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r9,[sp,#40+0]	@ f.lo
28943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	adc	r4,r4,r10		@ T += Sigma1(e)
290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r10,[sp,#40+4]	@ f.hi
29143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	adds	r3,r3,r11
292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r11,[sp,#48+0]	@ g.lo
29343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	adc	r4,r4,r12		@ T += h
294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp,#48+4]	@ g.hi
295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r11
29743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r7,[sp,#32+0]
298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r12
29943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r8,[sp,#32+4]
300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r9,r9,r7
30143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r5,[sp,#0+0]
302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r10,r10,r8
30343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	str	r6,[sp,#0+4]
304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r11
305392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[r14,#LO]	@ K[i].lo
30643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	eor	r10,r10,r12		@ Ch(e,f,g)
307392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12,[r14,#HI]	@ K[i].hi
308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
31043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r7,[sp,#24+0]	@ d.lo
311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r10		@ T += Ch(e,f,g)
31243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom	ldr	r8,[sp,#24+4]	@ d.hi
313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r11
314392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	and	r9,r11,#0xff
315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r12		@ T += K[i]
316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r7,r7,r3
317392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11,[sp,#8+0]	@ b.lo
318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r8,r8,r4		@ d += T
319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r9,#23
320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r12,[sp,#16+0]	@ c.lo
322392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orreq	r14,r14,#1
323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ Sigma0(x)	(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ LO		lo>>28^hi<<4  ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	@ HI		hi>>28^lo<<4  ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r9,r5,lsr#28
327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	mov	r10,r6,lsr#28
328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r6,lsl#4
329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r5,lsl#4
330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r6,lsr#2
331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r5,lsr#2
332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r5,lsl#30
333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r6,lsl#30
334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r6,lsr#7
335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r5,lsr#7
336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r9,r9,r5,lsl#25
337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	eor	r10,r10,r6,lsl#25	@ Sigma0(a)
338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r3,r3,r9
339392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	and	r9,r5,r11
340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r4,r4,r10		@ T += Sigma0(a)
341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r10,[sp,#8+4]	@ b.hi
343392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orr	r5,r5,r11
344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r11,[sp,#16+4]	@ c.hi
345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r5,r5,r12
346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r12,r6,r10
347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	orr	r6,r6,r10
348392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orr	r5,r5,r9		@ Maj(a,b,c).lo
349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	and	r6,r6,r11
350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r5,r5,r3
351392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	orr	r6,r6,r12		@ Maj(a,b,c).hi
352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	sp,sp,#8
353392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	adc	r6,r6,r4		@ h += T
354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	r14,#1
355392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	add	r14,r14,#8
356392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldreq	r9,[sp,#184+0]
357392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldreq	r10,[sp,#184+4]
358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	beq	.L16_79
359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bic	r14,r14,#1
360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r3,[sp,#8+0]
362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r4,[sp,#8+4]
363392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9, [r0,#0+LO]
364392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r10, [r0,#0+HI]
365392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11, [r0,#8+LO]
366392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12, [r0,#8+HI]
367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r9,r5,r9
368392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r9, [r0,#0+LO]
369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r10,r6,r10
370392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r10, [r0,#0+HI]
371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r11,r3,r11
372392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r11, [r0,#8+LO]
373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r12,r4,r12
374392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r12, [r0,#8+HI]
375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r5,[sp,#16+0]
377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r6,[sp,#16+4]
378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r3,[sp,#24+0]
379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r4,[sp,#24+4]
380392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9, [r0,#16+LO]
381392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r10, [r0,#16+HI]
382392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11, [r0,#24+LO]
383392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12, [r0,#24+HI]
384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r9,r5,r9
385392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r9, [r0,#16+LO]
386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r10,r6,r10
387392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r10, [r0,#16+HI]
388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r11,r3,r11
389392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r11, [r0,#24+LO]
390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r12,r4,r12
391392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r12, [r0,#24+HI]
392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r3,[sp,#40+0]
394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r4,[sp,#40+4]
395392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9, [r0,#32+LO]
396392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r10, [r0,#32+HI]
397392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11, [r0,#40+LO]
398392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12, [r0,#40+HI]
399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r7,r7,r9
400392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r7,[r0,#32+LO]
401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r8,r8,r10
402392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r8,[r0,#32+HI]
403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r11,r3,r11
404392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r11, [r0,#40+LO]
405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r12,r4,r12
406392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r12, [r0,#40+HI]
407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r5,[sp,#48+0]
409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r6,[sp,#48+4]
410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r3,[sp,#56+0]
411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldr	r4,[sp,#56+4]
412392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r9, [r0,#48+LO]
413392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r10, [r0,#48+HI]
414392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r11, [r0,#56+LO]
415392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldr	r12, [r0,#56+HI]
416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r9,r5,r9
417392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r9, [r0,#48+LO]
418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r10,r6,r10
419392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r10, [r0,#48+HI]
420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adds	r11,r3,r11
421392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r11, [r0,#56+LO]
422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	adc	r12,r4,r12
423392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	str	r12, [r0,#56+HI]
424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	sp,sp,#640
426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sub	r14,r14,#640
427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	teq	r1,r2
429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	bne	.Loop
430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	add	sp,sp,#8*9		@ destroy frame
432392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5
433392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	ldmia	sp!,{r4-r12,pc}
434392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else
435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ldmia	sp!,{r4-r12,lr}
436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	tst	lr,#1
437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	moveq	pc,lr			@ be binary compatible with V4, yet
438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
439392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
440392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7
441392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.fpu	neon
442392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
443392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align	4
444392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.LNEON:
445392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	dmb				@ errata #451034 on early Cortex A8
446392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vstmdb	sp!,{d8-d15}		@ ABI specification says so
447392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sub	r3,r3,#672		@ K512
448392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vldmia	r0,{d16-d23}		@ load context
449392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Loop_neon:
450392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#14	@ 0
451392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 0<16
452392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d0},[r1]!	@ handles unaligned
453392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
454392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#18
455392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#41
456392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
457392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#50
458392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#46
459392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#23
460392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 0<16 && defined(__ARMEL__)
461392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d0,d0
462392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
463392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d23
464392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21,d22
465392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
466392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20
467392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
468392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22			@ Ch(e,f,g)
469392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
470392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#28
471392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
472392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#34
473392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#39
474392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#36
475392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#30
476392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#25
477392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d0
478392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d16,d18
479392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16,d18
480392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d24,d25
481392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d17
482392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d26			@ Sigma0(a)
483392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
484392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
485392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
486392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d30
487392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#14	@ 1
488392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 1<16
489392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d1},[r1]!	@ handles unaligned
490392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
491392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#18
492392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#41
493392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
494392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#50
495392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#46
496392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#23
497392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 1<16 && defined(__ARMEL__)
498392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d1,d1
499392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
500392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d22
501392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20,d21
502392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
503392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19
504392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
505392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21			@ Ch(e,f,g)
506392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
507392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#28
508392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
509392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#34
510392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#39
511392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#36
512392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#30
513392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#25
514392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d1
515392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d23,d17
516392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23,d17
517392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d24,d25
518392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d16
519392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d26			@ Sigma0(a)
520392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
521392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
522392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
523392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d30
524392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#14	@ 2
525392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 2<16
526392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d2},[r1]!	@ handles unaligned
527392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
528392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#18
529392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#41
530392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
531392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#50
532392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#46
533392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#23
534392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 2<16 && defined(__ARMEL__)
535392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d2,d2
536392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
537392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d21
538392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19,d20
539392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
540392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18
541392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
542392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20			@ Ch(e,f,g)
543392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
544392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#28
545392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
546392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#34
547392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#39
548392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#36
549392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#30
550392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#25
551392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d2
552392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d22,d16
553392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22,d16
554392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d24,d25
555392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d23
556392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d26			@ Sigma0(a)
557392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
558392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
559392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
560392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d30
561392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#14	@ 3
562392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 3<16
563392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d3},[r1]!	@ handles unaligned
564392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
565392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#18
566392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#41
567392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
568392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#50
569392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#46
570392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#23
571392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 3<16 && defined(__ARMEL__)
572392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d3,d3
573392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
574392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d20
575392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18,d19
576392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
577392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17
578392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
579392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19			@ Ch(e,f,g)
580392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
581392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#28
582392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
583392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#34
584392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#39
585392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#36
586392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#30
587392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#25
588392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d3
589392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d21,d23
590392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21,d23
591392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d24,d25
592392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d22
593392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d26			@ Sigma0(a)
594392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
595392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
596392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
597392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d30
598392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#14	@ 4
599392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 4<16
600392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d4},[r1]!	@ handles unaligned
601392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
602392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#18
603392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#41
604392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
605392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#50
606392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#46
607392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#23
608392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 4<16 && defined(__ARMEL__)
609392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d4,d4
610392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
611392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d19
612392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17,d18
613392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
614392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16
615392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
616392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18			@ Ch(e,f,g)
617392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
618392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#28
619392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
620392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#34
621392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#39
622392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#36
623392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#30
624392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#25
625392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d4
626392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d20,d22
627392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20,d22
628392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d24,d25
629392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d21
630392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d26			@ Sigma0(a)
631392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
632392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
633392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
634392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d30
635392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#14	@ 5
636392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 5<16
637392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d5},[r1]!	@ handles unaligned
638392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
639392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#18
640392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#41
641392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
642392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#50
643392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#46
644392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#23
645392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 5<16 && defined(__ARMEL__)
646392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d5,d5
647392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
648392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d18
649392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16,d17
650392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
651392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23
652392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
653392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17			@ Ch(e,f,g)
654392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
655392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#28
656392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
657392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#34
658392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#39
659392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#36
660392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#30
661392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#25
662392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d5
663392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d19,d21
664392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19,d21
665392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d24,d25
666392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d20
667392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d26			@ Sigma0(a)
668392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
669392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
670392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
671392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d30
672392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#14	@ 6
673392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 6<16
674392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d6},[r1]!	@ handles unaligned
675392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
676392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#18
677392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#41
678392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
679392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#50
680392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#46
681392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#23
682392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 6<16 && defined(__ARMEL__)
683392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d6,d6
684392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
685392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d17
686392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23,d16
687392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
688392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22
689392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
690392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16			@ Ch(e,f,g)
691392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
692392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#28
693392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
694392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#34
695392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#39
696392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#36
697392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#30
698392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#25
699392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d6
700392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d18,d20
701392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18,d20
702392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d24,d25
703392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d19
704392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d26			@ Sigma0(a)
705392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
706392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
707392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
708392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d30
709392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#14	@ 7
710392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 7<16
711392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d7},[r1]!	@ handles unaligned
712392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
713392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#18
714392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#41
715392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
716392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#50
717392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#46
718392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#23
719392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 7<16 && defined(__ARMEL__)
720392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d7,d7
721392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
722392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d16
723392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22,d23
724392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
725392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21
726392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
727392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23			@ Ch(e,f,g)
728392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
729392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#28
730392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
731392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#34
732392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#39
733392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#36
734392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#30
735392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#25
736392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d7
737392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d17,d19
738392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17,d19
739392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d24,d25
740392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d18
741392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d26			@ Sigma0(a)
742392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
743392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
744392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
745392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d30
746392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#14	@ 8
747392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 8<16
748392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d8},[r1]!	@ handles unaligned
749392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
750392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#18
751392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#41
752392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
753392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#50
754392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#46
755392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#23
756392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 8<16 && defined(__ARMEL__)
757392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d8,d8
758392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
759392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d23
760392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21,d22
761392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
762392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20
763392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
764392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22			@ Ch(e,f,g)
765392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
766392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#28
767392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
768392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#34
769392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#39
770392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#36
771392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#30
772392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#25
773392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d8
774392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d16,d18
775392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16,d18
776392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d24,d25
777392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d17
778392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d26			@ Sigma0(a)
779392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
780392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
781392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
782392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d30
783392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#14	@ 9
784392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 9<16
785392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d9},[r1]!	@ handles unaligned
786392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
787392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#18
788392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#41
789392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
790392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#50
791392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#46
792392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#23
793392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 9<16 && defined(__ARMEL__)
794392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d9,d9
795392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
796392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d22
797392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20,d21
798392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
799392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19
800392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
801392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21			@ Ch(e,f,g)
802392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
803392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#28
804392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
805392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#34
806392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#39
807392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#36
808392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#30
809392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#25
810392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d9
811392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d23,d17
812392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23,d17
813392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d24,d25
814392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d16
815392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d26			@ Sigma0(a)
816392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
817392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
818392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
819392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d30
820392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#14	@ 10
821392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 10<16
822392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d10},[r1]!	@ handles unaligned
823392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
824392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#18
825392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#41
826392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
827392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#50
828392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#46
829392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#23
830392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 10<16 && defined(__ARMEL__)
831392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d10,d10
832392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
833392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d21
834392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19,d20
835392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
836392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18
837392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
838392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20			@ Ch(e,f,g)
839392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
840392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#28
841392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
842392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#34
843392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#39
844392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#36
845392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#30
846392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#25
847392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d10
848392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d22,d16
849392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22,d16
850392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d24,d25
851392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d23
852392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d26			@ Sigma0(a)
853392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
854392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
855392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
856392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d30
857392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#14	@ 11
858392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 11<16
859392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d11},[r1]!	@ handles unaligned
860392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
861392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#18
862392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#41
863392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
864392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#50
865392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#46
866392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#23
867392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 11<16 && defined(__ARMEL__)
868392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d11,d11
869392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
870392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d20
871392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18,d19
872392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
873392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17
874392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
875392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19			@ Ch(e,f,g)
876392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
877392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#28
878392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
879392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#34
880392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#39
881392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#36
882392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#30
883392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#25
884392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d11
885392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d21,d23
886392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21,d23
887392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d24,d25
888392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d22
889392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d26			@ Sigma0(a)
890392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
891392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
892392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
893392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d30
894392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#14	@ 12
895392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 12<16
896392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d12},[r1]!	@ handles unaligned
897392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
898392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#18
899392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#41
900392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
901392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#50
902392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#46
903392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#23
904392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 12<16 && defined(__ARMEL__)
905392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d12,d12
906392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
907392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d19
908392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17,d18
909392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
910392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16
911392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
912392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18			@ Ch(e,f,g)
913392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
914392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#28
915392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
916392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#34
917392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#39
918392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#36
919392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#30
920392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#25
921392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d12
922392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d20,d22
923392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20,d22
924392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d24,d25
925392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d21
926392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d26			@ Sigma0(a)
927392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
928392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
929392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
930392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d30
931392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#14	@ 13
932392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 13<16
933392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d13},[r1]!	@ handles unaligned
934392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
935392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#18
936392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#41
937392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
938392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#50
939392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#46
940392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#23
941392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 13<16 && defined(__ARMEL__)
942392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d13,d13
943392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
944392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d18
945392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16,d17
946392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
947392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23
948392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
949392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17			@ Ch(e,f,g)
950392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
951392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#28
952392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
953392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#34
954392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#39
955392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#36
956392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#30
957392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#25
958392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d13
959392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d19,d21
960392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19,d21
961392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d24,d25
962392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d20
963392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d26			@ Sigma0(a)
964392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
965392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
966392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
967392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d30
968392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#14	@ 14
969392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 14<16
970392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d14},[r1]!	@ handles unaligned
971392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
972392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#18
973392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#41
974392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
975392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#50
976392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#46
977392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#23
978392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 14<16 && defined(__ARMEL__)
979392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d14,d14
980392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
981392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d17
982392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23,d16
983392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
984392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22
985392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
986392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16			@ Ch(e,f,g)
987392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
988392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#28
989392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
990392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#34
991392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#39
992392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#36
993392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#30
994392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#25
995392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d14
996392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d18,d20
997392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18,d20
998392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d24,d25
999392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d19
1000392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d26			@ Sigma0(a)
1001392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1002392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
1003392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
1004392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d30
1005392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#14	@ 15
1006392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 15<16
1007392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d15},[r1]!	@ handles unaligned
1008392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1009392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#18
1010392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#41
1011392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1012392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#50
1013392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#46
1014392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#23
1015392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 15<16 && defined(__ARMEL__)
1016392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	d15,d15
1017392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1018392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d16
1019392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22,d23
1020392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1021392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21
1022392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1023392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23			@ Ch(e,f,g)
1024392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1025392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#28
1026392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1027392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#34
1028392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#39
1029392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#36
1030392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#30
1031392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#25
1032392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d15
1033392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d17,d19
1034392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17,d19
1035392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d24,d25
1036392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d18
1037392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d26			@ Sigma0(a)
1038392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1039392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
1040392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
1041392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d30
1042392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	mov		r12,#4
1043392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.L16_79_neon:
1044392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	subs		r12,#1
1045392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q7,#19
1046392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q7,#61
1047392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q7,#6
1048392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q7,#45
1049392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q0,q1,#8	@ X[i+1]
1050392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q7,#3
1051392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1052392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1053392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1054392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1055392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q0,q15
1056392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1057392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1058392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1059392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q4,q5,#8	@ X[i+9]
1060392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1061392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#14		@ from NEON_00_15
1062392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q0,q14
1063392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#18		@ from NEON_00_15
1064392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1065392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#41		@ from NEON_00_15
1066392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q0,q15
1067392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1068392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#50
1069392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#46
1070392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#23
1071392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 16<16 && defined(__ARMEL__)
1072392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1073392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1074392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d23
1075392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21,d22
1076392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1077392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20
1078392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1079392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22			@ Ch(e,f,g)
1080392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1081392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#28
1082392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1083392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#34
1084392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#39
1085392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#36
1086392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#30
1087392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#25
1088392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d0
1089392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d16,d18
1090392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16,d18
1091392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d24,d25
1092392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d17
1093392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d26			@ Sigma0(a)
1094392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1095392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
1096392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
1097392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d30
1098392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#14	@ 17
1099392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 17<16
1100392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d1},[r1]!	@ handles unaligned
1101392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1102392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#18
1103392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#41
1104392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#50
1106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#46
1107392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#23
1108392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 17<16 && defined(__ARMEL__)
1109392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1110392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1111392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d22
1112392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20,d21
1113392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1114392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19
1115392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1116392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21			@ Ch(e,f,g)
1117392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1118392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#28
1119392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1120392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#34
1121392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#39
1122392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#36
1123392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#30
1124392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#25
1125392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d1
1126392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d23,d17
1127392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23,d17
1128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d24,d25
1129392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d16
1130392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d26			@ Sigma0(a)
1131392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1132392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
1133392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
1134392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d30
1135392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q0,#19
1136392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q0,#61
1137392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q0,#6
1138392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q0,#45
1139392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q1,q2,#8	@ X[i+1]
1140392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q0,#3
1141392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1142392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1143392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1144392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1145392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q1,q15
1146392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1147392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1148392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1149392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q5,q6,#8	@ X[i+9]
1150392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1151392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#14		@ from NEON_00_15
1152392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q1,q14
1153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#18		@ from NEON_00_15
1154392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1155392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#41		@ from NEON_00_15
1156392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q1,q15
1157392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1158392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#50
1159392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#46
1160392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#23
1161392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 18<16 && defined(__ARMEL__)
1162392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1163392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1164392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d21
1165392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19,d20
1166392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1167392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18
1168392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1169392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20			@ Ch(e,f,g)
1170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1171392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#28
1172392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1173392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#34
1174392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#39
1175392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#36
1176392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#30
1177392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#25
1178392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d2
1179392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d22,d16
1180392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22,d16
1181392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d24,d25
1182392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d23
1183392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d26			@ Sigma0(a)
1184392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1185392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
1186392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
1187392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d30
1188392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#14	@ 19
1189392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 19<16
1190392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d3},[r1]!	@ handles unaligned
1191392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1192392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#18
1193392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#41
1194392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1195392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#50
1196392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#46
1197392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#23
1198392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 19<16 && defined(__ARMEL__)
1199392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1200392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1201392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d20
1202392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18,d19
1203392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1204392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17
1205392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1206392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19			@ Ch(e,f,g)
1207392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1208392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#28
1209392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1210392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#34
1211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#39
1212392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#36
1213392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#30
1214392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#25
1215392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d3
1216392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d21,d23
1217392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21,d23
1218392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d24,d25
1219392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d22
1220392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d26			@ Sigma0(a)
1221392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1222392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
1223392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
1224392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d30
1225392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q1,#19
1226392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q1,#61
1227392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q1,#6
1228392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q1,#45
1229392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q2,q3,#8	@ X[i+1]
1230392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q1,#3
1231392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1232392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1233392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1234392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1235392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q2,q15
1236392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1237392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1238392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1239392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q6,q7,#8	@ X[i+9]
1240392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1241392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#14		@ from NEON_00_15
1242392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q2,q14
1243392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#18		@ from NEON_00_15
1244392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1245392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#41		@ from NEON_00_15
1246392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q2,q15
1247392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1248392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#50
1249392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#46
1250392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#23
1251392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 20<16 && defined(__ARMEL__)
1252392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1253392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1254392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d19
1255392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17,d18
1256392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1257392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16
1258392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1259392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18			@ Ch(e,f,g)
1260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1261392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#28
1262392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1263392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#34
1264392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#39
1265392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#36
1266392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#30
1267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#25
1268392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d4
1269392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d20,d22
1270392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20,d22
1271392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d24,d25
1272392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d21
1273392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d26			@ Sigma0(a)
1274392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1275392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
1276392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
1277392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d30
1278392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#14	@ 21
1279392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 21<16
1280392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d5},[r1]!	@ handles unaligned
1281392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1282392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#18
1283392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#41
1284392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1285392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#50
1286392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#46
1287392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#23
1288392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 21<16 && defined(__ARMEL__)
1289392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1290392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1291392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d18
1292392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16,d17
1293392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1294392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23
1295392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1296392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17			@ Ch(e,f,g)
1297392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1298392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#28
1299392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1300392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#34
1301392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#39
1302392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#36
1303392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#30
1304392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#25
1305392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d5
1306392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d19,d21
1307392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19,d21
1308392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d24,d25
1309392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d20
1310392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d26			@ Sigma0(a)
1311392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1312392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
1313392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
1314392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d30
1315392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q2,#19
1316392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q2,#61
1317392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q2,#6
1318392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q2,#45
1319392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q3,q4,#8	@ X[i+1]
1320392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q2,#3
1321392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1322392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1323392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1324392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1325392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q3,q15
1326392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1327392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1328392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1329392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q7,q0,#8	@ X[i+9]
1330392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1331392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#14		@ from NEON_00_15
1332392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q3,q14
1333392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#18		@ from NEON_00_15
1334392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1335392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#41		@ from NEON_00_15
1336392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q3,q15
1337392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1338392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#50
1339392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#46
1340392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#23
1341392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 22<16 && defined(__ARMEL__)
1342392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1343392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1344392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d17
1345392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23,d16
1346392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1347392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22
1348392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1349392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16			@ Ch(e,f,g)
1350392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1351392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#28
1352392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1353392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#34
1354392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#39
1355392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#36
1356392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#30
1357392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#25
1358392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d6
1359392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d18,d20
1360392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18,d20
1361392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d24,d25
1362392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d19
1363392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d26			@ Sigma0(a)
1364392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1365392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
1366392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
1367392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d30
1368392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#14	@ 23
1369392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 23<16
1370392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d7},[r1]!	@ handles unaligned
1371392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1372392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#18
1373392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#41
1374392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1375392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#50
1376392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#46
1377392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#23
1378392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 23<16 && defined(__ARMEL__)
1379392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1380392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1381392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d16
1382392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22,d23
1383392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1384392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21
1385392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1386392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23			@ Ch(e,f,g)
1387392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1388392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#28
1389392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1390392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#34
1391392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#39
1392392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#36
1393392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#30
1394392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#25
1395392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d7
1396392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d17,d19
1397392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17,d19
1398392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d24,d25
1399392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d18
1400392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d26			@ Sigma0(a)
1401392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1402392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
1403392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
1404392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d30
1405392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q3,#19
1406392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q3,#61
1407392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q3,#6
1408392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q3,#45
1409392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q4,q5,#8	@ X[i+1]
1410392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q3,#3
1411392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1412392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1413392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1414392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1415392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q4,q15
1416392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1417392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1418392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1419392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q0,q1,#8	@ X[i+9]
1420392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1421392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#14		@ from NEON_00_15
1422392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q4,q14
1423392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#18		@ from NEON_00_15
1424392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1425392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#41		@ from NEON_00_15
1426392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q4,q15
1427392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1428392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#50
1429392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#46
1430392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#23
1431392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 24<16 && defined(__ARMEL__)
1432392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1433392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1434392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d23
1435392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21,d22
1436392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1437392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20
1438392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1439392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22			@ Ch(e,f,g)
1440392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1441392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#28
1442392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1443392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#34
1444392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#39
1445392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#36
1446392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#30
1447392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#25
1448392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d8
1449392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d16,d18
1450392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16,d18
1451392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d24,d25
1452392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d17
1453392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d23,d26			@ Sigma0(a)
1454392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1455392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
1456392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
1457392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d30
1458392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#14	@ 25
1459392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 25<16
1460392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d9},[r1]!	@ handles unaligned
1461392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1462392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#18
1463392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#41
1464392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1465392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#50
1466392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#46
1467392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#23
1468392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 25<16 && defined(__ARMEL__)
1469392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1470392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1471392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d22
1472392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20,d21
1473392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1474392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19
1475392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1476392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d21			@ Ch(e,f,g)
1477392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1478392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#28
1479392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1480392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#34
1481392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#39
1482392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#36
1483392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#30
1484392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#25
1485392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d9
1486392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d23,d17
1487392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23,d17
1488392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d24,d25
1489392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d16
1490392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d22,d26			@ Sigma0(a)
1491392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1492392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
1493392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
1494392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d30
1495392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q4,#19
1496392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q4,#61
1497392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q4,#6
1498392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q4,#45
1499392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q5,q6,#8	@ X[i+1]
1500392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q4,#3
1501392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1502392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1503392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1504392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1505392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q5,q15
1506392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1507392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1508392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1509392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q1,q2,#8	@ X[i+9]
1510392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1511392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#14		@ from NEON_00_15
1512392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q5,q14
1513392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#18		@ from NEON_00_15
1514392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1515392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#41		@ from NEON_00_15
1516392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q5,q15
1517392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1518392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#50
1519392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#46
1520392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#23
1521392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 26<16 && defined(__ARMEL__)
1522392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1523392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1524392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d21
1525392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19,d20
1526392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1527392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18
1528392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1529392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d20			@ Ch(e,f,g)
1530392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1531392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#28
1532392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1533392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#34
1534392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#39
1535392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#36
1536392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#30
1537392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#25
1538392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d10
1539392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d22,d16
1540392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22,d16
1541392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d24,d25
1542392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d23
1543392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d21,d26			@ Sigma0(a)
1544392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1545392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
1546392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
1547392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d30
1548392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#14	@ 27
1549392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 27<16
1550392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d11},[r1]!	@ handles unaligned
1551392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1552392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#18
1553392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#41
1554392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1555392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#50
1556392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#46
1557392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#23
1558392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 27<16 && defined(__ARMEL__)
1559392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1560392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1561392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d20
1562392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18,d19
1563392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1564392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17
1565392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1566392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d19			@ Ch(e,f,g)
1567392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1568392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#28
1569392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1570392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#34
1571392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#39
1572392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#36
1573392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#30
1574392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#25
1575392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d11
1576392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d21,d23
1577392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21,d23
1578392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d24,d25
1579392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d22
1580392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d20,d26			@ Sigma0(a)
1581392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1582392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
1583392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
1584392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d30
1585392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q5,#19
1586392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q5,#61
1587392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q5,#6
1588392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q5,#45
1589392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q6,q7,#8	@ X[i+1]
1590392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q5,#3
1591392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1592392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1593392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1594392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1595392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q6,q15
1596392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1597392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1598392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1599392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q2,q3,#8	@ X[i+9]
1600392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1601392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d16,#14		@ from NEON_00_15
1602392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q6,q14
1603392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d16,#18		@ from NEON_00_15
1604392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1605392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d16,#41		@ from NEON_00_15
1606392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q6,q15
1607392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1608392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d16,#50
1609392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d16,#46
1610392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d16,#23
1611392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 28<16 && defined(__ARMEL__)
1612392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1613392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1614392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d19
1615392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17,d18
1616392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1617392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d16
1618392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1619392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d18			@ Ch(e,f,g)
1620392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1621392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d20,#28
1622392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1623392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d20,#34
1624392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d20,#39
1625392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d20,#36
1626392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d20,#30
1627392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d20,#25
1628392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d12
1629392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d20,d22
1630392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d20,d22
1631392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d24,d25
1632392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d21
1633392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d19,d26			@ Sigma0(a)
1634392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1635392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d27
1636392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d23,d27
1637392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d19,d30
1638392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d23,#14	@ 29
1639392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 29<16
1640392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d13},[r1]!	@ handles unaligned
1641392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1642392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d23,#18
1643392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d23,#41
1644392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1645392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d23,#50
1646392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d23,#46
1647392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d23,#23
1648392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 29<16 && defined(__ARMEL__)
1649392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1650392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1651392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d18
1652392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16,d17
1653392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1654392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d23
1655392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1656392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d17			@ Ch(e,f,g)
1657392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1658392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d19,#28
1659392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1660392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d19,#34
1661392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d19,#39
1662392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d19,#36
1663392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d19,#30
1664392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d19,#25
1665392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d13
1666392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d19,d21
1667392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d19,d21
1668392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d24,d25
1669392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d20
1670392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d18,d26			@ Sigma0(a)
1671392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1672392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d27
1673392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d22,d27
1674392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d18,d30
1675392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q6,#19
1676392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q6,#61
1677392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q6,#6
1678392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q6,#45
1679392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q7,q0,#8	@ X[i+1]
1680392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q6,#3
1681392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1682392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q12,q14,#1
1683392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma1(X[i+14])
1684392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q13,q14,#8
1685392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q7,q15
1686392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	q15,q14,#7
1687392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q12,q14,#63
1688392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		q13,q14,#56
1689392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vext.8		q14,q3,q4,#8	@ X[i+9]
1690392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q12
1691392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d22,#14		@ from NEON_00_15
1692392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q7,q14
1693392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d22,#18		@ from NEON_00_15
1694392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		q15,q13				@ sigma0(X[i+1])
1695392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d22,#41		@ from NEON_00_15
1696392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q7,q15
1697392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1698392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d22,#50
1699392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d22,#46
1700392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d22,#23
1701392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 30<16 && defined(__ARMEL__)
1702392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1703392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1704392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d17
1705392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23,d16
1706392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1707392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d22
1708392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1709392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d16			@ Ch(e,f,g)
1710392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1711392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d18,#28
1712392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1713392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d18,#34
1714392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d18,#39
1715392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d18,#36
1716392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d18,#30
1717392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d18,#25
1718392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d14
1719392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d18,d20
1720392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d18,d20
1721392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d24,d25
1722392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d19
1723392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d17,d26			@ Sigma0(a)
1724392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1725392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d27
1726392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d21,d27
1727392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d17,d30
1728392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d21,#14	@ 31
1729392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 31<16
1730392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d15},[r1]!	@ handles unaligned
1731392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1732392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d21,#18
1733392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d21,#41
1734392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vld1.64		{d28},[r3,:64]!	@ K[i++]
1735392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d21,#50
1736392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d21,#46
1737392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d21,#23
1738392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if 31<16 && defined(__ARMEL__)
1739392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vrev64.8	,
1740392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1741392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d28,d16
1742392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d22,d23
1743392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d25
1744392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d21
1745392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d24,d26			@ Sigma1(e)
1746392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d29,d23			@ Ch(e,f,g)
1747392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d24
1748392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d24,d17,#28
1749392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d29
1750392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d25,d17,#34
1751392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vshr.u64	d26,d17,#39
1752392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d24,d17,#36
1753392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d25,d17,#30
1754392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vsli.64		d26,d17,#25
1755392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d27,d15
1756392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d17,d19
1757392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d29,d17,d19
1758392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d24,d25
1759392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vand		d30,d18
1760392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	veor		d16,d26			@ Sigma0(a)
1761392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vorr		d30,d29		@ Maj(a,b,c)
1762392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d27
1763392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d20,d27
1764392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	d16,d30
1765392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bne		.L16_79_neon
1766392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
1767392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vldmia		r0,{d24-d31}	@ load context to temp
1768392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q8,q12		@ vectorized accumulate
1769392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q9,q13
1770392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q10,q14
1771392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vadd.i64	q11,q15
1772392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vstmia		r0,{d16-d23}	@ save context
1773392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	teq		r1,r2
1774392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	sub		r3,#640	@ rewind K512
1775392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	bne		.Loop_neon
1776392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom
1777392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	vldmia	sp!,{d8-d15}		@ epilogue
17783f9e6ada2c9f7183a41081263585e6a70bbd9f59Kenny Root	bx	lr				@ .word	0xe12fff1e
1779392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
1780392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size	sha512_block_data_order,.-sha512_block_data_order
1781392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.asciz	"SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
1782221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	2
1783392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.comm	OPENSSL_armcap_P,4,4
1784