[PATCH v2] x86: fix EVEX no-broadcast disassembly

Jan Beulich jbeulich@suse.com
Mon Sep 7 15:00:31 GMT 2026


On 07.09.2026 15:59, Rohan Shenoy wrote:
> - EVEX.W=1 alone does not make a valid broadcast. Hence we restrict it to
> x_mode operands only.
> - For the destination-memory-operand check, ins->obufp may not point to
>   the start of op_out[0], hence we correct the position of this check.
> - VMOVDQU{8,16} (loads) were incorrectly marked as broadcastable.
> 
> Suggested-by: Jan Beulich <jbeulich@suse.com>

Okay. I'll see about getting this in later in the week, albeit with ...

> --- a/opcodes/i386-dis.c
> +++ b/opcodes/i386-dis.c
> @@ -12311,6 +12311,10 @@ OP_E_memory (instr_info *ins, int bytemode, int sizeflag)
>    if (ins->vex.evex && ins->evex_type == evex_default)
>      {
>  
> +      /* Broadcast can only ever be valid for memory sources.  */
> +      if (ins->vex.b && ins->obufp == ins->op_out[0])
> +	ins->vex.no_broadcast = true;
> +
>        /* Zeroing-masking is invalid for memory destinations. Set the flag
>  	 uniformly, as the consumer will inspect it only for the destination
>  	 operand.  */

... absorbing the excess blank line here.

Jan


More information about the Binutils mailing list