为什么用霓虹灯标志生成vdiv指令?

时间:2016-07-27 14:00:22

标签: arm neon isa

我拆解了之前用霓虹灯标志编译的arm二进制文件:

-mcpu = cortex-a9 -mfpu = neon -mfloat-abi = softfp -ftree-vectorize

转储显示编译器生成的vdiv.f64指令。根据armv7(cortex-a9)的arm手册,霓虹灯simd isa不支持vdiv指令,但浮点(vfp)引擎确实如此。为什么会生成此指令?那么它是一个由vfp执行的浮点指令吗?氖和VFP都支持浮点的加法和乘法,所以如何将它们与eahc其他区分开?

1 个答案:

答案 0 :(得分:1)

对于Cortex-A9,{{​​3}};它是简化的16寄存器VFP-only FPU选项的超集。

更一般地说,该体系结构不允许实现浮点高级SIMD而不实现至少单精度VFP,因此GCC的-mfpu=neon也暗示VFPv3。 允许实现只有整数的高级SIMD而没有任何浮点功能,但我不确定GCC是否可以支持(或者任何人都曾建立过这样的的东西)。

实际的VFP和高级SIMD指令变体与语法无关 - 任何在双精度数据上运行的东西(即<op>.F64)显然都是VFP,因为高级SIMD不支持双精度。在32位<op>.F32寄存器上运行的单精度运算(即s)是标量的,因此是VFP;如果它们在更大的64位d或128位q寄存器上运行,那么它们一次处理多个32位值,因此是矢量化的高级SIMD指令。