I am using ARM Cortex-A9 (zynq7000) and I want to enable the neon SIMD but not to use it for floating points unless specified.
When compiled by arm-none-eabi-gcc with following fpu options (seperately) :
- mfpu=vfpv3 -mfloat-abi=softfp ,
- mfpu=neon-vfpv3 -mfloat-abi=softfp,
- mfpu=neon -mfloat-abi=softfp,
the binaries 1 & 2 are different. But 2&3 are the same (vectorization not enabled), I am using -Og for optimization. ( -Og does not enable Vectorize options)
How can I make sure that all floating points are done in VFP, not the NEON when I use the option mfpu=neon-vfpv3?
According to the ARM Architecture Reference Manual, NEON and VFP support similar Instructions, which makes it difficult to distinguish the difference just by checking disassembly.
Moreover, I am planning to use #pragma GCC ivdep for the loops and functions that I need to vectorize, and what would be the appropriate compiler flags to achieve this?