求平方根的最快汇编代码。需要解释
Fastest assembly code for finding the square root. Explanation needed
我目前正在用 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
}
我不太了解汇编语言,所以有人可以解释一下这段代码在算法上的作用以及这些关键字的含义吗?
这是标准 sqrt
函数的 Microsoft 特定 naked
fast call
。
有关详细信息,请查看 Microsoft 文档。
naked storage-class 属性是 C 语言的 Microsoft-specific 扩展。对于使用 naked storage-class 属性声明的函数,编译器生成的代码没有序言和结尾代码。您可以使用此功能使用内联汇编代码编写您自己的 prolog/epilog 代码序列。裸函数在编写虚拟设备驱动程序时特别有用。
参见:Naked functions.
__fastcall
调用约定指定函数的参数尽可能在寄存器中传递。此调用约定仅适用于 x86 架构。看一眼:
__fastcall
__fastcall
很久以前由 Microsoft 推出。通常 fastcall 调用约定在寄存器中传递一个或多个参数,这减少了调用所需的内存访问次数。使用 on-chip 缓存,在寄存器中传递内容的好处并不像以前那样多。
__stdcall
现在可能实际上更快了。
我目前正在用 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
}
我不太了解汇编语言,所以有人可以解释一下这段代码在算法上的作用以及这些关键字的含义吗?
这是标准 sqrt
函数的 Microsoft 特定 naked
fast call
。
有关详细信息,请查看 Microsoft 文档。
naked storage-class 属性是 C 语言的 Microsoft-specific 扩展。对于使用 naked storage-class 属性声明的函数,编译器生成的代码没有序言和结尾代码。您可以使用此功能使用内联汇编代码编写您自己的 prolog/epilog 代码序列。裸函数在编写虚拟设备驱动程序时特别有用。 参见:Naked functions.
__fastcall
调用约定指定函数的参数尽可能在寄存器中传递。此调用约定仅适用于 x86 架构。看一眼:
__fastcall
__fastcall
很久以前由 Microsoft 推出。通常 fastcall 调用约定在寄存器中传递一个或多个参数,这减少了调用所需的内存访问次数。使用 on-chip 缓存,在寄存器中传递内容的好处并不像以前那样多。
__stdcall
现在可能实际上更快了。