在 Cortex A8 上启用 NEON,并将 fpu 设置为 SoftVFP 或无
我正在尝试使用 RVDS 4.0 为 Cortex A8 构建可执行文件。我的代码使用 NEON,但我想将 fpu 选项设置为 none 或 SoftVFP。 ARM 网站提到,当 fpu 设置为 SoftVFP 时,NEON 将被禁用。这是因为VFP和NEON共享寄存器吗?
有人可以解释一下为什么当 fpu 设置为 SoftVFP 时我无法使用 NEON,或者是否有任何选项可以让我即使在 fpu 设置为 SOftVFP 时也可以启用 NEON?
谢谢
I am trying to build an executable for Cortex A8 using RVDS 4.0. My code uses NEON but I want to set fpu option to either none or SoftVFP. The ARM website mentions that NEON is disabled when fpu is set to SoftVFP. Is this because VFP and NEON share registers?
Can some one please explain why I can not use NEON when fpu is set to SoftVFP or if there is any option through which I can enable NEON even when fpu is set to SOftVFP?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为什么不直接使用 --cpu=7-A ?这应该意味着当前的 --fpu 选项
softvfp 是一个模拟库,我想 NEON 根本没有实现
why not just use --cpu=7-A ? that should imply the currect --fpu option
softvfp is an emulation library, I guess NEON is simply not implemented
是的,NEON 和 VFP 寄存器是共享的。这简化了操作系统上下文切换支持,因为任何支持 VFP 的操作系统也能正确处理 NEON。
将为 softVFP 构建的代码与为硬件 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):
对于 GCC,您需要“-mfloat-abi=softfp”,我认为“-mfpu='neon'”。来自 GCC 手册(http://gcc.gnu.org/onlinedocs/gcc /ARM-Options.html):
Yes, the NEON and VFP registers are shared. This simplifies operating system context-switching support, since any OS aware of VFP will handle NEON correctly too.
It is unsafe to link code built for softVFP with code built for hardware VFP, because they place function arguments/results in different registers - using NEON is a lot like using hardware VFP where this is concerned.
There is a special case though, when you have to link against SoftVFP libraries, but you happen to know your SoC supports it(Do you know this? There are plenty of A8's without NEON). The special case is called softvfp+. The way this works is that function arguments are passed in integer registers, but inside of functions the compiler can use the FPU, or you can use NEON. For ARM's compiler targeting a CortexA8 with NEON, you'd want to use "--fpu=softvfp+vfpv3"
See this for some options for ARM's compiler related to this. Many other compilers have similar switches.
For ARM's RVCT3.x and above compilers, you'll want(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CIHCJIFE.html):
For GCC, you'll want "-mfloat-abi=softfp", and I think "-mfpu=‘neon’". From the GCC manual(http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html):