我想使用 Google NDKv8b 附带的工具链 (gcc-4.6) 将双精度寄存器 (d8) 的值加载到 ARM 平台上的 C 变量中。我的 ARM 机器是三星 Galaxy S2(它有 VFPv3 和 NEON)。GCC 文档说,为了在内联汇编中使用 VFP 双精度寄存器,必须使用“w”约束。所以我尝试了这样的事情(好吧,不要过多地研究整个程序的逻辑):
#include <stdio.h>
int main()
{
double dVar = 1.2345678;
double dTmp;
int i;
for(i = 0; i < 100; i++ )
{
asm volatile(
"vmov.f64 %[dTmp], d8\n"
: [dTmp] "=w" (dTmp)
:
:
);
dVar *= 10.0;
printf("d8 = %f\n", dTmp );
}
return 0;
}
好吧,它甚至没有编译:
/tmp/cc9wQA1z.s: Assembler messages:
/tmp/cc9wQA1z.s:62: Internal error, aborting at /usr/local/google/home/andrewhsieh/ndk-andrewhsieh/src/build/../binutils/binutils-2.21/gas/config/tc-arm.c line 14709 in do_neon_mov
我怎样才能做到这一点?
谢谢!