sha256-armv4.S revision 3f9e6ada2c9f7183a41081263585e6a70bbd9f59
1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "arm_arch.h"
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.text
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.code	32
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.type	K256,%object
7e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.align	5
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectK256:
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0xd192e819,0xd6990624,0xf40e3585,0x106aa070
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.size	K256,.-K256
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	0				@ terminator
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.LOPENSSL_armcap:
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.word	OPENSSL_armcap_P-sha256_block_data_order
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.align	5
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.global	sha256_block_data_order
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.type	sha256_block_data_order,%function
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectsha256_block_data_order:
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	sub	r3,pc,#8		@ sha256_block_data_order
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,.LOPENSSL_armcap
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	tst	r12,#ARMV8_SHA256
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	bne	.LARMv8
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	tst	r12,#ARMV7_NEON
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	bne	.LNEON
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	stmdb	sp!,{r0,r1,r2,r4-r11,lr}
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldmia	r0,{r4,r5,r6,r7,r8,r9,r10,r11}
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	sub	r14,r3,#256+32	@ K256
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	sub	sp,sp,#16*4		@ alloca(X[16])
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.Loop:
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r5,r6		@ magic
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r12
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 0
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 0==15
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#5
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#19	@ Sigma1(e)
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 0
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 0==15
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#5
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#19	@ Sigma1(e)
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r2			@ h+=X[i]
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#0*4]
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r9,r10
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r8
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r12			@ h+=K256[i]
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r10			@ Ch(e,f,g)
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#11
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r2			@ h+=Ch(e,f,g)
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0==31
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0<15
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r4,r5			@ a^b, b^c in next round
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#2*4]		@ from future BODY_16_xx
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r4,r5			@ a^b, b^c in next round
104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#15*4]	@ from future BODY_16_xx
105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#20	@ Sigma0(a)
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r11			@ d+=h
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r5			@ Maj(a,b,c)
110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 1
114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 1==15
115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r7,r7,ror#5
118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r7,ror#19	@ Sigma1(e)
120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 1
123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 1==15
130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r7,r7,ror#5
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r7,ror#19	@ Sigma1(e)
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r2			@ h+=X[i]
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#1*4]
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r8,r9
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r7
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r3			@ h+=K256[i]
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r9			@ Ch(e,f,g)
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#11
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r2			@ h+=Ch(e,f,g)
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 1==31
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 1<15
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r11,r4			@ a^b, b^c in next round
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#3*4]		@ from future BODY_16_xx
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r11,r4			@ a^b, b^c in next round
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#0*4]	@ from future BODY_16_xx
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#20	@ Sigma0(a)
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r10			@ d+=h
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r4			@ Maj(a,b,c)
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 2
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 2==15
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#5
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#19	@ Sigma1(e)
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 2
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 2==15
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#5
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#19	@ Sigma1(e)
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r2			@ h+=X[i]
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#2*4]
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r7,r8
196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r6
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r12			@ h+=K256[i]
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r8			@ Ch(e,f,g)
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#11
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r2			@ h+=Ch(e,f,g)
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 2==31
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 2<15
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r10,r11			@ a^b, b^c in next round
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#4*4]		@ from future BODY_16_xx
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r10,r11			@ a^b, b^c in next round
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#1*4]	@ from future BODY_16_xx
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#20	@ Sigma0(a)
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r9			@ d+=h
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r11			@ Maj(a,b,c)
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 3
226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 3==15
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#5
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#19	@ Sigma1(e)
232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 3
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 3==15
242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#5
245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#19	@ Sigma1(e)
247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r2			@ h+=X[i]
250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#3*4]
251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r6,r7
252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r5
254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r3			@ h+=K256[i]
255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r7			@ Ch(e,f,g)
256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#11
257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r2			@ h+=Ch(e,f,g)
258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 3==31
259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 3<15
263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r9,r10			@ a^b, b^c in next round
269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#5*4]		@ from future BODY_16_xx
271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r9,r10			@ a^b, b^c in next round
272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#2*4]	@ from future BODY_16_xx
273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r9,ror#20	@ Sigma0(a)
275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r8			@ d+=h
277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r10			@ Maj(a,b,c)
278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 4
282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 4==15
283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#5
286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#19	@ Sigma1(e)
288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 4
291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 4==15
298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#5
301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#19	@ Sigma1(e)
303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r2			@ h+=X[i]
306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#4*4]
307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r5,r6
308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r4
310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r12			@ h+=K256[i]
311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r6			@ Ch(e,f,g)
312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#11
313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r2			@ h+=Ch(e,f,g)
314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 4==31
315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
316049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
318049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 4<15
319049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
320049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
321049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
322049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r8,r9			@ a^b, b^c in next round
325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#6*4]		@ from future BODY_16_xx
327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r8,r9			@ a^b, b^c in next round
328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#3*4]	@ from future BODY_16_xx
329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
330049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#20	@ Sigma0(a)
331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r7			@ d+=h
333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r9			@ Maj(a,b,c)
334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 5
338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 5==15
339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#5
342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#19	@ Sigma1(e)
344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
345049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
346049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 5
347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 5==15
354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
355049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
356049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#5
357049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#19	@ Sigma1(e)
359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r2			@ h+=X[i]
362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#5*4]
363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r4,r5
364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r11
366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r3			@ h+=K256[i]
367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r5			@ Ch(e,f,g)
368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r7,r7,ror#11
369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r2			@ h+=Ch(e,f,g)
370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 5==31
371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
372049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
373049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
374049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 5<15
375049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
376049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
377049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
378049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
379049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
380049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r7,r8			@ a^b, b^c in next round
381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
382049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#7*4]		@ from future BODY_16_xx
383049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r7,r8			@ a^b, b^c in next round
384049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#4*4]	@ from future BODY_16_xx
385049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
386049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r7,ror#20	@ Sigma0(a)
387049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
388049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r6			@ d+=h
389049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r8			@ Maj(a,b,c)
390049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
391049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
392049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
393049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 6
394049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 6==15
395049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
396049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
397049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#5
398049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
399049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#19	@ Sigma1(e)
400049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
401049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
402049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 6
403049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
404049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
405049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
406049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
407049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
408049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
409049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 6==15
410049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
411049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
412049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#5
413049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
414049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#19	@ Sigma1(e)
415049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
416049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
417049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r2			@ h+=X[i]
418049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#6*4]
419049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r11,r4
420049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
421049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r10
422049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r12			@ h+=K256[i]
423049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r4			@ Ch(e,f,g)
424049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#11
425049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r2			@ h+=Ch(e,f,g)
426049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 6==31
427049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
428049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
429049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
430049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 6<15
431049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
432049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
433049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
434049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
435049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
436049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r6,r7			@ a^b, b^c in next round
437049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
438049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#8*4]		@ from future BODY_16_xx
439049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r6,r7			@ a^b, b^c in next round
440049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#5*4]	@ from future BODY_16_xx
441049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
442049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#20	@ Sigma0(a)
443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
444049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r5			@ d+=h
445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r7			@ Maj(a,b,c)
446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
448049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
449049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 7
450049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 7==15
451049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
452049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
453049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#5
454049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r9,ror#19	@ Sigma1(e)
456049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
457049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
458049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 7
459049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
460049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
461049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
462049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
463049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
464049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
465049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 7==15
466049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
467049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
468049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#5
469049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r9,ror#19	@ Sigma1(e)
471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r2			@ h+=X[i]
474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#7*4]
475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r10,r11
476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r9
478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r3			@ h+=K256[i]
479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r11			@ Ch(e,f,g)
480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#11
481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r2			@ h+=Ch(e,f,g)
482049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 7==31
483049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
484049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
485049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
486049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 7<15
487049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
488049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
489049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
490049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
491049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
492049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r5,r6			@ a^b, b^c in next round
493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#9*4]		@ from future BODY_16_xx
495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r5,r6			@ a^b, b^c in next round
496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#6*4]	@ from future BODY_16_xx
497049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
498049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#20	@ Sigma0(a)
499049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
500049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r4			@ d+=h
501049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r6			@ Maj(a,b,c)
502049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
503049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
504049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
505049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 8
506049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 8==15
507049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
508049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
509049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#5
510049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
511049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#19	@ Sigma1(e)
512049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
513049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
514049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 8
515049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
516049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
517049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
518049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
519049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
520049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
521049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 8==15
522049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
523049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
524049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#5
525049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
526049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#19	@ Sigma1(e)
527049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
528049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
529049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r2			@ h+=X[i]
530049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#8*4]
531049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r9,r10
532049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
533049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r8
534049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r12			@ h+=K256[i]
535049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r10			@ Ch(e,f,g)
536049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#11
537049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r2			@ h+=Ch(e,f,g)
538049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 8==31
539049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
540049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
541049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
542049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 8<15
543049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
544049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
545049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
546049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
547049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
548049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r4,r5			@ a^b, b^c in next round
549049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
550049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#10*4]		@ from future BODY_16_xx
551049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r4,r5			@ a^b, b^c in next round
552049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#7*4]	@ from future BODY_16_xx
553049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
554049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#20	@ Sigma0(a)
555049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
556049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r11			@ d+=h
557049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r5			@ Maj(a,b,c)
558049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
559049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
560049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
561049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 9
562049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 9==15
563049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
5640a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project# endif
5650a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project	eor	r0,r7,r7,ror#5
5660a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
567e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#19	@ Sigma1(e)
568049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
569049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
570049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 9
571049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
572e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r3,[r1,#2]
573e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r0,[r1,#1]
574e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	orr	r2,r2,r3,lsl#8
575e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r3,[r1],#4
576049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
577049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 9==15
578049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
579049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
580049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r7,r7,ror#5
581049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
582049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r7,ror#19	@ Sigma1(e)
583049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
584049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
585049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r2			@ h+=X[i]
586049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#9*4]
587049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r8,r9
588049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
589049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r7
590049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r3			@ h+=K256[i]
591049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r9			@ Ch(e,f,g)
592049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#11
593049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r2			@ h+=Ch(e,f,g)
594049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 9==31
595049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
596049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
597049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
598049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 9<15
599049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
600049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
601049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
602049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
603049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
604049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r11,r4			@ a^b, b^c in next round
605049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
606049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#11*4]		@ from future BODY_16_xx
607049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r11,r4			@ a^b, b^c in next round
608049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#8*4]	@ from future BODY_16_xx
609049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
610049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#20	@ Sigma0(a)
611049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
612049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r10			@ d+=h
613049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r4			@ Maj(a,b,c)
614049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
615049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
616049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
617049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 10
618049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 10==15
619049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
620049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
621049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#5
622049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
623049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#19	@ Sigma1(e)
624049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
625049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
626049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 10
627049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
628049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
629049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
630049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
631049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
632049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
633049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 10==15
634049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
635049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
636049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#5
637049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
638049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#19	@ Sigma1(e)
639049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
640049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
641049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r2			@ h+=X[i]
642049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#10*4]
643049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r7,r8
644049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
645049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r6
646049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r12			@ h+=K256[i]
647049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r8			@ Ch(e,f,g)
648049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#11
649049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r2			@ h+=Ch(e,f,g)
650049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 10==31
651049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
652049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
653049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
654049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 10<15
655049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
656049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
657049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
658049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
659049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
660049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r10,r11			@ a^b, b^c in next round
661049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
662049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#12*4]		@ from future BODY_16_xx
663049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r10,r11			@ a^b, b^c in next round
664049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#9*4]	@ from future BODY_16_xx
665049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
666049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#20	@ Sigma0(a)
667049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
668049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r9			@ d+=h
669049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r11			@ Maj(a,b,c)
670049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
671049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
672049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
673049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 11
674049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 11==15
675049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
676049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
677049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#5
678049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
679049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#19	@ Sigma1(e)
680049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
681049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
682049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 11
683049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
684049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
685049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
686049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
687049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
688049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
689049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 11==15
690049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
691049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
692049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#5
693049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
694049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#19	@ Sigma1(e)
695049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
696049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
697049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r2			@ h+=X[i]
698049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#11*4]
699049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r6,r7
700049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
701049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r5
702049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r3			@ h+=K256[i]
703049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r7			@ Ch(e,f,g)
704049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#11
705049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r2			@ h+=Ch(e,f,g)
706049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 11==31
707049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
708049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
709049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
710049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 11<15
711049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
712049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
713049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
714049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
715049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
716049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r9,r10			@ a^b, b^c in next round
717049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
718049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#13*4]		@ from future BODY_16_xx
719049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r9,r10			@ a^b, b^c in next round
720049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#10*4]	@ from future BODY_16_xx
721049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
722049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r9,ror#20	@ Sigma0(a)
723049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
724049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r8			@ d+=h
725049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r10			@ Maj(a,b,c)
726049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
727049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
728049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
729049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 12
730049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 12==15
731049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
732049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
733049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#5
734049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
735049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#19	@ Sigma1(e)
736049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
737049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
738049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 12
739049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
740049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
741049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
742049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
743049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
744049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
745049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 12==15
746049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
747049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
748049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#5
749049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
750049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#19	@ Sigma1(e)
751049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
752049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
753049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r2			@ h+=X[i]
754049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#12*4]
755049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r5,r6
756049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
757049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r4
758049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r12			@ h+=K256[i]
759049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r6			@ Ch(e,f,g)
760049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#11
761049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r2			@ h+=Ch(e,f,g)
762049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 12==31
763049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
764049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
765049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
766049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 12<15
767049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
768049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
769049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
770049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
771049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
772049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r8,r9			@ a^b, b^c in next round
773049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
774049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#14*4]		@ from future BODY_16_xx
775049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r8,r9			@ a^b, b^c in next round
776049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#11*4]	@ from future BODY_16_xx
777049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
778049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#20	@ Sigma0(a)
779049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
780049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r7			@ d+=h
781049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r9			@ Maj(a,b,c)
782049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
783049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
784049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
785049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 13
786049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 13==15
787049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
788049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
789049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#5
790049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
791049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#19	@ Sigma1(e)
792049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
793049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
794049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 13
795049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
796049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
797049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
798049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
799049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
800049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
801049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 13==15
802049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
803049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
804049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#5
805049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
806049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#19	@ Sigma1(e)
807049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
808049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
809049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r2			@ h+=X[i]
810049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#13*4]
811049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r4,r5
812049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
813049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r11
814049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r3			@ h+=K256[i]
815049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r5			@ Ch(e,f,g)
816049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r7,r7,ror#11
817049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r2			@ h+=Ch(e,f,g)
818049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 13==31
819049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
820049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
821049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
822049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 13<15
823049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
824049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
825049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
826049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
827049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
828049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r7,r8			@ a^b, b^c in next round
829049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
830049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#15*4]		@ from future BODY_16_xx
831049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r7,r8			@ a^b, b^c in next round
832049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#12*4]	@ from future BODY_16_xx
833049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
834049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r7,ror#20	@ Sigma0(a)
835049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
836049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r6			@ d+=h
837049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r8			@ Maj(a,b,c)
838049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
839049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
840049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
841049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 14
842049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 14==15
843049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
844049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
845049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#5
846049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
847049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#19	@ Sigma1(e)
848049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
849049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
850049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 14
851049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
852049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1,#2]
853049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
854049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#8
855049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r12,[r1],#4
856049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
857049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 14==15
858049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
859049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
860049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#5
861049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r12,lsl#24
862049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#19	@ Sigma1(e)
863049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
864049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
865049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r2			@ h+=X[i]
866049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#14*4]
867049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r11,r4
868049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
869049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r10
870049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r12			@ h+=K256[i]
871049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r4			@ Ch(e,f,g)
872049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#11
873049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r2			@ h+=Ch(e,f,g)
874049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 14==31
875049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
876049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
877049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
878049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 14<15
879049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
880049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
881049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
882049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
883049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
884049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r6,r7			@ a^b, b^c in next round
885049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
886049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#0*4]		@ from future BODY_16_xx
887049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r6,r7			@ a^b, b^c in next round
888049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#13*4]	@ from future BODY_16_xx
889049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
890049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#20	@ Sigma0(a)
891049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
892049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r5			@ d+=h
893049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r7			@ Maj(a,b,c)
894049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
895049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
896049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if __ARM_ARCH__>=7
897049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[r1],#4			@ 15
898049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 15==15
899049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
900049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
901049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#5
902049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
903049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r9,ror#19	@ Sigma1(e)
904049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	rev	r2,r2
905049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
906049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldrb	r2,[r1,#3]			@ 15
907049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
908049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1,#2]
909049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r0,[r1,#1]
910049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#8
911049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r3,[r1],#4
912049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r0,lsl#16
913049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if 15==15
914049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r1,[sp,#17*4]			@ make room for r1
915049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
916049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#5
917049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	orr	r2,r2,r3,lsl#24
918049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r9,ror#19	@ Sigma1(e)
919049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
920049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
921049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r2			@ h+=X[i]
922049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#15*4]
923049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r10,r11
924049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
925049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r9
926049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r3			@ h+=K256[i]
927049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r11			@ Ch(e,f,g)
928049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#11
929049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r2			@ h+=Ch(e,f,g)
930049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 15==31
931049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
932049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
933049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
934049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 15<15
935049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
936049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
937049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
938049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
939049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
940049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r5,r6			@ a^b, b^c in next round
941049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
942049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#1*4]		@ from future BODY_16_xx
943049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r5,r6			@ a^b, b^c in next round
944049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#14*4]	@ from future BODY_16_xx
945049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
946049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#20	@ Sigma0(a)
947049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
948049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r4			@ d+=h
949049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r6			@ Maj(a,b,c)
950049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
951049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
952049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project.Lrounds_16_xx:
953049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[sp,#1*4]		@ 16
954049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r1,[sp,#14*4]
955049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r0,r2,ror#7
956049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
957049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r12,r1,ror#17
958049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,ror#18
959049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r1,ror#19
960049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
961049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#0*4]
962049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
963049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#9*4]
964049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
965049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r12,r12,r0
966049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r8,r8,ror#5	@ from BODY_00_15
967049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r12
968049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r8,ror#19	@ Sigma1(e)
969049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r1			@ X[i]
970049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
971049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r2			@ h+=X[i]
972049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#0*4]
973049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r9,r10
974049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
975049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r8
976049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r12			@ h+=K256[i]
977049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r10			@ Ch(e,f,g)
978049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r4,r4,ror#11
979049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r2			@ h+=Ch(e,f,g)
980049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 16==31
981049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
982049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
983049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
984049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 16<15
985049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
986049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
987049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
988049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
989049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
990049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r4,r5			@ a^b, b^c in next round
991049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
992049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#2*4]		@ from future BODY_16_xx
993049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r4,r5			@ a^b, b^c in next round
994049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#15*4]	@ from future BODY_16_xx
995049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
996049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r4,ror#20	@ Sigma0(a)
997049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
998049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r7,r7,r11			@ d+=h
999049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r5			@ Maj(a,b,c)
1000049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
1001049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
1002049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[sp,#2*4]		@ 17
1003049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r1,[sp,#15*4]
1004049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r0,r2,ror#7
1005049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
1006049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r3,r1,ror#17
1007049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,ror#18
1008049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r1,ror#19
1009049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1010049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#1*4]
1011049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1012049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#10*4]
1013049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
1014049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r3,r3,r0
1015049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r7,r7,ror#5	@ from BODY_00_15
1016049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r3
1017049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r7,ror#19	@ Sigma1(e)
1018049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r1			@ X[i]
1019049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
1020049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r2			@ h+=X[i]
1021049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#1*4]
1022049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r8,r9
1023049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
1024049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r7
1025049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r3			@ h+=K256[i]
1026049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r9			@ Ch(e,f,g)
1027049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r11,r11,ror#11
1028049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r2			@ h+=Ch(e,f,g)
1029049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 17==31
1030049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
1031049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
1032049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
1033049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 17<15
1034049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
1035049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
1036049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
1037049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
1038049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
1039049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r11,r4			@ a^b, b^c in next round
1040049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
1041049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#3*4]		@ from future BODY_16_xx
1042049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r11,r4			@ a^b, b^c in next round
1043049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#0*4]	@ from future BODY_16_xx
1044049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
1045049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r11,ror#20	@ Sigma0(a)
1046049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,r3			@ (b^c)&=(a^b)
1047049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r6,r6,r10			@ d+=h
1048049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r4			@ Maj(a,b,c)
1049049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
1050049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
1051049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[sp,#3*4]		@ 18
1052049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r1,[sp,#0*4]
1053049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r0,r2,ror#7
1054049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
1055049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r12,r1,ror#17
1056049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,ror#18
1057049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r1,ror#19
1058049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1059049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#2*4]
1060049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1061049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#11*4]
1062049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
1063049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r12,r12,r0
1064049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r6,r6,ror#5	@ from BODY_00_15
1065049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r12
1066049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r6,ror#19	@ Sigma1(e)
1067049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r1			@ X[i]
1068049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r12,[r14],#4			@ *K256++
1069049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r2			@ h+=X[i]
1070049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#2*4]
1071049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r7,r8
1072049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
1073049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r6
1074049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r12			@ h+=K256[i]
1075049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r8			@ Ch(e,f,g)
1076049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r10,r10,ror#11
1077049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r2			@ h+=Ch(e,f,g)
1078049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 18==31
1079049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r12,r12,#0xff
1080049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r12,#0xf2			@ done?
1081049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
1082049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 18<15
1083049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
1084049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
1085049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
1086049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
1087049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
1088049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r10,r11			@ a^b, b^c in next round
1089049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
1090049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#4*4]		@ from future BODY_16_xx
1091049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r12,r10,r11			@ a^b, b^c in next round
1092049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#1*4]	@ from future BODY_16_xx
1093049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
1094049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r10,ror#20	@ Sigma0(a)
1095049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,r12			@ (b^c)&=(a^b)
1096049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r5,r5,r9			@ d+=h
1097049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r11			@ Maj(a,b,c)
1098049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
1099049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
1100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r2,[sp,#4*4]		@ 19
1101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	@ ldr	r1,[sp,#1*4]
1102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r0,r2,ror#7
1103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
1104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	mov	r3,r1,ror#17
1105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,ror#18
1106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r1,ror#19
1107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#3*4]
1109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#12*4]
1111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
1112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r3,r3,r0
1113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r5,r5,ror#5	@ from BODY_00_15
1114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r3
1115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r0,r5,ror#19	@ Sigma1(e)
1116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r2,r2,r1			@ X[i]
1117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r3,[r14],#4			@ *K256++
1118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r2			@ h+=X[i]
1119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	str	r2,[sp,#3*4]
1120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r6,r7
1121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
1122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r2,r2,r5
1123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r3			@ h+=K256[i]
1124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r2,r2,r7			@ Ch(e,f,g)
1125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r0,r9,r9,ror#11
1126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	add	r8,r8,r2			@ h+=Ch(e,f,g)
1127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 19==31
1128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	and	r3,r3,#0xff
1129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	cmp	r3,#0xf2			@ done?
1130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
1131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 19<15
1132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# if __ARM_ARCH__>=7
1133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[r1],#4			@ prefetch
1134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# else
1135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldrb	r2,[r1,#3]
1136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project# endif
1137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r9,r10			@ a^b, b^c in next round
1138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else
1139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r2,[sp,#5*4]		@ from future BODY_16_xx
1140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r9,r10			@ a^b, b^c in next round
1141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	ldr	r1,[sp,#2*4]	@ from future BODY_16_xx
1142e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1143e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#20	@ Sigma0(a)
1144e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1145e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r8			@ d+=h
1146e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r10			@ Maj(a,b,c)
1147e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
1148e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
1149e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#5*4]		@ 20
1150e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#2*4]
1151e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1152e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
1153e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,r1,ror#17
1154e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1155e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,ror#19
1156e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1157e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#4*4]
1158e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1159e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#13*4]
1160e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1161e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r12,r12,r0
1162e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#5	@ from BODY_00_15
1163e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r12
1164e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#19	@ Sigma1(e)
1165e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1166e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r14],#4			@ *K256++
1167e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2			@ h+=X[i]
1168e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#4*4]
1169e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r5,r6
1170e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
1171e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r4
1172e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r12			@ h+=K256[i]
1173e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r6			@ Ch(e,f,g)
1174e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#11
1175e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2			@ h+=Ch(e,f,g)
1176e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 20==31
1177e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,#0xff
1178e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r12,#0xf2			@ done?
1179e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1180e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 20<15
1181e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1182e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1183e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1184e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1185e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1186e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9			@ a^b, b^c in next round
1187e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1188e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#6*4]		@ from future BODY_16_xx
1189e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9			@ a^b, b^c in next round
1190e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#3*4]	@ from future BODY_16_xx
1191e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1192e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#20	@ Sigma0(a)
1193e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12			@ (b^c)&=(a^b)
1194e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r7			@ d+=h
1195e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r9			@ Maj(a,b,c)
1196e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
1197e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
1198e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#6*4]		@ 21
1199e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#3*4]
1200e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1201e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
1202e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r3,r1,ror#17
1203e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1204e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,ror#19
1205e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1206e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#5*4]
1207e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1208e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#14*4]
1209e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1210e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r3,r3,r0
1211e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#5	@ from BODY_00_15
1212e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r3
1213e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#19	@ Sigma1(e)
1214e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1215e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r14],#4			@ *K256++
1216e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2			@ h+=X[i]
1217e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#5*4]
1218e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r4,r5
1219e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
1220e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r11
1221e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3			@ h+=K256[i]
1222e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r5			@ Ch(e,f,g)
1223e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#11
1224e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2			@ h+=Ch(e,f,g)
1225e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 21==31
1226e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,#0xff
1227e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r3,#0xf2			@ done?
1228e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1229e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 21<15
1230e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1231e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1232e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1233e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1234e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1235e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8			@ a^b, b^c in next round
1236e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1237e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#7*4]		@ from future BODY_16_xx
1238e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8			@ a^b, b^c in next round
1239e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#4*4]	@ from future BODY_16_xx
1240e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1241e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#20	@ Sigma0(a)
1242e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1243e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r6			@ d+=h
1244e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r8			@ Maj(a,b,c)
1245e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
1246e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
1247e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#7*4]		@ 22
1248e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#4*4]
1249e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1250e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
1251e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,r1,ror#17
1252e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1253e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,ror#19
1254e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1255e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#6*4]
1256e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1257e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#15*4]
1258e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1259e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r12,r12,r0
1260e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#5	@ from BODY_00_15
1261e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r12
1262e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#19	@ Sigma1(e)
1263e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1264e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r14],#4			@ *K256++
1265e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2			@ h+=X[i]
1266e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#6*4]
1267e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r11,r4
1268e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
1269e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r10
1270e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12			@ h+=K256[i]
1271e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r4			@ Ch(e,f,g)
1272e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#11
1273e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2			@ h+=Ch(e,f,g)
1274e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 22==31
1275e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,#0xff
1276e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r12,#0xf2			@ done?
1277e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1278e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 22<15
1279e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1280e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1281e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1282e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1283e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1284e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7			@ a^b, b^c in next round
1285e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1286e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#8*4]		@ from future BODY_16_xx
1287e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7			@ a^b, b^c in next round
1288e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#5*4]	@ from future BODY_16_xx
1289e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1290e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#20	@ Sigma0(a)
1291e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12			@ (b^c)&=(a^b)
1292e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r5			@ d+=h
1293e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r7			@ Maj(a,b,c)
1294e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
1295e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
1296e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#8*4]		@ 23
1297e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#5*4]
1298e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1299e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
1300e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r3,r1,ror#17
1301e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1302e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,ror#19
1303e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1304e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#7*4]
1305e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1306e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#0*4]
1307e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1308e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r3,r3,r0
1309e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#5	@ from BODY_00_15
1310e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r3
1311e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1312e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1313e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r14],#4			@ *K256++
1314e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2			@ h+=X[i]
1315e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#7*4]
1316e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r10,r11
1317e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1318e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r9
1319e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r3			@ h+=K256[i]
1320e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r11			@ Ch(e,f,g)
1321e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#11
1322e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2			@ h+=Ch(e,f,g)
1323e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 23==31
1324e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,#0xff
1325e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r3,#0xf2			@ done?
1326e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1327e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 23<15
1328e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1329e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1330e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1331e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1332e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1333e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6			@ a^b, b^c in next round
1334e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1335e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#9*4]		@ from future BODY_16_xx
1336e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6			@ a^b, b^c in next round
1337e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#6*4]	@ from future BODY_16_xx
1338e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1339e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1340e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1341e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r4			@ d+=h
1342e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r6			@ Maj(a,b,c)
1343e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1344e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1345e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#9*4]		@ 24
1346e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#6*4]
1347e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1348e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
1349e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,r1,ror#17
1350e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1351e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,ror#19
1352e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1353e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#8*4]
1354e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1355e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#1*4]
1356e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1357e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r12,r12,r0
1358e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#5	@ from BODY_00_15
1359e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r12
1360e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#19	@ Sigma1(e)
1361e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1362e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r14],#4			@ *K256++
1363e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2			@ h+=X[i]
1364e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#8*4]
1365e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r9,r10
1366e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r0,ror#6	@ h+=Sigma1(e)
1367e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r8
1368e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r12			@ h+=K256[i]
1369e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r10			@ Ch(e,f,g)
1370e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#11
1371e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2			@ h+=Ch(e,f,g)
1372e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 24==31
1373e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,#0xff
1374e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r12,#0xf2			@ done?
1375e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1376e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 24<15
1377e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1378e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1379e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1380e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1381e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1382e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r4,r5			@ a^b, b^c in next round
1383e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1384e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#10*4]		@ from future BODY_16_xx
1385e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r4,r5			@ a^b, b^c in next round
1386e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#7*4]	@ from future BODY_16_xx
1387e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1388e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#20	@ Sigma0(a)
1389e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12			@ (b^c)&=(a^b)
1390e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r11			@ d+=h
1391e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r5			@ Maj(a,b,c)
1392e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r0,ror#2	@ h+=Sigma0(a)
1393e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r11,r11,r3			@ h+=Maj(a,b,c)
1394e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#10*4]		@ 25
1395e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#7*4]
1396e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1397e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
1398e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r3,r1,ror#17
1399e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1400e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,ror#19
1401e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1402e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#9*4]
1403e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1404e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#2*4]
1405e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1406e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r3,r3,r0
1407e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#5	@ from BODY_00_15
1408e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r3
1409e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#19	@ Sigma1(e)
1410e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1411e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r14],#4			@ *K256++
1412e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2			@ h+=X[i]
1413e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#9*4]
1414e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r8,r9
1415e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0,ror#6	@ h+=Sigma1(e)
1416e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r7
1417e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r3			@ h+=K256[i]
1418e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r9			@ Ch(e,f,g)
1419e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#11
1420e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2			@ h+=Ch(e,f,g)
1421e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 25==31
1422e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,#0xff
1423e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r3,#0xf2			@ done?
1424e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1425e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 25<15
1426e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1427e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1428e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1429e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1430e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1431e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r11,r4			@ a^b, b^c in next round
1432e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1433e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#11*4]		@ from future BODY_16_xx
1434e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r11,r4			@ a^b, b^c in next round
1435e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#8*4]	@ from future BODY_16_xx
1436e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1437e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#20	@ Sigma0(a)
1438e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1439e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r10			@ d+=h
1440e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r4			@ Maj(a,b,c)
1441e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0,ror#2	@ h+=Sigma0(a)
1442e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r10,r10,r12			@ h+=Maj(a,b,c)
1443e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#11*4]		@ 26
1444e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#8*4]
1445e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1446e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
1447e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,r1,ror#17
1448e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1449e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,ror#19
1450e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1451e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#10*4]
1452e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1453e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#3*4]
1454e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1455e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r12,r12,r0
1456e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#5	@ from BODY_00_15
1457e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r12
1458e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#19	@ Sigma1(e)
1459e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1460e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r14],#4			@ *K256++
1461e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2			@ h+=X[i]
1462e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#10*4]
1463e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r7,r8
1464e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r0,ror#6	@ h+=Sigma1(e)
1465e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r6
1466e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12			@ h+=K256[i]
1467e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r8			@ Ch(e,f,g)
1468e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#11
1469e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2			@ h+=Ch(e,f,g)
1470e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 26==31
1471e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,#0xff
1472e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r12,#0xf2			@ done?
1473e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1474e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 26<15
1475e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1476e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1477e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1478e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1479e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1480e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r10,r11			@ a^b, b^c in next round
1481e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1482e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#12*4]		@ from future BODY_16_xx
1483e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r10,r11			@ a^b, b^c in next round
1484e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#9*4]	@ from future BODY_16_xx
1485e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1486e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#20	@ Sigma0(a)
1487e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12			@ (b^c)&=(a^b)
1488e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r9			@ d+=h
1489e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r11			@ Maj(a,b,c)
1490e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r0,ror#2	@ h+=Sigma0(a)
1491e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r9,r9,r3			@ h+=Maj(a,b,c)
1492e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#12*4]		@ 27
1493e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#9*4]
1494e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1495e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
1496e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r3,r1,ror#17
1497e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1498e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,ror#19
1499e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1500e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#11*4]
1501e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1502e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#4*4]
1503e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1504e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r3,r3,r0
1505e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#5	@ from BODY_00_15
1506e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r3
1507e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#19	@ Sigma1(e)
1508e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1509e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r14],#4			@ *K256++
1510e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2			@ h+=X[i]
1511e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#11*4]
1512e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r6,r7
1513e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#6	@ h+=Sigma1(e)
1514e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r5
1515e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r3			@ h+=K256[i]
1516e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r7			@ Ch(e,f,g)
1517e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#11
1518e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2			@ h+=Ch(e,f,g)
1519e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 27==31
1520e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,#0xff
1521e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r3,#0xf2			@ done?
1522e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1523e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 27<15
1524e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1525e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1526e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1527e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1528e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1529e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r9,r10			@ a^b, b^c in next round
1530e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1531e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#13*4]		@ from future BODY_16_xx
1532e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r9,r10			@ a^b, b^c in next round
1533e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#10*4]	@ from future BODY_16_xx
1534e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1535e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#20	@ Sigma0(a)
1536e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1537e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r8			@ d+=h
1538e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r10			@ Maj(a,b,c)
1539e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#2	@ h+=Sigma0(a)
1540e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r8,r8,r12			@ h+=Maj(a,b,c)
1541e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#13*4]		@ 28
1542e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#10*4]
1543e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1544e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
1545e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,r1,ror#17
1546e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1547e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,ror#19
1548e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1549e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#12*4]
1550e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1551e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#5*4]
1552e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1553e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r12,r12,r0
1554e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#5	@ from BODY_00_15
1555e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r12
1556e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#19	@ Sigma1(e)
1557e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1558e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r14],#4			@ *K256++
1559e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2			@ h+=X[i]
1560e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#12*4]
1561e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r5,r6
1562e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#6	@ h+=Sigma1(e)
1563e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r4
1564e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r12			@ h+=K256[i]
1565e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r6			@ Ch(e,f,g)
1566e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#11
1567e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2			@ h+=Ch(e,f,g)
1568e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 28==31
1569e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,#0xff
1570e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r12,#0xf2			@ done?
1571e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1572e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 28<15
1573e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1574e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1575e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1576e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1577e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1578e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9			@ a^b, b^c in next round
1579e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1580e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#14*4]		@ from future BODY_16_xx
1581e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9			@ a^b, b^c in next round
1582e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#11*4]	@ from future BODY_16_xx
1583e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1584e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#20	@ Sigma0(a)
1585e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12			@ (b^c)&=(a^b)
1586e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r7			@ d+=h
1587e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r9			@ Maj(a,b,c)
1588e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#2	@ h+=Sigma0(a)
1589e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r7,r7,r3			@ h+=Maj(a,b,c)
1590e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#14*4]		@ 29
1591e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#11*4]
1592e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1593e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
1594e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r3,r1,ror#17
1595e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1596e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,ror#19
1597e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1598e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#13*4]
1599e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1600e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#6*4]
1601e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1602e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r3,r3,r0
1603e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#5	@ from BODY_00_15
1604e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r3
1605e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#19	@ Sigma1(e)
1606e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1607e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r14],#4			@ *K256++
1608e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2			@ h+=X[i]
1609e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#13*4]
1610e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r4,r5
1611e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#6	@ h+=Sigma1(e)
1612e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r11
1613e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3			@ h+=K256[i]
1614e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r5			@ Ch(e,f,g)
1615e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#11
1616e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2			@ h+=Ch(e,f,g)
1617e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 29==31
1618e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,#0xff
1619e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r3,#0xf2			@ done?
1620e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1621e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 29<15
1622e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1623e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1624e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1625e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1626e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1627e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8			@ a^b, b^c in next round
1628e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1629e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#15*4]		@ from future BODY_16_xx
1630e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8			@ a^b, b^c in next round
1631e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#12*4]	@ from future BODY_16_xx
1632e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1633e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#20	@ Sigma0(a)
1634e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1635e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r6			@ d+=h
1636e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r8			@ Maj(a,b,c)
1637e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#2	@ h+=Sigma0(a)
1638e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r6,r6,r12			@ h+=Maj(a,b,c)
1639e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#15*4]		@ 30
1640e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#12*4]
1641e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1642e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
1643e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,r1,ror#17
1644e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1645e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,ror#19
1646e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1647e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#14*4]
1648e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r1,lsr#10	@ sigma1(X[i+14])
1649e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#7*4]
1650e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1651e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r12,r12,r0
1652e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#5	@ from BODY_00_15
1653e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r12
1654e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#19	@ Sigma1(e)
1655e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1656e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r14],#4			@ *K256++
1657e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2			@ h+=X[i]
1658e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#14*4]
1659e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r11,r4
1660e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#6	@ h+=Sigma1(e)
1661e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r10
1662e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12			@ h+=K256[i]
1663e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r4			@ Ch(e,f,g)
1664e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#11
1665e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2			@ h+=Ch(e,f,g)
1666e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 30==31
1667e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,#0xff
1668e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r12,#0xf2			@ done?
1669e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1670e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 30<15
1671e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1672e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1673e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1674e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1675e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1676e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7			@ a^b, b^c in next round
1677e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1678e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#0*4]		@ from future BODY_16_xx
1679e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7			@ a^b, b^c in next round
1680e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#13*4]	@ from future BODY_16_xx
1681e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1682e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#20	@ Sigma0(a)
1683e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12			@ (b^c)&=(a^b)
1684e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r5			@ d+=h
1685e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r7			@ Maj(a,b,c)
1686e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#2	@ h+=Sigma0(a)
1687e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r5,r5,r3			@ h+=Maj(a,b,c)
1688e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r2,[sp,#0*4]		@ 31
1689e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ ldr	r1,[sp,#13*4]
1690e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r0,r2,ror#7
1691e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
1692e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r3,r1,ror#17
1693e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,ror#18
1694e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,ror#19
1695e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r2,lsr#3	@ sigma0(X[i+1])
1696e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#15*4]
1697e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r1,lsr#10	@ sigma1(X[i+14])
1698e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#8*4]
1699e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1700e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r3,r3,r0
1701e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#5	@ from BODY_00_15
1702e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r3
1703e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#19	@ Sigma1(e)
1704e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r2,r2,r1			@ X[i]
1705e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r14],#4			@ *K256++
1706e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2			@ h+=X[i]
1707e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r2,[sp,#15*4]
1708e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r10,r11
1709e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#6	@ h+=Sigma1(e)
1710e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r9
1711e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r3			@ h+=K256[i]
1712e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r11			@ Ch(e,f,g)
1713e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#11
1714e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2			@ h+=Ch(e,f,g)
1715e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 31==31
1716e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,#0xff
1717e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r3,#0xf2			@ done?
1718e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1719e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if 31<15
1720e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# if __ARM_ARCH__>=7
1721e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r1],#4			@ prefetch
1722e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# else
1723e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrb	r2,[r1,#3]
1724e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang# endif
1725e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6			@ a^b, b^c in next round
1726e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1727e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#1*4]		@ from future BODY_16_xx
1728e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6			@ a^b, b^c in next round
1729e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#14*4]	@ from future BODY_16_xx
1730e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1731e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#20	@ Sigma0(a)
1732e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3			@ (b^c)&=(a^b)
1733e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r4			@ d+=h
1734e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r6			@ Maj(a,b,c)
1735e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
1736e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
1737e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldreq	r3,[sp,#16*4]		@ pull ctx
1738e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bne	.Lrounds_16_xx
1739e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1740e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12		@ h+=Maj(a,b,c) from the past
1741e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r0,[r3,#0]
1742e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r3,#4]
1743e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r3,#8]
1744e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0
1745e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r0,[r3,#12]
1746e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
1747e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r3,#16]
1748e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12
1749e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r3,#20]
1750e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0
1751e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r0,[r3,#24]
1752e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
1753e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r3,#28]
1754e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12
1755e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[sp,#17*4]		@ pull inp
1756e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[sp,#18*4]		@ pull inp+len
1757e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0
1758e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
1759e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	stmia	r3,{r4,r5,r6,r7,r8,r9,r10,r11}
1760e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	cmp	r1,r12
1761e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub	r14,r14,#256	@ rewind Ktbl
1762e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bne	.Loop
1763e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1764e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	sp,sp,#19*4	@ destroy frame
1765e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if __ARM_ARCH__>=5
1766e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldmia	sp!,{r4-r11,pc}
1767e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#else
1768e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldmia	sp!,{r4-r11,lr}
1769e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	tst	lr,#1
1770e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	moveq	pc,lr			@ be binary compatible with V4, yet
1771e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
1772e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
1773e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.size	sha256_block_data_order,.-sha256_block_data_order
1774e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if __ARM_ARCH__>=7
1775e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.fpu	neon
1776e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1777e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.type	sha256_block_data_order_neon,%function
1778e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.align	4
1779e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wangsha256_block_data_order_neon:
1780e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.LNEON:
1781e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	stmdb	sp!,{r4-r12,lr}
1782e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1783e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov	r12,sp
1784e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub	sp,sp,#16*4+16		@ alloca
1785e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub	r14,r3,#256+32	@ K256
1786e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bic	sp,sp,#15		@ align for 128-bit stores
1787e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1788e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q0},[r1]!
1789e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q1},[r1]!
1790e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q2},[r1]!
1791e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q3},[r1]!
1792e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q8},[r14,:128]!
1793e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q9},[r14,:128]!
1794e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q10},[r14,:128]!
1795e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q11},[r14,:128]!
1796e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q0,q0		@ yes, even on
1797e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str		r0,[sp,#64]
1798e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q1,q1		@ big-endian
1799e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str		r1,[sp,#68]
1800e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov		r1,sp
1801e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q2,q2
1802e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str		r2,[sp,#72]
1803e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q3,q3
1804e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str		r12,[sp,#76]		@ save original sp
1805e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q0
1806e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q9,q9,q1
1807e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32		{q8},[r1,:128]!
1808e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q10,q10,q2
1809e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32		{q9},[r1,:128]!
1810e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q11,q11,q3
1811e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32		{q10},[r1,:128]!
1812e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32		{q11},[r1,:128]!
1813e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1814e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldmia		r0,{r4-r11}
1815e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub		r1,r1,#64
1816e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr		r2,[sp,#0]
1817e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor		r12,r12,r12
1818e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor		r3,r5,r6
1819e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	b		.L_00_48
1820e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
1821e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.align	4
1822e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.L_00_48:
1823e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q8,q0,q1,#4
1824e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
1825e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r9,r10
1826e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#5
1827e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q9,q2,q3,#4
1828e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12
1829e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r8
1830e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r8,ror#19
1831e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q10,q8,#7
1832e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#11
1833e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r10
1834e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q0,q0,q9
1835e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r12,ror#6
1836e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r4,r5
1837e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q9,q8,#3
1838e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#20
1839e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
1840e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q10,q8,#25
1841e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#4]
1842e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
1843e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q11,q8,#18
1844e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r11
1845e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r0,ror#2
1846e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r5
1847e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q10
1848e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
1849e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q11,q8,#14
1850e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r8,r9
1851e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#5
1852e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d7,#17
1853e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r3
1854e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r7
1855e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q11
1856e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r7,ror#19
1857e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#11
1858e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d7,#15
1859e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r9
1860e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r3,ror#6
1861e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d7,#10
1862e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r11,r4
1863e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#20
1864e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q0,q0,q9
1865e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
1866e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#8]
1867e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1868e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
1869e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r10
1870e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d7,#19
1871e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0,ror#2
1872e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r4
1873e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d7,#13
1874e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
1875e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r7,r8
1876e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1877e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#5
1878e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r12
1879e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d0,d0,d25
1880e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r6
1881e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r6,ror#19
1882e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d0,#17
1883e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#11
1884e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r8
1885e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d0,#15
1886e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12,ror#6
1887e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r10,r11
1888e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d0,#10
1889e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#20
1890e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
1891e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1892e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#12]
1893e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
1894e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d0,#19
1895e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r9
1896e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r0,ror#2
1897e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r11
1898e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
1899e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
1900e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d0,#13
1901e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r6,r7
1902e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#5
1903e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1904e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r3
1905e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r5
1906e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d1,d1,d25
1907e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r5,ror#19
1908e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#11
1909e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q0
1910e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r7
1911e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r3,ror#6
1912e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r9,r10
1913e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#20
1914e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
1915e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#16]
1916e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
1917e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r8
1918e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
1919e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#2
1920e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r10
1921e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q8,q1,q2,#4
1922e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
1923e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r5,r6
1924e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#5
1925e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q9,q3,q0,#4
1926e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r12
1927e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r4
1928e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r4,ror#19
1929e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q10,q8,#7
1930e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#11
1931e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r6
1932e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q1,q1,q9
1933e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r12,ror#6
1934e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9
1935e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q9,q8,#3
1936e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#20
1937e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
1938e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q10,q8,#25
1939e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#20]
1940e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
1941e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q11,q8,#18
1942e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r7
1943e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#2
1944e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r9
1945e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q10
1946e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
1947e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q11,q8,#14
1948e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r4,r5
1949e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#5
1950e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d1,#17
1951e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r3
1952e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r11
1953e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q11
1954e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r11,ror#19
1955e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#11
1956e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d1,#15
1957e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r5
1958e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3,ror#6
1959e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d1,#10
1960e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8
1961e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#20
1962e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q1,q1,q9
1963e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
1964e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#24]
1965e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1966e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
1967e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r6
1968e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d1,#19
1969e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#2
1970e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r8
1971e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d1,#13
1972e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
1973e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r11,r4
1974e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1975e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#5
1976e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12
1977e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d2,d2,d25
1978e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r10
1979e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r10,ror#19
1980e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d2,#17
1981e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#11
1982e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r4
1983e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d2,#15
1984e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12,ror#6
1985e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7
1986e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d2,#10
1987e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#20
1988e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
1989e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
1990e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#28]
1991e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
1992e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d2,#19
1993e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r5
1994e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#2
1995e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r7
1996e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
1997e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
1998e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d2,#13
1999e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r10,r11
2000e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#5
2001e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2002e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r3
2003e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r9
2004e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d3,d3,d25
2005e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r9,ror#19
2006e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#11
2007e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q1
2008e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r11
2009e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r3,ror#6
2010e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6
2011e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#20
2012e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2013e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#32]
2014e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2015e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r4
2016e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2017e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#2
2018e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r6
2019e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q8,q2,q3,#4
2020e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
2021e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r9,r10
2022e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#5
2023e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q9,q0,q1,#4
2024e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12
2025e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r8
2026e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r8,ror#19
2027e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q10,q8,#7
2028e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#11
2029e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r10
2030e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q2,q2,q9
2031e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r12,ror#6
2032e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r4,r5
2033e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q9,q8,#3
2034e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#20
2035e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
2036e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q10,q8,#25
2037e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#36]
2038e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2039e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q11,q8,#18
2040e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r11
2041e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r0,ror#2
2042049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project	eor	r3,r3,r5
2043e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q10
2044e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
2045e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q11,q8,#14
2046e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r8,r9
2047e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#5
2048e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d3,#17
2049e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r3
2050e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r7
2051e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q11
2052e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r7,ror#19
2053e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#11
2054e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d3,#15
2055e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r9
2056e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r3,ror#6
2057e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d3,#10
2058e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r11,r4
2059e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#20
2060e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q2,q2,q9
2061e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
2062e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#40]
2063e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2064e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2065e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r10
2066e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d3,#19
2067e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0,ror#2
2068e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r4
2069e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d3,#13
2070e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
2071e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r7,r8
2072e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2073e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#5
2074e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r12
2075e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d4,d4,d25
2076e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r6
2077e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r6,ror#19
2078e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d4,#17
2079e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#11
2080e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r8
2081e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d4,#15
2082e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12,ror#6
2083e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r10,r11
2084e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d4,#10
2085e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#20
2086e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
2087e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2088e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#44]
2089e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2090e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d4,#19
2091e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r9
2092e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r0,ror#2
2093e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r11
2094e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
2095e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
2096e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d4,#13
2097e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r6,r7
2098e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#5
2099e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2100e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r3
2101e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r5
2102e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d5,d5,d25
2103e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r5,ror#19
2104e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#11
2105e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q2
2106e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r7
2107e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r3,ror#6
2108e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r9,r10
2109e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#20
2110e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
2111e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#48]
2112e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2113e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r8
2114e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2115e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#2
2116e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r10
2117e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q8,q3,q0,#4
2118e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
2119e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r5,r6
2120e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#5
2121e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vext.8	q9,q1,q2,#4
2122e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r12
2123e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r4
2124e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r4,ror#19
2125e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q10,q8,#7
2126e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#11
2127e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r6
2128e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q3,q3,q9
2129e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r12,ror#6
2130e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9
2131e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q9,q8,#3
2132e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#20
2133e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
2134e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q10,q8,#25
2135e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#52]
2136e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2137e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	q11,q8,#18
2138e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r7
2139e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#2
2140e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r9
2141e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q10
2142e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
2143e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	q11,q8,#14
2144e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r4,r5
2145e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#5
2146e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d5,#17
2147e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r3
2148e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r11
2149e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	q9,q9,q11
2150e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r11,ror#19
2151e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#11
2152e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d5,#15
2153e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r5
2154e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3,ror#6
2155e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d5,#10
2156e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8
2157e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#20
2158e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q3,q3,q9
2159e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
2160e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#56]
2161e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2162e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2163e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r6
2164e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d5,#19
2165e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#2
2166e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r8
2167e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d5,#13
2168e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
2169e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r11,r4
2170e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2171e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#5
2172e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12
2173e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d6,d6,d25
2174e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r10
2175e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r10,ror#19
2176e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d6,#17
2177e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#11
2178e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r4
2179e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d6,#15
2180e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12,ror#6
2181e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7
2182e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d25,d6,#10
2183e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#20
2184e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
2185e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2186e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#60]
2187e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2188e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vshr.u32	d24,d6,#19
2189e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r5
2190e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#2
2191e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r7
2192e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
2193e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2194e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vsli.32	d24,d6,#13
2195e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r10,r11
2196e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#5
2197e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	veor	d25,d25,d24
2198e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r3
2199e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r9
2200e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	d7,d7,d25
2201e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r9,ror#19
2202e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#11
2203e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q3
2204e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r11
2205e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r3,ror#6
2206e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6
2207e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#20
2208e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2209e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[r14]
2210e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2211e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r4
2212e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2213e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#2
2214e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r6
2215e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	teq	r2,#0				@ check for K256 terminator
2216e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#0]
2217e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub	r1,r1,#64
2218e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bne	.L_00_48
2219e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2220e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr		r1,[sp,#68]
2221e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr		r0,[sp,#72]
2222e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub		r14,r14,#256	@ rewind r14
2223e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	teq		r1,r0
2224e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	subeq		r1,r1,#64		@ avoid SEGV
2225e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q0},[r1]!		@ load next input block
2226e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q1},[r1]!
2227e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q2},[r1]!
2228e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q3},[r1]!
2229e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	strne		r1,[sp,#68]
2230e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	mov		r1,sp
2231e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
2232e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r9,r10
2233e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#5
2234e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12
2235e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
2236e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r8
2237e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r8,ror#19
2238e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#11
2239e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r10
2240e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q0,q0
2241e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r12,ror#6
2242e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r4,r5
2243e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#20
2244e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
2245e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q0
2246e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#4]
2247e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2248e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r11
2249e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r0,ror#2
2250e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r5
2251e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
2252e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r8,r9
2253e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#5
2254e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r3
2255e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r7
2256e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r7,ror#19
2257e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#11
2258e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r9
2259e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r3,ror#6
2260e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r11,r4
2261e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#20
2262e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
2263e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#8]
2264e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2265e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r10
2266e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0,ror#2
2267e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r4
2268e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
2269e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r7,r8
2270e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#5
2271e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r12
2272e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r6
2273e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r6,ror#19
2274e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#11
2275e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r8
2276e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12,ror#6
2277e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r10,r11
2278e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#20
2279e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
2280e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#12]
2281e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2282e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r9
2283e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r0,ror#2
2284e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r11
2285e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
2286e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r6,r7
2287e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#5
2288e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r3
2289e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r5
2290e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r5,ror#19
2291e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#11
2292e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r7
2293e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r3,ror#6
2294e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r9,r10
2295e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#20
2296e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
2297e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#16]
2298e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2299e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r8
2300e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#2
2301e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r10
2302e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2303e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
2304e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r5,r6
2305e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#5
2306e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r12
2307e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
2308e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r4
2309e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r4,ror#19
2310e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#11
2311e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r6
2312e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q1,q1
2313e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r12,ror#6
2314e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9
2315e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#20
2316e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
2317e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q1
2318e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#20]
2319e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2320e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r7
2321e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#2
2322e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r9
2323e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
2324e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r4,r5
2325e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#5
2326e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r3
2327e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r11
2328e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r11,ror#19
2329e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#11
2330e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r5
2331e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3,ror#6
2332e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8
2333e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#20
2334e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
2335e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#24]
2336e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2337e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r6
2338e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#2
2339e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r8
2340e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
2341e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r11,r4
2342e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#5
2343e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12
2344e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r10
2345e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r10,ror#19
2346e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#11
2347e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r4
2348e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12,ror#6
2349e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7
2350e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#20
2351e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
2352e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#28]
2353e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2354e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r5
2355e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#2
2356e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r7
2357e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2358e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r10,r11
2359e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#5
2360e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r3
2361e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r9
2362e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r9,ror#19
2363e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#11
2364e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r11
2365e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r3,ror#6
2366e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6
2367e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#20
2368e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2369e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#32]
2370e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2371e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r4
2372e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#2
2373e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r6
2374e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2375e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
2376e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r9,r10
2377e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#5
2378e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12
2379e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
2380e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r8
2381e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r8,ror#19
2382e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#11
2383e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r10
2384e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q2,q2
2385e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r12,ror#6
2386e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r4,r5
2387e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r4,ror#20
2388e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r2
2389e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q2
2390e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#36]
2391e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2392e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r11
2393e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r0,ror#2
2394e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r5
2395e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
2396e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r8,r9
2397e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#5
2398e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r3
2399e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r7
2400e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r7,ror#19
2401e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#11
2402e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r9
2403e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r3,ror#6
2404e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r11,r4
2405e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r11,ror#20
2406e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r2
2407e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#40]
2408e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2409e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r10
2410e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r0,ror#2
2411e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r4
2412e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
2413e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r7,r8
2414e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#5
2415e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r12
2416e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r6
2417e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r6,ror#19
2418e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#11
2419e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r8
2420e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12,ror#6
2421e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r10,r11
2422e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r10,ror#20
2423e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r2
2424e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#44]
2425e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2426e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r9
2427e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r0,ror#2
2428e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r11
2429e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
2430e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r6,r7
2431e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#5
2432e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r3
2433e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r5
2434e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r5,ror#19
2435e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#11
2436e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r7
2437e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r3,ror#6
2438e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r9,r10
2439e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r9,ror#20
2440e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r2
2441e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#48]
2442e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2443e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r8
2444e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0,ror#2
2445e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r10
2446e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2447e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
2448e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r5,r6
2449e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r4,r4,ror#5
2450e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r12
2451e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q8},[r14,:128]!
2452e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r4
2453e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r4,ror#19
2454e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r8,r8,ror#11
2455e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r6
2456e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q3,q3
2457e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r12,ror#6
2458e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r8,r9
2459e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r8,ror#20
2460e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r2
2461e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q8,q8,q3
2462e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#52]
2463e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2464e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r7
2465e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r0,ror#2
2466e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r9
2467e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
2468e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r4,r5
2469e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r11,r11,ror#5
2470e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r3
2471e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r11
2472e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r11,ror#19
2473e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r7,r7,ror#11
2474e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r5
2475e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3,ror#6
2476e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r7,r8
2477e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r7,ror#20
2478e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r2
2479e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#56]
2480e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2481e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r6
2482e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r0,ror#2
2483e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r8
2484e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
2485e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r11,r4
2486e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r10,r10,ror#5
2487e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r12
2488e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r10
2489e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r0,r10,ror#19
2490e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r6,r6,ror#11
2491e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r4
2492e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12,ror#6
2493e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r6,r7
2494e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r6,ror#20
2495e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r2
2496e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#60]
2497e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r3,r3,r12
2498e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r5
2499e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r0,ror#2
2500e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r3,r7
2501e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2502e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r10,r11
2503e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r9,r9,ror#5
2504e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r3
2505e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r2,r2,r9
2506e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r0,r9,ror#19
2507e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r5,r5,ror#11
2508e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r2,r2,r11
2509e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r3,ror#6
2510e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r3,r5,r6
2511e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r0,r0,r5,ror#20
2512e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r2
2513e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r2,[sp,#64]
2514e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	and	r12,r12,r3
2515e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r4
2516e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0,ror#2
2517e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eor	r12,r12,r6
2518e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32	{q8},[r1,:128]!
2519e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r0,[r2,#0]
2520e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
2521e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r2,#4]
2522e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r2,#8]
2523e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[r2,#12]
2524e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r4,r4,r0			@ accumulate
2525e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r0,[r2,#16]
2526e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r5,r5,r12
2527e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r12,[r2,#20]
2528e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r6,r6,r3
2529e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r3,[r2,#24]
2530e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r7,r7,r1
2531e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldr	r1,[r2,#28]
2532e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r8,r8,r0
2533e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r4,[r2],#4
2534e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r9,r9,r12
2535e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r5,[r2],#4
2536e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r10,r10,r3
2537e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r6,[r2],#4
2538e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	add	r11,r11,r1
2539e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	str	r7,[r2],#4
2540e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	stmia	r2,{r8-r11}
2541e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2542e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	movne	r1,sp
2543e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldrne	r2,[sp,#0]
2544e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eorne	r12,r12,r12
2545e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldreq	sp,[sp,#76]			@ restore original sp
2546e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	eorne	r3,r5,r6
2547e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bne	.L_00_48
2548e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2549e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	ldmia	sp!,{r4-r12,pc}
2550e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.size	sha256_block_data_order_neon,.-sha256_block_data_order_neon
2551e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
2552e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#if __ARM_ARCH__>=7
2553e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.type	sha256_block_data_order_armv8,%function
2554e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.align	5
2555e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wangsha256_block_data_order_armv8:
2556e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.LARMv8:
2557e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32	{q0,q1},[r0]
2558e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub	r3,r3,#sha256_block_data_order-K256
2559e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2560e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.Loop_v8:
2561e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q8-q9},[r1]!
2562e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.8		{q10-q11},[r1]!
2563e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2564e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q8,q8
2565e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q9,q9
2566e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q10,q10
2567e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vrev32.8	q11,q11
2568e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q14,q0	@ offload
2569e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q15,q1
2570e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	teq		r1,r2
2571e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2572e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q8
2573e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe2,0x03,0xfa,0xf3	@ sha256su0 q8,q9
2574e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2575e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2576e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2577e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe6,0x0c,0x64,0xf3	@ sha256su1 q8,q10,q11
2578e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2579e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q9
2580e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe4,0x23,0xfa,0xf3	@ sha256su0 q9,q10
2581e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2582e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2583e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2584e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe0,0x2c,0x66,0xf3	@ sha256su1 q9,q11,q8
2585e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2586e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q10
2587e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe6,0x43,0xfa,0xf3	@ sha256su0 q10,q11
2588e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2589e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2590e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2591e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe2,0x4c,0x60,0xf3	@ sha256su1 q10,q8,q9
2592e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2593e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q11
2594e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe0,0x63,0xfa,0xf3	@ sha256su0 q11,q8
2595e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2596e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2597e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2598e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe4,0x6c,0x62,0xf3	@ sha256su1 q11,q9,q10
2599e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2600e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q8
2601e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe2,0x03,0xfa,0xf3	@ sha256su0 q8,q9
2602e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2603e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2604e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2605e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe6,0x0c,0x64,0xf3	@ sha256su1 q8,q10,q11
2606e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2607e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q9
2608e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe4,0x23,0xfa,0xf3	@ sha256su0 q9,q10
2609e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2610e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2611e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2612e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe0,0x2c,0x66,0xf3	@ sha256su1 q9,q11,q8
2613e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2614e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q10
2615e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe6,0x43,0xfa,0xf3	@ sha256su0 q10,q11
2616e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2617e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2618e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2619e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe2,0x4c,0x60,0xf3	@ sha256su1 q10,q8,q9
2620e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2621e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q11
2622e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe0,0x63,0xfa,0xf3	@ sha256su0 q11,q8
2623e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2624e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2625e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2626e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe4,0x6c,0x62,0xf3	@ sha256su1 q11,q9,q10
2627e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2628e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q8
2629e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe2,0x03,0xfa,0xf3	@ sha256su0 q8,q9
2630e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2631e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2632e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2633e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe6,0x0c,0x64,0xf3	@ sha256su1 q8,q10,q11
2634e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2635e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q9
2636e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe4,0x23,0xfa,0xf3	@ sha256su0 q9,q10
2637e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2638e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2639e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2640e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe0,0x2c,0x66,0xf3	@ sha256su1 q9,q11,q8
2641e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2642e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q10
2643e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe6,0x43,0xfa,0xf3	@ sha256su0 q10,q11
2644e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2645e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2646e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2647e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe2,0x4c,0x60,0xf3	@ sha256su1 q10,q8,q9
2648e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2649e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q11
2650e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe0,0x63,0xfa,0xf3	@ sha256su0 q11,q8
2651e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2652e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2653e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2654e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0xe4,0x6c,0x62,0xf3	@ sha256su1 q11,q9,q10
2655e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]!
2656e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q8
2657e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2658e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2659e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2660e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2661e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q12},[r3]!
2662e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q9
2663e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2664e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2665e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2666e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2667e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vld1.32		{q13},[r3]
2668e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q12,q12,q10
2669e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	sub		r3,r3,#256-16	@ rewind
2670e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2671e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
2672e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
2673e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2674e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q13,q13,q11
2675e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vmov		q2,q0
2676e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
2677e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
2678e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2679e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q0,q0,q14
2680e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vadd.i32	q1,q1,q15
2681e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bne		.Loop_v8
2682e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2683e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	vst1.32		{q0,q1},[r0]
2684e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang
2685e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang	bx	lr		@ bx lr
2686e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.size	sha256_block_data_order_armv8,.-sha256_block_data_order_armv8
2687e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang#endif
2688e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.asciz  "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>"
2689e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.align	2
2690e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang.comm   OPENSSL_armcap_P,4,4
2691e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang