* config/tc-metag.c: Make SWAP instruction less permissive with its operands.

* gas/metag/metacore21-invalid.s: Add invalid SWAP testcases
  * gas/metag/metacore21-invalid.l: Add expected output for invalid SWAP testcases
This commit is contained in:
Nick Clifton 2013-01-30 13:21:01 +00:00
parent 92ff23a1bf
commit f9b2d5449a
5 changed files with 51 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2013-01-30 Markos Chandras <markos.chandras@imgtec.com>
* config/tc-metag.c: Make SWAP instruction less permissive with
its operands.
2013-01-29 DJ Delorie <dj@redhat.com>
* config/tc-rl78.c (rl78_cons_fix_new): Handle user-specified

View File

@ -2026,11 +2026,37 @@ parse_swap (const char *line, metag_insn *insn,
if (l == NULL)
return NULL;
insn->bits = (template->meta_opcode |
(regs[1]->no << 19) |
(regs[0]->no << 14) |
(regs[1]->unit << 10) |
(regs[0]->unit << 5));
/* PC.r | CT.r | TR.r | TT.r are treated as if they are a single unit. */
switch (regs[0]->unit)
{
case UNIT_PC:
case UNIT_CT:
case UNIT_TR:
case UNIT_TT:
if (regs[1]->unit == UNIT_PC
|| regs[1]->unit == UNIT_CT
|| regs[1]->unit == UNIT_TR
|| regs[1]->unit == UNIT_TT)
{
as_bad (_("PC, CT, TR and TT are treated as if they are a single unit but operands must be in different units"));
return NULL;
}
default:
/* Registers must be in different units. */
if (regs[0]->unit == regs[1]->unit)
{
as_bad (_("source and destination register must be in different units"));
return NULL;
}
break;
}
insn->bits = (template->meta_opcode
| (regs[1]->no << 19)
| (regs[0]->no << 14)
| (regs[1]->unit << 10)
| (regs[0]->unit << 5));
insn->len = 4;
return l;

View File

@ -1,3 +1,9 @@
2013-01-30 Markos Chandras <markos.chandras@imgtec.com>
* gas/metag/metacore21-invalid.s: Add invalid SWAP testcases.
* gas/metag/metacore21-invalid.l: Add expected output for invalid
SWAP testcases.
2013-01-28 Alexis Deruelle <alexis.deruelle@gmail.com>
PR gas/15069

View File

@ -15,3 +15,9 @@
.*:8: Error: .*
.*:8: Error: .*
.*:8: Error: .*
.*:9: Error: .*
.*:9: Error: .*
.*:10: Error: .*
.*:10: Error: .*
.*:11: Error: .*
.*:11: Error: .*

View File

@ -6,3 +6,6 @@ _start:
SETD [A0.0+A0.1],A0.2
ASL D0.0,D1.0,D0.0
GETD D0.0,[D0.0--D0.0]
SWAP PC,PCX
SWAP CT.0,PCX
SWAP D0.1,D0.2