x86-64/gas: fix an asymmetry in suffix/register checking
Without this, constructs like "orw %rax, (%rax)" aren't being rejected (other than any other wrong suffix/register combination). gas/ 2013-11-04 Jan Beulich <jbeulich@suse.com> * config/tc-i386.c (check_long_reg): Correct comment indentation. (check_qword_reg): Correct comment and its indentation. (check_word_reg): Extend comment and correct its indentation. Also check for 64-bit register. gas/testsuite/ 2013-11-04 Jan Beulich <jbeulich@suse.com> * gas/i386/x86-64-suffix-bad.[sl]: New. * gas/i386/i386.exp: Run new test.
This commit is contained in:
parent
67c059c29e
commit
e4630f71b2
|
@ -1,3 +1,10 @@
|
||||||
|
2013-11-04 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* config/tc-i386.c (check_long_reg): Correct comment indentation.
|
||||||
|
(check_qword_reg): Correct comment and its indentation.
|
||||||
|
(check_word_reg): Extend comment and correct its indentation. Also
|
||||||
|
check for 64-bit register.
|
||||||
|
|
||||||
2013-10-30 Ulrich Weigand <uweigand@de.ibm.com>
|
2013-10-30 Ulrich Weigand <uweigand@de.ibm.com>
|
||||||
|
|
||||||
* config/tc-ppc.c (md_pseudo_table): Add .localentry.
|
* config/tc-ppc.c (md_pseudo_table): Add .localentry.
|
||||||
|
|
|
@ -5418,7 +5418,7 @@ check_long_reg (void)
|
||||||
i.suffix);
|
i.suffix);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Warn if the e prefix on a general reg is missing. */
|
/* Warn if the e prefix on a general reg is missing. */
|
||||||
else if ((!quiet_warnings || flag_code == CODE_64BIT)
|
else if ((!quiet_warnings || flag_code == CODE_64BIT)
|
||||||
&& i.types[op].bitfield.reg16
|
&& i.types[op].bitfield.reg16
|
||||||
&& (i.tm.operand_types[op].bitfield.reg32
|
&& (i.tm.operand_types[op].bitfield.reg32
|
||||||
|
@ -5440,7 +5440,7 @@ check_long_reg (void)
|
||||||
register_prefix, i.op[op].regs->reg_name, i.suffix);
|
register_prefix, i.op[op].regs->reg_name, i.suffix);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/* Warn if the r prefix on a general reg is missing. */
|
/* Warn if the r prefix on a general reg is present. */
|
||||||
else if (i.types[op].bitfield.reg64
|
else if (i.types[op].bitfield.reg64
|
||||||
&& (i.tm.operand_types[op].bitfield.reg32
|
&& (i.tm.operand_types[op].bitfield.reg32
|
||||||
|| i.tm.operand_types[op].bitfield.acc))
|
|| i.tm.operand_types[op].bitfield.acc))
|
||||||
|
@ -5483,7 +5483,7 @@ check_qword_reg (void)
|
||||||
i.suffix);
|
i.suffix);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Warn if the e prefix on a general reg is missing. */
|
/* Warn if the r prefix on a general reg is missing. */
|
||||||
else if ((i.types[op].bitfield.reg16
|
else if ((i.types[op].bitfield.reg16
|
||||||
|| i.types[op].bitfield.reg32)
|
|| i.types[op].bitfield.reg32)
|
||||||
&& (i.tm.operand_types[op].bitfield.reg32
|
&& (i.tm.operand_types[op].bitfield.reg32
|
||||||
|
@ -5528,9 +5528,10 @@ check_word_reg (void)
|
||||||
i.suffix);
|
i.suffix);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Warn if the e prefix on a general reg is present. */
|
/* Warn if the e or r prefix on a general reg is present. */
|
||||||
else if ((!quiet_warnings || flag_code == CODE_64BIT)
|
else if ((!quiet_warnings || flag_code == CODE_64BIT)
|
||||||
&& i.types[op].bitfield.reg32
|
&& (i.types[op].bitfield.reg32
|
||||||
|
|| i.types[op].bitfield.reg64)
|
||||||
&& (i.tm.operand_types[op].bitfield.reg16
|
&& (i.tm.operand_types[op].bitfield.reg16
|
||||||
|| i.tm.operand_types[op].bitfield.acc))
|
|| i.tm.operand_types[op].bitfield.acc))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2013-11-04 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* gas/i386/x86-64-suffix-bad.[sl]: New.
|
||||||
|
* gas/i386/i386.exp: Run new test.
|
||||||
|
|
||||||
2013-11-02 Alan Modra <amodra@gmail.com>
|
2013-11-02 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* gas/cfi/cfi-x86_64.d: Match when lacking end of section padding.
|
* gas/cfi/cfi-x86_64.d: Match when lacking end of section padding.
|
||||||
|
|
|
@ -444,6 +444,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
|
||||||
run_dump_test "x86-64-disp32"
|
run_dump_test "x86-64-disp32"
|
||||||
run_dump_test "rexw"
|
run_dump_test "rexw"
|
||||||
run_list_test "x86-64-specific-reg"
|
run_list_test "x86-64-specific-reg"
|
||||||
|
run_list_test "x86-64-suffix-bad"
|
||||||
run_dump_test "x86-64-fxsave"
|
run_dump_test "x86-64-fxsave"
|
||||||
run_dump_test "x86-64-fxsave-intel"
|
run_dump_test "x86-64-fxsave-intel"
|
||||||
run_dump_test "x86-64-arch-1"
|
run_dump_test "x86-64-arch-1"
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
.*: Assembler messages:
|
||||||
|
.*:3: Error: .*
|
||||||
|
.*:4: Error: .*
|
||||||
|
.*:5: Error: .*
|
||||||
|
.*:7: Error: .*
|
||||||
|
.*:8: Error: .*
|
||||||
|
.*:9: Error: .*
|
||||||
|
.*:11: Error: .*
|
||||||
|
.*:12: Error: .*
|
||||||
|
.*:13: Error: .*
|
||||||
|
.*:15: Error: .*
|
||||||
|
.*:16: Error: .*
|
||||||
|
.*:17: Error: .*
|
|
@ -0,0 +1,17 @@
|
||||||
|
.text
|
||||||
|
start:
|
||||||
|
orw %al, (%rax)
|
||||||
|
orl %al, (%rax)
|
||||||
|
orq %al, (%rax)
|
||||||
|
|
||||||
|
orb %ax, (%rax)
|
||||||
|
orl %ax, (%rax)
|
||||||
|
orq %ax, (%rax)
|
||||||
|
|
||||||
|
orb %eax, (%rax)
|
||||||
|
orw %eax, (%rax)
|
||||||
|
orq %eax, (%rax)
|
||||||
|
|
||||||
|
orb %rax, (%rax)
|
||||||
|
orw %rax, (%rax)
|
||||||
|
orl %rax, (%rax)
|
Loading…
Reference in New Issue