考虑WinMIPS64中的以下代码,如果$ t0为零,则会增加$ s0:
bnez $t0, nonzero ;branch if $t0 is non-zero
daddi $s0, $s0, 1 ;increment zero-count $s0 if zero
nonzero:
此代码的问题是在管道中生成分支延迟,直到分支的结果已知。
关于如何制作更优化的零点计数器的任何想法? 顺便说一句,不允许硬件优化(转发,分支目标缓冲区,延迟槽)。
答案 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