RE: [PATCH] x86: emit warnings to avoid potential encoding surprises

"Jiang, Haochen" <[email protected]>
Newsgroups gmane.comp.gnu.binutils
Message-ID <SJ5PPF77D28E3C2CD18DF5D2992FADAD2FFECA72@SJ5PPF77D28E3C2.namprd11.prod.outlook.com>
> From: Jan Beulich <[email protected]>
> Sent: Friday, August 14, 2026 9:22 PM
> 
> FMA and F16C insns have direct AVX512VL counterparts. If the respective of
> the two features is disabled, we'd silently fall back to the corresponding
> EVEX encoding, which may not be intended by the user (their code may, for
> example, not be AVX512-aware at all). See also [1], [2].
> 
> A similar situation exists for the various VNNI extensions, where silently
> falling back to later introduced forms may not be intended.
> 
> A similar situation also exists for CRC32, the APX form of which requires
> no 2nd ("base") feature.
> 
> Using appropriate pseudo-prefixes will silence the warnings, as would
> explicitly enabling the newer ISA extensions.
> 
> Note that this in particular won't affect gcc, as that doesn't use .arch
> directives on x86.
> 
> [1] https://sourceware.org/pipermail/binutils/2026-July/150330.html
> [2] https://sourceware.org/pipermail/binutils/2026-July/150334.html
> ---
> The testcase points out a possible anomaly: Despite the use of {vex}, EVEX
> encodings are emitted for (originally) FMA and F16C insns when
> ".arch .no*" is in use.
> 
> The VNNI and CRC32 checks don't really need to live in install_template(),
> yet I thought it would be better if related logic lived reasonably close
> together.
> 

It is what we could do the most per ISA-wise and LGTM.

Thx,
Haochen

> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -4262,9 +4262,21 @@ install_template (const insn_template *t
>  	   || maybe_cpu (t, CpuFMA) || maybe_cpu (t, CpuF16C))
>  	  && (maybe_cpu (t, CpuAVX512F) || maybe_cpu (t, CpuAVX512VL)))
>  	{
> -	  if (need_evex_encoding (t)
> -	      || (maybe_cpu (t, CpuFMA) && !cpu_arch_flags.bitfield.cpufma)
> -	      || (maybe_cpu (t, CpuF16C) && !cpu_arch_flags.bitfield.cpuf16c))
> +	  bool evex = need_evex_encoding (t) || pp.encoding ==
> encoding_egpr;
> +
> +	  if (!evex
> +	      && ((maybe_cpu (t, CpuFMA) && !cpu_arch_flags.bitfield.cpufma)
> +		  || (maybe_cpu (t, CpuF16C)
> && !cpu_arch_flags.bitfield.cpuf16c)))
> +	    {
> +	      if (!cpu_arch_isa_flags.bitfield.cpuavx512vl
> +		  && !i.types[i.operands - 1].bitfield.zmmword)
> +		as_warn(_("%s: will use AVX512VL encoding; use {evex} to
> silence"),
> +			insn_name (t));
> +
> +	      evex = true;
> +	    }
> +
> +	  if (evex)
>  	    {
>  	      i.tm.opcode_modifier.vex = 0;
>  	      i.tm.cpu.bitfield.cpuavx512f = i.tm.cpu_any.bitfield.cpuavx512f;
> @@ -4297,6 +4309,44 @@ install_template (const insn_template *t
>  	}
>      }
> 
> +  /* The various VNNI extensions are somewhat special:
> +     - AVX512-VNNI pre-dates AVX-VNNI,
> +     - AVX-VNNI-INT{8,16} have EVEX counterparts added by AVX10-V1-AUX.
> +     In each case, when the former is disabled, warn about the use of a
> +     potentially unexpected encoding unless
> +     - a disambiguating pseudo-prefix or operand is in use, or
> +     - the newer ISA extension was explicitly enabled.  */
> +  if (is_cpu (t, CpuAVX_VNNI)
> +      && !cpu_arch_isa_flags.bitfield.cpuavx_vnni
> +      && pp.encoding != encoding_vex
> +      && pp.encoding != encoding_vex3
> +      && (!cpu_arch_flags.bitfield.cpuavx512_vnni
> +	  || !cpu_arch_flags.bitfield.cpuavx512vl))
> +    as_warn (_("%s: will use AVX-VNNI encoding; use {vex} to silence"),
> +	     insn_name (t));
> +
> +  if (is_cpu (t, CpuAVX10_1_AUX)
> +      && !cpu_arch_isa_flags.bitfield.cpuavx10_1_aux
> +      && !need_evex_encoding (t)
> +      && pp.encoding != encoding_egpr
> +      && ((!cpu_arch_flags.bitfield.cpuavx_vnni_int8
> +	   && is_cpu (t - 1, CpuAVX_VNNI_INT8))
> +	  || (!cpu_arch_flags.bitfield.cpuavx_vnni_int16
> +	   && is_cpu (t - 1, CpuAVX_VNNI_INT16))))
> +    as_warn (_("%s: will use AVX10 encoding; use {evex} to silence"),
> +	     insn_name (t));
> +
> +  /* CRC32 is also somewhat special, as its APX form is dependent upon only
> +     APX_F.  */
> +  if (t->mnem_off == MN_crc32
> +      && is_cpu (t, CpuAPX_F)
> +      && !cpu_arch_isa_flags.bitfield.cpuapx_f
> +      && !cpu_arch_flags.bitfield.cpusse4_2
> +      && !need_evex_encoding (t)
> +      && pp.encoding != encoding_egpr)
> +    as_warn (_("%s: will use APX encoding; use {evex} to silence"),
> +	     insn_name (t));
> +
>    /* For CCMP and CTEST the template has EVEX.SCC in base_opcode. Move it
> out of
>       there, to then adjust base_opcode to obtain its normal meaning.  */
>    if (i.tm.opcode_modifier.operandconstraint == SCC)
> --- a/gas/testsuite/gas/i386/avx-vex.l
> +++ b/gas/testsuite/gas/i386/avx-vex.l
> @@ -1,6 +1,12 @@
>  .*: Assembler messages:
> +.*:8: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:9: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:10: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
>  .*:15: Error: .* `vpmadd52luq'
>  .*:21: Error: .* `vcvtneps2bf16y'
> +.*:8: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:9: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:10: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
>  .*:15: Error: .* `vpmadd52luq'
>  .*:21: Error: .* `vcvtneps2bf16y'
>  #...
> @@ -47,10 +53,13 @@
>  [ 	]*[0-9]+[ 	]+>  \.arch \.noavx512vl
>  [ 	]*[0-9]+[ 	]+> *
>  [ 	]*[0-9]+[ 	]+\?\?\?\? C4E27550 	>
> vpdpbusd %ymm0,%ymm1,%ymm2
> +.*Warning: .*
>  [ 	]*[0-9]+[ 	]+D0
>  [ 	]*[0-9]+[ 	]+\?\?\?\? C4E27550 	>  vpdpbusd
> 0x20\(%eax\),%ymm1,%ymm2
> +.*Warning: .*
>  [ 	]*[0-9]+[ 	]+5020
>  [ 	]*[0-9]+[ 	]+\?\?\?\? C4E27550 	>  vpdpbusd
> 0x100\(%eax\),%ymm1,%ymm2
> +.*Warning: .*
>  [ 	]*[0-9]+[ 	]+90000100 *
>  [ 	]*[0-9]+[ 	]+00
>  [ 	]*[0-9]+[ 	]+> *
> @@ -83,10 +92,13 @@
>  [ 	]*[0-9]+[ 	]+>  \.arch \.noavx512f
>  [ 	]*[0-9]+[ 	]+> *
>  [ 	]*[0-9]+[ 	]+\?\?\?\? C4E27550 	>
> vpdpbusd %ymm0,%ymm1,%ymm2
> +.*Warning: .*
>  [ 	]*[0-9]+[ 	]+D0
>  [ 	]*[0-9]+[ 	]+\?\?\?\? C4E27550 	>  vpdpbusd
> 0x20\(%eax\),%ymm1,%ymm2
> +.*Warning: .*
>  [ 	]*[0-9]+[ 	]+5020
>  [ 	]*[0-9]+[ 	]+\?\?\?\? C4E27550 	>  vpdpbusd
> 0x100\(%eax\),%ymm1,%ymm2
> +.*Warning: .*
>  [ 	]*[0-9]+[ 	]+90000100 *
>  [ 	]*[0-9]+[ 	]+00
>  [ 	]*[0-9]+[ 	]+> *
> --- a/gas/testsuite/gas/i386/avx-vnni.d
> +++ b/gas/testsuite/gas/i386/avx-vnni.d
> @@ -1,5 +1,6 @@
>  #objdump: -dw
>  #name: i386 AVX VNNI insns
> +#warning_output: avx-vnni.e
> 
>  .*: +file format .*
> 
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/avx-vnni.e
> @@ -0,0 +1,7 @@
> +.*: Assembler messages:
> +.*:20: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:21: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:26: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:27: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:32: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> +.*:33: Warning: vpdpbusd: will use AVX-VNNI encoding; .*
> --- a/gas/testsuite/gas/i386/i386.exp
> +++ b/gas/testsuite/gas/i386/i386.exp
> @@ -258,6 +258,7 @@ if [gas_32_check] then {
>      run_list_test "noavx512-1" "-almn"
>      run_list_test "noavx512-2" "-almn --divide"
>      run_dump_test "noextreg"
> +    run_list_test "warn-enc" "-almn"
>      run_dump_test "xmmhi32"
>      run_dump_test "xsave"
>      run_dump_test "xsave-intel"
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/warn-enc.l
> @@ -0,0 +1,274 @@
> +.*: Assembler messages:
> +.*:7: Warning: vfmadd132ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:8: Warning: vfnmadd132pd: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:9: Warning: vfmsub213ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:10: Warning: vfnmsub213pd: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:11: Warning: vfmaddsub231ps: will use AVX512VL encoding; use \{evex\}
> to silence
> +.*:12: Warning: vfmsubadd231pd: will use AVX512VL encoding; use \{evex\}
> to silence
> +.*:15: Warning: vcvtph2ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:16: Warning: vcvtph2ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:17: Warning: vcvtps2ph: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:18: Warning: vcvtps2ph: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:21: Warning: vpdpbusd: will use AVX-VNNI encoding; use \{vex\} to
> silence
> +.*:22: Warning: vpdpwssd: will use AVX-VNNI encoding; use \{vex\} to
> silence
> +.*:25: Warning: vpdpbusd: will use AVX-VNNI encoding; use \{vex\} to
> silence
> +.*:26: Warning: vpdpwssd: will use AVX-VNNI encoding; use \{vex\} to
> silence
> +.*:29: Warning: vpdpbssd: will use AVX10 encoding; use \{evex\} to silence
> +.*:30: Warning: vpdpbsuds: will use AVX10 encoding; use \{evex\} to silence
> +.*:31: Warning: vpdpbuud: will use AVX10 encoding; use \{evex\} to silence
> +.*:34: Warning: vpdpwsud: will use AVX10 encoding; use \{evex\} to silence
> +.*:35: Warning: vpdpwusds: will use AVX10 encoding; use \{evex\} to silence
> +.*:36: Warning: vpdpwuud: will use AVX10 encoding; use \{evex\} to silence
> +.*:7: Warning: vfmadd132ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:8: Warning: vfnmadd132pd: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:9: Warning: vfmsub213ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:10: Warning: vfnmsub213pd: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:11: Warning: vfmaddsub231ps: will use AVX512VL encoding; use \{evex\}
> to silence
> +.*:12: Warning: vfmsubadd231pd: will use AVX512VL encoding; use \{evex\}
> to silence
> +.*:15: Warning: vcvtph2ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:16: Warning: vcvtph2ps: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:17: Warning: vcvtps2ph: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:18: Warning: vcvtps2ph: will use AVX512VL encoding; use \{evex\} to
> silence
> +.*:29: Error: no VEX/XOP encoding for `vpdpbssd'
> +.*:30: Error: no VEX/XOP encoding for `vpdpbsuds'
> +.*:31: Error: no VEX/XOP encoding for `vpdpbuud'
> +.*:34: Error: no VEX/XOP encoding for `vpdpwsud'
> +.*:35: Error: no VEX/XOP encoding for `vpdpwusds'
> +.*:36: Error: no VEX/XOP encoding for `vpdpwuud'
> +.*:21: Error: .* for `vpdpbusd'
> +.*:22: Error: .* for `vpdpwssd'
> +.*:25: Error: .* for `vpdpbusd'
> +.*:26: Error: .* for `vpdpwssd'
> +[ 	]*[0-9]+[ 	]+\.text
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+_start:
> +[ 	]*[0-9]+[ 	]+\.irp pfx, "", \{vex\}, \{evex\}
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch default; \.arch \.nofma
> +[ 	]*[0-9]+[ 	]+\\pfx	vfmadd132ps	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vfnmadd132pd
> 	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vfmsub213ps	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vfnmsub213pd	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vfmaddsub231ps
> 	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vfmsubadd231pd
> 	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch default; \.arch \.nof16c
> +[ 	]*[0-9]+[ 	]+\\pfx	vcvtph2ps	%xmm1, %xmm2
> +[ 	]*[0-9]+[ 	]+\\pfx	vcvtph2ps	%xmm1, %ymm2
> +[ 	]*[0-9]+[ 	]+\\pfx	vcvtps2ph	\$0, %xmm1, %xmm2
> +[ 	]*[0-9]+[ 	]+\\pfx	vcvtps2ph	\$0, %ymm1, %xmm2
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch default; \.arch \.noavx512_vnni
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpbusd	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpwssd	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch default; \.arch \.noavx512vl
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpbusd	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpwssd	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch default; \.arch \.noavx_vnni_int8
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpbssd	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpbsuds	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpbuud	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch default; \.arch \.noavx_vnni_int16
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpwsud	%xmm1, %xmm2, %xmm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpwusds	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]+\\pfx	vpdpwuud	%ymm1, %ymm2, %ymm3
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.endr
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.nofma
> +[ 	]*[0-9]+ .... 62F26D08 	>  vfmadd132ps %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+98D9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  vfnmadd132pd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+9CD9
> +[ 	]*[0-9]+ .... 62F26D08 	>  vfmsub213ps %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+AAD9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  vfnmsub213pd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+AED9
> +[ 	]*[0-9]+ .... 62F26D08 	>  vfmaddsub231ps %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+B6D9
> +[ 	]*[0-9]+ .... 62F2ED28 	>
> vfmsubadd231pd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+B7D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.nof16c
> +[ 	]*[0-9]+ .... 62F27D08 	>  vcvtph2ps %xmm1,%xmm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+13D1
> +[ 	]*[0-9]+ .... 62F27D28 	>  vcvtph2ps %xmm1,%ymm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+13D1
> +[ 	]*[0-9]+ .... 62F37D08 	>  vcvtps2ph \$0,%xmm1,%xmm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+1DCA00
> +[ 	]*[0-9]+ .... 62F37D28 	>  vcvtps2ph \$0,%ymm1,%xmm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+1DCA00
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx512_vnni
> +[ 	]*[0-9]+ .... C4E26950 	>  vpdpbusd %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+ .... C4E26D52 	>  vpdpwssd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx512vl
> +[ 	]*[0-9]+ .... C4E26950 	>  vpdpbusd %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+ .... C4E26D52 	>  vpdpwssd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx_vnni_int8
> +[ 	]*[0-9]+ .... 62F26F08 	>  vpdpbssd %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+50D9
> +[ 	]*[0-9]+ .... 62F26E08 	>  vpdpbsuds %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+51D9
> +[ 	]*[0-9]+ .... 62F26C28 	>  vpdpbuud %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+50D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx_vnni_int16
> +[ 	]*[0-9]+ .... 62F26E08 	>  vpdpwsud %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D2D9
> +[ 	]*[0-9]+ .... 62F26D28 	>  vpdpwusds %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D3D9
> +[ 	]*[0-9]+ .... 62F26C28 	>  vpdpwuud %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+D2D9
> +#...
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.nofma
> +[ 	]*[0-9]+ .... 62F26D08 	>  \{vex\}
> vfmadd132ps %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+98D9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  \{vex\}
> vfnmadd132pd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+9CD9
> +[ 	]*[0-9]+ .... 62F26D08 	>  \{vex\}
> vfmsub213ps %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+AAD9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  \{vex\}
> vfnmsub213pd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+AED9
> +[ 	]*[0-9]+ .... 62F26D08 	>  \{vex\}
> vfmaddsub231ps %xmm1,%xmm2,%xmm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+B6D9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  \{vex\}
> vfmsubadd231pd %ymm1,%ymm2,%ymm3
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+B7D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.nof16c
> +[ 	]*[0-9]+ .... 62F27D08 	>  \{vex\} vcvtph2ps %xmm1,%xmm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+13D1
> +[ 	]*[0-9]+ .... 62F27D28 	>  \{vex\} vcvtph2ps %xmm1,%ymm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+13D1
> +[ 	]*[0-9]+ .... 62F37D08 	>  \{vex\} vcvtps2ph \$0,%xmm1,%xmm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+1DCA00
> +[ 	]*[0-9]+ .... 62F37D28 	>  \{vex\} vcvtps2ph \$0,%ymm1,%xmm2
> +.*Warning: .*
> +[ 	]*[0-9]+[ 	]+1DCA00
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx512_vnni
> +[ 	]*[0-9]+ .... C4E26950 	>  \{vex\} vpdpbusd %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+ .... C4E26D52 	>  \{vex\}
> vpdpwssd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx512vl
> +[ 	]*[0-9]+ .... C4E26950 	>  \{vex\} vpdpbusd %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+ .... C4E26D52 	>  \{vex\}
> vpdpwssd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx_vnni_int8
> +[ 	]*[0-9]+[ 	]+>  \{vex\} vpdpbssd %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+>  \{vex\} vpdpbsuds %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+>  \{vex\} vpdpbuud %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx_vnni_int16
> +[ 	]*[0-9]+[ 	]+>  \{vex\} vpdpwsud %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+>  \{vex\} vpdpwusds %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+>  \{vex\} vpdpwuud %ymm1,%ymm2,%ymm3
> +#...
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.nofma
> +[ 	]*[0-9]+ .... 62F26D08 	>  \{evex\}
> vfmadd132ps %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+98D9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  \{evex\}
> vfnmadd132pd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+9CD9
> +[ 	]*[0-9]+ .... 62F26D08 	>  \{evex\}
> vfmsub213ps %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+AAD9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  \{evex\}
> vfnmsub213pd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+AED9
> +[ 	]*[0-9]+ .... 62F26D08 	>  \{evex\}
> vfmaddsub231ps %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+B6D9
> +[ 	]*[0-9]+ .... 62F2ED28 	>  \{evex\}
> vfmsubadd231pd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+B7D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.nof16c
> +[ 	]*[0-9]+ .... 62F27D08 	>  \{evex\} vcvtph2ps %xmm1,%xmm2
> +[ 	]*[0-9]+[ 	]+13D1
> +[ 	]*[0-9]+ .... 62F27D28 	>  \{evex\} vcvtph2ps %xmm1,%ymm2
> +[ 	]*[0-9]+[ 	]+13D1
> +[ 	]*[0-9]+ .... 62F37D08 	>  \{evex\} vcvtps2ph \$0,%xmm1,%xmm2
> +[ 	]*[0-9]+[ 	]+1DCA00
> +[ 	]*[0-9]+ .... 62F37D28 	>  \{evex\} vcvtps2ph \$0,%ymm1,%xmm2
> +[ 	]*[0-9]+[ 	]+1DCA00
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx512_vnni
> +[ 	]*[0-9]+[ 	]+>  \{evex\} vpdpbusd %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+>  \{evex\} vpdpwssd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx512vl
> +[ 	]*[0-9]+[ 	]+>  \{evex\} vpdpbusd %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+>  \{evex\} vpdpwssd %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx_vnni_int8
> +[ 	]*[0-9]+ .... 62F26F08 	>  \{evex\}
> vpdpbssd %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+50D9
> +[ 	]*[0-9]+ .... 62F26E08 	>  \{evex\}
> vpdpbsuds %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+51D9
> +[ 	]*[0-9]+ .... 62F26C28 	>  \{evex\}
> vpdpbuud %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+50D9
> +[ 	]*[0-9]+[ 	]+> *
> +[ 	]*[0-9]+[ 	]+>  \.arch default
> +[ 	]*[0-9]+[ 	]+>  \.arch \.noavx_vnni_int16
> +[ 	]*[0-9]+ .... 62F26E08 	>  \{evex\}
> vpdpwsud %xmm1,%xmm2,%xmm3
> +[ 	]*[0-9]+[ 	]+D2D9
> +[ 	]*[0-9]+ .... 62F26D28 	>  \{evex\}
> vpdpwusds %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+D3D9
> +[ 	]*[0-9]+ .... 62F26C28 	>  \{evex\}
> vpdpwuud %ymm1,%ymm2,%ymm3
> +[ 	]*[0-9]+[ 	]+D2D9
> +#pass
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/warn-enc.s
> @@ -0,0 +1,40 @@
> +	.text
> +
> +_start:
> +	.irp pfx, "", {vex}, {evex}
> +
> +	.arch default; .arch .nofma
> +	\pfx	vfmadd132ps	%xmm1, %xmm2, %xmm3
> +	\pfx	vfnmadd132pd	%ymm1, %ymm2, %ymm3
> +	\pfx	vfmsub213ps	%xmm1, %xmm2, %xmm3
> +	\pfx	vfnmsub213pd	%ymm1, %ymm2, %ymm3
> +	\pfx	vfmaddsub231ps	%xmm1, %xmm2, %xmm3
> +	\pfx	vfmsubadd231pd	%ymm1, %ymm2, %ymm3
> +
> +	.arch default; .arch .nof16c
> +	\pfx	vcvtph2ps	%xmm1, %xmm2
> +	\pfx	vcvtph2ps	%xmm1, %ymm2
> +	\pfx	vcvtps2ph	$0, %xmm1, %xmm2
> +	\pfx	vcvtps2ph	$0, %ymm1, %xmm2
> +
> +	.arch default; .arch .noavx512_vnni
> +	\pfx	vpdpbusd	%xmm1, %xmm2, %xmm3
> +	\pfx	vpdpwssd	%ymm1, %ymm2, %ymm3
> +
> +	.arch default; .arch .noavx512vl
> +	\pfx	vpdpbusd	%xmm1, %xmm2, %xmm3
> +	\pfx	vpdpwssd	%ymm1, %ymm2, %ymm3
> +
> +	.arch default; .arch .noavx_vnni_int8
> +	\pfx	vpdpbssd	%xmm1, %xmm2, %xmm3
> +	\pfx	vpdpbsuds	%xmm1, %xmm2, %xmm3
> +	\pfx	vpdpbuud	%ymm1, %ymm2, %ymm3
> +
> +	.arch default; .arch .noavx_vnni_int16
> +	\pfx	vpdpwsud	%xmm1, %xmm2, %xmm3
> +	\pfx	vpdpwusds	%ymm1, %ymm2, %ymm3
> +	\pfx	vpdpwuud	%ymm1, %ymm2, %ymm3
> +
> +	.endr
> +
> +	ret
> --- a/gas/testsuite/gas/i386/x86-64-inval-crc32.l
> +++ b/gas/testsuite/gas/i386/x86-64-inval-crc32.l
> @@ -28,6 +28,7 @@
>  .*:34: Error: .*
>  .*:35: Error: .*
>  .*:36: Error: .*
> +.*:41: Warning: .*
>  GAS LISTING .*
> 
> 
> @@ -72,4 +73,13 @@ GAS LISTING .*
>  [ 	]*[0-9]+[ 	]+crc32  ax, ax
>  [ 	]*[0-9]+[ 	]+crc32  rax,eax
>  [ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+# Also check handling with SSE4.2 disabled.
> +[ 	]*[0-9]+[ 	]*
> +[ 	]*[0-9]+[ 	]+\.arch \.nosse4\.2
> +[ 	]*[0-9]+[ 	]+\?* 62F47C08[ 	]+crc32	%ecx, %edx
> +\*\*\*\*  Warning: crc32: will use APX encoding; use \{evex\} to silence
> +[ 	]*[0-9]+[ 	]+F1CA
> +[ 	]*[0-9]+[ 	]+\?* 62F47C08[ 	]+\{evex\}	crc32
> 	%ecx, %edx
> +[ 	]*[0-9]+[ 	]+F1CA
> +[ 	]*[0-9]+[ 	]*
>  #pass
> --- a/gas/testsuite/gas/i386/x86-64-inval-crc32.s
> +++ b/gas/testsuite/gas/i386/x86-64-inval-crc32.s
> @@ -35,4 +35,10 @@ crc32  al,al
>  crc32  ax, ax
>  crc32  rax,eax
> 
> +# Also check handling with SSE4.2 disabled.
> +
> +	.arch .nosse4.2
> +		crc32	%ecx, %edx
> +	{evex}	crc32	%ecx, %edx
> +
>  .p2align 4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.