带有 NEON 的 ARM 汇编中的高级数学函数

Posted

技术标签:

【中文标题】带有 NEON 的 ARM 汇编中的高级数学函数【英文标题】:Higher level math functions in ARM assembly with NEON 【发布时间】:2011-08-05 00:15:25 【问题描述】:

您好,我对组装有点陌生,我开始熟悉 ARM 组装以及一些新 ARM 芯片中的 NEON 协处理器。我不知道该怎么做的一件事是高级数学函数,如 sin、cos、tan、exp 等。如果我反汇编具有这些数学函数的 C 代码,它们似乎是外部的。

【问题讨论】:

这是适用于 ios(iPhone 等)还是非 Apple ARM 平台?如果是针对 iOS 的,请查看 Accelerate 框架。 可能没有这样的指令,相反它们通常被实现为high-degree polynomials。您可以反汇编库代码或搜索 libm 实现。 它不仅适用于 iOS,而且我已经看过 Accelerate 框架,但它不会做我想要的。我查看了用汇编编写的数学霓虹灯库中的一些代码,我很确定他们使用了高次多项式,我只是想知道他们是否是更好的方法或其他任何方法,但它看起来不适合。 【参考方案1】:

对您而言,最好的选择似乎是简单地链接您的程序集项目中的其他库。如果您想要完全相同的功能,我认为没有任何理由重新创建***。

如果这是一个学习过程,那么我建议您要么从更简单的东西开始,因为听起来您没有解决此类问题的经验,或者查看 user786653 建议的更高次多项式。

【讨论】:

但我只需要两个函数为两个函数导入整个库?你是对的。相反,我决定使用我在库中找到的一些代码来做我想做的事情。我绝对没有数学经验来写这个我想知道是否有比更高次多项式更好的方法以防万一(我真的在这里寻找性能)但现在答案显然是不,所以我会使用更高次数多项式 一定要使用库(如果你只需要两个函数,这应该很容易在网上找到)。编写正确的浮点函数是为了少数人。 另外,由于您的要求很低,而且您的应用程序看起来很简单,您可以为您需要的两个三角函数创建一个查找表。这将是快速而简单的。

以上是关于带有 NEON 的 ARM 汇编中的高级数学函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 NEON 在 ARM 汇编中对四字向量中的所有元素求和

如何使用 Neon Extension 有效地反转汇编语言 ARM 中的数组?

ARM NEON 汇编和浮点舍入

ARM NEON 汇编器错误:“指令不能有条件”

ARM Neon 汇编器 + C 如何传递和使用指针数组

在 ARM Cortex A8 上的汇编中 XOR NEON 向量/寄存器的所有元素/通道(成对?)