SDK,GCC - 如何在GCC工具链上使用VCVTR指令
描述
在启用FPU的情况下查看ELF时,GCC将在将浮点变量分配(并因此转换为)整数时使用VCVT指令。

根据Arm Architecture参考手册:
“浮点到整数运算通常使用Round to Zero舍入模式,但可以选择使用FPSCR指定的舍入模式。”
FPSCR寄存器位功能FPSCR [23:22]定义了不同的舍入模式。
解
目前还没有指导GCC ARM FPU转换的方法,因此在这种情况下必须使用汇编。
使用Round to Zero是因为C规范声明截断(舍入到零)足以进行转换,如C编程语言标准的6.3.1.4节所述。
“当实数浮动类型的值转换为除_Bool以外的整数类型时,小数部分将被丢弃(即,该值被截断为零)。”
例如,以下代码使用内联汇编来使用VCVTR指令:
int main(void){
int integer = 0;
浮动= 1.8;
integer =(int)floating;
printf(“Float:%。6f,Integer:%d \ n”,浮动,整数);
__asm__ __volatile __(“flds s15,%0”:“= m”(浮动));
__asm__ __volatile __(“VCVTR.S32.F32 s15,s15;”);
__asm__ __volatile __(“fsts s15,%0”:“= m”(整数));
printf(“Float:%f,Integer:%d \ n”,浮动,整数);
返回0;
};