mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-13 19:43:52 +08:00
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:
parent
71f6efc44e
commit
8f9ea98beb
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
}
|
||||
|
14
gas/testsuite/gas/pdp11/pr23481.d
Normal file
14
gas/testsuite/gas/pdp11/pr23481.d
Normal 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
|
10
gas/testsuite/gas/pdp11/pr23481.s
Normal file
10
gas/testsuite/gas/pdp11/pr23481.s
Normal file
@ -0,0 +1,10 @@
|
||||
start:
|
||||
cmp r0,(r1)
|
||||
cmp r0,@r1
|
||||
cmp (r1),r0
|
||||
cmp @r1,r0
|
||||
cmp (r1),@r1
|
||||
|
||||
halt
|
||||
|
||||
.END
|
Loading…
Reference in New Issue
Block a user