我希望在C ++函数中使用内联ASM氖指令进行一些NEON手动代码优化,目标是ARM Cortex-A9(i.MX6Q)。
在为编译器制作正确的标志时,我对-mfpu有点困惑。我的目标是使用具有浮点运算的硬FPU,并仅将NEON用于ASM代码。
通过设置-mfpu = vfpv3可以安全地通过调用ASM氖指令来访问NEON协处理器吗?
通过设置-mfpu = neon-fp16,FPU核心是否会被闲置?
在进行非矢量化浮点运算时,FPU会胜过NEON吗?
答案 0 :(得分:0)
1)不,GCC会将-mfpu
值传递给汇编程序,汇编程序将拒绝汇编您的代码,无论您使用的是内联asm还是单独的汇编程序文件:
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)指令集中。 / p>