0 EQ (Equal) 8 HI (unsigned Higher) 1 NE (Not Equal) 9 LS (unsigned Lower or Same) 2 HS (unsigned Higher or Same) 10 GE (signed Greater than or Equal) 3 LO (unsigned Lower) 11 LT (signed Less Than) 4 MI (Minus, <0) 12 GT (signed Greater Than) 5 PL (Plus, >=0) 13 LE (signed Less Than or Equal) 6 VS (oVerflow Set, overflow) 14 AL (Always) 7 VC (oVerflow Clear, no 15 NV (reserved) overflow) INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 4 Making Decisions
CMP register1, register2
BEQ L1
INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 5
0 EQ (Equal) 8 HI (unsigned Higher) 1 NE (Not Equal) 9 LS (unsigned Lower or Same) 2 HS (unsigned Higher or Same) 10 GE (signed Greater than or Equal) 3 LO (unsigned Lower) 11 LT (signed Less Than) 4 MI (Minus, <0) 12 GT (signed Greater Than) 5 PL (Plus, >=0) 13 LE (signed Less Than or Equal) 6 VS (oVerflow Set, overflow) 14 AL (Always) 7 VC (oVerflow Clear, no 15 NV (reserved) overflow) INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 6 Branch Target Encoding
• 24-bits can address 16 MB of address space. This
might seem like enough for many programs. However today even bigger programs are common.
• Could use: Program counter = Register + Target address
• What should “Register” be?
INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 7
Branch Target Encoding
• Solution: Use the program counter for “Register”
• Intuition: “if” statements and “loop” bodies
contain must less than 16 MB of instructions.
INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 8
Branch Target Encoding
• Typically PC is incremented before we know
current instruction is a branch. In ARM gets incremented twice.
• Recall ARM instructions are 4 bytes long.
• ARM requires instructions placed in memory at
an address that is a multiple of 4 bytes.
INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 9
Branch Target Encoding
So, ARM computes:
PCtarget = PCbranch + 8 + 4 x “Target address”
INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 10
Example Determine encoding for BNE in our earlier while loop example. Assume the first instruction is at address 0.
0 EQ (Equal) 8 HI (unsigned Higher) 1 NE (Not Equal) 9 LS (unsigned Lower or Same) 2 HS (unsigned Higher or Same) 10 GE (signed Greater than or Equal) 3 LO (unsigned Lower) 11 LT (signed Less Than) 4 MI (Minus, <0) 12 GT (signed Greater Than) 5 PL (Plus, >=0) 13 LE (signed Less Than or Equal) 6 VS (oVerflow Set, overflow) 14 AL (Always) 7 VC (oVerflow Clear, no 15 NV (reserved) overflow) INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 14 BNE Exit // go to Exit if save[i] ≠ k
Cond 10 Target address
1 10 1
INTRODUCTION TO ARM SECTION 14: ENCODING BRANCHES 15