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;
};
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 22:09:57 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它