BL
Branch with Link.
Syntax
BL
{
}{cond
.W
}
label
where:
cond
- is an optional condition code.
is not available on all forms of this instruction.cond
.W
- is an optional instruction width specifier to force the use of a
32-bit
BL
instruction in T32. label
- is a PC-relative expression.
Operation
The BL
instruction causes a branch
to label
, and copies the address
of the next instruction into LR (R14
, the link
register).
Instruction availability and branch ranges
The following table shows the BL
instructions that are available in A32 and T32 state. Instructions that are not shown in
this table are not available.
Table 13-5 BL instruction availability and range
Instruction | A32 | T32, 16-bit encoding | T32, 32-bit encoding |
---|---|---|---|
BL label |
±32MB | ±4MB a | ±16MB |
BL{cond}
label |
±32MB | - | - |
Extending branch ranges
Machine-level 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.
Condition flags
The BL
instruction does not change
the flags.
Availability
See the preceding table for details of availability of the BL
instruction in both instruction sets.
Examples
BLE ng+8 BL subC BLLT rtX
Related concepts
Related reference
Related information
BL label
and BLX label
are an instruction pair.