sparc: Add support for over/out disassembler flags

This commit is contained in:
AJR 2021-10-12 23:53:41 -04:00
parent e9db0518e7
commit a15538b4ae

View File

@ -759,7 +759,7 @@ offs_t sparc_disassembler::dasm(std::ostream &stream, offs_t pc, uint32_t op) co
return 4 | SUPPORTED;
case 1:
util::stream_format(stream, "%-*s%%pc%c0x%08x ! 0x%08x", m_op_field_width, "call", (DISP30 < 0) ? '-' : '+', std::abs(DISP30), pc + DISP30);
return 4 | SUPPORTED;
return 4 | STEP_OVER | step_over_extra(1) | SUPPORTED;
case 2:
switch (OP3)
{
@ -1025,8 +1025,8 @@ offs_t sparc_disassembler::dasm(std::ostream &stream, offs_t pc, uint32_t op) co
{
switch (RD)
{
case 0: util::stream_format(stream, "done"); return 4 | SUPPORTED;
case 1: util::stream_format(stream, "retry"); return 4 | SUPPORTED;
case 0: util::stream_format(stream, "done"); return 4 | STEP_OUT | SUPPORTED;
case 1: util::stream_format(stream, "retry"); return 4 | STEP_OUT | SUPPORTED;
}
}
break;
@ -1396,6 +1396,7 @@ offs_t sparc_disassembler::dasm_jmpl(std::ostream &stream, offs_t pc, uint32_t o
if (USEIMM && (RD == 0) && ((RS1 == 15) || (RS1 == 31)) && (SIMM13 == 8))
{
util::stream_format(stream, (RS1 == 31) ? "ret" : "retl");
return 4 | STEP_OUT | step_over_extra(1) | SUPPORTED;
}
else
{
@ -1403,16 +1404,19 @@ offs_t sparc_disassembler::dasm_jmpl(std::ostream &stream, offs_t pc, uint32_t o
dasm_address(stream, op);
if ((RD != 0) && (RD != 15))
util::stream_format(stream, ",%s", REG_NAMES[RD]);
}
if (RD != 0)
return 4 | STEP_OVER | step_over_extra(1) | SUPPORTED;
else
return 4 | SUPPORTED;
}
}
offs_t sparc_disassembler::dasm_return(std::ostream &stream, offs_t pc, uint32_t op) const
{
util::stream_format(stream, "%-*s", m_op_field_width, (m_version >= 9) ? "return" : "rett");
dasm_address(stream, op);
return 4 | SUPPORTED;
return 4 | STEP_OUT | step_over_extra(1) | SUPPORTED;
}
@ -1445,7 +1449,7 @@ offs_t sparc_disassembler::dasm_tcc(std::ostream &stream, offs_t pc, uint32_t op
else if (RS2 == 0) util::stream_format(stream, "%s", REG_NAMES[RS1]);
else util::stream_format(stream, "%s,%s", REG_NAMES[RS1], REG_NAMES[RS2]);
}
return 4 | SUPPORTED;
return 4 | STEP_OVER | SUPPORTED;
}