aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJames Patrick Conlon <cptjustice@gmail.com>2018-08-07 08:34:08 +0100
committerNick Clifton <nickc@redhat.com>2018-08-07 08:34:08 +0100
commit8f9ea98bebb629f0e6993be015f042bf45dcdd18 (patch)
tree69f1131acb02712504ee95d0cddb06d819716cc2 /gas
parent71f6efc44e1bc525313f62dc6e30b4706fc644d3 (diff)
downloadbinutils-8f9ea98bebb629f0e6993be015f042bf45dcdd18.zip
binutils-8f9ea98bebb629f0e6993be015f042bf45dcdd18.tar.gz
binutils-8f9ea98bebb629f0e6993be015f042bf45dcdd18.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog12
-rw-r--r--gas/config/tc-pdp11.c18
-rw-r--r--gas/testsuite/gas/pdp11/pdp11.exp1
-rw-r--r--gas/testsuite/gas/pdp11/pr23481.d14
-rw-r--r--gas/testsuite/gas/pdp11/pr23481.s10
5 files changed, 49 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4467bb2..7874132 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/config/tc-pdp11.c b/gas/config/tc-pdp11.c
index e151b27..1ebd461 100644
--- a/gas/config/tc-pdp11.c
+++ b/gas/config/tc-pdp11.c
@@ -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
diff --git a/gas/testsuite/gas/pdp11/pdp11.exp b/gas/testsuite/gas/pdp11/pdp11.exp
index b3609f9..0c78566 100644
--- a/gas/testsuite/gas/pdp11/pdp11.exp
+++ b/gas/testsuite/gas/pdp11/pdp11.exp
@@ -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"
}
diff --git a/gas/testsuite/gas/pdp11/pr23481.d b/gas/testsuite/gas/pdp11/pr23481.d
new file mode 100644
index 0000000..fb40785
--- /dev/null
+++ b/gas/testsuite/gas/pdp11/pr23481.d
@@ -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
diff --git a/gas/testsuite/gas/pdp11/pr23481.s b/gas/testsuite/gas/pdp11/pr23481.s
new file mode 100644
index 0000000..5a61b98
--- /dev/null
+++ b/gas/testsuite/gas/pdp11/pr23481.s
@@ -0,0 +1,10 @@
+start:
+ cmp r0,(r1)
+ cmp r0,@r1
+ cmp (r1),r0
+ cmp @r1,r0
+ cmp (r1),@r1
+
+ halt
+
+ .END