在c ++下调用asm sqrtsd

时间:2012-12-28 09:20:10

标签: c++ visual-studio assembly inline-assembly sqrt

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

我无法通过谷歌找到它

类似的东西:

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

编辑:

在32位模式下

4 个答案:

答案 0 :(得分:3)

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

默认情况下,VS 2012会将__libm_sse2_sqrt_precise替换为sqrt()。但如果您使用/fp:fast进行编译,则会替换为sqrtsd

答案 1 :(得分:2)

您可能会或可能无法使用内联汇编程序,正如其他答案所示。

然而,SSE(以及MMX和其他人)有所谓的内在函数:

intrinsic functons for MS VS

sqrtsd的{​​{3}}

你显然必须阅读其他一些页面,以便能够把整个事情放在一起。 Intrinsics是Microsoft推荐的解决方案。

答案 2 :(得分:2)

我认为这样做有点学术性,因为它不太可能带来任何实际好处,很可能是一种惩罚。但是:

double mySqrt(double val)
{
    double retu;

    __asm
    {
        sqrtsd xmm1, val
        movsd retu, xmm1
    }
    return retu;
}

答案 3 :(得分:0)

你想要什么,你正在寻找的功能,它被称为“内联汇编”,意味着基本上在C / C ++程序内部组装,Visual Studio不提供对此的良好支持,对于x64位平台它没有根本不提供此功能。

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

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