Visual 2012では、C++プロジェクトでsqrtsdasm関数を呼び出すにはどうすればよいですか。
グーグルで見つけられない
何かのようなもの :
double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}
編集:
32ビットモードの場合
Visual 2012では、C++プロジェクトでsqrtsdasm関数を呼び出すにはどうすればよいですか。
グーグルで見つけられない
何かのようなもの :
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
他の回答が示しているように、インラインアセンブラを使用できる場合とできない場合があります。
ただし、SSE(およびMMXなど)にはいわゆる組み込み関数があります。
の1つsqrtsd
は_mm_sqrt_sdです
全体をまとめるには、明らかに他のページもいくつか読む必要があります。組み込み関数は、これを解決するためにMicrosoftが推奨する方法です。
これを行うことは、実際の利益が得られる可能性は低く、ペナルティになる可能性が非常に高いため、やや学術的な演習だと思います。でも:
double mySqrt(double val)
{
double retu;
__asm
{
sqrtsd xmm1, val
movsd retu, xmm1
}
return retu;
}
あなたが望むもの、あなたが探している機能、それは「インラインアセンブリ」と呼ばれ、基本的にC / C ++プログラム内のアセンブリを意味します、VisualStudioはこれをうまくサポートしていません。x64ビットプラットフォームでは提供していませんこの機能はまったくありません。
http://www.viva64.com/en/k/0015/
おそらく、より優れたコンパイラに切り替えたいと思うでしょう。