Meh*_*dad 7 sse simd visual-studio visual-c++ mmx
将__int64值转换__m64为与SSE一起使用的值的正确方法是什么?
使用gcc,你可以使用_mm_set_pi64x:
#include <mmintrin.h>
__int64 i = 0x123456LL;
__m64 v = _mm_set_pi64x(i);
Run Code Online (Sandbox Code Playgroud)
请注意,并非所有编译器都已_mm_set_pi64x定义mmintrin.h.对于gcc,它的定义如下:
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_set_pi64x (long long __i)
{
return (__m64) __i;
}
Run Code Online (Sandbox Code Playgroud)
这表明如果你愿意,你可以使用演员,例如
__int64 i = 0x123456LL;
__m64 v = (__m64)i;
Run Code Online (Sandbox Code Playgroud)
如果不这样做,如果你坚持使用过于挑剔的编译器,如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
Run Code Online (Sandbox Code Playgroud)
请注意,严格来说这是UB,因为我们正在写一个union的一个变体并从另一个变量中读取,但它应该在这个实例中起作用.
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |