用于查找平方根的最快汇编代码。需要说明[关闭]

问题描述 投票:-2回答:1

我目前正在C中制作一个需要找到数十亿平方根的程序。我查找了哪些已知代码更快地找到了平方根并且遇到了这个看起来最快的代码。 https://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

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

我对汇编语言了解不多,所以有人可以解释这段代码在算法上的作用以及这些关键字的含义吗?

c assembly root inline-assembly sqrt
1个回答
-1
投票

这是标准naked函数的Microsoft Specific fast call sqrt

有关详细信息,请查看Microsoft文档。

裸存储类属性是特定于Microsoft的C语言扩展。对于使用naked storage-class属性声明的函数,编译器生成没有prolog和epilog代码的代码。您可以使用此功能使用内联汇编程序代码编写自己的prolog / epilog代码序列。裸函数在编写虚拟设备驱动程序时特别有用。见:Naked functions

__fastcall调用约定指定函数的参数在可能的情况下在寄存器中传递。此调用约定仅适用于x86体系结构。看看:__fastcall

__fastcall是很久以前由微软推出的。通常,fastcall调用约定在寄存器中传递一个或多个参数,这减少了调用所需的内存访问次数。通过片上缓存,寄存器中传递信息的收益并不像以前那么大。而__stdcall现在可能实际上更快。

© www.soinside.com 2019 - 2024. All rights reserved.