6
__int64
の値を__m64
の値に変換する適切な方法は何ですか? gccで'long long'(または__int64)を__m64に変換する方法
__int64
の値を__m64
の値に変換する適切な方法は何ですか? gccで'long long'(または__int64)を__m64に変換する方法
あなただけ_mm_set_pi64x
を使用することができますないすべてのコンパイラがmmintrin.h
で_mm_set_pi64x
が定義されていること
#include <mmintrin.h>
__int64 i = 0x123456LL;
__m64 v = _mm_set_pi64x(i);
注意。ご希望の場合は、おそらく、例えば、キャストを使用することができることを示唆して
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_set_pi64x (long long __i)
{
return (__m64) __i;
}
:gccのために、それは次のように定義されています
__int64 i = 0x123456LL;
__m64 v = (__m64)i;
あなたは、あなただけの組合を使用して、独自の固有を実装することができ、最後の手段として、そのようなビジュアル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です。なぜなら、私たちは組合の一変形に別のものを書いていて、別のものから読んでいるからです。しかし、この例ではうまくいくはずです。
Huh? https://www.google.com/search?q=_mm_set_pi64 – Mehrdad
'mmintrin.h'を見てください –
http://pastebin.com/4bwAbbLZ? – Mehrdad