[PATCH] x86: Don't check if AVX512 template requires AVX512VL

Jan Beulich jbeulich@suse.com
Wed Jun 21 06:52:06 GMT 2023


On 20.06.2023 18:44, H.J. Lu via Binutils wrote:
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -6288,11 +6288,10 @@ check_VecOperands (const insn_template *t)
>    /* Templates allowing for ZMMword as well as YMMword and/or XMMword for
>       any one operand are implicity requiring AVX512VL support if the actual
>       operand size is YMMword or XMMword.  Since this function runs after
> -     template matching, there's no need to check for YMMword/XMMword in
> -     the template.  */
> +     template matching, there's no need to check for YMMword/XMMword nor
> +     AVX512VL in the template.  */
>    cpu = cpu_flags_and (t->cpu_flags, avx512);
>    if (!cpu_flags_all_zero (&cpu)
> -      && !t->cpu_flags.bitfield.cpuavx512vl
>        && !cpu_arch_flags.bitfield.cpuavx512vl)
>      {
>        for (op = 0; op < t->operands; ++op)

While the code change is correct afaict, I don't think we want it,
which is related to your imo wrong editing of the comment: For one we
check for the flag to be clear (unlike the xmm/ymm checks). And then
the check is there to skip a pointless (in that case) loop. IOW the
loop is only needed for templates which do not explicitly name
AVX512VL as a required feature; templates which do can't validly have
a mix of zmm and one or both of xmm/ymm in any one operand. In fact if
you grep i386-opc.tbl for "AVX612VL.*ZMM" you won't find any single
match.

Jan


More information about the Binutils mailing list