static int is_newabi
PARAMS ((Elf_Internal_Ehdr *));
static void print_mips16_insn_arg
- PARAMS ((int, const struct mips_opcode *, int, boolean, int, bfd_vma,
+ PARAMS ((int, const struct mips_opcode *, int, bfd_boolean, int, bfd_vma,
struct disassemble_info *));
\f
/* FIXME: These should be shared with gdb somehow. */
case ',':
case '(':
case ')':
+ case '[':
+ case ']':
(*info->fprintf_func) (info->stream, "%c", *d);
break;
(l >> OP_SH_PERFREG) & OP_MASK_PERFREG);
break;
+ case 'e':
+ (*info->fprintf_func) (info->stream, "%d",
+ (l >> OP_SH_VECBYTE) & OP_MASK_VECBYTE);
+ break;
+
+ case '%':
+ (*info->fprintf_func) (info->stream, "%d",
+ (l >> OP_SH_VECALIGN) & OP_MASK_VECALIGN);
+ break;
+
case 'H':
(*info->fprintf_func) (info->stream, "%d",
(l >> OP_SH_SEL) & OP_MASK_SEL);
if ((vsel & 1) == 0)
break;
(*info->fprintf_func) (info->stream, "$v%d[%d]",
- (l >> OP_SH_FT) & OP_MASK_FT,
+ (l >> OP_SH_FT) & OP_MASK_FT,
vsel >> 1);
}
else if ((vsel & 0x08) == 0)
*cputype = CPU_R4111;
*isa = ISA_MIPS3;
break;
+ case bfd_mach_mips4120:
+ *cputype = CPU_VR4120;
+ *isa = ISA_MIPS3;
+ break;
case bfd_mach_mips4300:
*cputype = CPU_R4300;
*isa = ISA_MIPS3;
*cputype = CPU_R5000;
*isa = ISA_MIPS4;
break;
+ case bfd_mach_mips5400:
+ *cputype = CPU_VR5400;
+ *isa = ISA_MIPS4;
+ break;
+ case bfd_mach_mips5500:
+ *cputype = CPU_VR5500;
+ *isa = ISA_MIPS4;
+ break;
case bfd_mach_mips6000:
*cputype = CPU_R6000;
*isa = ISA_MIPS2;
{
register const struct mips_opcode *op;
int target_processor, mips_isa;
- static boolean init = 0;
+ static bfd_boolean init = 0;
static const struct mips_opcode *mips_hash[OP_MASK_OP + 1];
/* Build a hash table to shorten the search time. */
{
register const char *d;
- if (! OPCODE_IS_MEMBER (op, mips_isa, target_processor))
+ /* We always allow to disassemble the jalx instruction. */
+ if (! OPCODE_IS_MEMBER (op, mips_isa, target_processor)
+ && strcmp (op->name, "jalx"))
continue;
/* Figure out instruction type and branch delay information. */
#endif
#if SYMTAB_AVAILABLE
- if (info->mach == 16
+ if (info->mach == bfd_mach_mips16
|| (info->flavour == bfd_target_elf_flavour
&& info->symbols != NULL
&& ((*(elf_symbol_type **) info->symbols)->internal_elf_sym.st_other
bfd_byte buffer[2];
int length;
int insn;
- boolean use_extend;
+ bfd_boolean use_extend;
int extend = 0;
const struct mips_opcode *op, *opend;
insn = bfd_getl16 (buffer);
/* Handle the extend opcode specially. */
- use_extend = false;
+ use_extend = FALSE;
if ((insn & 0xf800) == 0xf000)
{
- use_extend = true;
+ use_extend = TRUE;
extend = insn & 0x7ff;
memaddr += 2;
return length - 2;
}
- use_extend = false;
+ use_extend = FALSE;
memaddr += 2;
info);
if (status == 0)
{
- use_extend = true;
+ use_extend = TRUE;
if (info->endian == BFD_ENDIAN_BIG)
extend = bfd_getb16 (buffer);
else
char type;
const struct mips_opcode *op;
int l;
- boolean use_extend;
+ bfd_boolean use_extend;
int extend;
bfd_vma memaddr;
struct disassemble_info *info;