在c++下调用asm SQRTSD

visual studio - call asm sqrtsd under a c++

本文关键字:asm SQRTSD 调用 c++      更新时间:2023-10-16

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

我无法通过谷歌找到它

类似于:

double mySqrt(double val)
{
__asm
{
  ...
  sqrstd...
}
}
编辑:

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

VS 2012默认将用__libm_sse2_sqrt_precise替换sqrt()。但是如果你用/fp:fast编译,它会被sqrtsd代替

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

double mySqrt(double val)
{
    double retu;
    __asm
    {
        sqrtsd xmm1, val
        movsd retu, xmm1
    }
    return retu;
}

您可能会也可能不会使用内联汇编器,正如其他答案所指出的那样。

然而,SSE(以及MMX和其他)有所谓的内在特性: MS VS 的

内禀函数

sqrtsd的值为_mm_sqrt_sd

很明显,你还得读其他几页才能把整个事情联系起来。微软推荐使用intrinsic来解决这个问题。

你想要的,你正在寻找的功能,它被称为"内联汇编",意思是C/c++程序中的汇编基本上,Visual Studio不提供很好的支持,对于x64位平台,它根本不提供这个功能。

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

你可能想换一个更好的编译器