Prefetch Unit
ARM DDI 0363E Copyright ©2009 ARM Limited. All rights reserved. 5-5
ID013010 Non-Confidential, Unrestricted Access
5.3 Return stack
The call-return stack predicts procedural returns that are program flow changes such as loads,
and branch register. The dynamic branch predictor determines if conditional procedure returns
are predicted as taken or not-taken. The return stack predicts the target address for unconditional
procedure returns, and conditional procedure returns that have been predicted as taken by the
branch predictor.
The return stack consists of a 4-entry circular buffer. When the PFU detects a taken procedure
call instruction, the PFU pushes the return address onto the return stack. The instructions that
the PFU recognizes as procedure calls are:
for ARM and Thumb instructions:
BL
immediate
BLX
immediate
BLX Rm
.
When the return stack detects a taken return instruction, the PFU issues an instruction fetch from
the location at the top of the return stack, and pops the return stack. The instructions that the
PFU recognizes as procedure returns are, in both the ARM and Thumb instruction sets:
POP {..,pc}
LDMIB Rn{!}, {..,pc}
LDMDA Rn{!}, {..,pc}
LDMDB Rn{!}, {..,pc}
LDR pc, [sp], #4
BX Rm
.
Return stack mispredictions can exist when:
The prediction that a conditional return passed or failed its condition code is not correct.
The return address is not correct. The DPU resolves indirect branches that the return stack
predicts at the Ret-stage of the pipeline, see Figure 1-3 on page 1-17. A misprediction
causes the PFU to flush the pipeline and fetch the correct instruction stream.
The return stack has no underflow or overflow detection. Either scenario is likely to cause a
misprediction.
Note
The
MOV PC, LR
instruction is not decoded and is not predicted as a return.