Fix EVEX no-broadcast disassembly for x86
Corrects x86 EVEX instruction disassembly for no-broadcast cases.
This commit refines the x86 disassembler’s handling of EVEX instructions with no-broadcast semantics. It corrects an issue where EVEX.W=1 alone was incorrectly interpreted as broadcastable and adjusts the operand check for destination-memory instructions. Additionally, it fixes incorrect broadcastability markings for VMOVDQU{8,16} load instructions, improving disassembly accuracy.
In Details
The x86 disassembler in binutils (opcodes/i386-dis.c) incorrectly allowed broadcast on EVEX-encoded instructions when only the .W bit (operand size promotion) was set, without the actual broadcast bit. This commit enforces that .W=1 alone is restricted to x-mode operands. It also corrects the position check for memory operands and flags VMOVDQU{8,16} as non-broadcastable, aligning with the instruction set architecture.
- EVEX
- An advanced 256-bit and 512-bit SIMD instruction prefix used in x86 processors, offering expanded features like embedded rounding control, suppression of zeroing, and operand masking.
- broadcast
- In SIMD operations, broadcasting means a single scalar value is replicated to fill all elements of a vector register, allowing a scalar operation to be applied to multiple data elements simultaneously.