使用 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 指令添加压缩字节/字的主要内容,如果未能解决你的问题,请参考以下文章