1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(__arm__)
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "arm_arch.h"
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.code	32
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type	K256,%object
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	5
9116680a4aac90f2aa7413d9095a592090648e557Ben MurdochK256:
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0xd192e819,0xd6990624,0xf40e3585,0x106aa070
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size	K256,.-K256
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	0				@ terminator
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LOPENSSL_armcap:
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word	OPENSSL_armcap_P-sha256_block_data_order
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	5
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.global	sha256_block_data_order
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).hidden	sha256_block_data_order
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type	sha256_block_data_order,%function
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsha256_block_data_order:
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r3,pc,#8		@ sha256_block_data_order
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,.LOPENSSL_armcap
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	tst	r12,#1
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	bne	.LNEON
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	stmdb	sp!,{r0,r1,r2,r4-r11,lr}
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldmia	r0,{r4,r5,r6,r7,r8,r9,r10,r11}
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r14,r3,#256+32	@ K256
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	sp,sp,#16*4		@ alloca(X[16])
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Loop:
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6		@ magic
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r12
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 0
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 0==15
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#19	@ Sigma1(e)
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 0
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 0==15
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#19	@ Sigma1(e)
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=X[i]
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#0*4]
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12			@ h+=K256[i]
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10			@ Ch(e,f,g)
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=Ch(e,f,g)
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 0==31
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 0<15
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#2*4]		@ from future BODY_16_xx
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#15*4]	@ from future BODY_16_xx
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20	@ Sigma0(a)
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11			@ d+=h
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5			@ Maj(a,b,c)
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 1
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 1==15
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#19	@ Sigma1(e)
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 1
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 1==15
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#19	@ Sigma1(e)
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=X[i]
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#1*4]
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3			@ h+=K256[i]
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9			@ Ch(e,f,g)
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=Ch(e,f,g)
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 1==31
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 1<15
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#3*4]		@ from future BODY_16_xx
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#0*4]	@ from future BODY_16_xx
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20	@ Sigma0(a)
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10			@ d+=h
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4			@ Maj(a,b,c)
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 2
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 2==15
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#19	@ Sigma1(e)
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 2
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 2==15
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#19	@ Sigma1(e)
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=X[i]
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#2*4]
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12			@ h+=K256[i]
199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8			@ Ch(e,f,g)
200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=Ch(e,f,g)
202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 2==31
203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 2<15
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#4*4]		@ from future BODY_16_xx
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#1*4]	@ from future BODY_16_xx
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20	@ Sigma0(a)
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9			@ d+=h
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11			@ Maj(a,b,c)
222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 3
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 3==15
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#19	@ Sigma1(e)
232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 3
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 3==15
242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#19	@ Sigma1(e)
247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=X[i]
250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#3*4]
251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3			@ h+=K256[i]
255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7			@ Ch(e,f,g)
256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=Ch(e,f,g)
258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 3==31
259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 3<15
263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#5*4]		@ from future BODY_16_xx
271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#2*4]	@ from future BODY_16_xx
273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20	@ Sigma0(a)
275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8			@ d+=h
277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10			@ Maj(a,b,c)
278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 4
282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 4==15
283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#19	@ Sigma1(e)
288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 4
291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 4==15
298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#19	@ Sigma1(e)
303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=X[i]
306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#4*4]
307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12			@ h+=K256[i]
311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6			@ Ch(e,f,g)
312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=Ch(e,f,g)
314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 4==31
315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 4<15
319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#6*4]		@ from future BODY_16_xx
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#3*4]	@ from future BODY_16_xx
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20	@ Sigma0(a)
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7			@ d+=h
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9			@ Maj(a,b,c)
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 5
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 5==15
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#19	@ Sigma1(e)
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 5
347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 5==15
354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#19	@ Sigma1(e)
359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=X[i]
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#5*4]
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3			@ h+=K256[i]
367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5			@ Ch(e,f,g)
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=Ch(e,f,g)
370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 5==31
371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 5<15
375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#7*4]		@ from future BODY_16_xx
383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#4*4]	@ from future BODY_16_xx
385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20	@ Sigma0(a)
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6			@ d+=h
389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8			@ Maj(a,b,c)
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 6
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 6==15
395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#19	@ Sigma1(e)
400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 6
403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 6==15
410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#19	@ Sigma1(e)
415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=X[i]
418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#6*4]
419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12			@ h+=K256[i]
423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4			@ Ch(e,f,g)
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=Ch(e,f,g)
426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 6==31
427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 6<15
431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#8*4]		@ from future BODY_16_xx
439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#5*4]	@ from future BODY_16_xx
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20	@ Sigma0(a)
443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5			@ d+=h
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7			@ Maj(a,b,c)
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 7
450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 7==15
451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#19	@ Sigma1(e)
456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 7
459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 7==15
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#19	@ Sigma1(e)
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=X[i]
474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#7*4]
475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3			@ h+=K256[i]
479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11			@ Ch(e,f,g)
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=Ch(e,f,g)
482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 7==31
483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 7<15
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#9*4]		@ from future BODY_16_xx
495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#6*4]	@ from future BODY_16_xx
497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20	@ Sigma0(a)
499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4			@ d+=h
501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6			@ Maj(a,b,c)
502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 8
506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 8==15
507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#19	@ Sigma1(e)
512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 8
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 8==15
522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#19	@ Sigma1(e)
527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=X[i]
530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#8*4]
531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12			@ h+=K256[i]
535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10			@ Ch(e,f,g)
536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=Ch(e,f,g)
538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 8==31
539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 8<15
543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#10*4]		@ from future BODY_16_xx
551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#7*4]	@ from future BODY_16_xx
553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20	@ Sigma0(a)
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11			@ d+=h
557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5			@ Maj(a,b,c)
558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 9
562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 9==15
563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#19	@ Sigma1(e)
568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 9
571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 9==15
578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#19	@ Sigma1(e)
583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=X[i]
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#9*4]
587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3			@ h+=K256[i]
591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9			@ Ch(e,f,g)
592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=Ch(e,f,g)
594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 9==31
595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 9<15
599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#11*4]		@ from future BODY_16_xx
607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#8*4]	@ from future BODY_16_xx
609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20	@ Sigma0(a)
611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10			@ d+=h
613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4			@ Maj(a,b,c)
614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 10
618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 10==15
619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#19	@ Sigma1(e)
624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 10
627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 10==15
634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#19	@ Sigma1(e)
639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=X[i]
642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#10*4]
643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12			@ h+=K256[i]
647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8			@ Ch(e,f,g)
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=Ch(e,f,g)
650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 10==31
651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 10<15
655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#12*4]		@ from future BODY_16_xx
663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#9*4]	@ from future BODY_16_xx
665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20	@ Sigma0(a)
667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9			@ d+=h
669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11			@ Maj(a,b,c)
670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 11
674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 11==15
675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#19	@ Sigma1(e)
680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 11
683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 11==15
690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#19	@ Sigma1(e)
695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=X[i]
698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#11*4]
699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3			@ h+=K256[i]
703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7			@ Ch(e,f,g)
704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=Ch(e,f,g)
706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 11==31
707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 11<15
711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#13*4]		@ from future BODY_16_xx
719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#10*4]	@ from future BODY_16_xx
721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20	@ Sigma0(a)
723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8			@ d+=h
725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10			@ Maj(a,b,c)
726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 12
730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 12==15
731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#19	@ Sigma1(e)
736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 12
739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 12==15
746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#19	@ Sigma1(e)
751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=X[i]
754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#12*4]
755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12			@ h+=K256[i]
759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6			@ Ch(e,f,g)
760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=Ch(e,f,g)
762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 12==31
763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 12<15
767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#14*4]		@ from future BODY_16_xx
775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#11*4]	@ from future BODY_16_xx
777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20	@ Sigma0(a)
779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7			@ d+=h
781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9			@ Maj(a,b,c)
782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 13
786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 13==15
787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#19	@ Sigma1(e)
792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 13
795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 13==15
802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#19	@ Sigma1(e)
807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=X[i]
810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#13*4]
811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3			@ h+=K256[i]
815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5			@ Ch(e,f,g)
816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=Ch(e,f,g)
818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 13==31
819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 13<15
823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#15*4]		@ from future BODY_16_xx
831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#12*4]	@ from future BODY_16_xx
833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20	@ Sigma0(a)
835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6			@ d+=h
837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8			@ Maj(a,b,c)
838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 14
842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 14==15
843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#19	@ Sigma1(e)
848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 14
851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1,#2]
853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#8
855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r12,[r1],#4
856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 14==15
858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r12,lsl#24
862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#19	@ Sigma1(e)
863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=X[i]
866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#14*4]
867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12			@ h+=K256[i]
871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4			@ Ch(e,f,g)
872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=Ch(e,f,g)
874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 14==31
875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 14<15
879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#0*4]		@ from future BODY_16_xx
887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#13*4]	@ from future BODY_16_xx
889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20	@ Sigma0(a)
891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5			@ d+=h
893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7			@ Maj(a,b,c)
894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[r1],#4			@ 15
898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 15==15
899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#19	@ Sigma1(e)
904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	rev	r2,r2
905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldrb	r2,[r1,#3]			@ 15
907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1,#2]
909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r0,[r1,#1]
910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#8
911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r3,[r1],#4
912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r0,lsl#16
913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 15==15
914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r1,[sp,#17*4]			@ make room for r1
915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	orr	r2,r2,r3,lsl#24
918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#19	@ Sigma1(e)
919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=X[i]
922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#15*4]
923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3			@ h+=K256[i]
927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11			@ Ch(e,f,g)
928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=Ch(e,f,g)
930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 15==31
931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 15<15
935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#1*4]		@ from future BODY_16_xx
943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#14*4]	@ from future BODY_16_xx
945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20	@ Sigma0(a)
947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4			@ d+=h
949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6			@ Maj(a,b,c)
950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lrounds_16_xx:
953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#1*4]		@ 16
954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#14*4]
955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#0*4]
962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#9*4]
964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5	@ from BODY_00_15
967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#19	@ Sigma1(e)
969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=X[i]
972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#0*4]
973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12			@ h+=K256[i]
977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10			@ Ch(e,f,g)
978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=Ch(e,f,g)
980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 16==31
981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 16<15
985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#2*4]		@ from future BODY_16_xx
993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#15*4]	@ from future BODY_16_xx
995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20	@ Sigma0(a)
997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11			@ d+=h
999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5			@ Maj(a,b,c)
1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#2*4]		@ 17
1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#15*4]
1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#1*4]
1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#10*4]
1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5	@ from BODY_00_15
1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#19	@ Sigma1(e)
1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=X[i]
1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#1*4]
1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3			@ h+=K256[i]
1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9			@ Ch(e,f,g)
1027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
1028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=Ch(e,f,g)
1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 17==31
1030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 17<15
1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#3*4]		@ from future BODY_16_xx
1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
1043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#0*4]	@ from future BODY_16_xx
1044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20	@ Sigma0(a)
1046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10			@ d+=h
1048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4			@ Maj(a,b,c)
1049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
1050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
1051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#3*4]		@ 18
1052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#0*4]
1053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
1055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#2*4]
1060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#11*4]
1062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5	@ from BODY_00_15
1065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#19	@ Sigma1(e)
1067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=X[i]
1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#2*4]
1071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
1074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12			@ h+=K256[i]
1075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8			@ Ch(e,f,g)
1076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
1077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=Ch(e,f,g)
1078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 18==31
1079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 18<15
1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
1089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#4*4]		@ from future BODY_16_xx
1091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#1*4]	@ from future BODY_16_xx
1093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20	@ Sigma0(a)
1095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9			@ d+=h
1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11			@ Maj(a,b,c)
1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
1100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#4*4]		@ 19
1101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#1*4]
1102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
1104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#3*4]
1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#12*4]
1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5	@ from BODY_00_15
1114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#19	@ Sigma1(e)
1116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=X[i]
1119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#3*4]
1120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
1121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
1122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
1123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3			@ h+=K256[i]
1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7			@ Ch(e,f,g)
1125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=Ch(e,f,g)
1127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 19==31
1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 19<15
1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
1138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#5*4]		@ from future BODY_16_xx
1140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
1141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#2*4]	@ from future BODY_16_xx
1142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20	@ Sigma0(a)
1144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8			@ d+=h
1146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10			@ Maj(a,b,c)
1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
1148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
1149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#5*4]		@ 20
1150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#2*4]
1151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
1153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#4*4]
1158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#13*4]
1160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5	@ from BODY_00_15
1163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#19	@ Sigma1(e)
1165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=X[i]
1168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#4*4]
1169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
1170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
1172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12			@ h+=K256[i]
1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6			@ Ch(e,f,g)
1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=Ch(e,f,g)
1176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 20==31
1177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 20<15
1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
1187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#6*4]		@ from future BODY_16_xx
1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
1190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#3*4]	@ from future BODY_16_xx
1191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20	@ Sigma0(a)
1193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7			@ d+=h
1195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9			@ Maj(a,b,c)
1196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#6*4]		@ 21
1199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#3*4]
1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
1202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#5*4]
1207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#14*4]
1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5	@ from BODY_00_15
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#19	@ Sigma1(e)
1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=X[i]
1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#5*4]
1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3			@ h+=K256[i]
1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5			@ Ch(e,f,g)
1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=Ch(e,f,g)
1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 21==31
1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 21<15
1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
1236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#7*4]		@ from future BODY_16_xx
1238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#4*4]	@ from future BODY_16_xx
1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20	@ Sigma0(a)
1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6			@ d+=h
1244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8			@ Maj(a,b,c)
1245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#7*4]		@ 22
1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#4*4]
1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
1251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#6*4]
1256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#15*4]
1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5	@ from BODY_00_15
1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#19	@ Sigma1(e)
1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=X[i]
1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#6*4]
1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12			@ h+=K256[i]
1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4			@ Ch(e,f,g)
1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=Ch(e,f,g)
1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 22==31
1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 22<15
1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#8*4]		@ from future BODY_16_xx
1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#5*4]	@ from future BODY_16_xx
1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20	@ Sigma0(a)
1291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5			@ d+=h
1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7			@ Maj(a,b,c)
1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#8*4]		@ 23
1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#5*4]
1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#7*4]
1305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#0*4]
1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5	@ from BODY_00_15
1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=X[i]
1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#7*4]
1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
1317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3			@ h+=K256[i]
1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11			@ Ch(e,f,g)
1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=Ch(e,f,g)
1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 23==31
1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 23<15
1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#9*4]		@ from future BODY_16_xx
1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#6*4]	@ from future BODY_16_xx
1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4			@ d+=h
1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6			@ Maj(a,b,c)
1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#9*4]		@ 24
1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#6*4]
1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
1349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#8*4]
1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#1*4]
1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5	@ from BODY_00_15
1359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#19	@ Sigma1(e)
1361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=X[i]
1364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#8*4]
1365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
1366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
1367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
1368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12			@ h+=K256[i]
1369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10			@ Ch(e,f,g)
1370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
1371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2			@ h+=Ch(e,f,g)
1372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 24==31
1373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 24<15
1377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
1383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#10*4]		@ from future BODY_16_xx
1385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5			@ a^b, b^c in next round
1386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#7*4]	@ from future BODY_16_xx
1387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20	@ Sigma0(a)
1389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11			@ d+=h
1391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5			@ Maj(a,b,c)
1392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
1393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
1394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#10*4]		@ 25
1395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#7*4]
1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
1398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#9*4]
1403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#2*4]
1405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5	@ from BODY_00_15
1408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#19	@ Sigma1(e)
1410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=X[i]
1413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#9*4]
1414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
1415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
1416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
1417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3			@ h+=K256[i]
1418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9			@ Ch(e,f,g)
1419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
1420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2			@ h+=Ch(e,f,g)
1421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 25==31
1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 25<15
1426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
1432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#11*4]		@ from future BODY_16_xx
1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4			@ a^b, b^c in next round
1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#8*4]	@ from future BODY_16_xx
1436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20	@ Sigma0(a)
1438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10			@ d+=h
1440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4			@ Maj(a,b,c)
1441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
1442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#11*4]		@ 26
1444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#8*4]
1445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
1447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#10*4]
1452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#3*4]
1454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5	@ from BODY_00_15
1457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#19	@ Sigma1(e)
1459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=X[i]
1462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#10*4]
1463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
1464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
1465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
1466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12			@ h+=K256[i]
1467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8			@ Ch(e,f,g)
1468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
1469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2			@ h+=Ch(e,f,g)
1470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 26==31
1471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 26<15
1475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
1481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#12*4]		@ from future BODY_16_xx
1483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11			@ a^b, b^c in next round
1484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#9*4]	@ from future BODY_16_xx
1485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20	@ Sigma0(a)
1487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9			@ d+=h
1489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11			@ Maj(a,b,c)
1490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
1491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
1492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#12*4]		@ 27
1493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#9*4]
1494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
1496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#11*4]
1501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#4*4]
1503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5	@ from BODY_00_15
1506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#19	@ Sigma1(e)
1508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=X[i]
1511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#11*4]
1512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
1513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
1514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
1515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3			@ h+=K256[i]
1516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7			@ Ch(e,f,g)
1517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
1518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2			@ h+=Ch(e,f,g)
1519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 27==31
1520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 27<15
1524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
1530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#13*4]		@ from future BODY_16_xx
1532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10			@ a^b, b^c in next round
1533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#10*4]	@ from future BODY_16_xx
1534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20	@ Sigma0(a)
1536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8			@ d+=h
1538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10			@ Maj(a,b,c)
1539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
1540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
1541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#13*4]		@ 28
1542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#10*4]
1543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
1545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#12*4]
1550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#5*4]
1552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5	@ from BODY_00_15
1555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#19	@ Sigma1(e)
1557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=X[i]
1560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#12*4]
1561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
1562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
1563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
1564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12			@ h+=K256[i]
1565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6			@ Ch(e,f,g)
1566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
1567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2			@ h+=Ch(e,f,g)
1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 28==31
1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 28<15
1573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
1579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#14*4]		@ from future BODY_16_xx
1581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9			@ a^b, b^c in next round
1582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#11*4]	@ from future BODY_16_xx
1583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20	@ Sigma0(a)
1585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7			@ d+=h
1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9			@ Maj(a,b,c)
1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#14*4]		@ 29
1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#11*4]
1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#13*4]
1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#6*4]
1601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5	@ from BODY_00_15
1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#19	@ Sigma1(e)
1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=X[i]
1609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#13*4]
1610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
1611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
1613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3			@ h+=K256[i]
1614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5			@ Ch(e,f,g)
1615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2			@ h+=Ch(e,f,g)
1617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 29==31
1618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 29<15
1622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
1628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#15*4]		@ from future BODY_16_xx
1630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8			@ a^b, b^c in next round
1631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#12*4]	@ from future BODY_16_xx
1632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20	@ Sigma0(a)
1634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6			@ d+=h
1636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8			@ Maj(a,b,c)
1637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
1638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
1639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#15*4]		@ 30
1640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#12*4]
1641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
1643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,r1,ror#17
1644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,ror#19
1646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#14*4]
1648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#7*4]
1650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r12,r12,r0
1652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5	@ from BODY_00_15
1653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r12
1654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#19	@ Sigma1(e)
1655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r14],#4			@ *K256++
1657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=X[i]
1658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#14*4]
1659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
1660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
1661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
1662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12			@ h+=K256[i]
1663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4			@ Ch(e,f,g)
1664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
1665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2			@ h+=Ch(e,f,g)
1666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 30==31
1667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,#0xff
1668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r12,#0xf2			@ done?
1669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 30<15
1671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
1677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#0*4]		@ from future BODY_16_xx
1679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7			@ a^b, b^c in next round
1680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#13*4]	@ from future BODY_16_xx
1681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20	@ Sigma0(a)
1683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12			@ (b^c)&=(a^b)
1684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5			@ d+=h
1685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7			@ Maj(a,b,c)
1686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
1687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
1688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r2,[sp,#0*4]		@ 31
1689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ ldr	r1,[sp,#13*4]
1690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r0,r2,ror#7
1691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
1692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r3,r1,ror#17
1693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,ror#18
1694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,ror#19
1695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#15*4]
1697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#8*4]
1699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r3,r3,r0
1701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5	@ from BODY_00_15
1702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r3
1703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r2,r2,r1			@ X[i]
1705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r14],#4			@ *K256++
1706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=X[i]
1707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r2,[sp,#15*4]
1708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
1709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
1711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3			@ h+=K256[i]
1712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11			@ Ch(e,f,g)
1713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
1714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2			@ h+=Ch(e,f,g)
1715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 31==31
1716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,#0xff
1717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r3,#0xf2			@ done?
1718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 31<15
1720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7
1721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r1],#4			@ prefetch
1722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else
1723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrb	r2,[r1,#3]
1724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif
1725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
1726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#1*4]		@ from future BODY_16_xx
1728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6			@ a^b, b^c in next round
1729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#14*4]	@ from future BODY_16_xx
1730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3			@ (b^c)&=(a^b)
1733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4			@ d+=h
1734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6			@ Maj(a,b,c)
1735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldreq	r3,[sp,#16*4]		@ pull ctx
1738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	bne	.Lrounds_16_xx
1739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12		@ h+=Maj(a,b,c) from the past
1741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r0,[r3,#0]
1742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r3,#4]
1743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r3,#8]
1744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0
1745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r0,[r3,#12]
1746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
1747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r3,#16]
1748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12
1749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r3,#20]
1750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0
1751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r0,[r3,#24]
1752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
1753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r3,#28]
1754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12
1755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[sp,#17*4]		@ pull inp
1756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[sp,#18*4]		@ pull inp+len
1757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0
1758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
1759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	stmia	r3,{r4,r5,r6,r7,r8,r9,r10,r11}
1760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	cmp	r1,r12
1761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r14,r14,#256	@ rewind Ktbl
1762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	bne	.Loop
1763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	sp,sp,#19*4	@ destroy frame
1765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=5
1766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldmia	sp!,{r4-r11,pc}
1767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
1768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldmia	sp!,{r4-r11,lr}
1769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	tst	lr,#1
1770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	moveq	pc,lr			@ be binary compatible with V4, yet
1771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
1772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
1773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7
1774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.fpu	neon
1775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
1776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LNEON:
1777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	stmdb	sp!,{r4-r12,lr}
1778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov	r12,sp
1780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	sp,sp,#16*4+16		@ alloca
1781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r14,r3,#256+32	@ K256
1782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	bic	sp,sp,#15		@ align for 128-bit stores
1783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q0},[r1]!
1785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q1},[r1]!
1786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q2},[r1]!
1787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q3},[r1]!
1788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32		{q8},[r14,:128]!
1789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32		{q9},[r14,:128]!
1790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32		{q10},[r14,:128]!
1791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32		{q11},[r14,:128]!
1792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q0,q0		@ yes, even on
1793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str		r0,[sp,#64]
1794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q1,q1		@ big-endian
1795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str		r1,[sp,#68]
1796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov		r1,sp
1797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q2,q2
1798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str		r2,[sp,#72]
1799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q3,q3
1800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str		r12,[sp,#76]		@ save original sp
1801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q0
1802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q9,q9,q1
1803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32		{q8},[r1,:128]!
1804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q10,q10,q2
1805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32		{q9},[r1,:128]!
1806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q11,q11,q3
1807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32		{q10},[r1,:128]!
1808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32		{q11},[r1,:128]!
1809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldmia		r0,{r4-r11}
1811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub		r1,r1,#64
1812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr		r2,[sp,#0]
1813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor		r12,r12,r12
1814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor		r3,r5,r6
1815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	b		.L_00_48
1816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	4
1818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.L_00_48:
1819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q8,q0,q1,#4
1820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
1821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
1822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
1823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q9,q2,q3,#4
1824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12
1825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
1826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r8,ror#19
1827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q10,q8,#7
1828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
1829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10
1830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q0,q0,q9
1831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12,ror#6
1832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5
1833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q9,q8,#3
1834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20
1835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
1836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q10,q8,#25
1837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#4]
1838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
1839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q11,q8,#18
1840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11
1841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2
1842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5
1843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q10
1844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
1845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q11,q8,#14
1846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
1847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
1848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d7,#17
1849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3
1850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
1851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q11
1852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r7,ror#19
1853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
1854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d7,#15
1855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9
1856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3,ror#6
1857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d7,#10
1858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4
1859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20
1860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q0,q0,q9
1861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
1862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#8]
1863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
1865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10
1866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d7,#19
1867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2
1868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4
1869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d7,#13
1870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
1871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
1872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
1874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12
1875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d0,d0,d25
1876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r6,ror#19
1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d0,#17
1879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
1880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8
1881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d0,#15
1882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12,ror#6
1883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11
1884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d0,#10
1885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20
1886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
1887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#12]
1889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
1890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d0,#19
1891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9
1892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2
1893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11
1894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
1895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
1896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d0,#13
1897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
1898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
1899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3
1901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
1902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d1,d1,d25
1903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r5,ror#19
1904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
1905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q0
1906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7
1907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3,ror#6
1908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10
1909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20
1910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
1911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#16]
1912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8
1914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
1915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2
1916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10
1917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q8,q1,q2,#4
1918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
1919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
1920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
1921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q9,q3,q0,#4
1922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12
1923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
1924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r4,ror#19
1925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q10,q8,#7
1926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
1927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6
1928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q1,q1,q9
1929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12,ror#6
1930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9
1931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q9,q8,#3
1932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20
1933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
1934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q10,q8,#25
1935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#20]
1936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
1937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q11,q8,#18
1938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7
1939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2
1940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9
1941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q10
1942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
1943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q11,q8,#14
1944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
1945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
1946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d1,#17
1947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3
1948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
1949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q11
1950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r11,ror#19
1951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
1952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d1,#15
1953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5
1954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3,ror#6
1955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d1,#10
1956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8
1957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20
1958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q1,q1,q9
1959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
1960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#24]
1961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
1963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6
1964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d1,#19
1965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2
1966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8
1967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d1,#13
1968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
1969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
1970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
1972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12
1973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d2,d2,d25
1974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
1975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r10,ror#19
1976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d2,#17
1977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
1978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4
1979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d2,#15
1980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12,ror#6
1981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7
1982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d2,#10
1983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20
1984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
1985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#28]
1987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
1988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d2,#19
1989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5
1990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2
1991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7
1992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
1993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
1994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d2,#13
1995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
1996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
1997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
1998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3
1999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
2000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d3,d3,d25
2001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r9,ror#19
2002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
2003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q1
2004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11
2005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3,ror#6
2006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6
2007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20
2008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#32]
2010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4
2012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2
2014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6
2015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q8,q2,q3,#4
2016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
2017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
2018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
2019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q9,q0,q1,#4
2020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12
2021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
2022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r8,ror#19
2023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q10,q8,#7
2024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
2025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10
2026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q2,q2,q9
2027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12,ror#6
2028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5
2029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q9,q8,#3
2030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20
2031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
2032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q10,q8,#25
2033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#36]
2034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q11,q8,#18
2036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11
2037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2
2038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5
2039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q10
2040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
2041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q11,q8,#14
2042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
2043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
2044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d3,#17
2045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3
2046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
2047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q11
2048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r7,ror#19
2049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
2050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d3,#15
2051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9
2052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3,ror#6
2053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d3,#10
2054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4
2055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20
2056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q2,q2,q9
2057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
2058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#40]
2059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10
2062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d3,#19
2063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2
2064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4
2065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d3,#13
2066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
2067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
2068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
2070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12
2071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d4,d4,d25
2072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
2073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r6,ror#19
2074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d4,#17
2075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
2076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8
2077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d4,#15
2078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12,ror#6
2079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11
2080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d4,#10
2081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20
2082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
2083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#44]
2085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d4,#19
2087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9
2088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2
2089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11
2090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
2091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
2092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d4,#13
2093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
2094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
2095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3
2097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
2098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d5,d5,d25
2099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r5,ror#19
2100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
2101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q2
2102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7
2103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3,ror#6
2104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10
2105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20
2106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
2107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#48]
2108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8
2110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2
2112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10
2113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q8,q3,q0,#4
2114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
2115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
2116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
2117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vext.8	q9,q1,q2,#4
2118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12
2119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
2120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r4,ror#19
2121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q10,q8,#7
2122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
2123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6
2124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q3,q3,q9
2125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12,ror#6
2126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9
2127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q9,q8,#3
2128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20
2129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
2130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q10,q8,#25
2131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#52]
2132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	q11,q8,#18
2134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7
2135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2
2136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9
2137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q10
2138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
2139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	q11,q8,#14
2140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
2141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
2142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d5,#17
2143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3
2144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
2145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	q9,q9,q11
2146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r11,ror#19
2147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
2148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d5,#15
2149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5
2150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3,ror#6
2151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d5,#10
2152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8
2153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20
2154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q3,q3,q9
2155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
2156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#56]
2157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6
2160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d5,#19
2161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2
2162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8
2163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d5,#13
2164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
2165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
2166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
2168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12
2169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d6,d6,d25
2170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
2171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r10,ror#19
2172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d6,#17
2173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
2174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4
2175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d6,#15
2176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12,ror#6
2177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7
2178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d25,d6,#10
2179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20
2180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
2181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#60]
2183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vshr.u32	d24,d6,#19
2185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5
2186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2
2187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7
2188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
2189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vsli.32	d24,d6,#13
2191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
2192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
2193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	veor	d25,d25,d24
2194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3
2195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
2196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	d7,d7,d25
2197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r9,ror#19
2198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
2199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q3
2200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11
2201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3,ror#6
2202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6
2203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20
2204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[r14]
2206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4
2208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2
2210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6
2211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	teq	r2,#0				@ check for K256 terminator
2212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#0]
2213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub	r1,r1,#64
2214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	bne	.L_00_48
2215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr		r1,[sp,#68]
2217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr		r0,[sp,#72]
2218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	sub		r14,r14,#256	@ rewind r14
2219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	teq		r1,r0
2220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	subeq		r1,r1,#64		@ avoid SEGV
2221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q0},[r1]!		@ load next input block
2222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q1},[r1]!
2223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q2},[r1]!
2224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.8		{q3},[r1]!
2225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	strne		r1,[sp,#68]
2226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	mov		r1,sp
2227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
2228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
2229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
2230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12
2231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
2232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
2233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r8,ror#19
2234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
2235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10
2236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q0,q0
2237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12,ror#6
2238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5
2239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20
2240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
2241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q0
2242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#4]
2243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11
2245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2
2246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5
2247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
2248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
2249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
2250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3
2251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
2252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r7,ror#19
2253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
2254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9
2255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3,ror#6
2256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4
2257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20
2258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
2259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#8]
2260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10
2262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2
2263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4
2264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
2265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
2266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
2267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12
2268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
2269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r6,ror#19
2270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
2271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8
2272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12,ror#6
2273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11
2274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20
2275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
2276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#12]
2277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9
2279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2
2280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11
2281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
2282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
2283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
2284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3
2285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
2286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r5,ror#19
2287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
2288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7
2289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3,ror#6
2290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10
2291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20
2292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
2293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#16]
2294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8
2296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2
2297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10
2298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
2300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
2301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
2302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12
2303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
2304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
2305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r4,ror#19
2306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
2307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6
2308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q1,q1
2309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12,ror#6
2310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9
2311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20
2312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
2313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q1
2314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#20]
2315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7
2317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2
2318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9
2319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
2320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
2321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
2322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3
2323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
2324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r11,ror#19
2325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
2326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5
2327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3,ror#6
2328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8
2329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20
2330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
2331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#24]
2332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6
2334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2
2335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8
2336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
2337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
2338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
2339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12
2340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
2341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r10,ror#19
2342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
2343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4
2344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12,ror#6
2345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7
2346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20
2347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
2348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#28]
2349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5
2351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2
2352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7
2353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
2355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
2356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3
2357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
2358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r9,ror#19
2359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
2360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11
2361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3,ror#6
2362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6
2363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20
2364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#32]
2366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4
2368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2
2369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6
2370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
2372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r9,r10
2373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#5
2374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12
2375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
2376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r8
2377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r8,ror#19
2378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#11
2379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r10
2380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q2,q2
2381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r12,ror#6
2382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r4,r5
2383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r4,ror#20
2384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r2
2385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q2
2386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#36]
2387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r11
2389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r0,ror#2
2390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r5
2391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
2392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r8,r9
2393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#5
2394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r3
2395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r7
2396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r7,ror#19
2397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#11
2398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r9
2399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3,ror#6
2400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r11,r4
2401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r11,ror#20
2402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r2
2403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#40]
2404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r10
2406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r0,ror#2
2407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r4
2408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
2409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r7,r8
2410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#5
2411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r12
2412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r6
2413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r6,ror#19
2414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#11
2415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r8
2416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12,ror#6
2417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r10,r11
2418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r10,ror#20
2419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r2
2420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#44]
2421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r9
2423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r0,ror#2
2424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r11
2425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
2426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r6,r7
2427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#5
2428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r3
2429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r5
2430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r5,ror#19
2431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#11
2432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r7
2433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r3,ror#6
2434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r9,r10
2435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r9,ror#20
2436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r2
2437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#48]
2438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r8
2440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0,ror#2
2441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r10
2442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
2444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r5,r6
2445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r4,r4,ror#5
2446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r12
2447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vld1.32	{q8},[r14,:128]!
2448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r4
2449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r4,ror#19
2450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r8,r8,ror#11
2451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r6
2452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vrev32.8	q3,q3
2453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r12,ror#6
2454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r8,r9
2455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r8,ror#20
2456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r2
2457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vadd.i32	q8,q8,q3
2458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#52]
2459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r7
2461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r0,ror#2
2462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r9
2463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
2464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r4,r5
2465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r11,r11,ror#5
2466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r3
2467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r11
2468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r11,ror#19
2469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r7,r7,ror#11
2470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r5
2471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3,ror#6
2472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r7,r8
2473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r7,ror#20
2474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r2
2475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#56]
2476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r6
2478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r0,ror#2
2479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r8
2480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
2481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r11,r4
2482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r10,r10,ror#5
2483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r12
2484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r10
2485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r0,r10,ror#19
2486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r6,r6,ror#11
2487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r4
2488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12,ror#6
2489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r6,r7
2490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r6,ror#20
2491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r2
2492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#60]
2493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r3,r3,r12
2494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r5
2495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r0,ror#2
2496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r3,r7
2497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r10,r11
2499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r9,r9,ror#5
2500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r3
2501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r2,r2,r9
2502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r0,r9,ror#19
2503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r5,r5,ror#11
2504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r2,r2,r11
2505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r3,ror#6
2506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r3,r5,r6
2507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r0,r0,r5,ror#20
2508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r2
2509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r2,[sp,#64]
2510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	and	r12,r12,r3
2511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r4
2512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0,ror#2
2513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eor	r12,r12,r6
2514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	vst1.32	{q8},[r1,:128]!
2515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r0,[r2,#0]
2516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
2517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r2,#4]
2518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r2,#8]
2519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[r2,#12]
2520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r4,r4,r0			@ accumulate
2521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r0,[r2,#16]
2522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r5,r5,r12
2523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r12,[r2,#20]
2524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r6,r6,r3
2525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r3,[r2,#24]
2526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r7,r7,r1
2527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldr	r1,[r2,#28]
2528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r8,r8,r0
2529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r4,[r2],#4
2530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r9,r9,r12
2531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r5,[r2],#4
2532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r10,r10,r3
2533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r6,[r2],#4
2534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	add	r11,r11,r1
2535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	str	r7,[r2],#4
2536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	stmia	r2,{r8-r11}
2537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	movne	r1,sp
2539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldrne	r2,[sp,#0]
2540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eorne	r12,r12,r12
2541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldreq	sp,[sp,#76]			@ restore original sp
2542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	eorne	r3,r5,r6
2543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	bne	.L_00_48
2544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch	ldmia	sp!,{r4-r12,pc}
2546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
2547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size   sha256_block_data_order,.-sha256_block_data_order
2548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.asciz  "SHA256 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
2549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align	2
2550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.comm   OPENSSL_armcap_P,4,4
2551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
2553