xref: /aosp_15_r20/external/boringssl/src/gen/bcm/aesv8-armv7-linux.S (revision 8fb009dc861624b67b6cdb62ea21f0f22d0c584b)
1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL
2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand.
3*8fb009dcSAndroid Build Coastguard Worker
4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h>
5*8fb009dcSAndroid Build Coastguard Worker
6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__)
7*8fb009dcSAndroid Build Coastguard Worker#include <openssl/arm_arch.h>
8*8fb009dcSAndroid Build Coastguard Worker
9*8fb009dcSAndroid Build Coastguard Worker#if __ARM_MAX_ARCH__>=7
10*8fb009dcSAndroid Build Coastguard Worker.text
11*8fb009dcSAndroid Build Coastguard Worker.arch	armv7-a	@ don't confuse not-so-latest binutils with argv8 :-)
12*8fb009dcSAndroid Build Coastguard Worker.fpu	neon
13*8fb009dcSAndroid Build Coastguard Worker.code	32
14*8fb009dcSAndroid Build Coastguard Worker#undef	__thumb2__
15*8fb009dcSAndroid Build Coastguard Worker.align	5
16*8fb009dcSAndroid Build Coastguard Worker.Lrcon:
17*8fb009dcSAndroid Build Coastguard Worker.long	0x01,0x01,0x01,0x01
18*8fb009dcSAndroid Build Coastguard Worker.long	0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d	@ rotate-n-splat
19*8fb009dcSAndroid Build Coastguard Worker.long	0x1b,0x1b,0x1b,0x1b
20*8fb009dcSAndroid Build Coastguard Worker
21*8fb009dcSAndroid Build Coastguard Worker.text
22*8fb009dcSAndroid Build Coastguard Worker
23*8fb009dcSAndroid Build Coastguard Worker.globl	aes_hw_set_encrypt_key
24*8fb009dcSAndroid Build Coastguard Worker.hidden	aes_hw_set_encrypt_key
25*8fb009dcSAndroid Build Coastguard Worker.type	aes_hw_set_encrypt_key,%function
26*8fb009dcSAndroid Build Coastguard Worker.align	5
27*8fb009dcSAndroid Build Coastguard Workeraes_hw_set_encrypt_key:
28*8fb009dcSAndroid Build Coastguard Worker.Lenc_key:
29*8fb009dcSAndroid Build Coastguard Worker	mov	r3,#-2
30*8fb009dcSAndroid Build Coastguard Worker	cmp	r1,#128
31*8fb009dcSAndroid Build Coastguard Worker	blt	.Lenc_key_abort
32*8fb009dcSAndroid Build Coastguard Worker	cmp	r1,#256
33*8fb009dcSAndroid Build Coastguard Worker	bgt	.Lenc_key_abort
34*8fb009dcSAndroid Build Coastguard Worker	tst	r1,#0x3f
35*8fb009dcSAndroid Build Coastguard Worker	bne	.Lenc_key_abort
36*8fb009dcSAndroid Build Coastguard Worker
37*8fb009dcSAndroid Build Coastguard Worker	adr	r3,.Lrcon
38*8fb009dcSAndroid Build Coastguard Worker	cmp	r1,#192
39*8fb009dcSAndroid Build Coastguard Worker
40*8fb009dcSAndroid Build Coastguard Worker	veor	q0,q0,q0
41*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q3},[r0]!
42*8fb009dcSAndroid Build Coastguard Worker	mov	r1,#8		@ reuse r1
43*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1,q2},[r3]!
44*8fb009dcSAndroid Build Coastguard Worker
45*8fb009dcSAndroid Build Coastguard Worker	blt	.Loop128
46*8fb009dcSAndroid Build Coastguard Worker	beq	.L192
47*8fb009dcSAndroid Build Coastguard Worker	b	.L256
48*8fb009dcSAndroid Build Coastguard Worker
49*8fb009dcSAndroid Build Coastguard Worker.align	4
50*8fb009dcSAndroid Build Coastguard Worker.Loop128:
51*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d20,{q3},d4
52*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d21,{q3},d5
53*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q3,#12
54*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
55*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
56*8fb009dcSAndroid Build Coastguard Worker	subs	r1,r1,#1
57*8fb009dcSAndroid Build Coastguard Worker
58*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
59*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
60*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
61*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
62*8fb009dcSAndroid Build Coastguard Worker	veor	q10,q10,q1
63*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
64*8fb009dcSAndroid Build Coastguard Worker	vshl.u8	q1,q1,#1
65*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q10
66*8fb009dcSAndroid Build Coastguard Worker	bne	.Loop128
67*8fb009dcSAndroid Build Coastguard Worker
68*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r3]
69*8fb009dcSAndroid Build Coastguard Worker
70*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d20,{q3},d4
71*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d21,{q3},d5
72*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q3,#12
73*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
74*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
75*8fb009dcSAndroid Build Coastguard Worker
76*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
77*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
78*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
79*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
80*8fb009dcSAndroid Build Coastguard Worker	veor	q10,q10,q1
81*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
82*8fb009dcSAndroid Build Coastguard Worker	vshl.u8	q1,q1,#1
83*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q10
84*8fb009dcSAndroid Build Coastguard Worker
85*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d20,{q3},d4
86*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d21,{q3},d5
87*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q3,#12
88*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
89*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
90*8fb009dcSAndroid Build Coastguard Worker
91*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
92*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
93*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
94*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
95*8fb009dcSAndroid Build Coastguard Worker	veor	q10,q10,q1
96*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
97*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q10
98*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]
99*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,#0x50
100*8fb009dcSAndroid Build Coastguard Worker
101*8fb009dcSAndroid Build Coastguard Worker	mov	r12,#10
102*8fb009dcSAndroid Build Coastguard Worker	b	.Ldone
103*8fb009dcSAndroid Build Coastguard Worker
104*8fb009dcSAndroid Build Coastguard Worker.align	4
105*8fb009dcSAndroid Build Coastguard Worker.L192:
106*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{d16},[r0]!
107*8fb009dcSAndroid Build Coastguard Worker	vmov.i8	q10,#8			@ borrow q10
108*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
109*8fb009dcSAndroid Build Coastguard Worker	vsub.i8	q2,q2,q10	@ adjust the mask
110*8fb009dcSAndroid Build Coastguard Worker
111*8fb009dcSAndroid Build Coastguard Worker.Loop192:
112*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d20,{q8},d4
113*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d21,{q8},d5
114*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q3,#12
115*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{d16},[r2]!
116*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
117*8fb009dcSAndroid Build Coastguard Worker	subs	r1,r1,#1
118*8fb009dcSAndroid Build Coastguard Worker
119*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
120*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
121*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
122*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
123*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
124*8fb009dcSAndroid Build Coastguard Worker
125*8fb009dcSAndroid Build Coastguard Worker	vdup.32	q9,d7[1]
126*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q8
127*8fb009dcSAndroid Build Coastguard Worker	veor	q10,q10,q1
128*8fb009dcSAndroid Build Coastguard Worker	vext.8	q8,q0,q8,#12
129*8fb009dcSAndroid Build Coastguard Worker	vshl.u8	q1,q1,#1
130*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q9
131*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q10
132*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q10
133*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
134*8fb009dcSAndroid Build Coastguard Worker	bne	.Loop192
135*8fb009dcSAndroid Build Coastguard Worker
136*8fb009dcSAndroid Build Coastguard Worker	mov	r12,#12
137*8fb009dcSAndroid Build Coastguard Worker	add	r2,r2,#0x20
138*8fb009dcSAndroid Build Coastguard Worker	b	.Ldone
139*8fb009dcSAndroid Build Coastguard Worker
140*8fb009dcSAndroid Build Coastguard Worker.align	4
141*8fb009dcSAndroid Build Coastguard Worker.L256:
142*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q8},[r0]
143*8fb009dcSAndroid Build Coastguard Worker	mov	r1,#7
144*8fb009dcSAndroid Build Coastguard Worker	mov	r12,#14
145*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
146*8fb009dcSAndroid Build Coastguard Worker
147*8fb009dcSAndroid Build Coastguard Worker.Loop256:
148*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d20,{q8},d4
149*8fb009dcSAndroid Build Coastguard Worker	vtbl.8	d21,{q8},d5
150*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q3,#12
151*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q8},[r2]!
152*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
153*8fb009dcSAndroid Build Coastguard Worker	subs	r1,r1,#1
154*8fb009dcSAndroid Build Coastguard Worker
155*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
156*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
157*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
158*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
159*8fb009dcSAndroid Build Coastguard Worker	veor	q10,q10,q1
160*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q9
161*8fb009dcSAndroid Build Coastguard Worker	vshl.u8	q1,q1,#1
162*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q10
163*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q3},[r2]!
164*8fb009dcSAndroid Build Coastguard Worker	beq	.Ldone
165*8fb009dcSAndroid Build Coastguard Worker
166*8fb009dcSAndroid Build Coastguard Worker	vdup.32	q10,d7[1]
167*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q8,#12
168*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
169*8fb009dcSAndroid Build Coastguard Worker
170*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q9
171*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
172*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q9
173*8fb009dcSAndroid Build Coastguard Worker	vext.8	q9,q0,q9,#12
174*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q9
175*8fb009dcSAndroid Build Coastguard Worker
176*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q10
177*8fb009dcSAndroid Build Coastguard Worker	b	.Loop256
178*8fb009dcSAndroid Build Coastguard Worker
179*8fb009dcSAndroid Build Coastguard Worker.Ldone:
180*8fb009dcSAndroid Build Coastguard Worker	str	r12,[r2]
181*8fb009dcSAndroid Build Coastguard Worker	mov	r3,#0
182*8fb009dcSAndroid Build Coastguard Worker
183*8fb009dcSAndroid Build Coastguard Worker.Lenc_key_abort:
184*8fb009dcSAndroid Build Coastguard Worker	mov	r0,r3			@ return value
185*8fb009dcSAndroid Build Coastguard Worker
186*8fb009dcSAndroid Build Coastguard Worker	bx	lr
187*8fb009dcSAndroid Build Coastguard Worker.size	aes_hw_set_encrypt_key,.-aes_hw_set_encrypt_key
188*8fb009dcSAndroid Build Coastguard Worker
189*8fb009dcSAndroid Build Coastguard Worker.globl	aes_hw_set_decrypt_key
190*8fb009dcSAndroid Build Coastguard Worker.hidden	aes_hw_set_decrypt_key
191*8fb009dcSAndroid Build Coastguard Worker.type	aes_hw_set_decrypt_key,%function
192*8fb009dcSAndroid Build Coastguard Worker.align	5
193*8fb009dcSAndroid Build Coastguard Workeraes_hw_set_decrypt_key:
194*8fb009dcSAndroid Build Coastguard Worker	stmdb	sp!,{r4,lr}
195*8fb009dcSAndroid Build Coastguard Worker	bl	.Lenc_key
196*8fb009dcSAndroid Build Coastguard Worker
197*8fb009dcSAndroid Build Coastguard Worker	cmp	r0,#0
198*8fb009dcSAndroid Build Coastguard Worker	bne	.Ldec_key_abort
199*8fb009dcSAndroid Build Coastguard Worker
200*8fb009dcSAndroid Build Coastguard Worker	sub	r2,r2,#240		@ restore original r2
201*8fb009dcSAndroid Build Coastguard Worker	mov	r4,#-16
202*8fb009dcSAndroid Build Coastguard Worker	add	r0,r2,r12,lsl#4	@ end of key schedule
203*8fb009dcSAndroid Build Coastguard Worker
204*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]
205*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r0]
206*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q0},[r0],r4
207*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q1},[r2]!
208*8fb009dcSAndroid Build Coastguard Worker
209*8fb009dcSAndroid Build Coastguard Worker.Loop_imc:
210*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]
211*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r0]
212*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
213*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
214*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q0},[r0],r4
215*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q1},[r2]!
216*8fb009dcSAndroid Build Coastguard Worker	cmp	r0,r2
217*8fb009dcSAndroid Build Coastguard Worker	bhi	.Loop_imc
218*8fb009dcSAndroid Build Coastguard Worker
219*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]
220*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
221*8fb009dcSAndroid Build Coastguard Worker	vst1.32	{q0},[r0]
222*8fb009dcSAndroid Build Coastguard Worker
223*8fb009dcSAndroid Build Coastguard Worker	eor	r0,r0,r0		@ return value
224*8fb009dcSAndroid Build Coastguard Worker.Ldec_key_abort:
225*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,pc}
226*8fb009dcSAndroid Build Coastguard Worker.size	aes_hw_set_decrypt_key,.-aes_hw_set_decrypt_key
227*8fb009dcSAndroid Build Coastguard Worker.globl	aes_hw_encrypt
228*8fb009dcSAndroid Build Coastguard Worker.hidden	aes_hw_encrypt
229*8fb009dcSAndroid Build Coastguard Worker.type	aes_hw_encrypt,%function
230*8fb009dcSAndroid Build Coastguard Worker.align	5
231*8fb009dcSAndroid Build Coastguard Workeraes_hw_encrypt:
232*8fb009dcSAndroid Build Coastguard Worker	AARCH64_VALID_CALL_TARGET
233*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r2,#240]
234*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]!
235*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r0]
236*8fb009dcSAndroid Build Coastguard Worker	sub	r3,r3,#2
237*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r2]!
238*8fb009dcSAndroid Build Coastguard Worker
239*8fb009dcSAndroid Build Coastguard Worker.Loop_enc:
240*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xb0,0xf3	@ aese q2,q0
241*8fb009dcSAndroid Build Coastguard Worker.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
242*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]!
243*8fb009dcSAndroid Build Coastguard Worker	subs	r3,r3,#2
244*8fb009dcSAndroid Build Coastguard Worker.byte	0x02,0x43,0xb0,0xf3	@ aese q2,q1
245*8fb009dcSAndroid Build Coastguard Worker.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
246*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r2]!
247*8fb009dcSAndroid Build Coastguard Worker	bgt	.Loop_enc
248*8fb009dcSAndroid Build Coastguard Worker
249*8fb009dcSAndroid Build Coastguard Worker.byte	0x00,0x43,0xb0,0xf3	@ aese q2,q0
250*8fb009dcSAndroid Build Coastguard Worker.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
251*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]
252*8fb009dcSAndroid Build Coastguard Worker.byte	0x02,0x43,0xb0,0xf3	@ aese q2,q1
253*8fb009dcSAndroid Build Coastguard Worker	veor	q2,q2,q0
254*8fb009dcSAndroid Build Coastguard Worker
255*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q2},[r1]
256*8fb009dcSAndroid Build Coastguard Worker	bx	lr
257*8fb009dcSAndroid Build Coastguard Worker.size	aes_hw_encrypt,.-aes_hw_encrypt
258*8fb009dcSAndroid Build Coastguard Worker.globl	aes_hw_decrypt
259*8fb009dcSAndroid Build Coastguard Worker.hidden	aes_hw_decrypt
260*8fb009dcSAndroid Build Coastguard Worker.type	aes_hw_decrypt,%function
261*8fb009dcSAndroid Build Coastguard Worker.align	5
262*8fb009dcSAndroid Build Coastguard Workeraes_hw_decrypt:
263*8fb009dcSAndroid Build Coastguard Worker	AARCH64_VALID_CALL_TARGET
264*8fb009dcSAndroid Build Coastguard Worker	ldr	r3,[r2,#240]
265*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]!
266*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r0]
267*8fb009dcSAndroid Build Coastguard Worker	sub	r3,r3,#2
268*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r2]!
269*8fb009dcSAndroid Build Coastguard Worker
270*8fb009dcSAndroid Build Coastguard Worker.Loop_dec:
271*8fb009dcSAndroid Build Coastguard Worker.byte	0x40,0x43,0xb0,0xf3	@ aesd q2,q0
272*8fb009dcSAndroid Build Coastguard Worker.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
273*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]!
274*8fb009dcSAndroid Build Coastguard Worker	subs	r3,r3,#2
275*8fb009dcSAndroid Build Coastguard Worker.byte	0x42,0x43,0xb0,0xf3	@ aesd q2,q1
276*8fb009dcSAndroid Build Coastguard Worker.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
277*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q1},[r2]!
278*8fb009dcSAndroid Build Coastguard Worker	bgt	.Loop_dec
279*8fb009dcSAndroid Build Coastguard Worker
280*8fb009dcSAndroid Build Coastguard Worker.byte	0x40,0x43,0xb0,0xf3	@ aesd q2,q0
281*8fb009dcSAndroid Build Coastguard Worker.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
282*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r2]
283*8fb009dcSAndroid Build Coastguard Worker.byte	0x42,0x43,0xb0,0xf3	@ aesd q2,q1
284*8fb009dcSAndroid Build Coastguard Worker	veor	q2,q2,q0
285*8fb009dcSAndroid Build Coastguard Worker
286*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q2},[r1]
287*8fb009dcSAndroid Build Coastguard Worker	bx	lr
288*8fb009dcSAndroid Build Coastguard Worker.size	aes_hw_decrypt,.-aes_hw_decrypt
289*8fb009dcSAndroid Build Coastguard Worker.globl	aes_hw_cbc_encrypt
290*8fb009dcSAndroid Build Coastguard Worker.hidden	aes_hw_cbc_encrypt
291*8fb009dcSAndroid Build Coastguard Worker.type	aes_hw_cbc_encrypt,%function
292*8fb009dcSAndroid Build Coastguard Worker.align	5
293*8fb009dcSAndroid Build Coastguard Workeraes_hw_cbc_encrypt:
294*8fb009dcSAndroid Build Coastguard Worker	mov	ip,sp
295*8fb009dcSAndroid Build Coastguard Worker	stmdb	sp!,{r4,r5,r6,r7,r8,lr}
296*8fb009dcSAndroid Build Coastguard Worker	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}            @ ABI specification says so
297*8fb009dcSAndroid Build Coastguard Worker	ldmia	ip,{r4,r5}		@ load remaining args
298*8fb009dcSAndroid Build Coastguard Worker	subs	r2,r2,#16
299*8fb009dcSAndroid Build Coastguard Worker	mov	r8,#16
300*8fb009dcSAndroid Build Coastguard Worker	blo	.Lcbc_abort
301*8fb009dcSAndroid Build Coastguard Worker	moveq	r8,#0
302*8fb009dcSAndroid Build Coastguard Worker
303*8fb009dcSAndroid Build Coastguard Worker	cmp	r5,#0			@ en- or decrypting?
304*8fb009dcSAndroid Build Coastguard Worker	ldr	r5,[r3,#240]
305*8fb009dcSAndroid Build Coastguard Worker	and	r2,r2,#-16
306*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q6},[r4]
307*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q0},[r0],r8
308*8fb009dcSAndroid Build Coastguard Worker
309*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8,q9},[r3]		@ load key schedule...
310*8fb009dcSAndroid Build Coastguard Worker	sub	r5,r5,#6
311*8fb009dcSAndroid Build Coastguard Worker	add	r7,r3,r5,lsl#4	@ pointer to last 7 round keys
312*8fb009dcSAndroid Build Coastguard Worker	sub	r5,r5,#2
313*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q10,q11},[r7]!
314*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12,q13},[r7]!
315*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q14,q15},[r7]!
316*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q7},[r7]
317*8fb009dcSAndroid Build Coastguard Worker
318*8fb009dcSAndroid Build Coastguard Worker	add	r7,r3,#32
319*8fb009dcSAndroid Build Coastguard Worker	mov	r6,r5
320*8fb009dcSAndroid Build Coastguard Worker	beq	.Lcbc_dec
321*8fb009dcSAndroid Build Coastguard Worker
322*8fb009dcSAndroid Build Coastguard Worker	cmp	r5,#2
323*8fb009dcSAndroid Build Coastguard Worker	veor	q0,q0,q6
324*8fb009dcSAndroid Build Coastguard Worker	veor	q5,q8,q7
325*8fb009dcSAndroid Build Coastguard Worker	beq	.Lcbc_enc128
326*8fb009dcSAndroid Build Coastguard Worker
327*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q2,q3},[r7]
328*8fb009dcSAndroid Build Coastguard Worker	add	r7,r3,#16
329*8fb009dcSAndroid Build Coastguard Worker	add	r6,r3,#16*4
330*8fb009dcSAndroid Build Coastguard Worker	add	r12,r3,#16*5
331*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
332*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
333*8fb009dcSAndroid Build Coastguard Worker	add	r14,r3,#16*6
334*8fb009dcSAndroid Build Coastguard Worker	add	r3,r3,#16*7
335*8fb009dcSAndroid Build Coastguard Worker	b	.Lenter_cbc_enc
336*8fb009dcSAndroid Build Coastguard Worker
337*8fb009dcSAndroid Build Coastguard Worker.align	4
338*8fb009dcSAndroid Build Coastguard Worker.Loop_cbc_enc:
339*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
340*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
341*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q6},[r1]!
342*8fb009dcSAndroid Build Coastguard Worker.Lenter_cbc_enc:
343*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
344*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
345*8fb009dcSAndroid Build Coastguard Worker.byte	0x04,0x03,0xb0,0xf3	@ aese q0,q2
346*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
347*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r6]
348*8fb009dcSAndroid Build Coastguard Worker	cmp	r5,#4
349*8fb009dcSAndroid Build Coastguard Worker.byte	0x06,0x03,0xb0,0xf3	@ aese q0,q3
350*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
351*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r12]
352*8fb009dcSAndroid Build Coastguard Worker	beq	.Lcbc_enc192
353*8fb009dcSAndroid Build Coastguard Worker
354*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
355*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
356*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r14]
357*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
358*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
359*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r3]
360*8fb009dcSAndroid Build Coastguard Worker	nop
361*8fb009dcSAndroid Build Coastguard Worker
362*8fb009dcSAndroid Build Coastguard Worker.Lcbc_enc192:
363*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
364*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
365*8fb009dcSAndroid Build Coastguard Worker	subs	r2,r2,#16
366*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
367*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
368*8fb009dcSAndroid Build Coastguard Worker	moveq	r8,#0
369*8fb009dcSAndroid Build Coastguard Worker.byte	0x24,0x03,0xb0,0xf3	@ aese q0,q10
370*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
371*8fb009dcSAndroid Build Coastguard Worker.byte	0x26,0x03,0xb0,0xf3	@ aese q0,q11
372*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
373*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q8},[r0],r8
374*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
375*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
376*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q5
377*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
378*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
379*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]		@ re-pre-load rndkey[1]
380*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
381*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
382*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
383*8fb009dcSAndroid Build Coastguard Worker	veor	q6,q0,q7
384*8fb009dcSAndroid Build Coastguard Worker	bhs	.Loop_cbc_enc
385*8fb009dcSAndroid Build Coastguard Worker
386*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q6},[r1]!
387*8fb009dcSAndroid Build Coastguard Worker	b	.Lcbc_done
388*8fb009dcSAndroid Build Coastguard Worker
389*8fb009dcSAndroid Build Coastguard Worker.align	5
390*8fb009dcSAndroid Build Coastguard Worker.Lcbc_enc128:
391*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q2,q3},[r7]
392*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
393*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
394*8fb009dcSAndroid Build Coastguard Worker	b	.Lenter_cbc_enc128
395*8fb009dcSAndroid Build Coastguard Worker.Loop_cbc_enc128:
396*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
397*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
398*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q6},[r1]!
399*8fb009dcSAndroid Build Coastguard Worker.Lenter_cbc_enc128:
400*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
401*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
402*8fb009dcSAndroid Build Coastguard Worker	subs	r2,r2,#16
403*8fb009dcSAndroid Build Coastguard Worker.byte	0x04,0x03,0xb0,0xf3	@ aese q0,q2
404*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
405*8fb009dcSAndroid Build Coastguard Worker	moveq	r8,#0
406*8fb009dcSAndroid Build Coastguard Worker.byte	0x06,0x03,0xb0,0xf3	@ aese q0,q3
407*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
408*8fb009dcSAndroid Build Coastguard Worker.byte	0x24,0x03,0xb0,0xf3	@ aese q0,q10
409*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
410*8fb009dcSAndroid Build Coastguard Worker.byte	0x26,0x03,0xb0,0xf3	@ aese q0,q11
411*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
412*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q8},[r0],r8
413*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
414*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
415*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
416*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
417*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
418*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
419*8fb009dcSAndroid Build Coastguard Worker	veor	q8,q8,q5
420*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
421*8fb009dcSAndroid Build Coastguard Worker	veor	q6,q0,q7
422*8fb009dcSAndroid Build Coastguard Worker	bhs	.Loop_cbc_enc128
423*8fb009dcSAndroid Build Coastguard Worker
424*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q6},[r1]!
425*8fb009dcSAndroid Build Coastguard Worker	b	.Lcbc_done
426*8fb009dcSAndroid Build Coastguard Worker.align	5
427*8fb009dcSAndroid Build Coastguard Worker.Lcbc_dec:
428*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q10},[r0]!
429*8fb009dcSAndroid Build Coastguard Worker	subs	r2,r2,#32		@ bias
430*8fb009dcSAndroid Build Coastguard Worker	add	r6,r5,#2
431*8fb009dcSAndroid Build Coastguard Worker	vorr	q3,q0,q0
432*8fb009dcSAndroid Build Coastguard Worker	vorr	q1,q0,q0
433*8fb009dcSAndroid Build Coastguard Worker	vorr	q11,q10,q10
434*8fb009dcSAndroid Build Coastguard Worker	blo	.Lcbc_dec_tail
435*8fb009dcSAndroid Build Coastguard Worker
436*8fb009dcSAndroid Build Coastguard Worker	vorr	q1,q10,q10
437*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q10},[r0]!
438*8fb009dcSAndroid Build Coastguard Worker	vorr	q2,q0,q0
439*8fb009dcSAndroid Build Coastguard Worker	vorr	q3,q1,q1
440*8fb009dcSAndroid Build Coastguard Worker	vorr	q11,q10,q10
441*8fb009dcSAndroid Build Coastguard Worker
442*8fb009dcSAndroid Build Coastguard Worker.Loop3x_cbc_dec:
443*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x03,0xb0,0xf3	@ aesd q0,q8
444*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
445*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
446*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
447*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
448*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
449*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r7]!
450*8fb009dcSAndroid Build Coastguard Worker	subs	r6,r6,#2
451*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x03,0xb0,0xf3	@ aesd q0,q9
452*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
453*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
454*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
455*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
456*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
457*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]!
458*8fb009dcSAndroid Build Coastguard Worker	bgt	.Loop3x_cbc_dec
459*8fb009dcSAndroid Build Coastguard Worker
460*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x03,0xb0,0xf3	@ aesd q0,q8
461*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
462*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
463*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
464*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
465*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
466*8fb009dcSAndroid Build Coastguard Worker	veor	q4,q6,q7
467*8fb009dcSAndroid Build Coastguard Worker	subs	r2,r2,#0x30
468*8fb009dcSAndroid Build Coastguard Worker	veor	q5,q2,q7
469*8fb009dcSAndroid Build Coastguard Worker	movlo	r6,r2			@ r6, r6, is zero at this point
470*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x03,0xb0,0xf3	@ aesd q0,q9
471*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
472*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
473*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
474*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
475*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
476*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q3,q7
477*8fb009dcSAndroid Build Coastguard Worker	add	r0,r0,r6		@ r0 is adjusted in such way that
478*8fb009dcSAndroid Build Coastguard Worker					@ at exit from the loop q1-q10
479*8fb009dcSAndroid Build Coastguard Worker					@ are loaded with last "words"
480*8fb009dcSAndroid Build Coastguard Worker	vorr	q6,q11,q11
481*8fb009dcSAndroid Build Coastguard Worker	mov	r7,r3
482*8fb009dcSAndroid Build Coastguard Worker.byte	0x68,0x03,0xb0,0xf3	@ aesd q0,q12
483*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
484*8fb009dcSAndroid Build Coastguard Worker.byte	0x68,0x23,0xb0,0xf3	@ aesd q1,q12
485*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
486*8fb009dcSAndroid Build Coastguard Worker.byte	0x68,0x43,0xf0,0xf3	@ aesd q10,q12
487*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
488*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r0]!
489*8fb009dcSAndroid Build Coastguard Worker.byte	0x6a,0x03,0xb0,0xf3	@ aesd q0,q13
490*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
491*8fb009dcSAndroid Build Coastguard Worker.byte	0x6a,0x23,0xb0,0xf3	@ aesd q1,q13
492*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
493*8fb009dcSAndroid Build Coastguard Worker.byte	0x6a,0x43,0xf0,0xf3	@ aesd q10,q13
494*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
495*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q3},[r0]!
496*8fb009dcSAndroid Build Coastguard Worker.byte	0x6c,0x03,0xb0,0xf3	@ aesd q0,q14
497*8fb009dcSAndroid Build Coastguard Worker.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
498*8fb009dcSAndroid Build Coastguard Worker.byte	0x6c,0x23,0xb0,0xf3	@ aesd q1,q14
499*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
500*8fb009dcSAndroid Build Coastguard Worker.byte	0x6c,0x43,0xf0,0xf3	@ aesd q10,q14
501*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
502*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q11},[r0]!
503*8fb009dcSAndroid Build Coastguard Worker.byte	0x6e,0x03,0xb0,0xf3	@ aesd q0,q15
504*8fb009dcSAndroid Build Coastguard Worker.byte	0x6e,0x23,0xb0,0xf3	@ aesd q1,q15
505*8fb009dcSAndroid Build Coastguard Worker.byte	0x6e,0x43,0xf0,0xf3	@ aesd q10,q15
506*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r7]!	@ re-pre-load rndkey[0]
507*8fb009dcSAndroid Build Coastguard Worker	add	r6,r5,#2
508*8fb009dcSAndroid Build Coastguard Worker	veor	q4,q4,q0
509*8fb009dcSAndroid Build Coastguard Worker	veor	q5,q5,q1
510*8fb009dcSAndroid Build Coastguard Worker	veor	q10,q10,q9
511*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]!	@ re-pre-load rndkey[1]
512*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q4},[r1]!
513*8fb009dcSAndroid Build Coastguard Worker	vorr	q0,q2,q2
514*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q5},[r1]!
515*8fb009dcSAndroid Build Coastguard Worker	vorr	q1,q3,q3
516*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q10},[r1]!
517*8fb009dcSAndroid Build Coastguard Worker	vorr	q10,q11,q11
518*8fb009dcSAndroid Build Coastguard Worker	bhs	.Loop3x_cbc_dec
519*8fb009dcSAndroid Build Coastguard Worker
520*8fb009dcSAndroid Build Coastguard Worker	cmn	r2,#0x30
521*8fb009dcSAndroid Build Coastguard Worker	beq	.Lcbc_done
522*8fb009dcSAndroid Build Coastguard Worker	nop
523*8fb009dcSAndroid Build Coastguard Worker
524*8fb009dcSAndroid Build Coastguard Worker.Lcbc_dec_tail:
525*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
526*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
527*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
528*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
529*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r7]!
530*8fb009dcSAndroid Build Coastguard Worker	subs	r6,r6,#2
531*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
532*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
533*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
534*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
535*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]!
536*8fb009dcSAndroid Build Coastguard Worker	bgt	.Lcbc_dec_tail
537*8fb009dcSAndroid Build Coastguard Worker
538*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
539*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
540*8fb009dcSAndroid Build Coastguard Worker.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
541*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
542*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
543*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
544*8fb009dcSAndroid Build Coastguard Worker.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
545*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
546*8fb009dcSAndroid Build Coastguard Worker.byte	0x68,0x23,0xb0,0xf3	@ aesd q1,q12
547*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
548*8fb009dcSAndroid Build Coastguard Worker.byte	0x68,0x43,0xf0,0xf3	@ aesd q10,q12
549*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
550*8fb009dcSAndroid Build Coastguard Worker	cmn	r2,#0x20
551*8fb009dcSAndroid Build Coastguard Worker.byte	0x6a,0x23,0xb0,0xf3	@ aesd q1,q13
552*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
553*8fb009dcSAndroid Build Coastguard Worker.byte	0x6a,0x43,0xf0,0xf3	@ aesd q10,q13
554*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
555*8fb009dcSAndroid Build Coastguard Worker	veor	q5,q6,q7
556*8fb009dcSAndroid Build Coastguard Worker.byte	0x6c,0x23,0xb0,0xf3	@ aesd q1,q14
557*8fb009dcSAndroid Build Coastguard Worker.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
558*8fb009dcSAndroid Build Coastguard Worker.byte	0x6c,0x43,0xf0,0xf3	@ aesd q10,q14
559*8fb009dcSAndroid Build Coastguard Worker.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
560*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q3,q7
561*8fb009dcSAndroid Build Coastguard Worker.byte	0x6e,0x23,0xb0,0xf3	@ aesd q1,q15
562*8fb009dcSAndroid Build Coastguard Worker.byte	0x6e,0x43,0xf0,0xf3	@ aesd q10,q15
563*8fb009dcSAndroid Build Coastguard Worker	beq	.Lcbc_dec_one
564*8fb009dcSAndroid Build Coastguard Worker	veor	q5,q5,q1
565*8fb009dcSAndroid Build Coastguard Worker	veor	q9,q9,q10
566*8fb009dcSAndroid Build Coastguard Worker	vorr	q6,q11,q11
567*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q5},[r1]!
568*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q9},[r1]!
569*8fb009dcSAndroid Build Coastguard Worker	b	.Lcbc_done
570*8fb009dcSAndroid Build Coastguard Worker
571*8fb009dcSAndroid Build Coastguard Worker.Lcbc_dec_one:
572*8fb009dcSAndroid Build Coastguard Worker	veor	q5,q5,q10
573*8fb009dcSAndroid Build Coastguard Worker	vorr	q6,q11,q11
574*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q5},[r1]!
575*8fb009dcSAndroid Build Coastguard Worker
576*8fb009dcSAndroid Build Coastguard Worker.Lcbc_done:
577*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q6},[r4]
578*8fb009dcSAndroid Build Coastguard Worker.Lcbc_abort:
579*8fb009dcSAndroid Build Coastguard Worker	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
580*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,pc}
581*8fb009dcSAndroid Build Coastguard Worker.size	aes_hw_cbc_encrypt,.-aes_hw_cbc_encrypt
582*8fb009dcSAndroid Build Coastguard Worker.globl	aes_hw_ctr32_encrypt_blocks
583*8fb009dcSAndroid Build Coastguard Worker.hidden	aes_hw_ctr32_encrypt_blocks
584*8fb009dcSAndroid Build Coastguard Worker.type	aes_hw_ctr32_encrypt_blocks,%function
585*8fb009dcSAndroid Build Coastguard Worker.align	5
586*8fb009dcSAndroid Build Coastguard Workeraes_hw_ctr32_encrypt_blocks:
587*8fb009dcSAndroid Build Coastguard Worker	mov	ip,sp
588*8fb009dcSAndroid Build Coastguard Worker	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,lr}
589*8fb009dcSAndroid Build Coastguard Worker	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}            @ ABI specification says so
590*8fb009dcSAndroid Build Coastguard Worker	ldr	r4, [ip]		@ load remaining arg
591*8fb009dcSAndroid Build Coastguard Worker	ldr	r5,[r3,#240]
592*8fb009dcSAndroid Build Coastguard Worker
593*8fb009dcSAndroid Build Coastguard Worker	ldr	r8, [r4, #12]
594*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q0},[r4]
595*8fb009dcSAndroid Build Coastguard Worker
596*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8,q9},[r3]		@ load key schedule...
597*8fb009dcSAndroid Build Coastguard Worker	sub	r5,r5,#4
598*8fb009dcSAndroid Build Coastguard Worker	mov	r12,#16
599*8fb009dcSAndroid Build Coastguard Worker	cmp	r2,#2
600*8fb009dcSAndroid Build Coastguard Worker	add	r7,r3,r5,lsl#4	@ pointer to last 5 round keys
601*8fb009dcSAndroid Build Coastguard Worker	sub	r5,r5,#2
602*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q12,q13},[r7]!
603*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q14,q15},[r7]!
604*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q7},[r7]
605*8fb009dcSAndroid Build Coastguard Worker	add	r7,r3,#32
606*8fb009dcSAndroid Build Coastguard Worker	mov	r6,r5
607*8fb009dcSAndroid Build Coastguard Worker	movlo	r12,#0
608*8fb009dcSAndroid Build Coastguard Worker
609*8fb009dcSAndroid Build Coastguard Worker	@ ARM Cortex-A57 and Cortex-A72 cores running in 32-bit mode are
610*8fb009dcSAndroid Build Coastguard Worker	@ affected by silicon errata #1742098 [0] and #1655431 [1],
611*8fb009dcSAndroid Build Coastguard Worker	@ respectively, where the second instruction of an aese/aesmc
612*8fb009dcSAndroid Build Coastguard Worker	@ instruction pair may execute twice if an interrupt is taken right
613*8fb009dcSAndroid Build Coastguard Worker	@ after the first instruction consumes an input register of which a
614*8fb009dcSAndroid Build Coastguard Worker	@ single 32-bit lane has been updated the last time it was modified.
615*8fb009dcSAndroid Build Coastguard Worker	@
616*8fb009dcSAndroid Build Coastguard Worker	@ This function uses a counter in one 32-bit lane. The
617*8fb009dcSAndroid Build Coastguard Worker	@ could write to q1 and q10 directly, but that trips this bugs.
618*8fb009dcSAndroid Build Coastguard Worker	@ We write to q6 and copy to the final register as a workaround.
619*8fb009dcSAndroid Build Coastguard Worker	@
620*8fb009dcSAndroid Build Coastguard Worker	@ [0] ARM-EPM-049219 v23 Cortex-A57 MPCore Software Developers Errata Notice
621*8fb009dcSAndroid Build Coastguard Worker	@ [1] ARM-EPM-012079 v11.0 Cortex-A72 MPCore Software Developers Errata Notice
622*8fb009dcSAndroid Build Coastguard Worker#ifndef __ARMEB__
623*8fb009dcSAndroid Build Coastguard Worker	rev	r8, r8
624*8fb009dcSAndroid Build Coastguard Worker#endif
625*8fb009dcSAndroid Build Coastguard Worker	add	r10, r8, #1
626*8fb009dcSAndroid Build Coastguard Worker	vorr	q6,q0,q0
627*8fb009dcSAndroid Build Coastguard Worker	rev	r10, r10
628*8fb009dcSAndroid Build Coastguard Worker	vmov.32	d13[1],r10
629*8fb009dcSAndroid Build Coastguard Worker	add	r8, r8, #2
630*8fb009dcSAndroid Build Coastguard Worker	vorr	q1,q6,q6
631*8fb009dcSAndroid Build Coastguard Worker	bls	.Lctr32_tail
632*8fb009dcSAndroid Build Coastguard Worker	rev	r12, r8
633*8fb009dcSAndroid Build Coastguard Worker	vmov.32	d13[1],r12
634*8fb009dcSAndroid Build Coastguard Worker	sub	r2,r2,#3		@ bias
635*8fb009dcSAndroid Build Coastguard Worker	vorr	q10,q6,q6
636*8fb009dcSAndroid Build Coastguard Worker	b	.Loop3x_ctr32
637*8fb009dcSAndroid Build Coastguard Worker
638*8fb009dcSAndroid Build Coastguard Worker.align	4
639*8fb009dcSAndroid Build Coastguard Worker.Loop3x_ctr32:
640*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
641*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
642*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
643*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
644*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x43,0xf0,0xf3	@ aese q10,q8
645*8fb009dcSAndroid Build Coastguard Worker.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
646*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r7]!
647*8fb009dcSAndroid Build Coastguard Worker	subs	r6,r6,#2
648*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
649*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
650*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
651*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
652*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x43,0xf0,0xf3	@ aese q10,q9
653*8fb009dcSAndroid Build Coastguard Worker.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
654*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]!
655*8fb009dcSAndroid Build Coastguard Worker	bgt	.Loop3x_ctr32
656*8fb009dcSAndroid Build Coastguard Worker
657*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
658*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x83,0xb0,0xf3	@ aesmc q4,q0
659*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
660*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0xa3,0xb0,0xf3	@ aesmc q5,q1
661*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r0]!
662*8fb009dcSAndroid Build Coastguard Worker	add	r9,r8,#1
663*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x43,0xf0,0xf3	@ aese q10,q8
664*8fb009dcSAndroid Build Coastguard Worker.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
665*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q3},[r0]!
666*8fb009dcSAndroid Build Coastguard Worker	rev	r9,r9
667*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x83,0xb0,0xf3	@ aese q4,q9
668*8fb009dcSAndroid Build Coastguard Worker.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
669*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0xa3,0xb0,0xf3	@ aese q5,q9
670*8fb009dcSAndroid Build Coastguard Worker.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
671*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q11},[r0]!
672*8fb009dcSAndroid Build Coastguard Worker	mov	r7,r3
673*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x43,0xf0,0xf3	@ aese q10,q9
674*8fb009dcSAndroid Build Coastguard Worker.byte	0xa4,0x23,0xf0,0xf3	@ aesmc q9,q10
675*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0x83,0xb0,0xf3	@ aese q4,q12
676*8fb009dcSAndroid Build Coastguard Worker.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
677*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0xa3,0xb0,0xf3	@ aese q5,q12
678*8fb009dcSAndroid Build Coastguard Worker.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
679*8fb009dcSAndroid Build Coastguard Worker	veor	q2,q2,q7
680*8fb009dcSAndroid Build Coastguard Worker	add	r10,r8,#2
681*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0x23,0xf0,0xf3	@ aese q9,q12
682*8fb009dcSAndroid Build Coastguard Worker.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
683*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q7
684*8fb009dcSAndroid Build Coastguard Worker	add	r8,r8,#3
685*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0x83,0xb0,0xf3	@ aese q4,q13
686*8fb009dcSAndroid Build Coastguard Worker.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
687*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0xa3,0xb0,0xf3	@ aese q5,q13
688*8fb009dcSAndroid Build Coastguard Worker.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
689*8fb009dcSAndroid Build Coastguard Worker	 @ Note the logic to update q0, q1, and q1 is written to work
690*8fb009dcSAndroid Build Coastguard Worker	 @ around a bug in ARM Cortex-A57 and Cortex-A72 cores running in
691*8fb009dcSAndroid Build Coastguard Worker	 @ 32-bit mode. See the comment above.
692*8fb009dcSAndroid Build Coastguard Worker	veor	q11,q11,q7
693*8fb009dcSAndroid Build Coastguard Worker	vmov.32	d13[1], r9
694*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0x23,0xf0,0xf3	@ aese q9,q13
695*8fb009dcSAndroid Build Coastguard Worker.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
696*8fb009dcSAndroid Build Coastguard Worker	vorr	q0,q6,q6
697*8fb009dcSAndroid Build Coastguard Worker	rev	r10,r10
698*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0x83,0xb0,0xf3	@ aese q4,q14
699*8fb009dcSAndroid Build Coastguard Worker.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
700*8fb009dcSAndroid Build Coastguard Worker	vmov.32	d13[1], r10
701*8fb009dcSAndroid Build Coastguard Worker	rev	r12,r8
702*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0xa3,0xb0,0xf3	@ aese q5,q14
703*8fb009dcSAndroid Build Coastguard Worker.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
704*8fb009dcSAndroid Build Coastguard Worker	vorr	q1,q6,q6
705*8fb009dcSAndroid Build Coastguard Worker	vmov.32	d13[1], r12
706*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0x23,0xf0,0xf3	@ aese q9,q14
707*8fb009dcSAndroid Build Coastguard Worker.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
708*8fb009dcSAndroid Build Coastguard Worker	vorr	q10,q6,q6
709*8fb009dcSAndroid Build Coastguard Worker	subs	r2,r2,#3
710*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0x83,0xb0,0xf3	@ aese q4,q15
711*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0xa3,0xb0,0xf3	@ aese q5,q15
712*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0x23,0xf0,0xf3	@ aese q9,q15
713*8fb009dcSAndroid Build Coastguard Worker
714*8fb009dcSAndroid Build Coastguard Worker	veor	q2,q2,q4
715*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r7]!	@ re-pre-load rndkey[0]
716*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q2},[r1]!
717*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q5
718*8fb009dcSAndroid Build Coastguard Worker	mov	r6,r5
719*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q3},[r1]!
720*8fb009dcSAndroid Build Coastguard Worker	veor	q11,q11,q9
721*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]!	@ re-pre-load rndkey[1]
722*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q11},[r1]!
723*8fb009dcSAndroid Build Coastguard Worker	bhs	.Loop3x_ctr32
724*8fb009dcSAndroid Build Coastguard Worker
725*8fb009dcSAndroid Build Coastguard Worker	adds	r2,r2,#3
726*8fb009dcSAndroid Build Coastguard Worker	beq	.Lctr32_done
727*8fb009dcSAndroid Build Coastguard Worker	cmp	r2,#1
728*8fb009dcSAndroid Build Coastguard Worker	mov	r12,#16
729*8fb009dcSAndroid Build Coastguard Worker	moveq	r12,#0
730*8fb009dcSAndroid Build Coastguard Worker
731*8fb009dcSAndroid Build Coastguard Worker.Lctr32_tail:
732*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
733*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
734*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
735*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
736*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q8},[r7]!
737*8fb009dcSAndroid Build Coastguard Worker	subs	r6,r6,#2
738*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
739*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
740*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
741*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
742*8fb009dcSAndroid Build Coastguard Worker	vld1.32	{q9},[r7]!
743*8fb009dcSAndroid Build Coastguard Worker	bgt	.Lctr32_tail
744*8fb009dcSAndroid Build Coastguard Worker
745*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
746*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
747*8fb009dcSAndroid Build Coastguard Worker.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
748*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
749*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
750*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
751*8fb009dcSAndroid Build Coastguard Worker.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
752*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
753*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q2},[r0],r12
754*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
755*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
756*8fb009dcSAndroid Build Coastguard Worker.byte	0x28,0x23,0xb0,0xf3	@ aese q1,q12
757*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
758*8fb009dcSAndroid Build Coastguard Worker	vld1.8	{q3},[r0]
759*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
760*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
761*8fb009dcSAndroid Build Coastguard Worker.byte	0x2a,0x23,0xb0,0xf3	@ aese q1,q13
762*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
763*8fb009dcSAndroid Build Coastguard Worker	veor	q2,q2,q7
764*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
765*8fb009dcSAndroid Build Coastguard Worker.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
766*8fb009dcSAndroid Build Coastguard Worker.byte	0x2c,0x23,0xb0,0xf3	@ aese q1,q14
767*8fb009dcSAndroid Build Coastguard Worker.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
768*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q7
769*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
770*8fb009dcSAndroid Build Coastguard Worker.byte	0x2e,0x23,0xb0,0xf3	@ aese q1,q15
771*8fb009dcSAndroid Build Coastguard Worker
772*8fb009dcSAndroid Build Coastguard Worker	cmp	r2,#1
773*8fb009dcSAndroid Build Coastguard Worker	veor	q2,q2,q0
774*8fb009dcSAndroid Build Coastguard Worker	veor	q3,q3,q1
775*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q2},[r1]!
776*8fb009dcSAndroid Build Coastguard Worker	beq	.Lctr32_done
777*8fb009dcSAndroid Build Coastguard Worker	vst1.8	{q3},[r1]
778*8fb009dcSAndroid Build Coastguard Worker
779*8fb009dcSAndroid Build Coastguard Worker.Lctr32_done:
780*8fb009dcSAndroid Build Coastguard Worker	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
781*8fb009dcSAndroid Build Coastguard Worker	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,pc}
782*8fb009dcSAndroid Build Coastguard Worker.size	aes_hw_ctr32_encrypt_blocks,.-aes_hw_ctr32_encrypt_blocks
783*8fb009dcSAndroid Build Coastguard Worker#endif
784*8fb009dcSAndroid Build Coastguard Worker#endif  // !OPENSSL_NO_ASM && defined(OPENSSL_ARM) && defined(__ELF__)
785