0

考虑 WinMIPS64 中的以下代码,如果 $t0 为零,则增加 $s0:

bnez  $t0, nonzero   ;branch if $t0 is non-zero
daddi $s0, $s0, 1    ;increment zero-count $s0 if zero
nonzero:

这段代码的问题是在管道中产生了一个分支延迟,直到知道分支的结果。$t0 可以在代码的其他地方更改,并且可以循环此代码段。

关于如何制作更优化的零计数器的任何想法?

顺便说一句,不允许进行硬件优化(转发、分支目标缓冲区、延迟槽)。

4

1 回答 1

1

也许它可以更有效地完成,但不会像这样工作:

SLTIU $t1,$t0,1  ; set $t1 = 1 if $t0 is unsigned less than 1 (i.e. if it's 0),
                 ; otherwise set $t1 = 0
DADD $s0,$s0,$t1
于 2013-05-27T10:54:02.963 回答