Intel Intrinsics:将 2 个寄存器中的每隔一个字组合起来

Intel Intrinsics: combine every other word from 2 registers

我有两个 __m128i 寄存器,我们称它们为 srcA 和 srcB。从那里我想得到一个 __m128i 寄存器,比方说 dst,它包含以下单词(假设 srcA、srcB 和 dst 是单词指针的伪代码):

dst[0] = srcA[0];
dst[1] = srcA[1];
dst[2] = srcA[2];
dst[3] = srcA[3];
dst[4] = srcB[0];
dst[5] = srcB[1];
dst[6] = srcB[2];
dst[7] = srcB[3];

如何使用内在函数完成此输出?

您还忘记提及您的目标 SSE 级别。因此,我将使用最方便的 SSE4.1 :)

dst = _mm_blend_epi16(srcA, _mm_slli_si128 (srcB, 8), 0xf0);