summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2004-10-01 11:19:38 +0000
committerNick Clifton <nickc@redhat.com>2004-10-01 11:19:38 +0000
commit22d6b250c614e2012a257f128bb830da3943078d (patch)
tree5d5f17fde2aa3a0e1e5f47009b08f613d20752bb
parent4fb854aeca57c1f8ca453c195e8799dfb6bf1bee (diff)
downloadbinutils-redhat-22d6b250c614e2012a257f128bb830da3943078d.tar.gz
Fixes for the encoding and decoding of the PDP11's SOB instruction
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-pdp11.c3
-rw-r--r--gas/testsuite/ChangeLog4
-rw-r--r--gas/testsuite/gas/pdp11/opcode.d2
-rw-r--r--opcodes/ChangeLog5
-rw-r--r--opcodes/pdp11-dis.c3
6 files changed, 19 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 3efc2909ef..c328820bdc 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-01 Bill Farmer <Bill@the-farmers.freeserve.co.uk>
+
+ * config/tc-pdp11.c (md_apply_fix3): Change to sign of the SOB
+ instruction's offset.
+
2004-10-01 Adam Nemet <anemet@lnxw.com>
* (TARGET_FORMAT): Remove LynxOS COFF definition.
diff --git a/gas/config/tc-pdp11.c b/gas/config/tc-pdp11.c
index f34adf69d6..4993fdd124 100644
--- a/gas/config/tc-pdp11.c
+++ b/gas/config/tc-pdp11.c
@@ -1,5 +1,5 @@
/* tc-pdp11.c - pdp11-specific -
- Copyright 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -199,6 +199,7 @@ md_apply_fix3 (fixP, valP, seg)
case BFD_RELOC_PDP11_DISP_6_PCREL:
mask = 0x003f;
shift = 1;
+ val = -val;
break;
default:
BAD_CASE (fixP->fx_r_type);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index e7cd66c2c5..623e629f82 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2004-10-01 Bill Farmer <Bill@the-farmers.freeserve.co.uk>
+
+ * gas/pdp11/opcode.d: Fix sob opcode value.
+
2004-09-30 Paul Brook <paul@codesourcery.com>
* gas/arm/arch6zk.d: New file.
diff --git a/gas/testsuite/gas/pdp11/opcode.d b/gas/testsuite/gas/pdp11/opcode.d
index 2e6a981fc7..4b81857dc2 100644
--- a/gas/testsuite/gas/pdp11/opcode.d
+++ b/gas/testsuite/gas/pdp11/opcode.d
@@ -134,7 +134,7 @@ Disassembly of section .text:
108: 7c7f [ ]*cvtlpi
10a: 7d80 [ ]*med
10c: 7dea [ ]*xfc 52
- 10e: 7e3e [ ]*sob r0, 10c <start2\+0x106>
+ 10e: 7e02 [ ]*sob r0, 10c <start2\+0x106>
110: 80fd [ ]*bpl 10c <start2\+0x106>
112: 81fc [ ]*bmi 10c <start2\+0x106>
114: 82fb [ ]*bhi 10c <start2\+0x106>
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index cf49121abe..2dde35383c 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,8 @@
+2004-10-01 Bill Farmer <Bill@the-farmers.freeserve.co.uk>
+
+ * pdp11-dis.c (print_insn_pdp11): Subtract the SOB's displacement
+ rather than add it.
+
2004-09-30 Paul Brook <paul@codesourcery.com>
* arm-dis.c (print_insn_arm): Handle 'e' for SMI instruction.
diff --git a/opcodes/pdp11-dis.c b/opcodes/pdp11-dis.c
index 4f5bf84aea..1756e53b7d 100644
--- a/opcodes/pdp11-dis.c
+++ b/opcodes/pdp11-dis.c
@@ -342,7 +342,8 @@ print_insn_pdp11 (memaddr, info)
case PDP11_OPCODE_REG_DISPL:
{
int displ = (opcode & 0x3f) << 10;
- bfd_vma address = memaddr + (sign_extend (displ) >> 9);
+ bfd_vma address = memaddr - (displ >> 9);
+
FPRINTF (F, OP.name);
FPRINTF (F, AFTER_INSTRUCTION);
print_reg (src, info);