2.6.9.1.2 Operation

All these instructions cause a branch to label, or to the address indicated in Rm. In addition:

  • The BL and BLX instructions write the address of the next instruction to LR (the link register, R14).
  • The BX and BLX instructions result in a UsageFault exception if bit[0] of Rm is 0.

Bcond label is the only conditional instruction that can be either inside or outside an IT block. All other branch instructions can only be conditional inside an IT block, and are always unconditional otherwise, see 2.6.9.3 IT.

The following table lists the ranges for the various branch instructions.

Table 2-31. Branch Ranges
InstructionBranch Range
B label-16 MB to +16 MB
Bcond label (outside IT block)-1 MB to +1 MB
Bcond label (inside IT block)-16 MB to +16 MB
BL{cond} label-16 MB to +16 MB
BX{cond} RmAny value in register
BLX{cond} RmAny value in register

You may have to use the .W suffix to get the maximum branch range. See 2.6.3.8 Instruction Width Selection.