i.MX6Q 的 GCC 选项以便正确使用 NEON/FPU

GCC options for i.MX6Q in order to properly use NEON/FPU

我希望在 C++ 函数中使用内联 ASM neon 指令进行一些 NEON 手动代码优化,目标是 ARM Cortex-A9 (i.MX6Q)。

在为编译器制作正确的标志时,我对 -mfpu 有点困惑。我的目标是将硬 FPU 与浮点运算一起使用,并将 NEON 仅与 ASM 代码一起使用。

  1. 假设通过设置 -mfpu=vfpv3,仍然可以通过调用 ASM neon 指令访问 NEON 协处理器是否安全?

  2. 通过设置-mfpu=neon-fp16,FPU核心会不会被闲置?

  3. 在进行非矢量化浮点运算时,FPU 是否会优于 NEON?

1) 不,GCC 会将 -mfpu 值传递给 assembler,而 assembler 将拒绝 assemble 你的代码,无论你是使用内联 asm 或单独的 assembler 文件:

cat foo.s
    vmov q1, q2
gcc foo.s -c -mfpu=vfpv3
foo.s: Assembler messages:
foo.s:1: Error: selected FPU does not support instruction -- `vmov q1,q2'

2) 不,GCC 中的 -mfpu=neon-fp16 还允许使用来自 VFPv3 指令集的指令。

3)我不确定你问的这个问题是什么意思,浮点指令的标量版本在VFP指令集的各种版本中,向量版本在NEON(高级SIMD)指令集中.