启用Cortex A8上的NEON,fpu设置为SoftVFP或none



我正在尝试使用RVDS 4.0为Cortex A8构建一个可执行文件。我的代码使用NEON,但我想将fpu选项设置为none或SoftVFP。ARM网站提到,当fpu设置为SoftVFP时,NEON将被禁用。这是因为VFP和NEON共享寄存器吗?

有人能解释一下为什么当fpu设置为SoftVFP时我不能使用NEON吗?或者如果有任何选项可以让我启用NEON,即使fpu设置成SoftVFP?

感谢

为什么不直接使用--cpu=7-A?这应该意味着当前的-fpu选项

softvfp是一个仿真库,我想NEON根本没有实现

是的,NEON和VFP寄存器是共享的。这简化了操作系统上下文切换支持,因为任何知道VFP的操作系统也会正确处理NEON。

将为软VFP构建的代码与为硬件VFP构建代码链接是不安全的,因为它们将函数参数/结果放在不同的寄存器中——在这方面,使用NEON与使用硬件VFP非常相似。

不过,有一种特殊情况,当你必须链接到SoftVFP库时,但你碰巧知道你的SoC支持它(你知道吗?有很多A8没有NEON)。这种特殊情况称为softvfp+。它的工作方式是在整数寄存器中传递函数参数,但在函数内部,编译器可以使用FPU,也可以使用NEON。对于针对带有NEON的CortexA8的ARM编译器--fpu=softvfp+vfpv3";

有关ARM编译器的一些相关选项,请参阅此。许多其他编译器也有类似的开关。

对于ARM的RVCT3.x及以上编译器,您需要(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CIHCJIFE.html):

softvfp+vfpv3

选择符合VFPv3的硬件矢量浮点单元,带有软件浮点链接。如果在实现VFPv3单元的系统上互通Thumb代码和ARM代码,请选择此选项。

对于GCC,您将需要"-mfloat-abi=softfp";,并且我认为"-mfpu="否";。来自GCC手册(http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html):

-mfloat abi=名称

指定要使用的浮点ABI。允许的值为:"soft"、"softfp"one_answers"hard"。指定"soft"会导致GCC生成包含浮点运算库调用的输出softfp允许使用硬件浮点指令生成代码,但仍使用软浮点调用约定hard允许生成浮点指令,并使用FPU特定的调用约定。

默认值取决于特定的目标配置。请注意,硬浮动ABI和软浮动ABI不兼容链路;您必须使用相同的ABI编译整个程序,并链接到一组兼容的库。

相关内容

  • 没有找到相关文章

最新更新