x86: split insn templates' CPU field
authorJan Beulich <jbeulich@suse.com>
Thu, 9 Nov 2023 11:54:58 +0000 (12:54 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 9 Nov 2023 11:54:58 +0000 (12:54 +0100)
commita5e91879d14fd5f2e477e556e629e1b8e06359a6
tree621b421fd9d9002f8c865a55ec5797062f7505da
parent3e624fa4b870f90c8f5c31ad533b3abc4a4bfa93
x86: split insn templates' CPU field

Right now the opcode table has entries with ISA restrictions of the form
FEAT1|FEAT2, the meaning of which depends on context and requires
special treatment in tc-i386.c: Sometimes this means "both features
requires", whereas originally it was intended to solely mean "all of
these features required". Split the field, with the original one
regaining its original meaning. The new field now truly means "any of
these". The combination of both fields is still and &&-type check, i.e.
(all of these) && (any of these). In the opcode table more involved
combinations of features then also need expressing this way: "all"
entities first, follow by "any" entities enclosed in parentheses, e.g.
x64&(AVX|AVX512F). If the "all" part is empty, parentheses may not be
added around the "any" part (unless parsing logic was further relaxed).

Note that this way AVX512VL no longer needs as much special treatment,
and hence templates previously using AVX512F|AVX512VL are switched to
just AVX512VL.

Note further that this requires FMA handling as resulting from
da0784f961d8 ("x86: fold FMA VEX and EVEX templates") to be slightly
re-done: FMA now becomes more similar to AVX and AVX2.
gas/config/tc-i386.c
opcodes/i386-gen.c
opcodes/i386-opc.h
opcodes/i386-opc.tbl
opcodes/i386-tbl.h