2

在visual 2012下如何在c++项目中调用sqrtsd asm函数

我无法通过谷歌找到它

就像是 :

double mySqrt(double val)
{
__asm
{
  ...
  sqrstd...
}
}

编辑:

在 32 位模式下

4

4 回答 4

3

为什么不使用可移植的 sqrt 函数http://www.cplusplus.com/reference/cmath/sqrt/ ?

默认情况下,VS 2012 会将 sqrt() 替换为__libm_sse2_sqrt_precise. 但是如果你用/fp:fast它编译将替换为sqrtsd

于 2012-12-28T09:31:18.453 回答
2

我认为这样做有点学术上的练习,因为它不太可能有任何实际好处,而且很可能会受到惩罚。然而:

double mySqrt(double val)
{
    double retu;

    __asm
    {
        sqrtsd xmm1, val
        movsd retu, xmm1
    }
    return retu;
}
于 2012-12-28T09:54:25.753 回答
2

正如其他答案所表明的那样,您可能会也可能不会使用内联汇编程序。

然而,SSE(和 MMX 等)有所谓的内在函数:

MS VS 的内在函数

一个sqrtsd_mm_sqrt_sd

您显然还必须阅读其他几页才能将整个内容放在一起。Intrinsics 是 Microsoft 推荐的解决此问题的方法。

于 2012-12-28T09:46:27.327 回答
0

你想要什么,你正在寻找的功能,它被称为“内联汇编”,意思是 C/C++ 程序中的汇编,Visual Studio 对此不提供很好的支持,对于 x64 位平台它不提供完全没有这个功能。

http://www.viva64.com/en/k/0015/

您可能想切换到更好的编译器。

于 2012-12-28T09:25:55.590 回答