__int64
将值转换__m64
为用于 SSE的值的正确方法是什么?
3300 次
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,因为我们正在写入联合的一个变体并从另一个变体读取,但它应该在这种情况下工作。
于 2012-01-30T09:05:40.293 回答