BTI
Branch target identification
This instruction is used to guard against
the execution of instructions that are not the intended target of a branch.
Outside of a guarded memory region, a BTI instruction executes as a
NOP. Within a guarded memory region, while
PSTATE.BTYPE != 0b00, a BTI
instruction compatible with the current value of PSTATE.BTYPE
will not generate a Branch Target Exception and will allow execution of
subsequent instructions within the memory region. For more information,
see PSTATE.BTYPE.
The operand <targets> passed to a BTI instruction determines
the values of PSTATE.BTYPE that the BTI
instruction is compatible with.
1
1
0
1
0
1
0
1
0
0
0
0
0
0
1
1
0
0
1
0
0
1
0
0
x
x
0
1
1
1
1
1
BTI {<targets>}
if !IsFeatureImplemented(FEAT_BTI) then ExecuteAsNOP();
// Check branch target compatibility between BTI instruction and PSTATE.BTYPE
SetBTypeCompatible(BTypeCompatible_BTI(op2<2:1>));
<targets>
Is the type of indirection,
op2<2:1>
<targets>
00
[absent]
01
c
10
j
11
jc
SetBTypeNext('00');