Branch with Link.
is an optional condition code.
condis not available on all forms of this instruction.
is an optional instruction width specifier to force the use of a 32-bit
BLinstruction in Thumb.
is a PC-relative expression.
BL instruction causes a branch
to label, and copies the address
of the next instruction into LR (
R14, the link
Instruction availability and branch ranges
The following table shows the
that are available in ARM and Thumb state. Instructions that are
not shown in this table are not available. Notes in brackets show
the first architecture version where the instruction is available.
Table 10-6 BL instruction availability and range
|Instruction||ARM||Thumb, 16-bit encoding||Thumb, 32-bit encoding|
||±32MB||(All)||±4MB a||(All T)||±16MB||(All T2)|
Extending branch ranges
BL instructions have
restricted ranges from the address of the current instruction. However,
you can use these instructions even if label is
out of range. Often you do not know where the linker places label.
When necessary, the linker adds code to enable longer branches. The
added code is called a veneer.
BL instruction does not change
See the preceding table for details of availability of the
BL instruction in
BLE ng+8 BL subC BLLT rtX
BL label and
label are an instruction pair.