x86: properly respect rex/{rex}
authorJan Beulich <jbeulich@suse.com>
Fri, 22 Dec 2023 08:33:12 +0000 (09:33 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 22 Dec 2023 08:33:12 +0000 (09:33 +0100)
commitce7056886a6e52a4fc91b5e3b28da2c0735d0b19
tree95a3664b2a1c897022e5ad788ccb234ec5f24679
parentc3d507aba3ec2c9b3f9aa105a01cf80ecc0b8c9b
x86: properly respect rex/{rex}

This addresses two issues: For one, a user specified "rex" did not cause
the diagnostic to trigger when there was no other need for a REX prefix;
instead, another than the specified insn+operands was encoded. And then
(which is what this started from) .insn didn't respect {rex} (and was
otherwise similarly flawed as ordinary insns).

The latter requires splitting out code from md_assemble(), for it to
become re-usable. Besides the addition to address the first issue, that
code then also needs generalizing to account for immediate operands, as
with .insn we can't make assumptions anymore on all respective templates
having at most two operands (we still can build upon there being at most
two non-immediate operands, though). While moving the code also simplify
the first if(), by folding redundant checks.

In the new testcase also test a few more things which afaics weren't
tested till now.
gas/config/tc-i386.c
gas/testsuite/gas/i386/rex-bad.l [new file with mode: 0644]
gas/testsuite/gas/i386/rex-bad.s [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-pseudos.d
gas/testsuite/gas/i386/x86-64-pseudos.s
gas/testsuite/gas/i386/x86-64.exp