【发布时间】:2016-02-27 11:43:15
【问题描述】:
我正在尝试为 Raspberry Pi 2B (ARMv7 / Neon) 编译一个程序,但我从内联汇编代码中得到一个错误:
错误:需要 VFP 单精度寄存器 -- `vstmia.64 r9,{d16-d31}'
代码是:
asm volatile (
"vstmia.64 %[reg]!, {d0 - d15} @ read all regs\n\t"
"vstmia.64 %[reg], {d16 - d31} @ read all regs\n\t"
::[reg] "r" (&vregs):
);
有趣的是它没有抱怨第一个vstmia。
我首先尝试了单个{d0 - d32},我认为可能有太多的 64 位寄存器,但这显然不是问题。
vregs 是一个 8 字节对齐的存储。
我正在使用 arm-linux-gnueabihf-gcc 4.8.3,这个命令行:
arm-linux-gnueabihf-gcc -mcpu=cortex-a7 -marm -O2 -g -std=gnu11 -MMD -MP -MF"ARM_decode_table.d" -MT"ARM_decode_table.o" -c -o "ARM_decode_table .o" "../ARM_decode_table.c"
【问题讨论】:
-
你通过什么
-mfpu=选项? -
arm-linux-gnueabihf-gcc -mcpu=cortex-a7 -marm -O2 -g -std=gnu11 -MMD -MP -MF"ARM_decode_table.d" -MT"ARM_decode_table.o" - c -o "ARM_decode_table.o" "../ARM_decode_table.c"
-
好的,如果你不指定 FPU,你将得到编译器配置的任何默认值(你可以使用
-v检查 GCC 的配置)。我会大胆猜测那恰好是vfpv3-d16;) -
-v 给了我(其中很多东西) --with-fpu=vfp --with-float=hard 我应该把fpu换成neon-vfpv4?
标签: gcc arm inline-assembly raspberry-pi2 neon