MPC563XM Reference Manual, Rev. 1
910
Freescale Semiconductor
Preliminary—Subject to Change Without Notice
23.4.9.4.5
Flush Pipeline
When a branch, dispatch or subroutine return microoperation is executed, the next microinstruction can be
executed unconditionally before the flow change takes effect, since microengine has a two-stage pipeline.
Executing the next microinstruction after a branch maximizes execution performance. This feature is
controlled by field FLS (1 bit,
). When FLS=0 the pipeline is flushed, so the next
microinstruction placed after a branch is decoded as NOP if the branch is taken. If FLS=1, the
microinstruction placed after the branch is executed, either if the branch is taken or not, as shown in
.
Flush also controls which value is stored in RAR in a call: in case of no flush, it is the address of the
branch/dispatch instr 2, even if RAR is the ALU destination of the instruction after the call; in case
of a flush, it is the address of the instruction following branch/dispatch.
If a branch with no flush is followed by another branch with no flush, the instructions are executed in the
following order:
1. first branch
2. second branch
3. first branch’s destination instruction
4. second branch’s destination instruction, and the flow proceeds normally from then on
The destination of the first branch must not be another flow changing instruction (branch, return or
dispatch). Similar flows apply when returns or dispatches are used instead of branches. This scheme can
be used to implement quick table look-ups with a dispatch replacing the first branch, for instance.
1
do not return
Table 23-97. Flush Pipeline - FLS
FLS
Meaning
0
flush pipeline when jump / call / dispatch jump / dispatch
call / return is executed
1
do not flush pipeline when jump / call / dispatch jump /
dispatch call / return is executed
Table 23-96. Return from Sub-routine - RTN
RTN
Meaning