4.5.2. Direct and indirect branches

For some branches it is not necessary to output the destination address. For direct branches (B, BL, or BLX <immediate> instructions) the assembler code provides an offset to be added to the current PC. All direct branches are branches whose target can be determined solely from the executed instruction. Therefore, to calculate the destination of the branch, it is necessary only to know the address of the instruction, along with the fact that it executed. See Direct branch instructions for a list of direct branch instructions.

The branch address must be output only when the program flow changes for a reason other than a direct branch. These are collectively known as indirect branches. Examples of indirect branches are:

Exceptions and state changes (between ARM, Thumb, ThumbEE and Jazelle states) are indicated by outputting the destination address. Depending on the ETM architecture version, there might be no specific indication that an exception occurred.


ThumbEE state is only supported from ETMv3.3. This state is typically used when executing dynamically compiled code, for example by Jazelle RCT technology.

Copyright © 1999-2002, 2004-2009, 2011 ARM Limited. All rights reserved.ARM IHI 0014Q