我正在使用 ARM Cortex-A9 (zynq7000),我想启用 neon SIMD,但除非指定,否则不要将其用于浮点。
当 arm-none-eabi-gcc 使用以下 fpu 选项(单独)编译时:
- mfpu=vfpv3 -mfloat-abi=softfp ,
- mfpu=neon-vfpv3 -mfloat-abi=softfp,
- mfpu=霓虹灯-mfloat-abi=softfp,
二进制文件 1 和 2 不同。但是 2&3 是相同的(未启用矢量化),我使用 -Og 进行优化。( -Og 不启用 Vectorize 选项)
当我使用选项 mfpu=neon-vfpv3 时,如何确保所有浮点都在 VFP 中完成,而不是在 NEON 中完成?
根据 ARM 架构参考手册,NEON 和 VFP 支持类似的指令,这使得仅通过检查反汇编很难区分差异。
此外,我计划将#pragma GCC ivdep 用于我需要矢量化的循环和函数,以及实现此目的的适当编译器标志是什么?