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