X86 系统声称支持AVX2,但未实现整数寄存器的广播

X86 系统声称支持AVX2,但未实现整数寄存器的广播,x86,avx2,illegal-instruction,X86,Avx2,Illegal Instruction,cat/proc/cpuinfo报告设置了avx2标志 但是,AVX2指令VPB在运行时会导致非法指令异常 我使用x86_64 Linux和nasm作为我的汇编程序。在我的系统中,复制这一点非常简单 global main main: vpbroadcastb xmm1, eax 使用NASM 有人知道这件事吗?这是我正在使用的AMD A12-9700P RADEON R7 APU 使用通用寄存器作为操作数需要AVX512。它(使用足够新的汇编程序)进行汇编,但在仅使用AVX2的CPU上会收到

cat/proc/cpuinfo
报告设置了avx2标志

但是,AVX2指令VPB在运行时会导致非法指令异常

我使用x86_64 Linux和nasm作为我的汇编程序。在我的系统中,复制这一点非常简单

global main
main:
vpbroadcastb xmm1, eax
使用NASM

有人知道这件事吗?这是我正在使用的AMD A12-9700P RADEON R7 APU

使用通用寄存器作为操作数需要AVX512。它(使用足够新的汇编程序)进行汇编,但在仅使用AVX2的CPU上会收到非法指令信号

如果您的CPU支持AVX2

vpbroadcastb xmm1, xmm0

例如,应该可以工作。

您提供的链接是针对
vpbroadcast
,而不是
vpbroadcastb
,它实际上可以使用GPR。但是,
vpbroadcastb
是一条AVX512指令。该链接涵盖了多条vpbroadcast*指令,并提到VEX128编码的vpbroadcastb是AVX2。在我的服务器上,恰好支持AVX2但不支持AVX512,它会出错,但不会。有一个版本的
vpbroadcastb
EVEX.128.66.0F38.W0 7A
)是AVX512的一部分,它与GPR一起工作。我认为汇编程序正在生成该版本,这导致了非法指令异常,因为不支持AVX512。@HadiBrais:没有
vpbroadcast
,页面标题是通用的。但是,是的,VPB xmm1,eax汇编的原因是因为它有一个AVX512 EVEX编码,@dennis。一个根本不知道AVX512的老的汇编程序(例如YASM)会说
错误:操作数2的大小无效
。有趣的事实:AVX1广播指令只能从内存中广播,比如
vbroadcastsxmm1,[my_常量]
。AVX2是vbroadcastss x/ymm1,xmm0所必需的(一种ALU混洗,而不是在加载端口中运行的广播加载),即使它是vbroadcastss ymm1,xmm/m32`的相同操作码。