在使用高达 SSSE3 的内部函数后如何从我的 16 字节寄存器中存储 4 字节

Posted

技术标签:

【中文标题】在使用高达 SSSE3 的内部函数后如何从我的 16 字节寄存器中存储 4 字节【英文标题】:How to store 4 bytes out of my 16 bytes register after having used intrinsics using up to SSSE3 【发布时间】:2013-11-08 15:46:19 【问题描述】:

初步说明:实际上,当我写完这个问题时,我看到this answer 正在解决我的问题。尽管如此,由于我已经花时间创建了所有必要文档的链接,所以无论如何发布它可能会很有用。此外,可能会有更好的答案。

问题来了:

在我的处理结束时,我将有一个 __mm128i 包含:

r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 rA rB rC rD rE rF

我必须像这样在内存中存储uint32_t

r0 r4 r8 rC

或者,或者(这仅取决于我如何执行先前计算的最后两个步骤)

r3 r7 rB rF

如何使用最多 SSSE3 指令有效地做到这一点?

【问题讨论】:

【参考方案1】:

正如here 解释的那样,最多使用 SSSE3 指令,您可以使用 _mm_shuffle_epi8 重新排列您的寄存器,如下所示:

r0 r4 r8 rC 00 00 00 00 00 00 00 00 00 00 00 00 

那么,你不能使用_mm_extract_epi32,因为它是SSE4.1

您可以改用_mm_cvtsi128_si32

【讨论】:

以上是关于在使用高达 SSSE3 的内部函数后如何从我的 16 字节寄存器中存储 4 字节的主要内容,如果未能解决你的问题,请参考以下文章

无法从我的 Docker 容器内部连接到主机的 localhost

如何从我的服务层内部创建一个 cookie 并添加到 http 响应?

如何在类及其方法中使用 self 参数、@staticmethod 关键字

求助!为啥X86以上的CPU指令集不提供给用户呢?比如X86-64,sSSE3等等。

我无法从我的 node.js firebase 函数 index.js 文件中验证大查询

如何从我的 Unity Android 应用程序访问 Spotify API?