优化WinMIPS64中的零检查

时间:2013-05-27 10:38:03

标签: assembly mips

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

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

此代码的问题是在管道中生成分支延迟,直到分支的结果已知。

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

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

1 个答案:

答案 0 :(得分: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