4.10.3. Direct branch instructions

Direct branches in ARM, Thumb, and ThumbEE instruction sets are defined to be the following:

B

Branch.

BL

Branch with link.

BLX immed

Branch with link and exchange instruction sets, immediate.

CBZ

Compare and branch on zero, Thumb and ThumbEE instruction sets only.

CBNZ

Compare and branch on nonzero, Thumb and ThumbEE instruction sets only.

ENTERX

Enter ThumbEE state, from Thumb state only.

LEAVEX

Leave ThumbEE state, from ThumbEE state only.

In ETMv1.x there are no direct branches in Jazelle state. In ETMv3.0 and later direct branches in Jazelle state are defined to be the following:

if<cond>

Conditional branch.

if_icmp<cond>

Conditional branch.

if_acmp<cond>

Conditional branch.

goto

Unconditional branch.

jsr

Jump to subroutine.

ifnull

Conditional branch.

ifnonnull

Conditional branch.

goto_w

Long unconditional branch.

jsr_w

Long jump to subroutine.

Any branch not caused by a direct branch is traced as an indirect branch, even if the destination can be inferred by the decompressor. For example, the ARM instruction ADD pc, pc, #4 is an indirect branch.

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