2

Visual 2012では、C++プロジェクトでsqrtsdasm関数を呼び出すにはどうすればよいですか。

グーグルで見つけられない

何かのようなもの :

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:fastsqrtsd

于 2012-12-28T09:31:18.453 に答える
2

他の回答が示しているように、インラインアセンブラを使用できる場合とできない場合があります。

ただし、SSE(およびMMXなど)にはいわゆる組み込み関数があります。

MSVSの固有の機能

の1つsqrtsd_mm_sqrt_sdです

全体をまとめるには、明らかに他のページもいくつか読む必要があります。組み込み関数は、これを解決するためにMicrosoftが推奨する方法です。

于 2012-12-28T09:46:27.327 に答える
2

これを行うことは、実際の利益が得られる可能性は低く、ペナルティになる可能性が非常に高いため、やや学術的な演習だと思います。でも:

double mySqrt(double val)
{
    double retu;

    __asm
    {
        sqrtsd xmm1, val
        movsd retu, xmm1
    }
    return retu;
}
于 2012-12-28T09:54:25.753 に答える
0

あなたが望むもの、あなたが探している機能、それは「インラインアセンブリ」と呼ばれ、基本的にC / C ++プログラム内のアセンブリを意味します、VisualStudioはこれをうまくサポートしていません。x64ビットプラットフォームでは提供していませんこの機能はまったくありません。

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

おそらく、より優れたコンパイラに切り替えたいと思うでしょう。

于 2012-12-28T09:25:55.590 に答える