微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 inline-asm x87 fsqrt 函数从 C++ 转换为 x86-64 的 C

如何解决将 inline-asm x87 fsqrt 函数从 C++ 转换为 x86-64 的 C

我正在研究计算平方根的不同方法,特别是一种(来自 here 的 sqrt14)引起了我的注意,不幸的是它是用 C++ 编写的(它只使用汇编),我很难将其翻译回 C - 如果可能的话。

double inline __declspec (naked) __fastcall sqrt14(double n)
{
    _asm fld qword ptr [esp+4]
    _asm fsqrt
    _asm ret 8
} 

可以看出here,C++中插入汇编与C不同。

我想问你是否有可能有一个 C 等价物,如果有,我可以请你写吗?如果有用,我的架构是 64 位。

我怀疑函数声明会是这样的:

double inline __attribute__((fastcall,naked)) sqrt14(double n);

...但我对组装还不够了解,无法完成剩下的...

解决方法

您引用的示例非常特定于一个编译器...

  • __declspec (naked) 是特定于实现的功能(非标准)
  • __fastcall 是特定于实现的功能(非标准)

即使在您修改后的示例中:

  • __attribute__((fastcall,naked)) 是特定于实现的功能(非标准)

即使包含汇编器也是一个实现特定的特性(非标准)——即每个编译器的实现方式可能略有不同。

无论是长还是短,示例代码都适用于编译器和目标处理器,但完全不可移植到其他工具链或处理器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。