8

SSEで使用するために__int64値を値に変換する適切な方法は何ですか?__m64

4

1 に答える 1

8

gccを使用すると、次を使用できます_mm_set_pi64x

#include <mmintrin.h>

__int64 i = 0x123456LL; 
__m64 v = _mm_set_pi64x(i);

すべてのコンパイラが_mm_set_pi64xで定義されているわけではないことに注意してくださいmmintrin.h。gccの場合、次のように定義されます。

extern __inline __m64  __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_set_pi64x (long long __i)
{
  return (__m64) __i;
}

これは、必要に応じてキャストを使用できる可能性があることを示しています。

__int64 i = 0x123456LL; 
__m64 v = (__m64)i;

それができない場合、Visual C / C ++などの過度に扱いにくいコンパイラで立ち往生している場合は、最後の手段として、ユニオンを使用して独自の組み込み関数を実装できます。

#ifdef _MSC_VER // if Visual C/C++
__inline __m64 _mm_set_pi64x (const __int64 i) {
    union {
        __int64 i;
        __m64 v;
    } u;

    u.i = i;
    return u.v;
}
#endif

厳密に言えば、これはUBです。これは、ユニオンの1つのバリアントに書き込み、別のバリアントから読み取るためですが、この場合は機能するはずです。

于 2012-01-30T09:05:40.293 に答える