Correct the parsing of derferred register addressing in the PDP11 assembler.

PR 23481
	* config/tc-pdp11.c (parse_op_noreg): Check for deferred register
	addressing before assuming non-deferred addressing.
	* testsuite/gas/pdp11/pr23481.s: New test source file.
	* testsuite/gas/pdp11/pr23481.d: New test driver file.
	* testsuite/gas/pdp11/pdp11.exp: Run the new test.
This commit is contained in:
James Patrick Conlon 2018-08-07 08:34:08 +01:00 committed by Nick Clifton
parent 71f6efc44e
commit 8f9ea98beb
5 changed files with 49 additions and 6 deletions

View File

@ -1,3 +1,13 @@
2018-08-07 James Patrick Conlon <cptjustice@gmail.com>
Nick Clifton <nickc@redhat.com>
PR 23481
* config/tc-pdp11.c (parse_op_noreg): Check for deferred register
addressing before assuming non-deferred addressing.
* testsuite/gas/pdp11/pr23481.s: New test source file.
* testsuite/gas/pdp11/pr23481.d: New test driver file.
* testsuite/gas/pdp11/pdp11.exp: Run the new test.
2018-08-06 Claudiu Zissulescu <claziss@synopsys.com>
* config/tc-arc.c (rf16_only): New static variable.
@ -93,7 +103,7 @@
(swap_2_operands): Also swap flags fields.
* config/tc-i386-intel.c (i386_intel_operand): Likewise.
2018-08-01 James Patrick Conlon <cptjustice@gmail.com>
2018-08-01 James Patrick Conlon <cptjustice@gmail.com>
Nick Clifton <nickc@redhat.com>
PR 14480

View File

@ -350,10 +350,7 @@ parse_reg (char *str, struct pdp11_code *operand)
str += 2;
}
else
{
operand->error = _("Bad register name");
return str;
}
operand->error = _("Bad register name");
return str;
}
@ -594,10 +591,21 @@ parse_op_noreg (char *str, struct pdp11_code *operand)
str = parse_op_no_deferred (str, operand);
}
else
str = parse_op_no_deferred (str + 1, operand);
{
/* @Rn == (Rn): Register deferred. */
str = parse_reg (str + 1, operand);
/* Not @Rn */
if (operand->error)
{
operand->error = NULL;
str = parse_op_no_deferred (str, operand);
}
}
if (operand->error)
return str;
operand->code |= 010;
}
else

View File

@ -22,4 +22,5 @@ if [expr [istarget "pdp11-*-*"]] then {
run_dump_test "opcode"
run_dump_test "absreloc"
run_dump_test "pr14480"
run_dump_test "pr23481"
}

View File

@ -0,0 +1,14 @@
#name: PR 23481 - correct assembly of '@rN' and '(rN)'
#objdump: -dw
dump.o: +file format .*
Disassembly of section .text:
0+00 <start>:
[ ]+0:[ ]+2009[ ]+cmp[ ]+r0, \(r1\)
[ ]+2:[ ]+2009[ ]+cmp[ ]+r0, \(r1\)
[ ]+4:[ ]+2240[ ]+cmp[ ]+\(r1\), r0
[ ]+6:[ ]+2240[ ]+cmp[ ]+\(r1\), r0
[ ]+8:[ ]+2249[ ]+cmp[ ]+\(r1\), \(r1\)
#pass

View File

@ -0,0 +1,10 @@
start:
cmp r0,(r1)
cmp r0,@r1
cmp (r1),r0
cmp @r1,r0
cmp (r1),@r1
halt
.END