PACDA, PACDZA
Pointer Authentication Code for data address, using key A
This instruction computes and inserts a Pointer Authentication Code
for a data address, using a modifier and key A.
The address is in the general-purpose register that is specified by
<Xd>.
The modifier is:
In the general-purpose register or stack pointer that is specified
by <Xn|SP> for PACDA.
The value zero, for PACDZA.
1
1
0
1
1
0
1
0
1
1
0
0
0
0
0
1
0
0
0
1
0
0
PACDA <Xd>, <Xn|SP>
1
1
1
1
1
1
PACDZA <Xd>
if !IsFeatureImplemented(FEAT_PAuth) then UNDEFINED;
boolean source_is_sp = FALSE;
constant integer d = UInt(Rd);
constant integer n = UInt(Rn);
if Z == '0' then // PACDA
if n == 31 then source_is_sp = TRUE;
else // PACDZA
if n != 31 then UNDEFINED;
<Xd>
Is the 64-bit name of the general-purpose destination register, encoded in the "Rd" field.
<Xn|SP>
Is the 64-bit name of the general-purpose source register or stack pointer, encoded in the "Rn" field.
if source_is_sp then
X[d, 64] = AddPACDA(X[d, 64], SP[]);
else
X[d, 64] = AddPACDA(X[d, 64], X[n, 64]);