PACDB, PACDZB

Pointer Authentication Code for data address, using key B

This instruction computes and inserts a Pointer Authentication Code for a data address, using a modifier and key B.

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 PACDB.
  • The value zero, for PACDZB.
  • Encoding: Integer

    Variants: FEAT_PAuth (ARMv8.3)

    313029282726252423222120191817161514131211109876543210
    110110101100000100011
    sfSopcode2ZRnRd

    PACDB (Z == 0)

    PACDB <Xd>, <Xn|SP>

    PACDZB (Z == 1 && Rn == 11111)

    PACDZB <Xd>

    Decoding algorithm

    if !IsFeatureImplemented(FEAT_PAuth) then EndOfDecode(Decode_UNDEF);
    
    boolean source_is_sp = FALSE;
    constant integer d = UInt(Rd);
    constant integer n = UInt(Rn);
    
    if Z == '0' then // PACDB
        if n == 31 then source_is_sp = TRUE;
    else // PACDZB
        if n != 31 then EndOfDecode(Decode_UNDEF);

    Operation

    if source_is_sp then
        X[d, 64] = AddPACDB(X[d, 64], SP[64]);
    else
        X[d, 64] = AddPACDB(X[d, 64], X[n, 64]);

    Explanations

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