在使用高达 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等等。