我正在尝试使用RVDS4.0为Cortex A8构建一个可执行文件。我的代码使用霓虹灯,但我希望将fpu选项设置为none或SoftVFP。ARM网站提到,当fpu设置为SoftVFP时,霓虹灯将被禁用。这是因为VFP和霓虹灯共享寄存器吗?
有人可以解释为什么我不能使用霓虹灯时,fpu设置为SoftVFP,或者是否有任何选项,我可以通过启用霓虹灯,即使当fpu设置为SOftVFP?
谢谢
发布于 2012-02-23 04:32:01
为什么不直接使用--cpu=7-A?这应该意味着currect --fpu选项
softvfp是一个模拟库,我猜NEON根本没有实现。
发布于 2014-01-22 09:08:34
是的,霓虹灯和VFP寄存器是共享的。这简化了操作系统上下文切换支持,因为任何能识别VFP的操作系统也可以正确地处理霓虹灯。
将为softVFP构建的代码与为硬件VFP构建的代码链接是不安全的,因为它们将函数参数/结果放在不同的寄存器中-在这方面,使用霓虹灯很像使用硬件VFP。
但是有一种特殊的情况,当你不得不链接到SoftVFP库,但你碰巧知道你的SoC支持它(你知道吗?有很多A8没有霓虹灯)。这种特殊情况称为softvfp+。其工作方式是将函数参数传递到整数寄存器中,但在函数内部,编译器可以使用FPU,也可以使用霓虹灯。对于ARM的编译器,目标是带有霓虹灯的CortexA8,您应该使用"--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=‘neon’”。摘自GCC手册(http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html):
-mfloat-abi=名称
指定要使用的浮点ABI。允许值为:‘soft’、‘softfp’和‘hard’。指定‘soft’会导致GCC生成包含浮点运算的库调用的输出。“‘softfp”允许使用硬件浮点指令生成代码,但仍使用软浮点调用约定。‘’hard‘允许生成浮点指令,并使用特定于FPU的调用约定。
默认值取决于特定的目标配置。请注意,硬浮点ABI和软浮点ABI不是链接兼容的;您必须使用相同的ABI编译整个程序,并使用一组兼容的库进行链接。
https://stackoverflow.com/questions/8888945
复制相似问题