1766d95b1SBoyan Karatotev // SPDX-License-Identifier: GPL-2.0
2766d95b1SBoyan Karatotev // Copyright (C) 2020 ARM Limited
3766d95b1SBoyan Karatotev 
4766d95b1SBoyan Karatotev #include "helper.h"
5766d95b1SBoyan Karatotev 
keyia_sign(size_t ptr)6766d95b1SBoyan Karatotev size_t keyia_sign(size_t ptr)
7766d95b1SBoyan Karatotev {
8766d95b1SBoyan Karatotev 	asm volatile("paciza %0" : "+r" (ptr));
9766d95b1SBoyan Karatotev 	return ptr;
10766d95b1SBoyan Karatotev }
11766d95b1SBoyan Karatotev 
keyib_sign(size_t ptr)12766d95b1SBoyan Karatotev size_t keyib_sign(size_t ptr)
13766d95b1SBoyan Karatotev {
14766d95b1SBoyan Karatotev 	asm volatile("pacizb %0" : "+r" (ptr));
15766d95b1SBoyan Karatotev 	return ptr;
16766d95b1SBoyan Karatotev }
17766d95b1SBoyan Karatotev 
keyda_sign(size_t ptr)18766d95b1SBoyan Karatotev size_t keyda_sign(size_t ptr)
19766d95b1SBoyan Karatotev {
20766d95b1SBoyan Karatotev 	asm volatile("pacdza %0" : "+r" (ptr));
21766d95b1SBoyan Karatotev 	return ptr;
22766d95b1SBoyan Karatotev }
23766d95b1SBoyan Karatotev 
keydb_sign(size_t ptr)24766d95b1SBoyan Karatotev size_t keydb_sign(size_t ptr)
25766d95b1SBoyan Karatotev {
26766d95b1SBoyan Karatotev 	asm volatile("pacdzb %0" : "+r" (ptr));
27766d95b1SBoyan Karatotev 	return ptr;
28766d95b1SBoyan Karatotev }
29766d95b1SBoyan Karatotev 
keyg_sign(size_t ptr)30766d95b1SBoyan Karatotev size_t keyg_sign(size_t ptr)
31766d95b1SBoyan Karatotev {
32766d95b1SBoyan Karatotev 	/* output is encoded in the upper 32 bits */
33766d95b1SBoyan Karatotev 	size_t dest = 0;
34766d95b1SBoyan Karatotev 	size_t modifier = 0;
35766d95b1SBoyan Karatotev 
36766d95b1SBoyan Karatotev 	asm volatile("pacga %0, %1, %2" : "=r" (dest) : "r" (ptr), "r" (modifier));
37766d95b1SBoyan Karatotev 
38766d95b1SBoyan Karatotev 	return dest;
39766d95b1SBoyan Karatotev }
40