PM0214
B cond label is the only conditional instruction that can be either inside or outside an IT
block. All other branch instructions must be conditional inside an IT block, and must be
unconditional outside the IT block, see
Table 34
B label
Bcond label (outside IT block)
Bcond label (inside IT block)
BL{cond} label
BX{cond} Rm
BLX{cond} Rm
You might have to use the .W suffix to get the maximum branch range. See
selection on page
Restrictions
The restrictions are:
•
Do not use PC in the BLX instruction
•
For BX and BLX, bit[0] of Rm must be 1 for correct execution but a branch occurs to the
target address created by changing bit[0] to 0
•
When any of these instructions is inside an IT block, it must be the last instruction of the
IT block.
Bcond is the only conditional instruction that is not required to be inside an IT block.
However, it has a longer branch range when it is inside an IT block.
Condition flags
These instructions do not change the flags.
Examples
B
BLE
B.W
BEQ
BEQ.W
BL
BX
BXNE
shows the ranges for the various branch instructions.
Instruction
68.
loopA
; Branch to loopA
ng
; Conditionally branch to label ng
target ; Branch to target within 16MB range
target ; Conditionally branch to target
target ; Conditionally branch to target within 1MB
funC
; Branch with link (Call) to function funC, return address
; stored in LR
LR
; Return from function call
R0
; Conditionally branch to address stored in R0
The STM32 Cortex-M4 instruction set
IT on page
145.
Table 34. Branch ranges
− 16 MB to +16 MB
− 1 MB to +1 MB
− 16 MB to +16 MB
− 16 MB to +16 MB
Any value in register
Any value in register
PM0214 Rev 9
Branch range
Instruction width
143/262
261
Need help?
Do you have a question about the STM32H7 Series and is the answer not in the manual?
Questions and answers