BLR

Branch with link to register

This instruction calls a subroutine at an address in a register, setting register X30 to PC+4.

Encoding: Integer

313029282726252423222120191817161514131211109876543210
110101100011111100000000000
Zopop2AMRnRm

BLR <Xn>

Decoding algorithm

constant integer n = UInt(Rn);

Operation

constant bits(64) target = X[n, 64];
if IsFeatureImplemented(FEAT_GCS) && GCSPCREnabled(PSTATE.EL) then
    AddGCSRecord(PC64 + 4);

// Value in BTypeNext will be used to set PSTATE.BTYPE
BTypeNext = '10';

X[30, 64] = PC64 + 4;

constant boolean branch_conditional = FALSE;
BranchTo(target, BranchType_INDCALL, branch_conditional);

Explanations

<Xn>: Is the 64-bit name of the general-purpose register holding the address to be branched to, encoded in the "Rn" field.