我想使用称为VCVTR的Cortex-M7的FPU指令将双精度浮点数转换为整数。
int double_to_int(double value)
{
int result;
__asm("VCVTR.S32.F64 %0, %1" : "=r"(result), "r"(value));
return result;
}
但是我从编译器中获得了错误信息。
错误:预期VFP单精度,双精度或Neon四精度寄存器-'vcvtr.s32.f64 r3,r3'
如何解决此问题。
也许约束“ = r”和“ r”不正确。但是我不知道FPU寄存器的其他限制。
我的编译器是arm-none-eabi-gcc,版本是7.2.1
我的编译器选项是
-mcpu = cortex-m7 -mthumb -mfloat-abi = hard -mfpu = fpv5-d16 -O3 -g -munaligned-access
答案 0 :(得分:4)
对于初学者来说,编译器完全能够生成该指令。不仅有能力,而且实际上一个简单的return value
就会产生这种效果。尽管如此,constraints are documented in the manual。特别是:
t个VFP浮点寄存器s0-s31。用于32位值。
基于命令行选项的VFP浮点寄存器d0-d31和适当的子集d0-d15。仅用于64位值。
您还意外地指定了两个输出约束。 value
当然应该是输入。