在 Cortex A8 上启用 NEON,并将 fpu 设置为 SoftVFP 或无

发布于 2024-12-27 14:45:48 字数 251 浏览 0 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏辞 2025-01-03 14:45:48

为什么不直接使用 --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

少年亿悲伤 2025-01-03 14:45:48

是的,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):

软vfp+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 编译整个程序,并链接到一组兼容的库。

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):

softvfp+vfpv3

Selects a hardware vector floating-point unit conforming to VFPv3, with software floating-point linkage. Select this option if you are interworking Thumb code with ARM code on a system that implements a VFPv3 unit.

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):

-mfloat-abi=name

Specifies which floating-point ABI to use. Permissible values are: ‘soft’, ‘softfp’ and ‘hard’. Specifying ‘soft’ causes GCC to generate output containing library calls for floating-point operations. ‘softfp’ allows the generation of code using hardware floating-point instructions, but still uses the soft-float calling conventions. ‘hard’ allows generation of floating-point instructions and uses FPU-specific calling conventions.

The default depends on the specific target configuration. Note that the hard-float and soft-float ABIs are not link-compatible; you must compile your entire program with the same ABI, and link with a compatible set of libraries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文