Xcode 项目中的 ARM NEON 代码 - iOS

ARM NEON code in Xcode Project - iOS

我正在尝试 运行 我的 Xcode 项目中的 NEON 代码用于学校目的。 我正在使用 Xcode 7、LLVM 7.0 并使用设备来执行程序。

我在项目中有一个包含代码的 .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 指令集?

谢谢!!

正如 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