Consider the Pipelined Ultimate RISC with the following version of the
result forwarding logic discussed in class:
repeat the following assignments in parallel
if not (dst' = FFFF16)
then m[dst'] = tmp
tmp = (if src = dst' then tmp else m[src])
dst' = dst
src = m[pc]
dst = m[pc + 1]
pc = (if dst = FFFF16 then m[src] else pc + 2)
forever
This result forwarding logic actually eliminates only some operand delay
slots. It does, for example, eliminate the delay slot in:
MOVE X,Y
MOVE Y,Z ; here, Z gets X, as hopes!
In solving the following problmes, assume that the RAM subsystem does not
respond to addresses F00016 and up. This range of 4K addresses
is reserved for the CPU and for I/O device interface registers.
Explain, in each case, why this logic does not eliminate delay slots in the
following code fragments:
a: MOVE X,sub
MOVE ccN,Y
b: MOVE X,sub
MOVE acc,Y
c: MOVE X,FFF816
MOVE FFF816,Y
d: MOVE X,(d+2)
MOVE .-.,Y
e: MOVE X,Y
MOVE Y,pc