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 Karatotevsize_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 Karatotevsize_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 Karatotevsize_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 Karatotevsize_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 Karatotevsize_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