ISA_MIPS64R2 | INSN_OCTEON, mips_cp0_names_numeric, NULL, 0,
mips_hwr_names_numeric },
+ { "octeon+", 1, bfd_mach_mips_octeonp, CPU_OCTEONP,
+ ISA_MIPS64R2 | INSN_OCTEONP, mips_cp0_names_numeric,
+ NULL, 0, mips_hwr_names_numeric },
+
+ { "octeon2", 1, bfd_mach_mips_octeon2, CPU_OCTEON2,
+ ISA_MIPS64R2 | INSN_OCTEON2, mips_cp0_names_numeric,
+ NULL, 0, mips_hwr_names_numeric },
+
{ "xlr", 1, bfd_mach_mips_xlr, CPU_XLR,
ISA_MIPS64 | INSN_XLR,
mips_cp0_names_xlr,
static int
print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
{
- const fprintf_ftype iprintf = info->fprintf_func;
+ const fprintf_ftype infprintf = info->fprintf_func;
const struct mips_opcode *op, *opend;
unsigned int lsb, msbd, msb;
void *is = info->stream;
status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
if (status != 0)
{
- iprintf (is, "micromips 0x%x", higher);
+ infprintf (is, "micromips 0x%x", higher);
(*info->memory_error_func) (status, memaddr + 2, info);
return -1;
}
status = (*info->read_memory_func) (memaddr + 4, buffer, 2, info);
if (status != 0)
{
- iprintf (is, "micromips 0x%x", higher);
+ infprintf (is, "micromips 0x%x", higher);
(*info->memory_error_func) (status, memaddr + 4, info);
return -1;
}
insn = bfd_getb16 (buffer);
else
insn = bfd_getl16 (buffer);
- iprintf (is, "0x%x%04x (48-bit insn)", higher, insn);
+ infprintf (is, "0x%x%04x (48-bit insn)", higher, insn);
info->insn_type = dis_noninsn;
return 6;
status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
if (status != 0)
{
- iprintf (is, "micromips 0x%x", higher);
+ infprintf (is, "micromips 0x%x", higher);
(*info->memory_error_func) (status, memaddr + 2, info);
return -1;
}
{
const char *s;
- iprintf (is, "%s", op->name);
+ infprintf (is, "%s", op->name);
if (op->args[0] != '\0')
- iprintf (is, "\t");
+ infprintf (is, "\t");
for (s = op->args; *s != '\0'; s++)
{
case ',':
case '(':
case ')':
- iprintf (is, "%c", *s);
+ infprintf (is, "%c", *s);
break;
case '.':
delta = GET_OP (insn, OFFSET10);
if (delta & 0x200)
delta |= ~0x3ff;
- iprintf (is, "%d", delta);
+ infprintf (is, "%d", delta);
break;
case '1':
- iprintf (is, "0x%lx", GET_OP (insn, STYPE));
+ infprintf (is, "0x%lx", GET_OP (insn, STYPE));
break;
case '<':
- iprintf (is, "0x%lx", GET_OP (insn, SHAMT));
+ infprintf (is, "0x%lx", GET_OP (insn, SHAMT));
break;
case '\\':
- iprintf (is, "0x%lx", GET_OP (insn, 3BITPOS));
+ infprintf (is, "0x%lx", GET_OP (insn, 3BITPOS));
break;
case '|':
- iprintf (is, "0x%lx", GET_OP (insn, TRAP));
+ infprintf (is, "0x%lx", GET_OP (insn, TRAP));
break;
case '~':
delta = GET_OP (insn, OFFSET12);
if (delta & 0x800)
delta |= ~0x7ff;
- iprintf (is, "%d", delta);
+ infprintf (is, "%d", delta);
break;
case 'a':
case 'r':
case 's':
case 'v':
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS)]);
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS)]);
break;
case 'c':
- iprintf (is, "0x%lx", GET_OP (insn, CODE));
+ infprintf (is, "0x%lx", GET_OP (insn, CODE));
break;
case 'd':
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RD)]);
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RD)]);
break;
case 'h':
- iprintf (is, "0x%lx", GET_OP (insn, PREFX));
+ infprintf (is, "0x%lx", GET_OP (insn, PREFX));
break;
case 'i':
case 'u':
- iprintf (is, "0x%lx", GET_OP (insn, IMMEDIATE));
+ infprintf (is, "0x%lx", GET_OP (insn, IMMEDIATE));
break;
case 'j': /* Same as i, but sign-extended. */
case 'o':
delta = (GET_OP (insn, DELTA) ^ 0x8000) - 0x8000;
- iprintf (is, "%d", delta);
+ infprintf (is, "%d", delta);
break;
case 'k':
- iprintf (is, "0x%x", GET_OP (insn, CACHE));
+ infprintf (is, "0x%x", GET_OP (insn, CACHE));
break;
case 'n':
if (s_reg_encode != 0)
{
if (s_reg_encode == 1)
- iprintf (is, "%s", mips_gpr_names[16]);
+ infprintf (is, "%s", mips_gpr_names[16]);
else if (s_reg_encode < 9)
- iprintf (is, "%s-%s",
+ infprintf (is, "%s-%s",
mips_gpr_names[16],
mips_gpr_names[15 + s_reg_encode]);
else if (s_reg_encode == 9)
- iprintf (is, "%s-%s,%s",
+ infprintf (is, "%s-%s,%s",
mips_gpr_names[16],
mips_gpr_names[23],
mips_gpr_names[30]);
else
- iprintf (is, "UNKNOWN");
+ infprintf (is, "UNKNOWN");
}
if (immed & 0x10) /* For ra. */
{
if (s_reg_encode == 0)
- iprintf (is, "%s", mips_gpr_names[31]);
+ infprintf (is, "%s", mips_gpr_names[31]);
else
- iprintf (is, ",%s", mips_gpr_names[31]);
+ infprintf (is, ",%s", mips_gpr_names[31]);
}
break;
}
break;
case 'q':
- iprintf (is, "0x%lx", GET_OP (insn, CODE2));
+ infprintf (is, "0x%lx", GET_OP (insn, CODE2));
break;
case 't':
case 'w':
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RT)]);
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RT)]);
break;
case 'y':
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS3)]);
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS3)]);
break;
case 'z':
- iprintf (is, "%s", mips_gpr_names[0]);
+ infprintf (is, "%s", mips_gpr_names[0]);
break;
case 'B':
- iprintf (is, "0x%lx", GET_OP (insn, CODE10));
+ infprintf (is, "0x%lx", GET_OP (insn, CODE10));
break;
case 'C':
- iprintf (is, "0x%lx", GET_OP (insn, COPZ));
+ infprintf (is, "0x%lx", GET_OP (insn, COPZ));
break;
case 'D':
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FD)]);
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FD)]);
break;
case 'E':
'T' format. Therefore, until we gain understanding of
cp2 register names, we can simply print the register
numbers. */
- iprintf (is, "$%ld", GET_OP (insn, RT));
+ infprintf (is, "$%ld", GET_OP (insn, RT));
break;
case 'G':
case 0x000002fc: /* mtc0 */
case 0x580000fc: /* dmfc0 */
case 0x580002fc: /* dmtc0 */
- iprintf (is, "%s", mips_cp0_names[GET_OP (insn, RS)]);
+ infprintf (is, "%s", mips_cp0_names[GET_OP (insn, RS)]);
break;
default:
- iprintf (is, "$%ld", GET_OP (insn, RS));
+ infprintf (is, "$%ld", GET_OP (insn, RS));
break;
}
break;
case 'H':
- iprintf (is, "%ld", GET_OP (insn, SEL));
+ infprintf (is, "%ld", GET_OP (insn, SEL));
break;
case 'K':
- iprintf (is, "%s", mips_hwr_names[GET_OP (insn, RS)]);
+ infprintf (is, "%s", mips_hwr_names[GET_OP (insn, RS)]);
break;
case 'M':
- iprintf (is, "$fcc%ld", GET_OP (insn, CCC));
+ infprintf (is, "$fcc%ld", GET_OP (insn, CCC));
break;
case 'N':
- iprintf (is,
+ infprintf (is,
(op->pinfo & (FP_D | FP_S)) != 0
? "$fcc%ld" : "$cc%ld",
GET_OP (insn, BCC));
break;
case 'R':
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FR)]);
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FR)]);
break;
case 'S':
case 'V':
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FS)]);
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FS)]);
break;
case 'T':
- iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FT)]);
+ infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FT)]);
break;
case '+':
{
case 'A':
lsb = GET_OP (insn, EXTLSB);
- iprintf (is, "0x%x", lsb);
+ infprintf (is, "0x%x", lsb);
break;
case 'B':
msb = GET_OP (insn, INSMSB);
- iprintf (is, "0x%x", msb - lsb + 1);
+ infprintf (is, "0x%x", msb - lsb + 1);
break;
case 'C':
case 'H':
msbd = GET_OP (insn, EXTMSBD);
- iprintf (is, "0x%x", msbd + 1);
+ infprintf (is, "0x%x", msbd + 1);
break;
case 'D':
mips_cp0sel_names_len,
cp0reg, sel);
if (n != NULL)
- iprintf (is, "%s", n->name);
+ infprintf (is, "%s", n->name);
else
- iprintf (is, "$%d,%d", cp0reg, sel);
+ infprintf (is, "$%d,%d", cp0reg, sel);
break;
}
case 'E':
lsb = GET_OP (insn, EXTLSB) + 32;
- iprintf (is, "0x%x", lsb);
+ infprintf (is, "0x%x", lsb);
break;
case 'F':
msb = GET_OP (insn, INSMSB) + 32;
- iprintf (is, "0x%x", msb - lsb + 1);
+ infprintf (is, "0x%x", msb - lsb + 1);
break;
case 'G':
msbd = GET_OP (insn, EXTMSBD) + 32;
- iprintf (is, "0x%x", msbd + 1);
+ infprintf (is, "0x%x", msbd + 1);
break;
default:
/* xgettext:c-format */
- iprintf (is,
+ infprintf (is,
_("# internal disassembler error, "
"unrecognized modifier (+%c)"),
*s);
switch (*s)
{
case 'a': /* global pointer. */
- iprintf (is, "%s", mips_gpr_names[28]);
+ infprintf (is, "%s", mips_gpr_names[28]);
break;
case 'b':
regno = micromips_to_32_reg_b_map[GET_OP (insn, MB)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'c':
regno = micromips_to_32_reg_c_map[GET_OP (insn, MC)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'd':
regno = micromips_to_32_reg_d_map[GET_OP (insn, MD)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'e':
regno = micromips_to_32_reg_e_map[GET_OP (insn, ME)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'f':
/* Save lastregno for "mt" to print out later. */
lastregno = micromips_to_32_reg_f_map[GET_OP (insn, MF)];
- iprintf (is, "%s", mips_gpr_names[lastregno]);
+ infprintf (is, "%s", mips_gpr_names[lastregno]);
break;
case 'g':
regno = micromips_to_32_reg_g_map[GET_OP (insn, MG)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'h':
regno = micromips_to_32_reg_h_map[GET_OP (insn, MH)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'i':
regno = micromips_to_32_reg_i_map[GET_OP (insn, MI)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'j':
- iprintf (is, "%s", mips_gpr_names[GET_OP (insn, MJ)]);
+ infprintf (is, "%s", mips_gpr_names[GET_OP (insn, MJ)]);
break;
case 'l':
regno = micromips_to_32_reg_l_map[GET_OP (insn, ML)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'm':
regno = micromips_to_32_reg_m_map[GET_OP (insn, MM)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'n':
regno = micromips_to_32_reg_n_map[GET_OP (insn, MN)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'p':
/* Save lastregno for "mt" to print out later. */
lastregno = GET_OP (insn, MP);
- iprintf (is, "%s", mips_gpr_names[lastregno]);
+ infprintf (is, "%s", mips_gpr_names[lastregno]);
break;
case 'q':
regno = micromips_to_32_reg_q_map[GET_OP (insn, MQ)];
- iprintf (is, "%s", mips_gpr_names[regno]);
+ infprintf (is, "%s", mips_gpr_names[regno]);
break;
case 'r': /* program counter. */
- iprintf (is, "$pc");
+ infprintf (is, "$pc");
break;
case 's': /* stack pointer. */
lastregno = 29;
- iprintf (is, "%s", mips_gpr_names[29]);
+ infprintf (is, "%s", mips_gpr_names[29]);
break;
case 't':
- iprintf (is, "%s", mips_gpr_names[lastregno]);
+ infprintf (is, "%s", mips_gpr_names[lastregno]);
break;
case 'z': /* $0. */
- iprintf (is, "%s", mips_gpr_names[0]);
+ infprintf (is, "%s", mips_gpr_names[0]);
break;
case 'A':
/* Sign-extend the immediate. */
immed = ((GET_OP (insn, IMMA) ^ 0x40) - 0x40) << 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'B':
immed = micromips_imm_b_map[GET_OP (insn, IMMB)];
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'C':
immed = micromips_imm_c_map[GET_OP (insn, IMMC)];
- iprintf (is, "0x%lx", immed);
+ infprintf (is, "0x%lx", immed);
break;
case 'D':
case 'F':
immed = GET_OP (insn, IMMF);
- iprintf (is, "0x%x", immed);
+ infprintf (is, "0x%x", immed);
break;
case 'G':
immed = (insn >> MICROMIPSOP_SH_IMMG) + 1;
immed = (immed & MICROMIPSOP_MASK_IMMG) - 1;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'H':
immed = GET_OP (insn, IMMH) << 1;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'I':
immed = (insn >> MICROMIPSOP_SH_IMMI) + 1;
immed = (immed & MICROMIPSOP_MASK_IMMI) - 1;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'J':
immed = GET_OP (insn, IMMJ) << 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'L':
immed = GET_OP (insn, IMML);
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'M':
immed = (insn >> MICROMIPSOP_SH_IMMM) - 1;
immed = (immed & MICROMIPSOP_MASK_IMMM) + 1;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'N':
immed = GET_OP (insn, IMMN);
if (immed == 0)
- iprintf (is, "%s,%s",
+ infprintf (is, "%s,%s",
mips_gpr_names[16],
mips_gpr_names[31]);
else
- iprintf (is, "%s-%s,%s",
+ infprintf (is, "%s-%s,%s",
mips_gpr_names[16],
mips_gpr_names[16 + immed],
mips_gpr_names[31]);
case 'O':
immed = GET_OP (insn, IMMO);
- iprintf (is, "0x%x", immed);
+ infprintf (is, "0x%x", immed);
break;
case 'P':
immed = GET_OP (insn, IMMP) << 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'Q':
/* Sign-extend the immediate. */
immed = (GET_OP (insn, IMMQ) ^ 0x400000) - 0x400000;
immed <<= 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'U':
immed = GET_OP (insn, IMMU) << 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'W':
immed = GET_OP (insn, IMMW) << 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'X':
/* Sign-extend the immediate. */
immed = (GET_OP (insn, IMMX) ^ 0x8) - 0x8;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
case 'Y':
if (immed >= -2 && immed <= 1)
immed ^= 0x100;
immed = immed << 2;
- iprintf (is, "%d", immed);
+ infprintf (is, "%d", immed);
break;
default:
/* xgettext:c-format */
- iprintf (is,
+ infprintf (is,
_("# internal disassembler error, "
"unrecognized modifier (m%c)"),
*s);
default:
/* xgettext:c-format */
- iprintf (is,
+ infprintf (is,
_("# internal disassembler error, "
"unrecognized modifier (%c)"),
*s);
}
#undef GET_OP
- iprintf (is, "0x%x", insn);
+ infprintf (is, "0x%x", insn);
info->insn_type = dis_noninsn;
return length;