x86: support AVX10.1 vector size restrictions
authorJan Beulich <jbeulich@suse.com>
Thu, 14 Sep 2023 06:43:45 +0000 (08:43 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 14 Sep 2023 06:43:45 +0000 (08:43 +0200)
commit4fc85f37dc7ab02867c5f7ee69e65b2f5eba51d8
treef55f309481456714ee115fcfea9d68d0549ac649
parent2548c261604611b5c72f5a28ae54b6d9a15617ac
x86: support AVX10.1 vector size restrictions

Recognize "/<number>" suffixes on both -march=+avx10.1 and the
corresponding .arch directive, setting an upper bound on the vector size
that insns may use. Such a restriction can be reset by setting a new base
architecture, by using a suffix-less form, by disabling AVX10, or by
enabling any other VEX/EVEX-based vector extension.

While for most insns we can suppress their use with too wide operands
via registers becoming unavailable (or in Intel syntax memory operand
size specifiers not being recognized), mask register insns have to have
their minimum required vector size specified in a new attribute. (Of
course this new attribute could also be used on other insns.)

Note that .insn continues to be permitted to emit EVEX{512,256} (and
VEX256 ones) encodings regardless of vector size restrictions in place.
Of course these can't be expressed using zmm (or ymm) operands then,
but need using the EVEX.512.* forms (broadcast forms may be usable right
now, but this may go away so shouldn't be relied upon). This is why no
assertions should be added to build_{e,}vex_prefix().
29 files changed:
gas/NEWS
gas/config/tc-i386-intel.c
gas/config/tc-i386.c
gas/doc/c-i386.texi
gas/testsuite/gas/i386/avx10-vsz.l [new file with mode: 0644]
gas/testsuite/gas/i386/avx10-vsz.s [new file with mode: 0644]
gas/testsuite/gas/i386/avx10.1-256-1.d
gas/testsuite/gas/i386/avx10.1-256-1.s
gas/testsuite/gas/i386/avx10.1-256-2.d
gas/testsuite/gas/i386/avx10.1-256-2.s
gas/testsuite/gas/i386/avx10.1-256-3.d
gas/testsuite/gas/i386/avx10.1-256-3.s
gas/testsuite/gas/i386/avx10.1-256-4.d
gas/testsuite/gas/i386/avx10.1-256-4.s
gas/testsuite/gas/i386/avx10.1-256-5.d
gas/testsuite/gas/i386/avx10.1-256-5.s
gas/testsuite/gas/i386/avx10.1-256-gfni.d
gas/testsuite/gas/i386/avx10.1-256-gfni.s
gas/testsuite/gas/i386/avx10.1-256-vaes.d
gas/testsuite/gas/i386/avx10.1-256-vaes.s
gas/testsuite/gas/i386/avx10.1-256-vpclmulqdq.d
gas/testsuite/gas/i386/avx10.1-256-vpclmulqdq.s
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/noavx512-2.l
gas/testsuite/gas/i386/noavx512-2.s
opcodes/i386-gen.c
opcodes/i386-opc.h
opcodes/i386-opc.tbl
opcodes/i386-tbl.h