visual-studio - 如何将 'long long'(或 __int64)转换为 __m64

标签 visual-studio visual-c++ sse simd mmx

转换 __int64 的正确方法是什么?值到 __m64与 SSE 一起使用的值(value)?

最佳答案

使用 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,因为我们正在写入联合的一个变体并从另一个变体中读取,但它应该在这种情况下工作。

关于visual-studio - 如何将 'long long'(或 __int64)转换为 __m64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061293/

相关文章:

c - 如何访问 256 位 ps vector 的组件

c - 如何在 C 中有效地累积数据数组

python - Visual Studio 不适用于 Anaconda 环境

c++ - 您的计算机中缺少 api-ms-win-core-winrt-string-l1-1-0.dll

c++ - 将 Qt 与 WinForms 集成以使用某些类

c++ - std::async 来自 std::async in windows xp

wpf - 如何通过代码访问资源(样式)?

c++ - Visual Studio 2005 中空项目和 win32 控制台项目的区别

c++ - MFC 自定义 Tab 键事件处理程序

assembly - Intel 64/IA32 封装水平 ADD 用于四字?