Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ AVX2的装配错误_C++_Gcc_Assembly_Avx2 - Fatal编程技术网

C++ AVX2的装配错误

C++ AVX2的装配错误,c++,gcc,assembly,avx2,C++,Gcc,Assembly,Avx2,我试图用gcc(g++)编译一个AVX2程序。但它没有正常工作 #include<immintrin.h> .... __m256i _vector256 = _mm256_loadu_si256((__m256i*)pin); __m256i _vectorMask = _mm256_loadu_si256((__m256i*)mask_hbits); _vector256 = _mm256_slli_epi32 (_vector256, AVX_LOGDESC); // AV

我试图用gcc(g++)编译一个AVX2程序。但它没有正常工作

#include<immintrin.h>
....
__m256i _vector256  = _mm256_loadu_si256((__m256i*)pin);
__m256i _vectorMask = _mm256_loadu_si256((__m256i*)mask_hbits); 
_vector256 = _mm256_slli_epi32 (_vector256, AVX_LOGDESC); // AVX_LOGDESC == 4
__m256i _vectorRes = _mm256_and_si256(_vector256, _vectorMask);
....
我也试过这个:

g++ avx_shift.cpp -c -march=native
但错误消息是相同的:

/tmp/ccSFs6U0.s: Assembler messages:
/tmp/ccSFs6U0.s:1083: Error: suffix or operands invalid for `vpslld'
/tmp/ccSFs6U0.s:1091: Error: suffix or operands invalid for `vpand'
....
装配代码(添加了行号):


我的gcc(g++)版本是4.8.0。我的操作系统版本是Centos6.5 X86_64。我已经确认我的CPU支持AVX2指令。那么谁能帮我找到错误呢?

您粘贴的两个源代码行不应该生成任何
vpsld
vpand
指令,在我的机器上也不应该。使用
-S-g-fverbose asm
开关询问汇编源代码,并尝试查找匹配的源代码行。

对不起,我不知道如何在注释中格式化代码,所以我在查询中发布了代码。在我的debian gcc 4.7.2和使用ubuntu g++4.8上,我似乎编译得很好,因为Centos的原始版本是4.4.7。如果错误是关于编译器的,那么gcc的make命令有什么特殊选项吗?听起来更像是汇编程序而不是编译器,因为您已经粘贴了asm输出,看起来还可以。谢谢您的提示。我已经解决了这个问题。看起来binutils(2.20)的版本太低了。我已经构建了binutils 2.22,问题已经解决。你的汇编程序(binutils)版本是什么?2.22组装好了。
/tmp/ccSFs6U0.s: Assembler messages:
/tmp/ccSFs6U0.s:1083: Error: suffix or operands invalid for `vpslld'
/tmp/ccSFs6U0.s:1091: Error: suffix or operands invalid for `vpand'
....
vmovdqa 988(%rsp), %ymm0    # __A, D.48219
movl    984(%rsp), %eax # __B, tmp205
movl    %eax, -120(%rsp)    # tmp205, %sfp
vmovd   -120(%rsp), %xmm6   # %sfp, tmp205
vpslld  %xmm6, %ymm0, %ymm0 # tmp205, D.48219, D.48220      // 1083
....
vmovdqa 668(%rsp), %ymm0    # __B, tmp220
vmovdqa 700(%rsp), %ymm1    # __A, tmp221
vpand   %ymm0, %ymm1, %ymm0 # tmp220, tmp221, D.48215       // 1091
....