如何将“long long”(或 __int64)转换为 __m64

2024-01-14

转换的正确方法是什么__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(使用前将#替换为@)

如何将“long long”(或 __int64)转换为 __m64 的相关文章

  • 如何获取 3G 调制解调器的 IP 地址?

    我的 GPRS 调制解调器有一张 SIM 卡 它可以连接Web Web 服务给它一个 IP 号码 我需要它 像那样 http www your ip address com http www your ip address com 我怎样才
  • 在 C# 中异步发送电子邮件?

    我正在开发一个应用程序 用户在窗口中的某个按钮上单击 按 Enter 键 该应用程序会执行一些检查并确定是否发送几封电子邮件 然后显示另一个带有消息的窗口 我的问题是 发送 2 封电子邮件会明显减慢进程 并且在发送过程中的一些 8 秒内 第
  • 使用 SpreadsheetLight 进行行计数

    我正在寻找一个类似于 DataTable Rows Count 的函数 它可以与 SLDocument 一起使用来找出有多少行中有数据 SpreadsheetLight 中有可用的东西吗 还有其他方法可以实现这一目标吗 Brendan SL
  • SFINAE 无法有条件地编译成员函数模板

    我正在尝试你使用std enable if使用 SFINAE 和以下代码有条件地仅选择两个成员函数模板中的一个 include
  • 为什么这段代码不会产生编译错误?

    template
  • Visual Studio 2010 (C++):暂时抑制 C4706 警告

    当您在 Visual Studio 2010 中编译以下 C 源文件并启用警告级别 W4 时 include
  • 消失的系统托盘图标

    我正在使用 C 在 Visual Studio 2010 中创建系统托盘应用程序 当应用程序启动时 我创建线程和系统托盘图标 该图标显示 但是每当我将鼠标悬停在该图标上时 它就会消失 应用程序仍在运行 即使我单击按钮显示所有隐藏的图标 它也
  • 使用键盘快捷键浏览代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I m starting to feel the need to run fastly through code with keybo
  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 如何找到此链接器错误的原因?

    经过漫长的重命名项目的过程后 我的 DLL 项目将无法在调试模式下构建 发布构建工作 MSVCRTD lib msvcr90d dll error LNK2005 CrtDbgReportW already defined in LIBCM
  • 在 VS Toolbox 中安装自定义控件

    我们公司提供安装 Inno Setup 的第三方组件 我们用VS套餐自动将我们的组件放入 Visual Studio Toolbox 中 但有时会失败 VS 包还需要一些名为 包加载密钥 尽管我们对其进行了测试 但 Visual Studi
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • Visual Studio 2015 EDMX 模型浏览器和图表丢失

    我最近更新到 Visual Studio 2015 打开我的解决方案并运行 直到我决定将一个实体添加到我的 edmx 中 因此 我双击 edmx 文件来打开图表 或者至少是模型浏览器 但它只打开一个 XML 页面 我检查了安装程序中任何丢失
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • 是否可以通过VC++属性表更改工作目录?

    我计划创建一些相关的 C 项目 这些项目都有几个共同的设置 输出路径 exe 命名约定 中间目录等 并且我已经成功设置了除工作之外的大部分我需要的设置 目录 默认情况下它设置为 ProjectDir 但我希望将其设置为 OutDir 并且我
  • 主动解决方案平台 VS 项目平台 VS 目标平台

    我希望我的应用程序是针对 x64 构建的 因为我使用的是 x64 dll 在配置管理器中 我已将 活动解决方案平台 设置为 x64 但是在项目列表中平台设置为 x86 项目属性中的 平台目标 也设置为 x86 我完全困惑有三个地方可以设置目
  • 如何降低 Visual Studio 构建进程优先级以防止系统无响应?

    我们定期使用 Visual Studio 2013 编译大型 C 项目 在开发人员机器上构建源代码最多可能需要 45 分钟 在此期间 机器经常因CPU负载100 而变得无响应 有没有办法告诉 Visual Studio 以较低的进程优先级运
  • 链接到ntdll.lib并调用ntdll.dll内部的函数

    我最近正在对私有 API 进行一些研究 我尝试调用诸如NtOpenFile在 ntdll dll 中LoadLibrary and GetProcAddress在运行时 幸运的是 它成功了 今天早上我在电脑上进行了文件搜索 发现ntdll

随机推荐