[PATCH RESEND] x86: allow VEX et al encodings in 16-bit (protected) mode
H.J. Lu
hjl.tools@gmail.com
Mon Jun 24 16:31:00 GMT 2019
On Mon, Jun 24, 2019 at 7:05 AM Jan Beulich <JBeulich@suse.com> wrote:
>
> These encodings aren't valid in real and VM86 modes, but they are very
> well usable in 16-bit protected mode.
>
> A few adjustments in the disassembler tables are needed where Ev or Gv
> were wrongly used. Additionally an adjustment is needed to avoid
> printing "addr32" when that's already recognizable by the use of %eiz.
>
> Furthermore the Iq operand template was wrong for XOP:0Ah encoding
> insns: They're having a uniform 32-bit immediate. Drop Iq and introduce
> Id instead.
>
> Clone a few existing test cases to exercise assembler and disassembler.
>
> gas/
> 2019-06-24 Jan Beulich <jbeulich@suse.com>
>
> config/tc-i386.c (md_assemble): Check for protected mode
> incapable processor before encoding VEX and alike insns.
> * testsuite/gas/i386/inval-16.s: For 80186 architecture.
> * testsuite/gas/i386/inval-16.l: Adjust expectations.
> * testsuite/gas/i386/avx-16bit.d,
> testsuite/gas/i386/avx-16bit.s,
> testsuite/gas/i386/avx512f-16bit.d,
> testsuite/gas/i386/avx512f-16bit.s,
> testsuite/gas/i386/bmi-16bit.d,
> testsuite/gas/i386/bmi-16bit.s,
> testsuite/gas/i386/bmi2-16bit.d,
> testsuite/gas/i386/bmi2-16bit.s,
> testsuite/gas/i386/lwp-16bit.d,
> testsuite/gas/i386/lwp-16bit.s: New
> testsuite/gas/i386/i386.exp: Run new tests.
>
> opcodes/
> 2019-06-24 Jan Beulich <jbeulich@suse.com>
>
> * i386-dis.c (Iq): Delete.
> (Id): New.
> (reg_table): Use it for lwpins, lwpval, and bextr. Use Edq for
> TBM insns.
> (vex_len_table): Use Edq for vcvtsi2ss, vcvtsi2sd. Use Gdq for
> vcvttss2si, vcvttsd2si, vcvtss2si, and vcvtsd2si.
> (OP_E_memory): Also honor needindex when deciding whether an
> address size prefix needs printing.
> (OP_I): Remove handling of q_mode. Add handling of d_mode.
>
> Re-sending with the actual patch a compressed attachment, as it
> appears to be larger than what the list would accept.
>
> Jan
>
>
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -4387,9 +4387,9 @@ md_assemble (char *line)
>
> if (is_any_vex_encoding (&i.tm))
> {
> - if (flag_code == CODE_16BIT)
> + if (!cpu_arch_flags.bitfield.cpui286)
> {
> - as_bad (_("instruction `%s' isn't supported in 16-bit mode."),
> + as_bad (_("instruction `%s' isn't supported outside of protected mode."),
> i.tm.name);
> return;
> }
flag_code == CODE_16BIT is used to indicate 16-bit mode, in most cases, for real
mode. If there are real use cases for VEX/EVEX insns in 16-bit protected mode,
should we add a directive or pseudo prefix to indicate protected mode encoding?
--
H.J.
More information about the Binutils
mailing list