2013-05-27 32 views
0

考慮WinMIPS64下面的代碼,增加$ S0,如果$ to是零:優化零次檢查中WinMIPS64

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

是分支延遲在管道中生成這段代碼的問題,直到該分支的結果是已知的。 $ t0可以在代碼中的其他地方更改,並且此代碼段可以循環。

關於如何製作更優化的零計數器的任何想法?

順便說一下,不允許硬件優化(轉發,分支目標緩衝區,延遲時隙)。

回答

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 
+0

喜邁克爾,感謝您的答覆。 我會修改我的代碼,並檢查與攤位發生了什麼! –

+0

我檢查了Michael。如果你在一個展開的循環中使用你的版本,它將消除任何最好/最壞的情況,這將取決於$ t0是否實際爲零。也就是說,它提供更一致的週期數,所以我喜歡它! –