在visual 2012下如何在c++项目中调用sqrtsd asm函数
我无法通过谷歌找到它
就像是 :
double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}
编辑:
在 32 位模式下
在visual 2012下如何在c++项目中调用sqrtsd asm函数
我无法通过谷歌找到它
就像是 :
double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}
编辑:
在 32 位模式下
为什么不使用可移植的 sqrt 函数http://www.cplusplus.com/reference/cmath/sqrt/ ?
默认情况下,VS 2012 会将 sqrt() 替换为__libm_sse2_sqrt_precise
. 但是如果你用/fp:fast
它编译将替换为sqrtsd
我认为这样做有点学术上的练习,因为它不太可能有任何实际好处,而且很可能会受到惩罚。然而:
double mySqrt(double val)
{
double retu;
__asm
{
sqrtsd xmm1, val
movsd retu, xmm1
}
return retu;
}
正如其他答案所表明的那样,您可能会也可能不会使用内联汇编程序。
然而,SSE(和 MMX 等)有所谓的内在函数:
一个sqrtsd
是_mm_sqrt_sd
您显然还必须阅读其他几页才能将整个内容放在一起。Intrinsics 是 Microsoft 推荐的解决此问题的方法。
你想要什么,你正在寻找的功能,它被称为“内联汇编”,意思是 C/C++ 程序中的汇编,Visual Studio 对此不提供很好的支持,对于 x64 位平台它不提供完全没有这个功能。
http://www.viva64.com/en/k/0015/
您可能想切换到更好的编译器。