1b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root#if defined(__arm__)
2b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root#include <openssl/arm_arch.h>
3d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
4d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.text
5d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.code	32
6d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
7e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.globl	sha1_block_data_order
8d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	sha1_block_data_order,%function
9d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
10d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	5
11d9e397b599b13d642138480a28c14db7a136bf0Adam Langleysha1_block_data_order:
12d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_MAX_ARCH__>=7
13d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r3,pc,#8		@ sha1_block_data_order
14d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,.LOPENSSL_armcap
15d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
16e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#ifdef	__APPLE__
17e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ldr	r12,[r12]
18e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley#endif
19d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	tst	r12,#ARMV8_SHA1
20d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.LARMv8
21d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	tst	r12,#ARMV7_NEON
22d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.LNEON
23d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
24e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
25d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
26d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldmia	r0,{r3,r4,r5,r6,r7}
27d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Lloop:
28d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r8,.LK_00_19
29d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r14,sp
30d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	sp,sp,#15*4
31d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#30
32d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#30
33d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#30		@ [6]
34d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.L_00_15:
35d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__<7
36d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r10,[r1,#2]
37d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r9,[r1,#3]
38d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r11,[r1,#1]
39d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r8,r7,ror#2			@ E+=K_00_19
40d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r12,[r1],#4
41d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r10,lsl#8
42d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r6			@ F_xx_xx
43d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r11,lsl#16
44d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
45d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r12,lsl#24
46d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
47d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r1],#4			@ handles unaligned
48d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r8,r7,ror#2			@ E+=K_00_19
49d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r6			@ F_xx_xx
50d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
51d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __ARMEL__
52d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	rev	r9,r9				@ byte swap
53d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
54d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
55d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r4,r10,ror#2
56d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9			@ E+=X[i]
57d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r6,ror#2		@ F_00_19(B,C,D)
58d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
59d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10			@ E+=F_00_19(B,C,D)
60d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__<7
61d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r10,[r1,#2]
62d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r9,[r1,#3]
63d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r11,[r1,#1]
64d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r8,r6,ror#2			@ E+=K_00_19
65d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r12,[r1],#4
66d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r10,lsl#8
67d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r5			@ F_xx_xx
68d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r11,lsl#16
69d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
70d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r12,lsl#24
71d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
72d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r1],#4			@ handles unaligned
73d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r8,r6,ror#2			@ E+=K_00_19
74d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r5			@ F_xx_xx
75d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
76d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __ARMEL__
77d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	rev	r9,r9				@ byte swap
78d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
79d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
80d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r3,r10,ror#2
81d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9			@ E+=X[i]
82d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
83d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
84d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10			@ E+=F_00_19(B,C,D)
85d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__<7
86d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r10,[r1,#2]
87d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r9,[r1,#3]
88d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r11,[r1,#1]
89d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r8,r5,ror#2			@ E+=K_00_19
90d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r12,[r1],#4
91d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r10,lsl#8
92d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r4			@ F_xx_xx
93d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r11,lsl#16
94d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
95d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r12,lsl#24
96d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
97d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r1],#4			@ handles unaligned
98d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r8,r5,ror#2			@ E+=K_00_19
99d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r4			@ F_xx_xx
100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __ARMEL__
102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	rev	r9,r9				@ byte swap
103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r7,r10,ror#2
106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9			@ E+=X[i]
107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10			@ E+=F_00_19(B,C,D)
110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__<7
111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r10,[r1,#2]
112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r9,[r1,#3]
113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r11,[r1,#1]
114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r8,r4,ror#2			@ E+=K_00_19
115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r12,[r1],#4
116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r10,lsl#8
117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r3			@ F_xx_xx
118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r11,lsl#16
119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r12,lsl#24
121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r1],#4			@ handles unaligned
123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r8,r4,ror#2			@ E+=K_00_19
124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r3			@ F_xx_xx
125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __ARMEL__
127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	rev	r9,r9				@ byte swap
128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r6,r10,ror#2
131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9			@ E+=X[i]
132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10			@ E+=F_00_19(B,C,D)
135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__<7
136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r10,[r1,#2]
137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r9,[r1,#3]
138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r11,[r1,#1]
139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r8,r3,ror#2			@ E+=K_00_19
140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r12,[r1],#4
141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r10,lsl#8
142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r7			@ F_xx_xx
143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r11,lsl#16
144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r12,lsl#24
146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r1],#4			@ handles unaligned
148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r8,r3,ror#2			@ E+=K_00_19
149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r7			@ F_xx_xx
150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __ARMEL__
152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	rev	r9,r9				@ byte swap
153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r5,r10,ror#2
156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9			@ E+=X[i]
157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	teq	r14,sp
161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.L_00_15		@ [((11+4)*5+2)*3]
162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	sp,sp,#25*4
163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__<7
164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r10,[r1,#2]
165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r9,[r1,#3]
166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r11,[r1,#1]
167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r8,r7,ror#2			@ E+=K_00_19
168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrb	r12,[r1],#4
169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r10,lsl#8
170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r6			@ F_xx_xx
171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r11,lsl#16
172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	orr	r9,r9,r12,lsl#24
174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r1],#4			@ handles unaligned
176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r8,r7,ror#2			@ E+=K_00_19
177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r6			@ F_xx_xx
178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#ifdef __ARMEL__
180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	rev	r9,r9				@ byte swap
181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r4,r10,ror#2
184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9			@ E+=X[i]
185d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r6,ror#2		@ F_00_19(B,C,D)
186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10			@ E+=F_00_19(B,C,D)
188d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r5			@ F_xx_xx
196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
200e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r3,r10,ror#2					@ F_xx_xx
201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9			@ E+=X[i]
203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10			@ E+=F_00_19(B,C,D)
205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r4			@ F_xx_xx
213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
217e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r7,r10,ror#2					@ F_xx_xx
218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9			@ E+=X[i]
220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10			@ E+=F_00_19(B,C,D)
222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r3			@ F_xx_xx
230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
234e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r6,r10,ror#2					@ F_xx_xx
235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9			@ E+=X[i]
237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10			@ E+=F_00_19(B,C,D)
239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r7			@ F_xx_xx
247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
251e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r5,r10,ror#2					@ F_xx_xx
252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9			@ E+=X[i]
254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10			@ E+=F_00_19(B,C,D)
256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r8,.LK_20_39		@ [+15+16*4]
258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmn	sp,#0			@ [+3], clear carry to denote 20_39
259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.L_20_39_or_60_79:
260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r8,r7,ror#2			@ E+=K_xx_xx
264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r6			@ F_xx_xx
268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
272e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	eor	r10,r4,r10,ror#2					@ F_xx_xx
273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9			@ E+=X[i]
275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10			@ E+=F_20_39(B,C,D)
276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
278d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r5			@ F_xx_xx
284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
288e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	eor	r10,r3,r10,ror#2					@ F_xx_xx
289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9			@ E+=X[i]
291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10			@ E+=F_20_39(B,C,D)
292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r4			@ F_xx_xx
300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
304e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	eor	r10,r7,r10,ror#2					@ F_xx_xx
305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9			@ E+=X[i]
307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10			@ E+=F_20_39(B,C,D)
308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r3			@ F_xx_xx
316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
320e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	eor	r10,r6,r10,ror#2					@ F_xx_xx
321d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9			@ E+=X[i]
323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10			@ E+=F_20_39(B,C,D)
324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
327d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
329d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r7			@ F_xx_xx
332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
336e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	eor	r10,r5,r10,ror#2					@ F_xx_xx
337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley						@ F_xx_xx
338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9			@ E+=X[i]
339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10			@ E+=F_20_39(B,C,D)
340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	teq	r14,sp			@ preserve carry
341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.L_20_39_or_60_79	@ [+((12+3)*5+2)*4]
342d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bcs	.L_done			@ [+((12+3)*5+2)*4], spare 300 bytes
343d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r8,.LK_40_59
345d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	sp,sp,#20*4		@ [+2]
346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.L_40_59:
347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
348d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
349d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
350d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r8,r7,ror#2			@ E+=K_xx_xx
351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
354d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r6			@ F_xx_xx
355d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
357d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
358d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
359e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r4,r10,ror#2					@ F_xx_xx
360e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r11,r5,r6					@ F_xx_xx
361d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9			@ E+=X[i]
362d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10			@ E+=F_40_59(B,C,D)
363d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11,ror#2
364d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
366d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
367d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r8,r6,ror#2			@ E+=K_xx_xx
368d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
369d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
371d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r5			@ F_xx_xx
372d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
373d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
374d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
376e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r3,r10,ror#2					@ F_xx_xx
377e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r11,r4,r5					@ F_xx_xx
378d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9			@ E+=X[i]
379d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10			@ E+=F_40_59(B,C,D)
380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11,ror#2
381d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
382d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
383d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
384d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r8,r5,ror#2			@ E+=K_xx_xx
385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
386d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
387d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
388d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r4			@ F_xx_xx
389d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
391d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
392d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
393e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r7,r10,ror#2					@ F_xx_xx
394e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r11,r3,r4					@ F_xx_xx
395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9			@ E+=X[i]
396d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10			@ E+=F_40_59(B,C,D)
397d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11,ror#2
398d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
399d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
400d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
401d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r8,r4,ror#2			@ E+=K_xx_xx
402d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
403d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
404d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r3			@ F_xx_xx
406d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
407d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
408d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
409d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
410e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r6,r10,ror#2					@ F_xx_xx
411e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r11,r7,r3					@ F_xx_xx
412d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9			@ E+=X[i]
413d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10			@ E+=F_40_59(B,C,D)
414d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11,ror#2
415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r14,#15*4]
416d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r10,[r14,#13*4]
417d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r11,[r14,#7*4]
418d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r8,r3,ror#2			@ E+=K_xx_xx
419d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r12,[r14,#2*4]
420d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r10
421d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r12			@ 1 cycle stall
422d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r7			@ F_xx_xx
423d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r9,r9,ror#31
424d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r9,r9,r11,ror#31
426d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	str	r9,[r14,#-4]!
427e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r10,r5,r10,ror#2					@ F_xx_xx
428e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	r11,r6,r7					@ F_xx_xx
429d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9			@ E+=X[i]
430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10			@ E+=F_40_59(B,C,D)
431d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11,ror#2
432d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	teq	r14,sp
433d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.L_40_59		@ [+((12+5)*5+2)*4]
434d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r8,.LK_60_79
436d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	sp,sp,#20*4
437d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	cmp	sp,#0			@ set carry to denote 60_79
438d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	b	.L_20_39_or_60_79	@ [+4], spare 300 bytes
439d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.L_done:
440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	sp,sp,#80*4		@ "deallocate" stack frame
441d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldmia	r0,{r8,r9,r10,r11,r12}
442d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r8,r3
443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r9,r4
444d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r10,r5,ror#2
445d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r11,r6,ror#2
446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r12,r7,ror#2
447d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	stmia	r0,{r3,r4,r5,r6,r7}
448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	teq	r1,r2
449d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.Lloop			@ [+18], total 1307
450d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
451d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_ARCH__>=5
452e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#else
454e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	tst	lr,#1
456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	moveq	pc,lr			@ be binary compatible with V4, yet
457e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
458d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	sha1_block_data_order,.-sha1_block_data_order
460d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
461d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	5
462e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.LK_00_19:.word	0x5a827999
463e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.LK_20_39:.word	0x6ed9eba1
464e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.LK_40_59:.word	0x8f1bbcdc
465e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.LK_60_79:.word	0xca62c1d6
466d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_MAX_ARCH__>=7
467d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.LOPENSSL_armcap:
468d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.word	OPENSSL_armcap_P-sha1_block_data_order
469d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
470e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,47,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
471e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.align	2
472d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	5
473d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_MAX_ARCH__>=7
474d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.arch	armv7-a
475d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.fpu	neon
476d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
477d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	sha1_block_data_order_neon,%function
478d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	4
479d9e397b599b13d642138480a28c14db7a136bf0Adam Langleysha1_block_data_order_neon:
480d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.LNEON:
481e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
482d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
483d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	@ dmb				@ errata #451034 on early Cortex A8
484d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	@ vstmdb	sp!,{d8-d15}	@ ABI specification says so
485d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r14,sp
486d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	sp,sp,#64		@ alloca
487d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adr	r8,.LK_00_19
488d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	sp,sp,#15		@ align for 128-bit stores
489d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
490d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldmia	r0,{r3,r4,r5,r6,r7}	@ load context
491d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r12,sp
492d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
493e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.8	{q0,q1},[r1]!	@ handles unaligned
494e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	veor	q15,q15,q15
495e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.8	{q2,q3},[r1]!
496e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.32	{d28[],d29[]},[r8,:32]!	@ load K_00_19
497d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q0,q0		@ yes, even on
498d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q1,q1		@ big-endian...
499d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q2,q2
500d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q8,q0,q14
501d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q3,q3
502d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q9,q1,q14
503e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vst1.32	{q8},[r12,:128]!
504d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q10,q2,q14
505e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vst1.32	{q9},[r12,:128]!
506e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vst1.32	{q10},[r12,:128]!
507e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ldr	r9,[sp]			@ big RAW stall
508d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
509d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_neon:
510d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q8,q0,q1,#8
511d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r6,r4
512d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
513d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r5,r4
514d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q3,q14
515d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#4]
516d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
517d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q3,q15,#4
518d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
519d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
520d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
521d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q8,q8,q0
522d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r5,r3
523d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
524d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q2
525d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r4,r3
526d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#8]
527d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q8
528d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
529d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
530d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
531d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r12,r12,#64
532d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
533d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
534d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q13,q15,q12,#4
535d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r4,r7
536d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
537d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q8,q12,q12
538d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r3,r7
539d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#12]
540d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsri.32	q8,q12,#31
541d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
542d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
543d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
544d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q12,q13,#30
545d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
546d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r3,r6
547d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshl.u32	q13,q13,#2
548d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
549d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r7,r6
550d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q8,q8,q12
551d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#16]
552d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
553d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q8,q8,q13
554d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
555d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
556d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
557d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q9,q1,q2,#8
558d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r7,r5
559d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
560d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r6,r5
561d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q8,q14
562d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#20]
563d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d28[],d29[]},[r8,:32]!
564d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
565d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q8,q15,#4
566d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
567d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
568d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
569d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q9,q9,q1
570d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r6,r4
571d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
572d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q3
573d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r5,r4
574d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#24]
575d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q9
576d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
577d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
578d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
579d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
580d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
581d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q13,q15,q12,#4
582d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r5,r3
583d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
584d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q9,q12,q12
585d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r4,r3
586d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#28]
587d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsri.32	q9,q12,#31
588d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
589d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
590d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
591d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q12,q13,#30
592d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
593d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r4,r7
594d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshl.u32	q13,q13,#2
595d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
596d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r3,r7
597d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q9,q9,q12
598d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#32]
599d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
600d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q9,q9,q13
601d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
602d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
603d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
604d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q10,q2,q3,#8
605d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r3,r6
606d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
607d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r7,r6
608d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q9,q14
609d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#36]
610d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
611d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q9,q15,#4
612d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
613d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
614d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
615d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q10,q10,q2
616d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r7,r5
617d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
618d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q8
619d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r6,r5
620d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#40]
621d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q10
622d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
623d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
624d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
625d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
626d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
627d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q13,q15,q12,#4
628d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r6,r4
629d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
630d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q10,q12,q12
631d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r5,r4
632d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#44]
633d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsri.32	q10,q12,#31
634d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
635d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
636d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
637d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q12,q13,#30
638d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
639d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r5,r3
640d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshl.u32	q13,q13,#2
641d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
642d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r4,r3
643d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q10,q10,q12
644d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#48]
645d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
646d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q10,q10,q13
647d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
648d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
649d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
650d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q11,q3,q8,#8
651d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r4,r7
652d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
653d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r3,r7
654d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q10,q14
655d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#52]
656d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
657d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q10,q15,#4
658d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
659d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
660d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
661d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q11,q11,q3
662d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r3,r6
663d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
664d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q9
665d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r7,r6
666d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#56]
667d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q11
668d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
669d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
670d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
671d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
672d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
673d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q13,q15,q12,#4
674d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r7,r5
675d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
676d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q11,q12,q12
677d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r6,r5
678d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#60]
679d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsri.32	q11,q12,#31
680d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
681d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
682d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
683d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q12,q13,#30
684d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
685d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r6,r4
686d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshl.u32	q13,q13,#2
687d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
688d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r5,r4
689d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q11,q11,q12
690d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#0]
691d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
692d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q11,q11,q13
693d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
694d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
695d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
696d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q10,q11,#8
697d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r5,r3
698d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
699d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r4,r3
700d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q0,q0,q8
701d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#4]
702d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
703d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q0,q0,q1
704d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
705d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
706d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q11,q14
707d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
708d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r4,r7
709d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q0
710d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
711d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r3,r7
712d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q0,q12,#30
713d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#8]
714d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
715d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
716d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r12,r12,#64
717d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
718d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
719d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q0,q12,#2
720d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
721d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r3,r6
722d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
723d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r7,r6
724d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#12]
725d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
726d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
727d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
728d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
729d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bic	r10,r7,r5
730d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
731d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r6,r5
732d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#16]
733d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
734d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r11,r10
735d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
736d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
737d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q11,q0,#8
738d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
739d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
740d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#20]
741d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q1,q1,q9
742d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
743d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
744d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q1,q1,q2
745d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
746d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
747d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q0,q14
748d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
749d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
750d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q1
751d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#24]
752d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
753d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q1,q12,#30
754d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
755d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
756d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
757d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
758d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
759d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q1,q12,#2
760d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
761d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#28]
762d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
763d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
764d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
765d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
766d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
767d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
768d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#32]
769d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
770d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
771d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
772d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
773d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q0,q1,#8
774d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
775d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
776d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#36]
777d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q2,q2,q10
778d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
779d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
780d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q2,q2,q3
781d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
782d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
783d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q1,q14
784d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
785d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d28[],d29[]},[r8,:32]!
786d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
787d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q2
788d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#40]
789d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
790d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q2,q12,#30
791d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
792d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
793d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
794d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
795d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
796d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q2,q12,#2
797d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
798d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#44]
799d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
800d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
801d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
802d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
803d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
804d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
805d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#48]
806d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
807d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
808d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
809d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
810d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q1,q2,#8
811d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
812d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
813d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#52]
814d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q3,q3,q11
815d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
816d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
817d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q3,q3,q8
818d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
819d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
820d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q2,q14
821d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
822d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
823d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q3
824d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#56]
825d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
826d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q3,q12,#30
827d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
828d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
829d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
830d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
831d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
832d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q3,q12,#2
833d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
834d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#60]
835d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
836d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
837d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
838d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
839d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
840d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
841d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#0]
842d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
843d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
844d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
845d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
846d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q2,q3,#8
847d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
848d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
849d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#4]
850d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q8,q8,q0
851d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
852d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
853d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q8,q8,q9
854d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
855d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
856d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q3,q14
857d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
858d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
859d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q8
860d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#8]
861d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
862d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q8,q12,#30
863d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
864d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
865d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
866d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r12,r12,#64
867d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
868d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
869d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q8,q12,#2
870d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
871d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#12]
872d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
873d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
874d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
875d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
876d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
877d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
878d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#16]
879d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
880d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
881d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
882d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
883d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q3,q8,#8
884d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
885d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
886d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#20]
887d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q9,q9,q1
888d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
889d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
890d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q9,q9,q10
891d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
892d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
893d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q8,q14
894d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
895d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
896d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q9
897d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#24]
898d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
899d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q9,q12,#30
900d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
901d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
902d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
903d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
904d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
905d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q9,q12,#2
906d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
907d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#28]
908d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
909d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
910d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
911d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
912d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
913d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
914d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#32]
915d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
916d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
917d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
918d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
919d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q8,q9,#8
920d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
921d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r5,r6
922d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#36]
923d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q10,q10,q2
924d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
925d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r5,r6
926d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q10,q10,q11
927d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10
928d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r4
929d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q9,q14
930d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
931d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
932d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q10
933d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
934d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r4,r5
935d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q10,q12,#30
936d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#40]
937d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
938d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
939d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r4,r5
940d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10
941d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q10,q12,#2
942d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r3
943d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
944d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
945d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
946d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r3,r4
947d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#44]
948d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
949d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r3,r4
950d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10
951d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r7
952d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
953d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
954d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
955d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r7,r3
956d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#48]
957d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
958d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r7,r3
959d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10
960d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r6
961d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
962d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
963d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q9,q10,#8
964d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
965d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r6,r7
966d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#52]
967d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q11,q11,q3
968d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
969d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r6,r7
970d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q11,q11,q0
971d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10
972d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r5
973d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q10,q14
974d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
975d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d28[],d29[]},[r8,:32]!
976d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
977d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q11
978d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
979d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r5,r6
980d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q11,q12,#30
981d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#56]
982d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
983d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
984d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r5,r6
985d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10
986d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q11,q12,#2
987d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r4
988d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
989d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
990d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
991d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r4,r5
992d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#60]
993d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
994d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r4,r5
995d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10
996d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r3
997d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
998d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
999d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1000d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r3,r4
1001d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#0]
1002d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1003d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r3,r4
1004d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10
1005d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r7
1006d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1007d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1008d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q10,q11,#8
1009d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1010d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r7,r3
1011d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#4]
1012d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q0,q0,q8
1013d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1014d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r7,r3
1015d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q0,q0,q1
1016d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10
1017d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r6
1018d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q11,q14
1019d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1020d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1021d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q0
1022d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1023d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r6,r7
1024d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q0,q12,#30
1025d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#8]
1026d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1027d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
1028d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r12,r12,#64
1029d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r6,r7
1030d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10
1031d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q0,q12,#2
1032d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r5
1033d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1034d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1035d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1036d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r5,r6
1037d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#12]
1038d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
1039d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r5,r6
1040d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10
1041d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r4
1042d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
1043d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
1044d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
1045d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r4,r5
1046d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#16]
1047d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
1048d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r4,r5
1049d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10
1050d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r3
1051d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
1052d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
1053d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q11,q0,#8
1054d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1055d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r3,r4
1056d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#20]
1057d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q1,q1,q9
1058d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1059d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r3,r4
1060d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q1,q1,q2
1061d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10
1062d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r7
1063d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q0,q14
1064d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1065d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1066d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q1
1067d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1068d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r7,r3
1069d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q1,q12,#30
1070d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#24]
1071d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1072d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
1073d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r7,r3
1074d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10
1075d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q1,q12,#2
1076d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r6
1077d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1078d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1079d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1080d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r6,r7
1081d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#28]
1082d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1083d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r6,r7
1084d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10
1085d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r5
1086d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1087d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1088d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1089d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r5,r6
1090d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#32]
1091d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
1092d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r5,r6
1093d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r10
1094d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r4
1095d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
1096d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
1097d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q0,q1,#8
1098d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
1099d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r4,r5
1100d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#36]
1101d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q2,q2,q10
1102d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
1103d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r4,r5
1104d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q2,q2,q3
1105d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r10
1106d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r3
1107d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q1,q14
1108d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
1109d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
1110d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q2
1111d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1112d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r3,r4
1113d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q2,q12,#30
1114d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#40]
1115d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1116d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
1117d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r3,r4
1118d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r10
1119d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q2,q12,#2
1120d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r7
1121d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1122d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1123d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1124d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r7,r3
1125d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#44]
1126d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1127d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r7,r3
1128d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10
1129d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r6
1130d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1131d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1132d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1133d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r10,r6,r7
1134d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#48]
1135d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1136d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r6,r7
1137d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r10
1138d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	and	r11,r11,r5
1139d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1140d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1141d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vext.8	q12,q1,q2,#8
1142d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
1143d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1144d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#52]
1145d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q3,q3,q11
1146d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
1147d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
1148d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q3,q3,q8
1149d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
1150d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
1151d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q2,q14
1152d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
1153d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
1154d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q12,q12,q3
1155d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#56]
1156d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
1157d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vshr.u32	q3,q12,#30
1158d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
1159d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
1160d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
1161d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
1162d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
1163d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vsli.32	q3,q12,#2
1164d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1165d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#60]
1166d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
1167d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1168d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1169d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1170d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
1171d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1172d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#0]
1173d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
1174d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1175d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1176d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1177d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q3,q14
1178d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
1179d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1180d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q13},[r12,:128]!
1181d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r12,r12,#64
1182d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	teq	r1,r2
1183d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r8,r8,#16
1184d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	subeq	r1,r1,#64
1185e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.8	{q0,q1},[r1]!
1186d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#4]
1187d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
1188e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.8	{q2,q3},[r1]!
1189d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1190d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1191d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d28[],d29[]},[r8,:32]!
1192d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1193d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
1194d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q0,q0
1195d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1196d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#8]
1197d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
1198d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
1199d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
1200d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
1201d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
1202d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
1203d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#12]
1204d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
1205d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
1206d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
1207d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
1208d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
1209d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1210d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#16]
1211d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
1212d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1213d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1214d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1215d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q1,q1
1216d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
1217d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1218d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q8,q0,q14
1219d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#20]
1220d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
1221d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q8},[r12,:128]!
1222d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1223d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1224d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1225d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
1226d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1227d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#24]
1228d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
1229d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1230d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1231d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1232d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
1233d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1234d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#28]
1235d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
1236d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
1237d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
1238d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
1239d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
1240d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
1241d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#32]
1242d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
1243d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
1244d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
1245d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
1246d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q2,q2
1247d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
1248d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1249d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q9,q1,q14
1250d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#36]
1251d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
1252d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q9},[r12,:128]!
1253d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1254d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1255d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1256d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
1257d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1258d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#40]
1259d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
1260d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1261d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1262d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1263d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
1264d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1265d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#44]
1266d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
1267d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1268d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1269d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1270d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r4,r6
1271d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1272d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#48]
1273d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r5
1274d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r3,ror#27
1275d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r4,r4,ror#2
1276d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r11
1277d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q3,q3
1278d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r3,r5
1279d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r9
1280d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q10,q2,q14
1281d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#52]
1282d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r4
1283d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vst1.32	{q10},[r12,:128]!
1284d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r7,ror#27
1285d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r3,r3,ror#2
1286d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r11
1287d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r7,r4
1288d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r9
1289d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#56]
1290d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r3
1291d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r6,ror#27
1292d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r7,r7,ror#2
1293d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1294d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r6,r3
1295d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r9
1296d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[sp,#60]
1297d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r7
1298d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r5,ror#27
1299d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r6,r6,ror#2
1300d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r11
1301d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r10,r5,r7
1302d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1303d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	eor	r11,r10,r6
1304d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r4,ror#27
1305d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	mov	r5,r5,ror#2
1306d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r11
1307d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldmia	r0,{r9,r10,r11,r12}	@ accumulate context
1308d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r3,r3,r9
1309d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldr	r9,[r0,#16]
1310d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r4,r4,r10
1311d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r5,r5,r11
1312d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r6,r6,r12
1313d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	moveq	sp,r14
1314d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	add	r7,r7,r9
1315d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	ldrne	r9,[sp]
1316d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	stmia	r0,{r3,r4,r5,r6,r7}
1317d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	addne	r12,sp,#3*16
1318d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bne	.Loop_neon
1319d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1320d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	@ vldmia	sp!,{d8-d15}
1321e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
1322d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	sha1_block_data_order_neon,.-sha1_block_data_order_neon
1323d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
1324d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_MAX_ARCH__>=7
1325d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.type	sha1_block_data_order_armv8,%function
1326d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.align	5
1327d9e397b599b13d642138480a28c14db7a136bf0Adam Langleysha1_block_data_order_armv8:
1328d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.LARMv8:
1329e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}		@ ABI specification says so
1330d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1331d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	veor	q1,q1,q1
1332d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	adr	r3,.LK_00_19
1333d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{q0},[r0]!
1334d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d2[0]},[r0]
1335d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	sub	r0,r0,#16
1336d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d16[],d17[]},[r3,:32]!
1337d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d18[],d19[]},[r3,:32]!
1338d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d20[],d21[]},[r3,:32]!
1339d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vld1.32	{d22[],d23[]},[r3,:32]
1340d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1341d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.Loop_v8:
1342e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.8	{q4,q5},[r1]!
1343e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vld1.8	{q6,q7},[r1]!
1344d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q4,q4
1345d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q5,q5
1346d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1347d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q8,q4
1348d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q6,q6
1349e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vmov	q14,q0	@ offload
1350e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	subs	r2,r2,#1
1351d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1352d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q8,q5
1353d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vrev32.8	q7,q7
1354e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 0
1355e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x02,0xf2	@ sha1c q0,q1,q12
1356d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q8,q6
1357e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
1358e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 1
1359e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
1360d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q8,q7
1361e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
1362e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
1363e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 2
1364e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
1365d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q8,q4
1366e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
1367e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
1368e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 3
1369e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
1370d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q9,q5
1371e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
1372e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
1373e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 4
1374e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
1375d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q9,q6
1376e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
1377e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
1378e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 5
1379e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
1380d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q9,q7
1381e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
1382e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
1383e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 6
1384e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
1385d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q9,q4
1386e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
1387e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
1388e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 7
1389e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
1390d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q9,q5
1391e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
1392e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
1393e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 8
1394e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
1395d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q10,q6
1396e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
1397e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
1398e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 9
1399e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
1400d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q10,q7
1401e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
1402e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
1403e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 10
1404e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
1405d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q10,q4
1406e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
1407e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
1408e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 11
1409e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
1410d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q10,q5
1411e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
1412e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
1413e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 12
1414e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
1415d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q10,q6
1416e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
1417e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
1418e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 13
1419e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
1420d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q11,q7
1421e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
1422e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
1423e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 14
1424e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
1425d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q11,q4
1426e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
1427e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
1428e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 15
1429e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
1430d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q11,q5
1431e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
1432e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
1433e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 16
1434e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
1435d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q12,q11,q6
1436e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
1437e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 17
1438e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
1439d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q13,q11,q7
1440d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1441e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 18
1442e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
1443d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1444e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 19
1445e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
1446d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1447d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q1,q1,q2
1448d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	vadd.i32	q0,q0,q14
1449e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	bne	.Loop_v8
1450d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1451e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vst1.32	{q0},[r0]!
1452e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vst1.32	{d2[0]},[r0]
1453d9e397b599b13d642138480a28c14db7a136bf0Adam Langley
1454e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
1455d9e397b599b13d642138480a28c14db7a136bf0Adam Langley	bx	lr					@ bx lr
1456d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.size	sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
1457d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
1458d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#if __ARM_MAX_ARCH__>=7
1459d9e397b599b13d642138480a28c14db7a136bf0Adam Langley.comm	OPENSSL_armcap_P,4,4
146013066f1c7a8aaacf80e8fe62f31526fa7cae8072Adam Langley.hidden	OPENSSL_armcap_P
1461d9e397b599b13d642138480a28c14db7a136bf0Adam Langley#endif
1462b8494591d1b1a143f3b192d845c238bbf3bc629dKenny Root#endif