问题描述
我正在使用 ARM Cortex-A9 (zynq7000) 并且我想启用 neon SIMD 但不将其用于浮点,除非指定。
由 arm-none-eabi-gcc 编译时使用以下 fpu 选项(单独):
二进制文件 1 和 2 是不同的。但是 2&3 是相同的(未启用矢量化), 我正在使用 -Og 进行优化。 ( -Og 不启用矢量化选项)
当我使用选项 mfpu=neon-vfpv3 时,如何确保所有浮点都在 VFP 中完成,而不是在 NEON 中完成?
根据 ARM Architecture Reference Manual,NEON 和 VFP 支持类似的指令,这使得仅通过检查反汇编很难区分差异。
此外,我计划将 #pragma GCC ivdep 用于需要向量化的循环和函数,以及实现此目的的适当编译器标志是什么?
解决方法
除非通过内部函数启用或强制执行自动矢量化,否则编译器永远不会使用任何 neon
指令。
尽管 neon
和 vfp
指令看起来很相似,但它们甚至以不同的模式运行。
vfp
和 neon
在 armv7
上共享了一些指令(主要与内存相关),但它们不应该受到任何关注。
你为什么不发布反汇编?