aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2012-07-31 07:43:38 +0000
committerJan Beulich <jbeulich@novell.com>2012-07-31 07:43:38 +0000
commit5a819eb989d050f32a06af6c40e9b5eef4becabb (patch)
treedc01f2991e884b2d3091e68e7813e1e4dfeb9e96 /gas
parent5614d22c1d90a99acb57d6bcf74fdc32e2723bc5 (diff)
downloadgdb-5a819eb989d050f32a06af6c40e9b5eef4becabb.zip
gdb-5a819eb989d050f32a06af6c40e9b5eef4becabb.tar.gz
gdb-5a819eb989d050f32a06af6c40e9b5eef4becabb.tar.bz2
Since the word to byte register conversion isn't active for x86-64
anyway, there's also no need to issue a separate, inconsistent diagnostic in some of the cases - non-matching operands will be complained about anyway. 2012-07-31 Jan Beulich <jbeulich@suse.com> * config/tc-i386.c (check_byte_reg): Check for I/O port register earlier, and just once. Drop diagnostic that got issued only for some registers.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-i386.c22
2 files changed, 15 insertions, 13 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 600871d..d474b3c 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,11 @@
2012-07-31 Jan Beulich <jbeulich@suse.com>
+ * config/tc-i386.c (check_byte_reg): Check for I/O port
+ register earlier, and just once. Drop diagnostic that got
+ issued only for some registers.
+
+2012-07-31 Jan Beulich <jbeulich@suse.com>
+
* config/tc-i386.c (match_template): New local variable
'specific_error'. Set it from i.error after failed
check_VecOperands or VEX_check_operands. Use it if set in
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index b8c08e8..70f21db 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -4734,6 +4734,10 @@ check_byte_reg (void)
if (i.types[op].bitfield.reg8)
continue;
+ /* I/O port address operands are OK too. */
+ if (i.tm.operand_types[op].bitfield.inoutportreg)
+ continue;
+
/* crc32 doesn't generate this warning. */
if (i.tm.base_opcode == 0xf20f38f0)
continue;
@@ -4741,21 +4745,13 @@ check_byte_reg (void)
if ((i.types[op].bitfield.reg16
|| i.types[op].bitfield.reg32
|| i.types[op].bitfield.reg64)
- && i.op[op].regs->reg_num < 4)
+ && i.op[op].regs->reg_num < 4
+ /* Prohibit these changes in 64bit mode, since the lowering
+ would be more complicated. */
+ && flag_code != CODE_64BIT)
{
- /* Prohibit these changes in the 64bit mode, since the
- lowering is more complicated. */
- if (flag_code == CODE_64BIT
- && !i.tm.operand_types[op].bitfield.inoutportreg)
- {
- as_bad (_("incorrect register `%s%s' used with `%c' suffix"),
- register_prefix, i.op[op].regs->reg_name,
- i.suffix);
- return 0;
- }
#if REGISTER_WARNINGS
- if (!quiet_warnings
- && !i.tm.operand_types[op].bitfield.inoutportreg)
+ if (!quiet_warnings)
as_warn (_("using `%s%s' instead of `%s%s' due to `%c' suffix"),
register_prefix,
(i.op[op].regs + (i.types[op].bitfield.reg16