11.21 BL

Branch with Link.

Syntax

BL{cond}{.W} label

where:

cond

is an optional condition code. cond is not available on all forms of this instruction.

.W

is an optional instruction width specifier to force the use of a 32-bit BL instruction in Thumb.

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 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 11-6 BL instruction availability and range

Instruction ARM   Thumb, 16-bit encoding Thumb, 32-bit encoding
BL label ±32MB (All) ±4MB a (All T) ±16MB (All T2)
BL{cond} label ±32MB (All) -   - -

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.

Architectures

See the preceding table for details of availability of the BL instruction in each architecture.

Examples

    BLE     ng+8
    BL      subC
    BLLT    rtX
a 

BL label and BLX label are an instruction pair.

Non-ConfidentialPDF file icon PDF versionARM DUI0473M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.