使用 MMX 指令添加压缩字节/字

Posted

技术标签:

【中文标题】使用 MMX 指令添加压缩字节/字【英文标题】:Adding packed bytes/words using MMX instructions 【发布时间】:2015-11-10 22:11:45 【问题描述】:

假设我们有两个包含以下十六进制的寄存器 值:AB0890C24598EE50。使用 MMX 添加它们的结果是什么 说明:

a. for packed byte
b. for packed word

假设不使用饱和算法?

根据我的理解,如果你正常添加两个十六进制值,你会得到F0A17F12,但是我如何使用 MMX 指令为压缩字节和字添加这个?

【问题讨论】:

它必须是 MMX 有什么原因吗?由于您只有两个 32 位值,因此使用 SWAR 可能会更容易。 这个问题来自我的教科书,上面写着要使用MMX指令。 您可能想扔掉那本书(MMX 已经过时了 20 年)并获得一些更新的东西。如果是为了学校而你别无选择,那么请查看 MMX 内在函数 here,尤其是 _mm_add_pi8_mm_add_pi16 不幸的是,这是给学校的,所以我不能把它扔掉:) 您需要为此编写实际代码还是只需要说明每种情况下的结果是什么? 【参考方案1】:

我假设您可以将它们放入 MMX 寄存器中。

这会将它们添加为双数

paddd mm0, mm1

这会将它们添加为字节

paddb mm0, mm1

【讨论】:

以上是关于使用 MMX 指令添加压缩字节/字的主要内容,如果未能解决你的问题,请参考以下文章

MMX 符号扩展

MMX 内部函数和 Microsoft C++ 的堆栈使用

如何将 8 字节长整数的每个字节相加?

在压缩数据字节数组的末尾添加一些垃圾字节后,是不是可以使用 GZIP 解压缩数据?

Iphone 的 MMX 指令

MMX - 使用常量字节