我正在尝试编译包含以下代码的 .s 文件:
.text
.globl memcpy_armneon
memcpy_armneon:
pld [r1, #0xC0]
vldm r1!,{d0-d7}
vstm r0!,{d0-d7}
subs r2,r2,#0x40
bge memcpy_armneon
但 XCode 4.5 抱怨:
“LLVM GCC 4.2 错误没有这样的指令:'pld [r1,'。有没有办法编译这个?
好的,现在是心理调试时间。我这里有 Xcode 4.6,它似乎甚至没有LLVM GCC 的 ARM 版本:
$ gcc -arch armv7 -c -o example.o example.s
llvm-gcc-4.2: error trying to exec '/usr/bin/../llvm-gcc-4.2/bin/arm-apple-darwin11-llvm-gcc-4.2': execvp: No such file or directory
这使我相信您正在将此代码交给英特尔汇编程序。事实上,当我这样做时,我得到的正是你的文件的错误措辞:
$ gcc -c -o example.o example.s
example.s:5:no such instruction: `pld [r1,'
example.s:6:no such instruction: `vldm r1!,{d0-d7}'
example.s:7:no such instruction: `vstm r0!,{d0-d7}'
example.s:8:too many memory references for `sub'
example.s:9:no such instruction: `bge memcpy_armneon'
您可能想要使用 clang 以便实际使用 ARM 汇编程序:
clang -arch armv7 -c -o example.o example.s