[OP_SWR] = "swr ",
[OP_LWC2] = "lwc2 ",
[OP_SWC2] = "swc2 ",
+ [OP_META_MULT2] = "mult2 ",
+ [OP_META_MULTU2] = "multu2 ",
+ [OP_META_LWU] = "lwu ",
+ [OP_META_SWU] = "swu ",
};
static const char * const special_opcodes[] = {
[OP_CP2_NCCT] = "ncct ",
};
+static const char * const meta_opcodes[] = {
+ [OP_META_MOV] = "move ",
+ [OP_META_EXTC] = "extc ",
+ [OP_META_EXTS] = "exts ",
+ [OP_META_COM] = "com ",
+};
+
static const char * const mult2_opcodes[] = {
"mult2 ", "multu2 ",
};
"self-modifying code",
"no invalidation",
"no mask",
+ "load delay",
};
static const char * const opcode_io_modes[] = {
"local branch",
};
+static const char * const opcode_movi_flags[] = {
+ "movi",
+};
+
static const char * const opcode_multdiv_flags[] = {
"No LO",
"No HI",
lightrec_reg_name(c.r.rs),
lightrec_reg_name(c.r.rt));
default:
- return snprintf(buf, len, "unknown (0x%08x)", c.opcode);
+ return snprintf(buf, len, "unknown ("X32_FMT")", c.opcode);
}
}
case OP_CP0_RFE:
return snprintf(buf, len, "rfe ");
default:
- return snprintf(buf, len, "unknown (0x%08x)", c.opcode);
+ return snprintf(buf, len, "unknown ("X32_FMT")", c.opcode);
}
}
}
case OP_REGIMM:
*flags_ptr = opcode_branch_flags;
*nb_flags = ARRAY_SIZE(opcode_branch_flags);
- return snprintf(buf, len, "%s%s,0x%x",
+ return snprintf(buf, len, "%s%s,0x%"PRIx32,
regimm_opcodes[c.i.rt],
lightrec_reg_name(c.i.rs),
pc + 4 + ((s16)c.i.imm << 2));
case OP_JAL:
*flags_ptr = opcode_branch_flags;
*nb_flags = ARRAY_SIZE(opcode_branch_flags);
- return snprintf(buf, len, "%s0x%x",
+ return snprintf(buf, len, "%s0x%"PRIx32,
std_opcodes[c.i.op],
(pc & 0xf0000000) | (c.j.imm << 2));
case OP_BEQ:
if (c.i.rs == c.i.rt) {
*flags_ptr = opcode_branch_flags;
*nb_flags = ARRAY_SIZE(opcode_branch_flags);
- return snprintf(buf, len, "b 0x%x",
+ return snprintf(buf, len, "b 0x%"PRIx32,
pc + 4 + ((s16)c.i.imm << 2));
}
fallthrough;
case OP_BGTZ:
*flags_ptr = opcode_branch_flags;
*nb_flags = ARRAY_SIZE(opcode_branch_flags);
- return snprintf(buf, len, "%s%s,%s,0x%x",
+ return snprintf(buf, len, "%s%s,%s,0x%"PRIx32,
std_opcodes[c.i.op],
lightrec_reg_name(c.i.rs),
lightrec_reg_name(c.i.rt),
pc + 4 + ((s16)c.i.imm << 2));
case OP_ADDI:
case OP_ADDIU:
+ case OP_ORI:
+ *flags_ptr = opcode_movi_flags;
+ *nb_flags = ARRAY_SIZE(opcode_movi_flags);
+ fallthrough;
case OP_SLTI:
case OP_SLTIU:
case OP_ANDI:
- case OP_ORI:
case OP_XORI:
return snprintf(buf, len, "%s%s,%s,0x%04hx",
std_opcodes[c.i.op],
(u16)c.i.imm);
case OP_LUI:
+ *flags_ptr = opcode_movi_flags;
+ *nb_flags = ARRAY_SIZE(opcode_movi_flags);
return snprintf(buf, len, "%s%s,0x%04hx",
std_opcodes[c.i.op],
lightrec_reg_name(c.i.rt),
case OP_SWL:
case OP_SW:
case OP_SWR:
+ case OP_META_LWU:
+ case OP_META_SWU:
*flags_ptr = opcode_io_flags;
*nb_flags = ARRAY_SIZE(opcode_io_flags);
*is_io = true;
lightrec_reg_name(c.i.rt),
(s16)c.i.imm,
lightrec_reg_name(c.i.rs));
- case OP_META_MOV:
- return snprintf(buf, len, "move %s,%s",
- lightrec_reg_name(c.r.rd),
- lightrec_reg_name(c.r.rs));
- case OP_META_EXTC:
- return snprintf(buf, len, "extc %s,%s",
- lightrec_reg_name(c.i.rt),
- lightrec_reg_name(c.i.rs));
- case OP_META_EXTS:
- return snprintf(buf, len, "exts %s,%s",
- lightrec_reg_name(c.i.rt),
- lightrec_reg_name(c.i.rs));
+ case OP_META:
+ return snprintf(buf, len, "%s%s,%s",
+ meta_opcodes[c.m.op],
+ lightrec_reg_name(c.m.rd),
+ lightrec_reg_name(c.m.rs));
case OP_META_MULT2:
case OP_META_MULTU2:
*flags_ptr = opcode_multdiv_flags;
lightrec_reg_name(get_mult_div_lo(c)),
lightrec_reg_name(c.r.rs), c.r.op);
default:
- return snprintf(buf, len, "unknown (0x%08x)", c.opcode);
+ return snprintf(buf, len, "unknown ("X32_FMT")", c.opcode);
}
}
print_flags(buf3, sizeof(buf3), op, flags_ptr, nb_flags, is_io);
- printf("0x%08x (0x%x)\t%s%*c%s%*c%s\n", pc, i << 2,
+ printf(X32_FMT" (0x%x)\t%s%*c%s%*c%s\n", pc, i << 2,
buf, 30 - (int)count, ' ', buf2, 30 - (int)count2, ' ', buf3);
}
}