C ++でasm sqrtsdを呼び出す

Visual 2012では、C ++プロジェクトでsqrtsd asm関数をどのように呼び出すことができますか

私はGoogleを介してそれを見つけることができません

何かのようなもの :

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

編集:

32ビットモードで

2
nl ru de
関連する質問これは、高速版sqrt?
追加された 著者 Bo Persson,
64ビットターゲットではありません
追加された 著者 SomeWittyUsername,
std :: sqrt()のmangled名2.良いアセンブリチュートリアルが必要です。
追加された 著者 user529758,

4 答え

sqrt関数を使用しない理由 http://www.cplusplus.com/reference/cmath/sqrt/ は移植可能ですか?

By default VS 2012 will replace sqrt() by __libm_sse2_sqrt_precise. But if you compile with /fp:fast it will replace by sqrtsd

3
追加された
__libm_sse2_sqrt_preciseを呼び出すことができるため、asmコードを確認したい
追加された 著者 Guillaume07,
/ fp:fastを使用してコンパイルすると、コンパイラはライブラリ関数を使用せずにsqrtpdを直接発行できます。
追加された 著者 Hans Passant,

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

SSE(およびMMXなど)のためのいわゆる組み込み関数があります。

MS VSの組み込み関数

The one for sqrtsd is _mm_sqrt_sd

あなたは明らかに、全部をまとめることができるように、他のページのいくつかを読む必要があります。 Intrinsicsは、これを解決するためにMicrosoftが推奨する方法です。

2
追加された

私はこれをやっていくことは、実際のメリットがない可能性があるため、やや罰金になる可能性があるので、ややアカデミックな運動であると思います。しかしながら:

double mySqrt(double val)
{
    double retu;

    __asm
    {
        sqrtsd xmm1, val
        movsd retu, xmm1
    }
    return retu;
}
2
追加された
ありがとう、実際には/ fp:fast asmが生成されます。
追加された 著者 Guillaume07,

あなたが探している機能は、インラインアセンブリと呼ばれ、基本的にC/C ++プログラム内でのアセンブリを意味します。Visual Studioでは、x64ビットプラットフォームではサポートされていませんこの機能は全くありません。

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

より良いコンパイラに切り替えることをお勧めします。

0
追加された