/* Disassemble MSP430 instructions.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
+ Copyright (C) 2002-2015 Free Software Foundation, Inc.
Contributed by Dmitry Diky <diwil@mail.ru>
-
+
This file is part of the GNU opcodes library.
This library is free software; you can redistribute it and/or modify
if (opcode->fmt == 0)
{
- if ((insn & 0x0f00) != 3 || (insn & 0x0f00) != 2)
+ if ((insn & 0x0f00) != 0x0300 || (insn & 0x0f00) != 0x0200)
return 0;
strcpy (comm, "emulated...");
Rm Register,
x(Rm) Indexed,
0xXXXX Relative,
- &0xXXXX Absolute
+ &0xXXXX Absolute
emulated_ins dst
basic_ins dst, dst. */
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)
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);
{
/* Indexed. */
dst = msp430dis_opcode (addr + 2, info);
- if (extended_dst)
+ if (extension_word)
{
dst |= extended_dst << 16;
if (dst & 0x80000)
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)
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)
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);
/* Indexed. */
dst = msp430dis_opcode (addr + 2, info);
cmd_len += 2;
- if (extended_src)
+ if (extension_word)
{
dst |= extended_src << 16;
if (dst & 0x80000)
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)
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);
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)
break;
default:
- strcpy (comm1, _("unercognised CALLA addressing mode"));
+ strcpy (comm1, _("unrecognised CALLA addressing mode"));
return -1;
}
sprintf (comm1, "20-bit words");
bc =".a";
}
-
+
cycles = 2; /*FIXME*/
cmd_len = 2;
break;
if (strcmp (opcode->name, "bra") != 0)
sprintf (op2, "r%d", reg);
break;
-
+
case 1: /* MOVA @Rsrc+, Rdst */
cmd_len = 2;
if (strcmp (opcode->name, "reta") != 0)
sprintf (op2, "r%d", reg);
}
break;
-
+
case 2: /* MOVA &abs20, Rdst */
cmd_len = 4;
n <<= 16;
if (strcmp (opcode->name, "bra") != 0)
sprintf (op2, "r%d", reg);
break;
-
+
case 3: /* MOVA x(Rsrc), Rdst */
cmd_len = 4;
if (strcmp (opcode->name, "bra") != 0)
sprintf (comm2, "0x%05x", n);
}
break;
-
+
case 8: /* MOVA #imm20, Rdst */
cmd_len = 4;
n <<= 16;
if (strcmp (opcode->name, "bra") != 0)
sprintf (op2, "r%d", reg);
break;
-
+
case 12: /* MOVA Rsrc, Rdst */
cmd_len = 2;
sprintf (op1, "r%d", n);
sprintf (comm2, _("Reserved use of A/L and B/W bits detected"));
}
}
-
+
break;
case 1:
cmd_len +=