xref: /netbsd-src/sys/arch/aarch64/include/asm.h (revision cf570c9e4c9adada6f43fab861a53f331877b29d)
1 /* $NetBSD: asm.h,v 1.9 2020/08/02 06:58:16 maxv Exp $ */
2 
3 #ifndef _AARCH64_ASM_H_
4 #define _AARCH64_ASM_H_
5 
6 #if defined(_KERNEL_OPT)
7 #include "opt_cpuoptions.h"
8 #endif
9 
10 #include <arm/asm.h>
11 
12 #ifdef __aarch64__
13 
14 #ifdef __ASSEMBLER__
15 .macro	adrl 	reg, addr
16 	adrp	\reg, \addr
17 	add	\reg, \reg, #:lo12:\addr
18 .endm
19 #endif
20 
21 #define	fp	x29
22 #define	lr	x30
23 
24 /*
25  * Add a speculation barrier after the 'eret'.
26  * Some aarch64 cpus speculatively execute instructions after 'eret',
27  * and this potentiates side-channel attacks.
28  */
29 #define	ERET	\
30 	eret; dsb sy; isb
31 
32 /*
33  * ARMv8 options to be made available for the compiler to use. Should be
34  * inserted at the beginning of the ASM files that need them.
35  *
36  * The options are:
37  *  - PAN, needed for the compiler to recognize the PAN register.
38  *  - PAC, needed for the compiler to recognize the key registers.
39  */
40 #ifdef ARMV83_PAC
41 #define ARMV8_DEFINE_OPTIONS	\
42 	.arch armv8.3-a
43 #elif defined(ARMV81_PAN)
44 #define ARMV8_DEFINE_OPTIONS	\
45 	.arch armv8.1-a
46 #else
47 #define ARMV8_DEFINE_OPTIONS	/* nothing */
48 #endif
49 
50 #endif
51 
52 #endif /* !_AARCH64_ASM_H_ */
53