1/* Do not modify. This file is auto-generated from arm64cpuid.pl. */
2#include "arm_arch.h"
3
4.text
5.arch	armv8-a+crypto
6
7.align	5
8.globl	_armv7_neon_probe
9.type	_armv7_neon_probe,%function
10_armv7_neon_probe:
11	AARCH64_VALID_CALL_TARGET
12	orr	v15.16b, v15.16b, v15.16b
13	ret
14.size	_armv7_neon_probe,.-_armv7_neon_probe
15
16.globl	_armv7_tick
17.type	_armv7_tick,%function
18_armv7_tick:
19	AARCH64_VALID_CALL_TARGET
20#ifdef	__APPLE__
21	mrs	x0, CNTPCT_EL0
22#else
23	mrs	x0, CNTVCT_EL0
24#endif
25	ret
26.size	_armv7_tick,.-_armv7_tick
27
28.globl	_armv8_aes_probe
29.type	_armv8_aes_probe,%function
30_armv8_aes_probe:
31	AARCH64_VALID_CALL_TARGET
32	aese	v0.16b, v0.16b
33	ret
34.size	_armv8_aes_probe,.-_armv8_aes_probe
35
36.globl	_armv8_sha1_probe
37.type	_armv8_sha1_probe,%function
38_armv8_sha1_probe:
39	AARCH64_VALID_CALL_TARGET
40	sha1h	s0, s0
41	ret
42.size	_armv8_sha1_probe,.-_armv8_sha1_probe
43
44.globl	_armv8_sha256_probe
45.type	_armv8_sha256_probe,%function
46_armv8_sha256_probe:
47	AARCH64_VALID_CALL_TARGET
48	sha256su0	v0.4s, v0.4s
49	ret
50.size	_armv8_sha256_probe,.-_armv8_sha256_probe
51
52.globl	_armv8_pmull_probe
53.type	_armv8_pmull_probe,%function
54_armv8_pmull_probe:
55	AARCH64_VALID_CALL_TARGET
56	pmull	v0.1q, v0.1d, v0.1d
57	ret
58.size	_armv8_pmull_probe,.-_armv8_pmull_probe
59
60.globl	_armv8_sha512_probe
61.type	_armv8_sha512_probe,%function
62_armv8_sha512_probe:
63	AARCH64_VALID_CALL_TARGET
64.long	0xcec08000	// sha512su0	v0.2d,v0.2d
65	ret
66.size	_armv8_sha512_probe,.-_armv8_sha512_probe
67
68.globl	_armv8_cpuid_probe
69.type	_armv8_cpuid_probe,%function
70_armv8_cpuid_probe:
71	AARCH64_VALID_CALL_TARGET
72	mrs	x0, midr_el1
73	ret
74.size	_armv8_cpuid_probe,.-_armv8_cpuid_probe
75
76.globl	OPENSSL_cleanse
77.type	OPENSSL_cleanse,%function
78.align	5
79OPENSSL_cleanse:
80	AARCH64_VALID_CALL_TARGET
81	cbz	x1,.Lret	// len==0?
82	cmp	x1,#15
83	b.hi	.Lot		// len>15
84	nop
85.Little:
86	strb	wzr,[x0],#1	// store byte-by-byte
87	subs	x1,x1,#1
88	b.ne	.Little
89.Lret:	ret
90
91.align	4
92.Lot:	tst	x0,#7
93	b.eq	.Laligned	// inp is aligned
94	strb	wzr,[x0],#1	// store byte-by-byte
95	sub	x1,x1,#1
96	b	.Lot
97
98.align	4
99.Laligned:
100	str	xzr,[x0],#8	// store word-by-word
101	sub	x1,x1,#8
102	tst	x1,#-8
103	b.ne	.Laligned	// len>=8
104	cbnz	x1,.Little	// len!=0?
105	ret
106.size	OPENSSL_cleanse,.-OPENSSL_cleanse
107
108.globl	CRYPTO_memcmp
109.type	CRYPTO_memcmp,%function
110.align	4
111CRYPTO_memcmp:
112	AARCH64_VALID_CALL_TARGET
113	eor	w3,w3,w3
114	cbz	x2,.Lno_data	// len==0?
115	cmp	x2,#16
116	b.ne	.Loop_cmp
117	ldp	x8,x9,[x0]
118	ldp	x10,x11,[x1]
119	eor	x8,x8,x10
120	eor	x9,x9,x11
121	orr	x8,x8,x9
122	mov	x0,#1
123	cmp	x8,#0
124	csel	x0,xzr,x0,eq
125	ret
126
127.align	4
128.Loop_cmp:
129	ldrb	w4,[x0],#1
130	ldrb	w5,[x1],#1
131	eor	w4,w4,w5
132	orr	w3,w3,w4
133	subs	x2,x2,#1
134	b.ne	.Loop_cmp
135
136.Lno_data:
137	neg	w0,w3
138	lsr	w0,w0,#31
139	ret
140.size	CRYPTO_memcmp,.-CRYPTO_memcmp
141