转换的正确方法是什么__int64
值对__m64
与 SSE 一起使用的价值?
有了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,因为我们正在写入联合体的一个变体并从另一个变体中读取,但它应该在这种情况下起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)