问题标签 [mmx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
421 浏览

gcc - 需要使用 GCC 5.3 i686 主机工具链为 i586 目标构建

我需要在 i686 主机环境(32 位 Ubuntu Docker 容器)中使用 GCC 5.3 为 i586 目标(无 MMX 指令)构建。主机工具链是 i686。无论如何要在不构建 i586 交叉编译器的情况下执行此操作吗?

0 投票
0 回答
153 浏览

assembly - MMX PANDN 和 BMI ANDN 有什么区别?

PANDNMMX 指令和 BMI 1.0 指令有什么区别ANDN

0 投票
1 回答
340 浏览

visual-c++ - 如何在 MSVC 中有效地将两个 __m128d 转换为一个 __m128i?

转换然后移位然后按位或'ing是从两个转换__m128d为单个的唯一方法__m128i吗?

这对于 x64 构建中的 Xcode 来说是完全可以接受的

并且反汇编显示_mm_cvtpd_pi32正在使用。但是,Visual Studio 无法编译它,抱怨链接器错误。这在 VS 文档中得到支持,说_mm_cvtpd_pi32在 x64 上不受支持。

我不太担心它不可用,但是两次转换,一次移位,然后是按位还是最快的方式?

0 投票
0 回答
2836 浏览

sse - _mm_mul_ps() 怎么加两个__m128?

我正在做一个程序,它需要两个 4x4 矩阵并使用 Intrinsics 将它们相乘。到目前为止我所理解的:

  • MMX/SSE 指令集可让您加速计算。特别是它使用 4 字节元素向量。
  • __m128表示一个 16 字节向量(4 个字节的 4 个元素)。此外,__m128数据需要对齐才能工作。

我迷路的地方在这里:

  • 函数_mm_mul_ps(_m128, _m128)(如我所读)采用两个 16 字节向量,4 个 4 字节浮点数。它将两个向量“一对一”相乘并返回 a _m128。但是,该_m128向量究竟包含什么(what的结果)?
  • 函数_mm_hadd_ps(_m128, _m128)添加两个 16 字节向量(每个 4 字节浮点数)。它以这种方式“水平添加”:
    vectorA(a1, a2, a3,a4) + vectorB(b1, b2, b3, b4) = vectorResult(a1 + a2, a3 + a4, b1 + b2, b3 + b4)

我正在尝试做的事情:

看不到这些功能是如何工作的(我没有“心理形象”)。

0 投票
1 回答
742 浏览

c# - 警告 C4799:函数没有 EMMS 指令

我正在尝试创建使用包含 C++ 代码和内联汇编的 dll 库的 C# 应用程序。在函数 test_MMX 中,我想添加两个特定长度的数组。

运行应用程序后,它显示此警告:

警告 C4799:函数“test_MMX”没有 EMMS 指令。

当我想以毫秒为单位测量运行此函数 C# 的时间时,它返回此值:-922337203685477而不是(例如0,0141)...

任何想法如何解决它?

0 投票
1 回答
22048 浏览

assembly - MMX和XMM寄存器的区别?

我目前正在学习 Intel x86 处理器上的汇编编程。

有人可以向我解释一下,MMX 和 XMM 寄存器有什么区别?我对它们所服务的功能以及它们之间的区别和相似之处感到非常困惑?

0 投票
1 回答
290 浏览

assembly - MMX 是否真的支持 PADDD 指令,即使英特尔的手册中没有它?

我在 NASM 中编写了这段代码:

它的组装没有错误,但是这条指令,虽然它存在于 NASM 中,但我在英特尔指令手册中找不到它,我发现的只是:

它需要一个xmm寄存器而不是一个mm寄存器。
这是PADDD mm0, mm1: 0FFEC1的操作码 这是: 660FFEC1
的操作码 那么为什么英特尔的说明手册中缺少?PADDD xmm0, xmm1
PADDD mm0, mm1

0 投票
1 回答
471 浏览

assembly - MMX 指令和 x87 FPU 标签字

此刻ax0101 0101 0101 0110

但是从 Intel 手册,第9.5.1 MMX Instructions 和 x87 FPU Tag Word部分,我引用:

在每个 MMX 指令之后,整个 x87 FPU 标签字都设置为有效 (00B)。

那么为什么ax不是全零呢?

0 投票
0 回答
180 浏览

c++ - NV12 到 YUY2 的转换

在现有的 Visual Studio 2015 C++ 32 位 Windows 项目中,我有一个将视频帧从 NV12 转换为 YUY2 的功能,这基本上只是随机播放字节。这里是:

如果在 32 位项目中一直运行良好,但现在我将其移植到64 位,并且由于找不到这些标识符而无法编译:

_m_punpcklbw
_m_punpckhbw
_m_empty

认为这与 Microsoft 64 位编译器不支持 mmx 内在函数有关,但老实说,我对 mmx 知之甚少。

是否有等效的替换功能可以在 64 位中执行相同的操作?

0 投票
1 回答
394 浏览

c++ - 如何在 Windows 异常处理程序中设置 MMX 寄存器以模拟不受支持的 3DNow!指示

我正在尝试恢复使用 3DNow 的旧 Win32 游戏!用于进行 3D 渲染的指令集。

在 Win7 等现代操作系统上 - 不允许使用 FPADD 或 FPMUL 等 Win10 指令,并且程序会引发异常。

自 3DNow 的数量!游戏使用的指令非常有限,在我的VS2008 MFC程序中我尝试使用向量异常处理来获取MMX寄存器的值,模拟3DNow!通过 C 代码指令并将值推送回处理器 3DNow!寄存器。

到目前为止,我在前两个步骤中取得了成功(我从ExceptionInfo->ExtendedRegisters偏移量 32 的字节数组中获取 mmx 寄存器值并使用浮点类型 C 指令进行计算),但我的问题是,无论我如何尝试更新 MMX 寄存器值,寄存器值似乎保持不变。

假设我的_asm陈述可能是错误的,我还使用如下简单的陈述做了一些最小的测试:

这条语句的执行没有进一步的异常,但是在检索 MMX 寄存器值时,我仍然发现原始值没有改变。

我怎样才能使分配有效?