按照arm info center VADD可以condtitionally然而,當我嘗試ARM NEON彙編程序錯誤:「指令不能是有條件的」
vaddeq.f32 d0,d0,d1
的Xcode返回
65:instruction cannot be conditional -- vaddeq.f32 d0,d0,d1
有一兩件事我注意到是執行它似乎只有NEON指令纔會出現此錯誤。 VFP指令不會產生這些錯誤。
爲了啓用NEON條件指令,是否需要設置編譯器標誌?
按照arm info center VADD可以condtitionally然而,當我嘗試ARM NEON彙編程序錯誤:「指令不能是有條件的」
vaddeq.f32 d0,d0,d1
的Xcode返回
65:instruction cannot be conditional -- vaddeq.f32 d0,d0,d1
有一兩件事我注意到是執行它似乎只有NEON指令纔會出現此錯誤。 VFP指令不會產生這些錯誤。
爲了啓用NEON條件指令,是否需要設置編譯器標誌?
ARM體系結構參考手冊說:
An ARM Advanced SIMD VADD instruction must be unconditional.
即,如果在ARM模式是,這些指令是無條件的。如果將它們放入IT塊中,可以在Thumb-2中有條件地使用它們。
.syntax unified
.code 16
.globl _foo
_foo:
cmp r0, #0
it eq
vaddeq.f32 d0, d0, d1
bx lr
爲什麼有條件的NEON指令在ARM模式下可用的原因是因爲他們使用的編碼設置爲NV(永遠)的條件字段。您需要使用條件分支或(更好地)重寫代碼以不直接使用比較結果 - 例如根據結果將寄存器設置爲0或1,並在進一步的操作中使用它的值。
只有有條件地執行NEON和VFP共享的指令。
(vldmia例如)
對於我來說,已經有當條件執行可能從一些輕微的頭痛救了我一些情況,但一般來說,你不會需要它厲害。
仔細查看NEON邏輯和比較操作。他們很好地指出了NEON應該如何編程。
cya。
非常感謝,真正清除了我的東西,即時通訊不會在我的代碼中使用拇指,所以我想我會堅持分支。儘管謝謝你的偉大答案! –
太好了。現在,您可以繼續並單擊接受此答案的按鈕,然後針對您提出的所有其他問題以及人們花時間回答的問題執行相同操作。 –
對不起,新的堆棧溢出 –