Fix bug in PDP11 assembler when handling a JSr instruction with deferred auto increment.
PR 14480 * config/tc-pdp11.c (parse_op_noreg): Check for and handle auto increment deferred. * testsuite/gas/pdp11/pr14480.d: New test driver file. * testsuite/gas/pdp11/pr14480.s: New test source file file. * testsuite/gas/pdp11/pdp11.exp: Run the new test.
This commit is contained in:
parent
c25179e71f
commit
3cf2b6691c
5 changed files with 57 additions and 3 deletions
|
@ -1,3 +1,13 @@
|
|||
2018-08-01 James Patrick Conlon <cptjustice@gmail.com>
|
||||
Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 14480
|
||||
* config/tc-pdp11.c (parse_op_noreg): Check for and handle auto
|
||||
increment deferred.
|
||||
* testsuite/gas/pdp11/pr14480.d: New test driver file.
|
||||
* testsuite/gas/pdp11/pr14480.s: New test source file file.
|
||||
* testsuite/gas/pdp11/pdp11.exp: Run the new test.
|
||||
|
||||
2018-08-01 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/tc-ns32k.c (addr_mode): Replace "Drop through" comment
|
||||
|
|
|
@ -581,7 +581,21 @@ parse_op_noreg (char *str, struct pdp11_code *operand)
|
|||
|
||||
if (*str == '@' || *str == '*')
|
||||
{
|
||||
str = parse_op_no_deferred (str + 1, operand);
|
||||
/* @(Rn) == @0(Rn): Mode 7, Indexed deferred.
|
||||
Check for auto-increment deferred. */
|
||||
if (str[1] == '('
|
||||
&& str[2] != 0
|
||||
&& str[3] != 0
|
||||
&& str[4] != 0
|
||||
&& str[5] != '+')
|
||||
{
|
||||
/* Change implied to explicit index deferred. */
|
||||
*str = '0';
|
||||
str = parse_op_no_deferred (str, operand);
|
||||
}
|
||||
else
|
||||
str = parse_op_no_deferred (str + 1, operand);
|
||||
|
||||
if (operand->error)
|
||||
return str;
|
||||
operand->code |= 010;
|
||||
|
|
|
@ -19,8 +19,7 @@
|
|||
#
|
||||
|
||||
if [expr [istarget "pdp11-*-*"]] then {
|
||||
|
||||
run_dump_test "opcode"
|
||||
run_dump_test "absreloc"
|
||||
|
||||
run_dump_test "pr14480"
|
||||
}
|
||||
|
|
14
gas/testsuite/gas/pdp11/pr14480.d
Normal file
14
gas/testsuite/gas/pdp11/pr14480.d
Normal file
|
@ -0,0 +1,14 @@
|
|||
#name: PR 14480 - correct assembly of 'jsr pc, @(r0)'
|
||||
#objdump: -dw
|
||||
|
||||
dump.o: +file format .*
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0+00 <start>:
|
||||
[ ]+0:[ ]+15c0 0014[ ]+mov[ ]+\$24, r0
|
||||
[ ]+4:[ ]+09c8[ ]+jsr[ ]+pc, \(r0\)
|
||||
[ ]+6:[ ]+09f8 0000[ ]+jsr[ ]+pc, \*0\(r0\)
|
||||
[ ]+a:[ ]+09f8 0000[ ]+jsr[ ]+pc, \*0\(r0\)
|
||||
[ ]+e:[ ]+09f8 0002[ ]+jsr[ ]+pc, \*2\(r0\)
|
||||
#pass
|
17
gas/testsuite/gas/pdp11/pr14480.s
Normal file
17
gas/testsuite/gas/pdp11/pr14480.s
Normal file
|
@ -0,0 +1,17 @@
|
|||
start: mov $ind,r0
|
||||
jsr pc,(r0)
|
||||
jsr pc,@(r0)
|
||||
jsr pc,@0(r0)
|
||||
jsr pc,@2(r0)
|
||||
halt
|
||||
|
||||
|
||||
ind: .WORD dest
|
||||
.WORD dest2
|
||||
|
||||
dest: rts pc
|
||||
|
||||
dest2: rts pc
|
||||
|
||||
.END
|
||||
|
Loading…
Add table
Reference in a new issue