x86: replace adhoc (partly wrong) ambiguous operand checking for MOVSX/MOVZX
authorJan Beulich <jbeulich@suse.com>
Fri, 14 Feb 2020 13:27:28 +0000 (14:27 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 14 Feb 2020 13:27:28 +0000 (14:27 +0100)
commit65fca0597f3a5f76f6d7d79bc3a922c160254e0a
tree52ea7653991780e22ee475a6963e8d29a2fe72c6
parentb6773884364e0275a793adad4b025913fa155d5a
x86: replace adhoc (partly wrong) ambiguous operand checking for MOVSX/MOVZX

For these to get treatment consistent with other operand size checking
the special logic shouldn't live in md_assemble(), but process_suffix().
And there's more logic involved than simply zapping the suffix.

Note however that MOVS[BW]* and MOVZ[BW]* still won't be fully
consistent, due to the objection to fold MOVS* templates just like was
done for MOVZ* in c07315e0c6 ("x86: allow suffix-less movzw and 64-bit
movzb").

Note further that it is against my own intentions to have MOVSX/MOVZX
silently default to a byte source in AT&T mode. This should happen only
when the destination register is a 16-bit one. In all other cases there
is an ambiguity, and the user should be warned. But it was explicitly
requested for this to be done in a way inconsistent with everything
else.

Note finally that the assembler change points out (and this patch fixes)
a wrong Intel syntax test introduced by bc31405ebb2c ("x86-64: Properly
encode and decode movsxd"): When source code specifies a 16-bit
destination register, disassembly expectations shouldn't have been to
find a 32-bit one.
32 files changed:
gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/gas/i386/i386-intel.d
gas/testsuite/gas/i386/i386.d
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/i386.s
gas/testsuite/gas/i386/iamcu-1.d
gas/testsuite/gas/i386/iamcu-1.s
gas/testsuite/gas/i386/ilp32/x86-64.d
gas/testsuite/gas/i386/ilp32/x86-64.s
gas/testsuite/gas/i386/k1om.d
gas/testsuite/gas/i386/l1om.d
gas/testsuite/gas/i386/movx16.l [new file with mode: 0644]
gas/testsuite/gas/i386/movx16.s [new file with mode: 0644]
gas/testsuite/gas/i386/movx32.l [new file with mode: 0644]
gas/testsuite/gas/i386/movx32.s [new file with mode: 0644]
gas/testsuite/gas/i386/movx64.l [new file with mode: 0644]
gas/testsuite/gas/i386/movx64.s [new file with mode: 0644]
gas/testsuite/gas/i386/noreg16.d
gas/testsuite/gas/i386/noreg16.s
gas/testsuite/gas/i386/noreg32.d
gas/testsuite/gas/i386/noreg32.s
gas/testsuite/gas/i386/noreg64.d
gas/testsuite/gas/i386/noreg64.s
gas/testsuite/gas/i386/x86-64-movsxd-intel.d
gas/testsuite/gas/i386/x86-64-movsxd.d
gas/testsuite/gas/i386/x86_64-intel.d
gas/testsuite/gas/i386/x86_64.d
gas/testsuite/gas/i386/x86_64.s
opcodes/ChangeLog
opcodes/i386-opc.tbl
opcodes/i386-tbl.h