我有以下 MIPS 代码,我希望重写/重新排序代码,以便 在保持正确性的同时减少正确流水线执行所需的nop指令数量。假设数据路径既不停止也不转发。这个问题有两个提示:它提醒我们分支和跳转被延迟并且需要填充它们的延迟槽,并且它提示在必要时在内存访问指令(lw,sw)中更改偏移值。
LOOP: lw $1, 100 ($2)
addi $1, $1, 1
sw $1, 500 ($2)
addiu $2, $2, 4
bne $2, $10, LOOP
对我来说很明显,这段代码增加了一个数组的内容并将其存储在另一个数组中。因此,我并没有完全了解如何重新排列此代码,因为需要在完成循环之前计算索引。
我的猜测是在分支指令之后移动lw指令,因为(据我所知)延迟槽中的指令总是被执行。再说一次,我不太了解这个主题,我希望能得到解释。我一般理解流水线,但没有那么多延迟分支。谢谢