x86: re-work build_modrm_byte()'s register assignment
authorJan Beulich <jbeulich@suse.com>
Mon, 20 Mar 2023 15:56:24 +0000 (16:56 +0100)
committerJan Beulich <jbeulich@suse.com>
Mon, 20 Mar 2023 15:56:24 +0000 (16:56 +0100)
commitecb96e55497e44b6c0818553dcb86dfb96b8deef
tree0184294c2a21d63bcad25223bfa621aa46c3ef44
parent5f784ec9277e9303eee3ce366c40ce9fa3203f3e
x86: re-work build_modrm_byte()'s register assignment

The function has accumulated a number of special cases for no real
reason. Some were necessary because insn attributes (SwapSources in
particular) weren't suitably utilized instead. Note that the addition of
SwapSources actually increases consistency among the templates: Like
others which already have the attribute, these are all insns where the
VEX.VVVV-encoded register comes first (or last when looking at the SDM).

Note that the vexvvvv attribute now has merely boolean meaning anymore,
in line with the SDM long having dropped the NDS/NDD/DDS concept of
identifying encoding variants. The fallout will be taken care of
subsequently, though, to not further clutter the change here.

As to the TILEZERO special case: If more instructions like this
appeared, a new attribute would likely be the way to go. But as long as
it's only a single insn, going from the mnemonic is cheaper.
gas/config/tc-i386.c
opcodes/i386-opc.tbl
opcodes/i386-tbl.h