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