2016-01-30 129 views
0

我試圖在我的Xcode項目中運行NEON代碼以用於學校目的。 我正在使用Xcode 7,LLVM 7.0並使用設備來執行程序。Xcode項目中的ARM NEON代碼 - iOS

我在代碼的項目中有一個.s文件。如果我只運行ARM代碼它完美的作品,但是當我加入一個單一的代碼行NEON(就像在代碼段)我得到以下信息:

AssemblyTest.s:22:5: error: unrecognized instruction mnemonic 
    vmul.f32 q14, q8, q8 
    ^

我正在使用的測試代碼是

.globl _addInts 
.align 2 

_addInts: 
.cfi_startproc 
sub sp, sp, #16 

str w0, [sp, #12] 
str w1, [sp, #8] 

add w0, w0, w1 
add sp, sp, #16 

vmul.f32 q14, q8, q8 // --- This is the NEON line 

ret 

.cfi_endproc 

是否有任何編譯器標誌我應該添加到項目中? LLVM是否支持NEON指令集?

謝謝!

+2

坑上,W寄存器意味着A64,而是 「V」 -prefixed NEON意味着A32 - 接_one_指令集,你不能混搭... – Notlikethat

回答

0

由於Notlikethat指出您正在混合AArch32和AArch64。例如,vmul.f32 qx,qy,qz(AArch32)正在執行64位Q寄存器的兩次浮點乘法運算。而fmul vx.4s,vy.4s,vz.4s(AArch64)則從128位V寄存器執行4次浮點乘法。

可以使用的#ifdefs分離他們在一個項目中混合這兩種架構:

#ifdef __arm__ //AArch32 
#ifdef __arm64__ //AArch64 

編譯下面使用的架構:在Xcode arm64和你行。您需要將fmul修改爲有用的東西;)

sub sp, sp, #16 
str w0, [sp, #12] 
str w1, [sp, #8] 
add w0, w0, w1 
add sp, sp, #16 
fmul v14.4s, v8.4s, v9.4s 

祝您好運。

/A