i.MX6Q的GCC选项,以便正确使用NEON/FPU 我想用C++函数中的内嵌ASM霓虹灯指令来做一些霓虹灯手动代码优化,目标是ARM CORTEX-A9(I.MX6Q)。

i.MX6Q的GCC选项,以便正确使用NEON/FPU 我想用C++函数中的内嵌ASM霓虹灯指令来做一些霓虹灯手动代码优化,目标是ARM CORTEX-A9(I.MX6Q)。,gcc,neon,fpu,Gcc,Neon,Fpu,在为编译器生成正确的标志时,我对-mfpu有点困惑。我的目标是将硬FPU与浮点运算结合使用,并且仅将NEON与ASM代码结合使用 通过设置-mfpu=vfpv3,霓虹灯协处理器仍然可以通过调用ASM霓虹灯指令来访问,这是否安全 通过设置-mfpu=neon-fp16,FPU核心是否未使用 在进行非矢量化浮点运算时,FPU的性能会优于NEON吗 1) 否,GCC将把-mfpu值传递给汇编程序,汇编程序将拒绝汇编您的代码,无论您使用的是内联asm还是单独的汇编程序文件: cat foo.s

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

  • 通过设置-mfpu=vfpv3,霓虹灯协处理器仍然可以通过调用ASM霓虹灯指令来访问,这是否安全

  • 通过设置-mfpu=neon-fp16,FPU核心是否未使用

  • 在进行非矢量化浮点运算时,FPU的性能会优于NEON吗

  • 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) 否,
    -mfpu=neon-fp16
    在GCC中也允许使用来自VFPv3指令集的指令

    3) 我不知道你说的这个问题是什么意思,浮点指令的标量版本在VFP指令集的各种版本中,矢量版本在NEON(高级SIMD)指令集中。

    1)如果NEON指令在处理器中,ASM代码可以访问它;编译器不会影响这一点。2) 该选项启用硬件半精度转换指令3)NEON没有“非矢量化”指令,因此你的问题没有意义。1)我不这么认为,如果“-mfloat abi=soft”编译器会导致代码在模拟FPU上执行。代码无法决定在何处执行。2) 我说的是第一部分,那就是“霓虹灯”。关键是,硬FPU核心是否会被闲置,因为从这个标志FP将被卸载到NEON核心。3) 你能解释什么是“非矢量化指令”吗?我知道矢量化数据。也就是说,指令可以在任何类型的数据上执行。我说的对吗?1)如果您正在编写内嵌式ASM,编译器无法删除NEON指令。2) GCC几乎从不发出霓虹灯指令;这个你必须测试一下。3) NEON指令仅在128位向量寄存器上运行。你不能在霓虹灯下进行一次FP操作,所以你的问题毫无意义。