考虑 WinMIPS64 中的以下代码,如果 $t0 为零,则增加 $s0:
bnez $t0, nonzero ;branch if $t0 is non-zero
daddi $s0, $s0, 1 ;increment zero-count $s0 if zero
nonzero:
这段代码的问题是在管道中产生了一个分支延迟,直到知道分支的结果。$t0 可以在代码的其他地方更改,并且可以循环此代码段。
关于如何制作更优化的零计数器的任何想法?
顺便说一句,不允许进行硬件优化(转发、分支目标缓冲区、延迟槽)。