首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么armclang不使用VCVT指令进行高效的整数到浮点数的转换?

为什么armclang不使用VCVT指令进行高效的整数到浮点数的转换?
EN

Stack Overflow用户
提问于 2021-06-25 03:12:44
回答 1查看 69关注 0票数 1

我需要使用FPU在Cortex-M4上将整数值转换为浮点值;例如:

代码语言:javascript
复制
float convert(int n) {
    return (float) n;
}

armclang编译器将其翻译为:

代码语言:javascript
复制
        push    {r11, lr}
        mov     r11, sp
        sub     sp, sp, #8
        str     r0, [sp, #4]
        ldr     r0, [sp, #4]
        bl      __aeabi_i2f
        mov     sp, r11
        pop     {r11, lr}
        bx      lr

(Godbolt链接:https://godbolt.org/z/K59xGq78W)

从整型到浮点型的转换是通过调用库例程__aeabi_i2f完成的,这比使用FPU指令VCVT效率低得多。

例如,GCC使用VCVT:

代码语言:javascript
复制
        push    {r7}
        sub     sp, sp, #12
        add     r7, sp, #0
        str     r0, [r7, #4]
        ldr     r3, [r7, #4]
        vmov    s15, r3 @ int
        vcvt.f32.s32    s15, s15
        vmov.f32        s0, s15
        adds    r7, r7, #12
        mov     sp, r7
        ldr     r7, [sp], #4
        bx      lr

(https://godbolt.org/z/Pdv3nEMYq)

有没有办法告诉armclang使用VCVT指令?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 03:35:12

使用选项-march=armv7+fp告诉编译器为具有FPU的机器生成代码。

Godbolt

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68121565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档