This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Commit: MSP430: Fix disassembly of extended index addressing
- From: Nick Clifton <nickc at redhat dot com>
- To: binutils at sourceware dot org
- Date: Tue, 03 Jun 2014 09:00:33 +0100
- Subject: Commit: MSP430: Fix disassembly of extended index addressing
- Authentication-results: sourceware.org; auth=none
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)