首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVX2的装配误差

AVX2的装配误差
EN

Stack Overflow用户
提问于 2014-03-10 12:55:57
回答 1查看 1.6K关注 0票数 1

我试着用gcc(g++)编写了一个g++程序。但效果不太好。

代码语言:javascript
复制
#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);
....

我的编译命令是(作为Makefile中的一行):

代码语言:javascript
复制
g++ avx_shift.cpp -c -mavx2

我也试过这个:

代码语言:javascript
复制
g++ avx_shift.cpp -c -march=native

但是错误信息是相同的:

代码语言:javascript
复制
/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'
....

程序集代码(添加了行号):

代码语言:javascript
复制
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
....

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-10 13:19:59

您粘贴的两行源行不应该生成任何vpslldvpand指令,在我的机器上也不应该。使用-S -g -fverbose-asm开关请求程序集源,并尝试找到匹配的源线。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22300736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档