mmx相关内容

我做错了什么将我的 MMX 内部函数转换为 x64 (SSE)?

我了解转换 MMX 32 位 mmx 内在函数不再允许 __m64.所以我在将这段代码升级到 SSE 时遇到了很大的麻烦.我在另一个 stack-Overflow 帖子上被告知要发布我的代码.也许这个练习也会对其他人有所帮助. 我注释掉了“_mm_empty",认为这是正确的做法.我在 emmintrin.h 中发现了所有其他 __m128i 操作的类似函数,但仍然有问题. 原始32位 ..
发布时间:2021-11-25 07:36:35 C/C++开发

使用 __m64 引用将 C++ 项目转换为 x64

因此,当我开始转换并将目标设置为“x64"时,我得到了 7 个未解析的外部变量.两个例子: error LNK2001: unresolved external symbol _m_empty ...CONVOLUTION_2D_USHORT.obj CONVOLUTION_2D_USHORT错误 LNK2001:未解析的外部符号 _mm_setzero_si64 ...CONVOLUTION_ ..
发布时间:2021-11-25 05:34:34 C/C++开发

常见的 SIMD 技术

在哪里可以找到有关常见 SIMD 技巧的信息?我有一个指令集,知道如何编写简单的 SIMD 代码,但我知道,现在 SIMD 功能要强大得多.它可以容纳复杂的条件无分支代码. 例如 (ARMv6),以下指令序列将 Rd 的每个字节设置为 Ra 和 Rb 对应字节的无符号最小值: USUB8 Rd, Ra, RbSEL Rd、Rb、Ra 教程/不常见的 SIMD 技术的链接也很好:) ARMv6 ..
发布时间:2021-11-17 22:05:00 其他开发

使用 SIMD 右移 32 位压缩负数

我正在编写一些 SSE/AVX 代码,并且有一项任务是将打包的有符号 32 位整数除以 2 的补码.当值为正时,此移位工作正常,但由于符号位移位,它会为负值产生错误结果. 是否有任何 SIMD 操作可以让我移动保留符号位的位置?谢谢 解决方案 SSE2/AVX2 可以选择算术1 与 16 位和 32 位元素大小的逻辑右移.(对于 64 位元素,在 AVX512 之前只有逻辑可用). ..
发布时间:2021-08-27 19:47:17 其他开发

MMX 和 XMM 寄存器的区别?

我目前正在学习英特尔 x86 处理器上的汇编编程. 谁能给我解释一下,MMX和XMM寄存器有什么区别?我很困惑它们提供什么功能以及它们之间的异同? 解决方案 MM 寄存器是 MMX 指令集使用的寄存器,第一次尝试添加(仅限整数)SIMD 到 x86.它们是 64 位宽,它们实际上是 x87 寄存器尾数部分的别名(但它们不受 FPU 栈顶位置的影响);这样做是为了保持与现有操作系统的兼 ..
发布时间:2021-08-27 19:45:40 其他开发

AT&T 语法如何处理其他助记符和操作数大小后缀之间的歧义?

在 AT&T 语法中,指令通常必须以适当的操作数大小作为后缀,q 用于对 64 位操作数进行操作.然而,在 MMX 和 SSE 中也有 movq 指令,q 是原始的 Intel 助记符,而不是额外的后缀. 那么这将如何在 AT&T 中表示?是否需要另一个 q 后缀,如 movqq %mm1, %mm0movqq %xmm1, %xmm0 要不要? 如果还有其他以 AT&T 后缀结尾 ..
发布时间:2021-08-27 19:45:29 其他开发

SSE 内在函数:将 32 位浮点数转换为 UNSIGNED 8 位整数

使用 SSE 内在函数,我得到了一个包含四个 32 位浮点数的向量,该向量被限制在 0-255 的范围内并四舍五入到最接近的整数.我现在想把这四个写成字节. 有一个内在的 _mm_cvtps_pi8 可以将 32 位转换为 8 位 signed int,但问题是任何超过 127 的值都会被限制为 127.我找不到任何可以限制为无符号 8 位值的指令. 我有一种直觉,我可能想要做的是 _ ..
发布时间:2021-08-27 19:44:47 其他开发

MMX寄存器速度与无符号整数存储的堆栈

我正在考虑在纯汇编中实现SHA3.SHA3​​的内部状态为17个64位无符号整数,但是由于使用了转换,如果我在寄存器中有44个这样的整数可用,则可以达到最佳状态.再加上一个暂存器.在这种情况下,我将能够在寄存器中进行整个转换. 但是,这是不现实的,并且可能一直进行优化,甚至只有几个寄存器.尽管如此,取决于对这个问题的答案,更多可能更好. 我正在考虑至少将MMX寄存器用于快速存储,即使我 ..
发布时间:2021-04-24 21:09:18 其他开发

_m_empty和_mm_empty有什么区别?

当我在寻找MMX功能时,我注意到其中两个_m_empty和_mm_empty具有那么为什么它们都存在?其中一个比另一个大吗?有手册中没有提到的区别吗? 解决方案 在文档中应指出差异. MSDN 更精确.他们明确提到了这一点: _mm_empty 的同义词是 _m_empty . ..
发布时间:2020-11-30 04:54:24 其他开发

警告C4799:函数没有EMMS指令

我正在尝试创建C#应用程序,该应用程序使用包含C ++代码和内联汇编的dll库.在函数test_MMX中,我想添加两个特定长度的数组. extern "C" __declspec(dllexport) void __stdcall test_MMX(int *first_array,int *second_array,int length) { __asm { ..
发布时间:2020-11-28 02:18:53 C#/.NET

如何从__m64值的lsb创建8位掩码?

我有一个用例,其中我有一个位数组,例如,每个位都表示为8位整数.uint8_t data[] = {0,1,0,1,0,1,0,1};我想通过仅提取每个值的lsb来创建一个整数.我知道使用int _mm_movemask_pi8 (__m64 a)函数可以创建掩码,但是此内在函数仅占用字节的msb而不是lsb.是否有类似的内在方法或有效方法来提取lsb以创建单个8位整数? 解决方案 没有直 ..
发布时间:2020-09-15 05:50:55 C/C++开发

不同的mmx,sse和avx版本是相互补充还是超集?

我想我应该熟悉x86 SIMD扩展.但是,甚至在我开始之前,我就遇到了麻烦.我无法很好地了解其中哪些仍然相关. x86架构数十年来积累了许多数学/多媒体扩展: MMX 3DNow! 上证所 SSE2 SSE3 SSSE3 SSE4 AVX AVX2 AVX512 我忘了什么吗? 新版本是旧版本的超集,反之亦然吗?还是互补? 其中一些被弃用了吗?以下哪项仍 ..
发布时间:2020-09-15 05:35:14 其他开发

MMX-使用恒定字节

我一直在研究某些东西,但遇到了另外两个问题.首先: ROR64 macro a, rot ; Result := (A shl (64-rot)) xor (A shr rot); MOV EAX, 64 SUB EAX, rot PSLLQ a, EAX MOVQ mm6, a PSRLQ mm6, rot PXOR a, mm6 ..
发布时间:2020-09-13 01:13:53 其他开发

有没有办法使用MMX/SSE减去x86上饱和的压缩无符号双字?

我一直在看MMX/SSE,我想知道.对于无符号字节和字(但不是双字),有打包,饱和减法的说明. 有没有一种方法可以做我想要的事情,如果没有,为什么没有呢? 解决方案 如果有可用的SSE4.1,我认为没有比使用@harold建议的pmaxud + psubd方法更好的方法了.借助AVX2,您当然也可以使用相应的256位变体. __m128i subs_epu32_sse4(__m ..
发布时间:2020-08-06 01:37:15 其他开发

查询旧版3DNow!指令系统

只是为了好玩,我正在查看 3DNow的旧版(不推荐使用)说明!设置,我正在尝试了解它们是如何使用的.所有指令似乎都按照这种模式进行编码: instruction destination_MMn_register_operand, source_MMn_register_or_memory_operand 其中destinationRegister = destinationRegiste ..
发布时间:2020-07-07 18:34:30 其他开发

使用__m64引用将C ++项目转换为x64

因此,当我开始转换并将目标设置为“ x64”时,我得到了7个未解决的外部组件。两个示例: 错误LNK2001:不可解析的外部符号_m_empty ... CONVOLUTION_2D_USHORT.obj CONVOLUTION_2D_USHORT 错误LNK2001:不可解析的外部symbol _mm_setzero_si64 ... CONVOLUTION_2D_USHORT.obj ..
发布时间:2020-05-31 21:30:57 C/C++开发