问题描述
我正在尝试使用 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.f32
或 q
寄存器的 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