【发布时间】:2019-01-28 15:14:18
【问题描述】:
我想使用 Cortex-M7 的 FPU 指令,称为 VCVTR,将双精度浮点数转换为整数。
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
【问题讨论】:
-
请阅读documentation 以了解扩展程序集。在this page 上,它会告诉您存在哪些限制。
标签: gcc assembly arm cortex-m fpu