我在研究转发时检测危险的条件时,发现这句话很混乱。
'如果管道中的指令的值为 $0 目的地(例如,
),我们希望避免转发 它可能是非零结果值。'sll $0, $1, 2
我以为寄存器$0不能被写入不同的值,所以它的值总是0。那么
sll $0, $1, 2
有什么用,将$1中的值左移2并存储在$0中,$0不能改变?那么 $0 作为目的地怎么可能与转发的需要相关呢?
“需要转发”似乎说明你不懂转发。这是一个优化。没有“需要”这样做。
优化不应影响语义。将值存储到
$0
并随后读取 $0
的值应根据通常的语义返回 0,而不是之前存储的值。然而转发会转发存储的值。
现在问题来了,为什么$0
可以作为店铺位置呢?这就是具有正交指令集的 RISC 逻辑。在非 MIPS 架构上,这更有用,因为这些丢弃值操作仍然可以设置标志。