This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Commit: MSP430: Fix disassembly of extended index addressing


Hi Guys,

  I am applying the patch below to fix a bug in the MSP430
  disassembler.  The problem was that the code to decide when extended
  addressing was being used was checking only the part of the extension
  word that applied to the addressing mode.  This is wrong, because that
  part of the word might be zero, but extended addressing is still being
  used.

Cheers
  Nick

opcodes/ChangeLog

diff --git a/opcodes/msp430-dis.c b/opcodes/msp430-dis.c
index 1284bbe..33a9047 100644
--- a/opcodes/msp430-dis.c
+++ b/opcodes/msp430-dis.c
@@ -427,7 +427,7 @@ msp430_doubleoperand (disassemble_info *info,
 	      sprintf (op1, "0x%04x", PS (dst));
 	      sprintf (comm1, "PC rel. 0x%04x",
 		       PS ((short) addr + 2 + dst));
-	      if (extended_dst)
+	      if (extension_word)
 		{
 		  dst |= extended_dst << 16;
 		  if (dst & 0x80000)
@@ -448,7 +448,7 @@ msp430_doubleoperand (disassemble_info *info,
 	      cmd_len += 4;
 	      *cycles = 6;
 	      sprintf (op1, "&0x%04x", PS (dst));
-	      if (extended_dst)
+	      if (extension_word)
 		{
 		  dst |= extended_dst << 16;
 		  sprintf (op1, "&0x%05x", dst & 0xfffff);
@@ -458,7 +458,7 @@ msp430_doubleoperand (disassemble_info *info,
 	    {
 	      /* Indexed.  */
 	      dst = msp430dis_opcode (addr + 2, info);
-	      if (extended_dst)
+	      if (extension_word)
 		{
 		  dst |= extended_dst << 16;
 		  if (dst & 0x80000)
@@ -519,7 +519,7 @@ msp430_doubleoperand (disassemble_info *info,
 	  sprintf (op1, "#%d", dst);
 	  if (dst > 9 || dst < 0)
 	    sprintf (comm1, "#0x%04x", PS (dst));
-	  if (extended_src)
+	  if (extension_word)
 	    {
 	      dst |= extended_src << 16;
 	      if (dst & 0x80000)
@@ -543,7 +543,7 @@ msp430_doubleoperand (disassemble_info *info,
 	  sprintf (op1, "0x%04x", PS (dst));
 	  sprintf (comm1, "PC rel. 0x%04x",
 		   PS ((short) addr + 2 + dst));
-	  if (extended_src)
+	  if (extension_word)
 	    {
 	      dst |= extended_src << 16;
 	      if (dst & 0x80000)
@@ -561,7 +561,7 @@ msp430_doubleoperand (disassemble_info *info,
 	  cmd_len += 2;
 	  sprintf (op1, "&0x%04x", PS (dst));
 	  sprintf (comm1, "0x%04x", PS (dst));
-	  if (extended_src)
+	  if (extension_word)
 	    {
 	      dst |= extended_src << 16;
 	      sprintf (op1, "&0x%05x", dst & 0xfffff);
@@ -580,7 +580,7 @@ msp430_doubleoperand (disassemble_info *info,
 	  /* Indexed.  */
 	  dst = msp430dis_opcode (addr + 2, info);
 	  cmd_len += 2;
-	  if (extended_src)
+	  if (extension_word)
 	    {
 	      dst |= extended_src << 16;
 	      if (dst & 0x80000)
@@ -625,7 +625,7 @@ msp430_doubleoperand (disassemble_info *info,
 	  sprintf (op2, "0x%04x", PS (dst));
 	  sprintf (comm2, "PC rel. 0x%04x",
 		   PS ((short) addr + cmd_len + dst));
-	  if (extended_dst)
+	  if (extension_word)
 	    {
 	      dst |= extended_dst << 16;
 	      if (dst & 0x80000)
@@ -642,7 +642,7 @@ msp430_doubleoperand (disassemble_info *info,
 	  dst = msp430dis_opcode (addr + cmd_len, info);
 	  cmd_len += 2;
 	  sprintf (op2, "&0x%04x", PS (dst));
-	  if (extended_dst)
+	  if (extension_word)
 	    {
 	      dst |= extended_dst << 16;
 	      sprintf (op2, "&0x%05x", dst & 0xfffff);
@@ -656,7 +656,7 @@ msp430_doubleoperand (disassemble_info *info,
 	    dst |= -1 << 16;
 	  if (dst > 9 || dst < 0)
 	    sprintf (comm2, "0x%04x", PS (dst));
-	  if (extended_dst)
+	  if (extension_word)
 	    {
 	      dst |= extended_dst << 16;
 	      if (dst & 0x80000)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]