我在研究转发时检测危险的条件时,发现这句话很令人困惑。
'如果管线中的指令以$ 0作为其指令 目的地(例如
sll $0, $1, 2
),我们要避免转发 其结果值可能非零。'
我认为寄存器$ 0不能用其他值写入,因此它的值始终为0。然后sll $0, $1, 2
的用途是,将$ 1中的值左移2并将其存储在$ 0中,这不能被改变?那么$ 0作为目的地又如何可能与转发需求相关?
答案 0 :(得分:2)
“需要转发”似乎表明您不了解转发。这是一个优化。不需要“做”。
优化不应影响语义。根据通常的语义,将值存储到$0
并随后读取$0
的值应返回0,而不是先前存储的值。但是转发将转发存储的值。
现在有一个问题,为什么$0
可以用作商店位置。那只是具有正交指令集的RISC逻辑。在非MIPS架构上,这会更有用,因为这些丢弃值操作仍可以设置标志。