Assembly Intel Intrinsics:从2个寄存器中每隔一个字组合一次
我有两个m128i寄存器,我们称它们为srcA和srcB。由此我想得到一个uu m128i寄存器,比如dst,它包含以下单词(假设srcA、srcB和dst是单词指针的伪代码):Assembly Intel Intrinsics:从2个寄存器中每隔一个字组合一次,assembly,intel,intrinsics,Assembly,Intel,Intrinsics,我有两个m128i寄存器,我们称它们为srcA和srcB。由此我想得到一个uu m128i寄存器,比如dst,它包含以下单词(假设srcA、srcB和dst是单词指针的伪代码): 如何使用intrinsics完成此输出?您还忘了提到您的目标SSE级别。因此,我将使用最方便的SSE4.1:) 所以,这就是你想要的。好的问题是什么?另外:\uuu m128i是一个Microsoft C关键字,但问题上没有C标记。然而,这个问题上有一个assembly标签。那么,您是在寻找C语言的解决方案,还是使用X
如何使用intrinsics完成此输出?您还忘了提到您的目标SSE级别。因此,我将使用最方便的SSE4.1:)
所以,这就是你想要的。好的问题是什么?另外:
\uuu m128i
是一个Microsoft C关键字,但问题上没有C
标记。然而,这个问题上有一个assembly
标签。那么,您是在寻找C语言的解决方案,还是使用XMM[0-7]进行汇编的解决方案?编辑了这个问题。。。我正在寻找一个使用汇编的解决方案。你的问题仍然提到“intrinsic”和“u m128i”,它们是C/C++概念,而不是汇编概念。此外,您还应该提到哪个英特尔体系结构。您可能是指x86,但英特尔的安腾(IA-64)编译器也支持基于m128的内部函数。
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];
dst = _mm_blend_epi16(srcA, _mm_slli_si128 (srcB, 8), 0xf0);