2011-11-01 77 views
0

快速,也許是愚蠢的問題,但這裏卻是。如果在前一條指令取得值之前嘗試寫入寄存器,則在讀取寄存器後立即寫入寄存器可能會導致危險。以下指令是否會對ARM芯片造成危害:這會造成WAR危險嗎?

add r3, r0, r3 

其實質上是r3 += r0

這會對NEON造成危害嗎?例如:

vadd.32 q3, q0, q3 
+0

快速閱讀[Cortex-A8 TRM]的第16章(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344b/BABFFGIG.html)[ PDF](http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344b/DDI0344.pdf)表明 - 如果其他ARM芯片相似 - 它們都應該在一個週期內完成,但是你可能會阻礙雙重問題(但回答需要上下文)。 – user786653

+0

測試它的一種方法是製作兩個示例程序,它們在測量執行時間的循環內嘗試「添加r3,r0,r3」和「添加r1,r0,r3」。在_many_迭代之後比較時間:如果它們相等則沒有危險。 – BlackBear

回答

1

沒有WAR危害。

源寄存器之前不需要目標寄存器; r3作爲輸入可用於讀取的要求至少與其可用於寫入的要求一樣強。總之,沒有理由避免這種結構。

1

沒有停止更新其中一個操作數。 WAR危險實際上很不尋常,因爲寫入通常會在管道後面發生而不是讀取。