#include <linux/kvm_host.h>
+#include <asm/gpr-num.h>
#include <asm/kvm_emulate.h>
#include <asm/pointer_auth.h>
+/* PACGA Xd, Xn, Xm */
+#define PACGA(d,n,m) \
+ asm volatile(__DEFINE_ASM_GPR_NUMS \
+ ".inst 0x9AC03000 |" \
+ "(.L__gpr_num_%[Rd] << 0) |" \
+ "(.L__gpr_num_%[Rn] << 5) |" \
+ "(.L__gpr_num_%[Rm] << 16)\n" \
+ : [Rd] "=r" ((d)) \
+ : [Rn] "r" ((n)), [Rm] "r" ((m)))
+
static u64 compute_pac(struct kvm_vcpu *vcpu, u64 ptr,
struct ptrauth_key ikey)
{
__ptrauth_key_install_nosync(APGA, ikey);
isb();
- asm volatile(ARM64_ASM_PREAMBLE ".arch_extension pauth\n"
- "pacga %0, %1, %2" : "=r" (pac) : "r" (ptr), "r" (mod));
+ PACGA(pac, ptr, mod);
isb();
__ptrauth_key_install_nosync(APGA, gkey);