我需要使用FPU在Cortex-M4上将整数值转换为浮点值;例如:
float convert(int n) {
return (float) n;
}armclang编译器将其翻译为:
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:
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指令?
发布于 2021-06-25 03:35:12
使用选项-march=armv7+fp告诉编译器为具有FPU的机器生成代码。
https://stackoverflow.com/questions/68121565
复制相似问题