This is a collection of Intel®’ IA32® Software Developer's Manuals (URL of the day) and AMD' AMD64 Architecture Programmer's Manual together with the related specifications, application notes, white papers, and change logs. The collection aims to keep all available revisions. It was originally created by Michal Necasek, see OS/2 Museum.

If you have a public document, related to the IA32® specifications and missing from the collection, please mail it to me. The content of this URL and all sub-ULRs is available for convenient bulk download by rsync x86docs password "" (empty).

PACIB, PACIB1716, PACIBSP, PACIBZ, PACIZB -- A64

PACIB, PACIB1716, PACIBSP, PACIBZ, PACIZB

Pointer Authentication Code for instruction address, using key B

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

The address is:

The modifier is:

If FEAT_PAuth_LR is implemented and PSTATE.PACM is 1, then PACIB1716 and PACIBSP include a second modifier that is:

A PACIBSP instruction has an implicit BTI instruction. The implicit BTI instruction of a PACIBSP instruction is always compatible with PSTATE.BTYPE == 0b01 and PSTATE.BTYPE == 0b10. Controls in SCTLR_ELx configure whether the implicit BTI instruction of a PACIBSP instruction is compatible with PSTATE.BTYPE == 0b11. For more information, see PSTATE.BTYPE.

It has encodings from 2 classes: Integer and System

Integer
(FEAT_PAuth)

313029282726252423222120191817161514131211109876543210
110110101100000100Z001RnRd
sfSopcode2

Encoding for the PACIB variant

Applies when (Z == 0)

PACIB <Xd>, <Xn|SP>

Encoding for the PACIZB variant

Applies when (Z == 1 && Rn == 11111)

PACIZB <Xd>

Decode for all variants of this encoding

if !IsFeatureImplemented(FEAT_PAuth) then EndOfDecode(Decode_UNDEF); end; var source_is_sp : boolean = FALSE; let pacib1716 : boolean = FALSE; let d : integer = UInt(Rd); let n : integer = UInt(Rn); if Z == '0' then // PACIB if n == 31 then source_is_sp = TRUE; end; else // PACIZB if n != 31 then EndOfDecode(Decode_UNDEF); end; end;

System
(FEAT_PAuth)

313029282726252423222120191817161514131211109876543210
1101010100000011001000x101x11111
CRmop2

Encoding for the PACIB1716 variant

Applies when (CRm == 0001 && op2 == 010)

PACIB1716

Encoding for the PACIBSP variant

Applies when (CRm == 0011 && op2 == 011)

PACIBSP

Encoding for the PACIBZ variant

Applies when (CRm == 0011 && op2 == 010)

PACIBZ

Decode for all variants of this encoding

if !IsFeatureImplemented(FEAT_PAuth) then EndOfDecode(Decode_NOP); end; var d : integer; var n : integer; var source_is_sp : boolean = FALSE; var pacib1716 : boolean = FALSE; case CRm::op2 of when '0011 010' => // PACIBZ d = 30; n = 31; when '0011 011' => // PACIBSP d = 30; source_is_sp = TRUE; if IsFeatureImplemented(FEAT_BTI) then // Check for branch target compatibility between PSTATE.BTYPE // and implicit branch target of PACIBSP instruction. let pacinst : PACInstType = PACIxSP; SetBTypeCompatible(BTypeCompatible_PAC(pacinst)); end; when '0001 010' => // PACIB1716 d = 17; n = 16; pacib1716 = TRUE; end;

Assembler Symbols

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

Operation

if source_is_sp then if IsFeatureImplemented(FEAT_PAuth_LR) && PSTATE.PACM == '1' then X{64}(d) = AddPACIB2(X{64}(d), SP{64}(), PC64()); else X{64}(d) = AddPACIB(X{64}(d), SP{64}()); end; else if IsFeatureImplemented(FEAT_PAuth_LR) && PSTATE.PACM == '1' && pacib1716 then X{64}(d) = AddPACIB2(X{64}(d), X{64}(n), X{64}(15)); else X{64}(d) = AddPACIB(X{64}(d), X{64}(n)); end; end;


2026-03_rel 2026-03-26 20:48:11

Copyright © 2010-2026 Arm Limited or its affiliates. All rights reserved. This document is Non-Confidential.