复制__m256i数据类型

时间:2016-04-23 15:33:43

标签: simd intrinsics avx avx2

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

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

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

很抱歉,这是一个简单的问题(这是一个简单的问题)。我只是找不到可以为我做这件事的单一内在函数。

2 个答案:

答案 0 :(得分:3)

您可以按照常规方式进行分配,例如

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

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

答案 1 :(得分:1)

您可以使用MOVDQA

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

相应的内在原因是

_mm256_store_si256(_m256i *p, __m256i a);

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