我有兴趣将__m256i数据类型的数据(用于AVX指令的Intel Intrinsics)复制到新的__m256i。
我知道我可以将AVX寄存器中的数据存储到内存中,然后从内存中存储,我可以将数据加载到新的寄存器中。但是,有一种更简单的方法(即它的专用指令),我可以直接“克隆”寄存器而不首先使用操作将其存储到存储器然后再次加载它?
我想,我可以在我的寄存器中添加一个空的寄存器,然后得到一个可以加载到寄存器中的新的__m256i类型...但这看起来有点像黑客,并且需要我使用一些在某些时候创建一个新的空__m256i虚拟的操作。
很抱歉,这是一个简单的问题(这是一个简单的问题)。我只是找不到可以为我做这件事的单一内在函数。
答案 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);
编译器应该优化掉任何变量引用。