/* mmix-dis.c -- Disassemble MMIX instructions.
- Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
Written by Hans-Peter Nilsson (hp@bitrange.com)
-This file is part of GDB and the GNU binutils.
+ This file is part of the GNU opcodes library.
-GDB and the GNU binutils are free software; you can redistribute
-them and/or modify them under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version 2,
-or (at your option) any later version.
+ This library is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
-GDB and the GNU binutils are distributed in the hope that they
-will be useful, but WITHOUT ANY WARRANTY; without even the implied
-warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
-the GNU General Public License for more details.
+ It is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
-You should have received a copy of the GNU General Public License
-along with this file; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU General Public License
+ along with this file; see the file COPYING. If not, write to the Free
+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
#include <stdio.h>
#include <string.h>
} \
while (0)
-#define FATAL_DEBUG \
- do \
- { \
- fprintf (stderr, \
- _("Internal: Non-debugged code (test-case missing): %s:%d"), \
- __FILE__, __LINE__); \
- abort (); \
- } \
+#define FATAL_DEBUG \
+ do \
+ { \
+ fprintf (stderr, \
+ _("Internal: Non-debugged code (test-case missing): %s:%d"),\
+ __FILE__, __LINE__); \
+ abort (); \
+ } \
while (0)
#define ROUND_MODE(n) \
char basic_reg_name[256][sizeof ("$255")];
};
-static bfd_boolean initialize_mmix_dis_info
- PARAMS ((struct disassemble_info *));
-static const struct mmix_opcode *get_opcode
- PARAMS ((unsigned long));
-
-
/* Initialize a target-specific array in INFO. */
static bfd_boolean
-initialize_mmix_dis_info (info)
- struct disassemble_info *info;
+initialize_mmix_dis_info (struct disassemble_info *info)
{
struct mmix_dis_info *minfop = malloc (sizeof (struct mmix_dis_info));
- int i;
+ long i;
if (minfop == NULL)
return FALSE;
long symsize = bfd_get_symtab_upper_bound (abfd);
asymbol **syms = malloc (symsize);
long nsyms;
- long i;
if (syms == NULL)
- { FATAL_DEBUG;
+ {
+ FATAL_DEBUG;
free (minfop);
return FALSE;
}
for (i = 0; i < 256; i++)
if (minfop->reg_name[i] == NULL)
{
- sprintf (minfop->basic_reg_name[i], "$%d", i);
+ sprintf (minfop->basic_reg_name[i], "$%ld", i);
minfop->reg_name[i] = minfop->basic_reg_name[i];
}
for (i = 0; mmix_spec_regs[i].name != NULL; i++)
minfop->spec_reg_name[mmix_spec_regs[i].number] = mmix_spec_regs[i].name;
- info->private_data = (PTR) minfop;
+ info->private_data = (void *) minfop;
return TRUE;
}
"further entry" will just show that there was no other match. */
static const struct mmix_opcode *
-get_opcode (insn)
- unsigned long insn;
+get_opcode (unsigned long insn)
{
static const struct mmix_opcode **opcodes = NULL;
const struct mmix_opcode *opcodep = mmix_opcodes;
unsigned int opcode_part = (insn >> 24) & 255;
+
if (opcodes == NULL)
opcodes = xcalloc (256, sizeof (struct mmix_opcode *));
case mmix_operands_roundregs:
{
int midbyte = (insn >> 8) & 255;
+
if (midbyte <= 4)
return opcodep;
}
/* The main disassembly function. */
int
-print_insn_mmix (memaddr, info)
- bfd_vma memaddr;
- struct disassemble_info *info;
+print_insn_mmix (bfd_vma memaddr, struct disassemble_info *info)
{
unsigned char buffer[4];
unsigned long insn;