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