问题标签 [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.
syntax - AT&T 语法如何处理其他助记符和操作数大小后缀之间的歧义?
在 AT&T 语法指令中,通常必须以适当的操作数大小为后缀,以及q
对 64 位操作数的操作。然而,在 MMX 和 SSE 中也有movq
指令,q
在原始 Intel 助记符中,而不是附加后缀。
那么这将如何在 AT&T 中体现出来呢?是否需要另一个q
后缀,例如
或不?
如果有任何其他指令以 AT&T 后缀(如paddd
, slld
)结尾,它们的工作方式是否相同?
assembly - 将代码片段从 MMX 移植到 SSE2 asm
我正在尝试将一些代码从 MMX 移植到 SSE2 并且在这样做时遇到了一些麻烦。
对于 MMX,我有:
对于 SSE2,我有:
我不相信这是正确的。将 oneBytes 转换为支持 SSE2 的适当方法是什么?谢谢!
simd - 为什么 MMX 中没有 pmulluw、pslad 和 pslaw 命令?
为什么 MMX 中没有 pmulluw、pslad 和 pslaw 命令?为什么没有 movb 和 movw 命令?
simd - 为什么 MMX 集中没有 mоvb 和 mоvw 指令?
有 mоvq 和 mоvd,但不存在 mоvb 和 mоvw。为什么?我们不需要移动字节和单词吗?
c++ - SSE 的整数/浮点值
我必须将一个整数向量与另一个整数向量相乘,然后将结果(即整数向量)与浮点值向量相加。
我应该将 MMX 或 SSE4 用于整数,还是可以仅将 SSE 与所有这些值一起使用(即使有整数?)将整数放入 __m128 寄存器中?
事实上,我经常在 __m128 寄存器中使用整数,我不知道我是在浪费时间(隐式转换值)还是相同的东西。
我正在使用 -O3 选项进行编译。
x86 - SSE 内在函数:将 32 位浮点数转换为 UNSIGNED 8 位整数
使用 SSE 内在函数,我得到了一个包含四个 32 位浮点数的向量,这些浮点数被限制在 0-255 的范围内并四舍五入到最接近的整数。我现在想把这四个写成字节。
有一个内在函数_mm_cvtps_pi8
可以将 32 位转换为 8 位有符号整数,但问题是任何超过 127 的值都会被限制为 127。我找不到任何可以限制为无符号 8 位值的指令。
我有一种直觉,我可能想要做的是某种组合,_mm_cvtps_pi16
然后_mm_shuffle_pi8
是移动指令,以将我关心的四个字节放入内存。这是最好的方法吗?我要看看我是否能弄清楚如何对随机播放控制掩码进行编码。
更新:以下似乎完全符合我的要求。有没有更好的办法?
UPDATE2:这是基于 Harold 回答的更好的解决方案:
x86 - 不同的 mmx、sse 和 avx 版本是互补的还是彼此的超集?
我想我应该熟悉 x86 SIMD 扩展。但在我还没开始之前,我就遇到了麻烦。我找不到关于其中哪些仍然相关的很好的概述。
x86 架构几十年来积累了大量的数学/多媒体扩展:
- MMX
- 3D现在!
- 上证所
- SSE2
- SSE3
- SSSE3
- SSE4
- AVX
- AVX2
- AVX512
- 我是不是忘记了什么?
新的是否是旧的超集,反之亦然?或者它们是互补的?
其中一些是否已弃用?其中哪些仍然相关?我听说过对“旧版 SSE”的提及。
其中一些是相互排斥的吗?即它们是否共享相同的硬件部件?
我应该一起使用哪个来最大限度地提高现代 Intel / AMD CPU 的硬件利用率?为了争论,让我们假设我可以找到指令的适当用途……如果没有别的,用 CPU 加热我的房子。
assembly - 为什么编译器在进行 64 位操作时将 movq 更改为 movd?
我正在编程以下内容:
在这种情况下,我将值从 rax 移动到 mm1,它们都是 64b 寄存器(将 qword 值从一个寄存器移动到另一个)。但是当我编译我的代码时,我看到:
我在 64 位模式下编译我的代码,我不确定为什么它将 64 位操作更改为 32 位。
c - _m_empty 和 _mm_empty 有什么区别?
在寻找 MMX 函数时,我注意到其中两个_m_empty
和_mm_empty
具有完全相同的定义。
那么为什么它们都存在呢?其中一个比另一个年长吗?有没有手册中没有提到的区别?
c++ - 使用 __m64 引用将 C++ 项目转换为 x64
因此,当我开始转换并将目标设置为“x64”时,我得到了 7 个未解决的外部。两个例子:
所以我尝试更深入地调查这些,我发现它不喜欢头文件中的 __m64:特别是 mmintrin.h (可能还有其他)。在我使用 C++ 的业余时间里,因为我已经好几年没有弄乱这门语言了(我通常在 C# 部门),我试图编辑头文件,并将 __m64 替换为 __m128i ??!!。不知道什么是正确的路线,让这个和其他 DLL 编译 MachineX64。在编辑并将标头的源代码放在我的本地目录中之后,它仍然不允许我通过右键单击...再次编译 - 业余时间。有几个人问过类似的问题,但我找不到适合我的问题。
这是一个带有不受支持的 __m64 的“mmintrin.h”示例...