复制 __m256i 数据类型

Duplicating __m256i datatype

我有兴趣将 __m256i 数据类型(在 Intel Intrinsics 中用于 AVX 指令)的数据复制到新的 __m256i。

我知道我可以将 AVX 寄存器中的数据存储到内存中,然后从内存中将数据加载到新的寄存器中。但是,有没有更简单的方法(即它的专用指令),我可以直接 "clone" 寄存器而无需先使用将其存储到内存然后再次加载的操作?

我想,我可以在我的寄存器中添加一个空寄存器,然后得到一个可以加载到寄存器中的新 __m256i 类型……但这看起来有点像 hack,但是,并要求我在某些时候使用一些操作来创建一个新的空 __m256i 虚拟对象。

Sorry if it is a simple question(这是一个简单的问题)。我只是没能找到一个可以为我做这件事的内部函数。

您可以按照通常的方式进行赋值,例如

__m256i v1 = _mm256_set1_epi32(42);
__m256i v2 = v1;

编译器通常会生成 vmovdqa 指令(或者它甚至可能只是优化掉寄存器副本)。

您可以使用 MOVDQA

轻松地将 x86 汇编中的 YMM 寄存器复制到另一个
vmovdqa ymm0, ymm1

这个对应的内在是

_mm256_store_si256(_m256i *p, __m256i a);

编译器应该优化掉任何变量引用。