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



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

问题是:

在我的处理结束时,我将有一个包含以下内容的__mm128i

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

我将不得不在内存中存储这样的uint32_t

r0 r4 r8 rC

或者,或者(这只取决于我如何执行先前计算的最后 2 步)

r3 r7 rB rF

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

如此处所述,使用最多 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 .

最新更新