X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fmcore-dis.c;h=bbf0f977209b8605a5fb2d9a79b483f3cd06823c;hb=060d22b0d0cbc7786f83c236ed9812343530dc80;hp=36612a2e6f77db2ad8fe9f3b9d1b993c077b15a4;hpb=dc9e099fc0eced486ae2b49455c9da113c11f4ff;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/mcore-dis.c b/opcodes/mcore-dis.c index 36612a2e6f..bbf0f97720 100644 --- a/opcodes/mcore-dis.c +++ b/opcodes/mcore-dis.c @@ -1,5 +1,5 @@ -/* Disassemble Motorolla M*Core instructions. - Copyright (C) 1993, 1999 Free Software Foundation, Inc. +/* Disassemble Motorola M*Core instructions. + Copyright 1993, 1999, 2000 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -13,8 +13,9 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include "sysdep.h" #include #define STATIC_TABLE #define DEFINE_TABLE @@ -28,7 +29,7 @@ static const unsigned short imsk[] = /* O0 */ 0xFFFF, /* OT */ 0xFFFC, /* O1 */ 0xFFF0, - /* OC */ 0xFFE0, + /* OC */ 0xFE00, /* O2 */ 0xFF00, /* X1 */ 0xFFF0, /* OI */ 0xFE00, @@ -57,9 +58,8 @@ static const unsigned short imsk[] = /* OMc */ 0xFF00, /* SIa */ 0xFE00, -/* start-sanitize-m340 */ - /* MULSH */ 0xFF00, -/* end-sanitize-m340 */ + /* MULSH */ 0xFF00, + /* OPSR */ 0xFFF8, /* psrset/psrclr */ /* JC */ 0, /* JC,JU,JL don't appear in object */ /* JU */ 0, @@ -109,16 +109,12 @@ print_insn_mcore (memaddr, info) return -1; } -/* start-sanitize-m340 */ if (info->endian == BFD_ENDIAN_BIG) -/* end-sanitize-m340 */ inst = (ibytes[0] << 8) | ibytes[1]; -/* start-sanitize-m340 */ else if (info->endian == BFD_ENDIAN_LITTLE) inst = (ibytes[1] << 8) | ibytes[0]; else abort (); -/* end-sanitize-m340 */ /* Just a linear search of the table. */ for (op = mcore_table; op->name != 0; op ++) @@ -142,9 +138,7 @@ print_insn_mcore (memaddr, info) case JSR: fprintf (stream, "\t%s", name); break; case OC: fprintf (stream, "\t%s, %s", name, crname[(inst >> 4) & 0x1F]); break; case O1R1: fprintf (stream, "\t%s, r1", name); break; -/* start-sanitize-m340 */ case MULSH: -/* end-sanitize-m340 */ case O2: fprintf (stream, "\t%s, %s", name, grname[(inst >> 4) & 0xF]); break; case X1: fprintf (stream, "\tr1, %s", name); break; case OI: fprintf (stream, "\t%s, %d", name, ((inst >> 4) & 0x1F) + 1); break; @@ -175,7 +169,7 @@ print_insn_mcore (memaddr, info) if (strcmp (op->name, "bsr") == 0) { - /* for bsr, we'll try to get a symbol for the target */ + /* For bsr, we'll try to get a symbol for the target. */ val = memaddr + 2 + (val << 1); if (info->print_address_func && val != 0) @@ -209,12 +203,10 @@ print_insn_mcore (memaddr, info) break; } -/* start-sanitize-m340 */ if (info->endian == BFD_ENDIAN_LITTLE) val = (ibytes[3] << 24) | (ibytes[2] << 16) | (ibytes[1] << 8) | (ibytes[0]); else -/* end-sanitize-m340 */ val = (ibytes[0] << 24) | (ibytes[1] << 16) | (ibytes[2] << 8) | (ibytes[3]); @@ -240,12 +232,10 @@ print_insn_mcore (memaddr, info) break; } -/* start-sanitize-m340 */ if (info->endian == BFD_ENDIAN_LITTLE) val = (ibytes[3] << 24) | (ibytes[2] << 16) | (ibytes[1] << 8) | (ibytes[0]); else -/* end-sanitize-m340 */ val = (ibytes[0] << 24) | (ibytes[1] << 16) | (ibytes[2] << 8) | (ibytes[3]); @@ -265,13 +255,25 @@ print_insn_mcore (memaddr, info) } break; + case OPSR: + { + static char * fields[] = + { + "af", "ie", "fe", "fe,ie", + "ee", "ee,ie", "ee,fe", "ee,fe,ie" + }; + + fprintf (stream, "\t%s", fields[inst & 0x7]); + } + break; + default: - /* if the disassembler lags the instruction set */ + /* If the disassembler lags the instruction set. */ fprintf (stream, "\tundecoded operands, inst is 0x%04x", inst); break; } } - /* Say how many bytes we consumed? */ + /* Say how many bytes we consumed. */ return 2; }