1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun // Copyright (C) 2020 ARM Limited 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #include "helper.h" 5*4882a593Smuzhiyun keyia_sign(size_t ptr)6*4882a593Smuzhiyunsize_t keyia_sign(size_t ptr) 7*4882a593Smuzhiyun { 8*4882a593Smuzhiyun asm volatile("paciza %0" : "+r" (ptr)); 9*4882a593Smuzhiyun return ptr; 10*4882a593Smuzhiyun } 11*4882a593Smuzhiyun keyib_sign(size_t ptr)12*4882a593Smuzhiyunsize_t keyib_sign(size_t ptr) 13*4882a593Smuzhiyun { 14*4882a593Smuzhiyun asm volatile("pacizb %0" : "+r" (ptr)); 15*4882a593Smuzhiyun return ptr; 16*4882a593Smuzhiyun } 17*4882a593Smuzhiyun keyda_sign(size_t ptr)18*4882a593Smuzhiyunsize_t keyda_sign(size_t ptr) 19*4882a593Smuzhiyun { 20*4882a593Smuzhiyun asm volatile("pacdza %0" : "+r" (ptr)); 21*4882a593Smuzhiyun return ptr; 22*4882a593Smuzhiyun } 23*4882a593Smuzhiyun keydb_sign(size_t ptr)24*4882a593Smuzhiyunsize_t keydb_sign(size_t ptr) 25*4882a593Smuzhiyun { 26*4882a593Smuzhiyun asm volatile("pacdzb %0" : "+r" (ptr)); 27*4882a593Smuzhiyun return ptr; 28*4882a593Smuzhiyun } 29*4882a593Smuzhiyun keyg_sign(size_t ptr)30*4882a593Smuzhiyunsize_t keyg_sign(size_t ptr) 31*4882a593Smuzhiyun { 32*4882a593Smuzhiyun /* output is encoded in the upper 32 bits */ 33*4882a593Smuzhiyun size_t dest = 0; 34*4882a593Smuzhiyun size_t modifier = 0; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun asm volatile("pacga %0, %1, %2" : "=r" (dest) : "r" (ptr), "r" (modifier)); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun return dest; 39*4882a593Smuzhiyun } 40