无法识别 ARM M4-F 上用于从浮点转换为定点的 VCVT 指令

问题描述

我正在尝试使用 Arm Keil IDE 和编译器版本 v5 和 v6 在 ARM Cortex M4-F 中使用汇编指令“vcvt.s32.f32 q8,q8,#0xf”。

很遗憾,编译器无法识别此指令。当我编写 C 代码时,编译器使用其他较慢的汇编指令代替这一指令; 如果直接写汇编指令,编译器不接受,导致编译错误

有人知道吗?

这条指令看起来存在于 ARM M4-F ISA 中,但目前我无法使其工作!

解决方法

如果有帮助,它会使用 arm-none-eabi-as -mfpu=neon -mcpu=cortex-m4 -mthumb foo.s 与 GNU 汇编器进行汇编。

但不是 -mcpu=cortex-m4 -mfpu=vfpv4

维基百科 says M4 上的可选 FPU 是 VFPv4-SP(单精度),我认为这也意味着它不是完​​整的 NEON。 Tom V 还在评论中确认 Cortex-M4-F 不支持此 NEON SIMD 指令。

Keil 是对的 -
Cortex-M4-F 不支持 vcvt.s32.f32q 寄存器的 d,仅支持 s 寄存器。

以下确实可以与
一起组装 arm-none-eabi-as -mfpu=vfpv4 -mcpu=cortex-m4 -mthumb

   vcvt.s32.f32 s8,s8,#0xf
   vcvt.s32.f32 s9,s9,#0xf
   vcvt.s32.f32 s10,s10,#0xf
   vcvt.s32.f32 s11,s11,#0xf