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

moo*_*t08 2 x86 illegal-instruction avx2

cat /proc/cpuinfo 报告已设置avx2标志.

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

我使用x86_64 Linux和nasm作为我的汇编程序.在我的系统上,重现这一点很简单

global main
main:
vpbroadcastb xmm1, eax
Run Code Online (Sandbox Code Playgroud)

使用NASM.

有人知道这是什么一回事吗?这是我正在使用的AMD A12-9700P RADEON R7 APU.

Den*_*nis 8

vpbroadcastb使用通用寄存器作为操作数需要AVX512.它汇编(使用足够新的汇编程序),但只在AVX2的CPU上获得非法指令信号.

如果您的CPU支持AVX2,

vpbroadcastb xmm1, xmm0
Run Code Online (Sandbox Code Playgroud)

例如,应该工作.

  • @HadiBrais:没有'vpbroadcast`,页面标题是通用的.但是,是的,`vpbroadcastb xmm1,eax`组装的原因是因为它有一个AVX512 EVEX编码,@ dennis.根本不了解AVX512的较旧的*汇编程序*(例如YASM)会说"错误:操作数2的大小无效". (2认同)