mirror of https://github.com/xemu-project/xemu.git
target/mips: Clean up handling of CP0 register 23
Clean up handling of CP0 register 23. Reviewed-by: Aleksandar Rikalo <arikalo@wavecomp.com> Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com> Message-Id: <1567009614-12438-23-git-send-email-aleksandar.markovic@rt-rk.com>
This commit is contained in:
parent
14f92b0b9c
commit
4cbf4b6d00
|
@ -405,6 +405,12 @@ typedef struct mips_def_t mips_def_t;
|
|||
/* CP0 Register 22 */
|
||||
/* CP0 Register 23 */
|
||||
#define CP0_REG23__DEBUG 0
|
||||
#define CP0_REG23__TRACECONTROL 1
|
||||
#define CP0_REG23__TRACECONTROL2 2
|
||||
#define CP0_REG23__USERTRACEDATA1 3
|
||||
#define CP0_REG23__TRACEIBPC 4
|
||||
#define CP0_REG23__TRACEDBPC 5
|
||||
#define CP0_REG23__DEBUG2 6
|
||||
/* CP0 Register 24 */
|
||||
#define CP0_REG24__DEPC 0
|
||||
/* CP0 Register 25 */
|
||||
|
|
|
@ -7371,25 +7371,34 @@ static void gen_mfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
break;
|
||||
case CP0_REGISTER_23:
|
||||
switch (sel) {
|
||||
case 0:
|
||||
case CP0_REG23__DEBUG:
|
||||
gen_helper_mfc0_debug(arg, cpu_env); /* EJTAG support */
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_mfc0_tracecontrol(arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_tracecontrol(arg); */
|
||||
register_name = "TraceControl";
|
||||
goto cp0_unimplemented;
|
||||
case 2:
|
||||
// gen_helper_mfc0_tracecontrol2(arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL2:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_tracecontrol2(arg); */
|
||||
register_name = "TraceControl2";
|
||||
goto cp0_unimplemented;
|
||||
case 3:
|
||||
// gen_helper_mfc0_usertracedata(arg); /* PDtrace support */
|
||||
register_name = "UserTraceData";
|
||||
case CP0_REG23__USERTRACEDATA1:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_usertracedata1(arg);*/
|
||||
register_name = "UserTraceData1";
|
||||
goto cp0_unimplemented;
|
||||
case 4:
|
||||
// gen_helper_mfc0_tracebpc(arg); /* PDtrace support */
|
||||
register_name = "TraceBPC";
|
||||
case CP0_REG23__TRACEIBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_traceibpc(arg); */
|
||||
register_name = "TraceIBPC";
|
||||
goto cp0_unimplemented;
|
||||
case CP0_REG23__TRACEDBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_tracedbpc(arg); */
|
||||
register_name = "TraceDBPC";
|
||||
goto cp0_unimplemented;
|
||||
default:
|
||||
goto cp0_unimplemented;
|
||||
|
@ -8105,38 +8114,49 @@ static void gen_mtc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
break;
|
||||
case CP0_REGISTER_23:
|
||||
switch (sel) {
|
||||
case 0:
|
||||
case CP0_REG23__DEBUG:
|
||||
gen_helper_mtc0_debug(cpu_env, arg); /* EJTAG support */
|
||||
/* DISAS_STOP isn't good enough here, hflags may have changed. */
|
||||
gen_save_pc(ctx->base.pc_next + 4);
|
||||
ctx->base.is_jmp = DISAS_EXIT;
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_mtc0_tracecontrol(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_tracecontrol(cpu_env, arg); */
|
||||
register_name = "TraceControl";
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
goto cp0_unimplemented;
|
||||
case 2:
|
||||
// gen_helper_mtc0_tracecontrol2(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL2:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_tracecontrol2(cpu_env, arg); */
|
||||
register_name = "TraceControl2";
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
goto cp0_unimplemented;
|
||||
case 3:
|
||||
case CP0_REG23__USERTRACEDATA1:
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
// gen_helper_mtc0_usertracedata(cpu_env, arg); /* PDtrace support */
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_usertracedata1(cpu_env, arg);*/
|
||||
register_name = "UserTraceData";
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
goto cp0_unimplemented;
|
||||
case 4:
|
||||
// gen_helper_mtc0_tracebpc(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACEIBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_traceibpc(cpu_env, arg); */
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "TraceBPC";
|
||||
register_name = "TraceIBPC";
|
||||
goto cp0_unimplemented;
|
||||
case CP0_REG23__TRACEDBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_tracedbpc(cpu_env, arg); */
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "TraceDBPC";
|
||||
goto cp0_unimplemented;
|
||||
default:
|
||||
goto cp0_unimplemented;
|
||||
|
@ -8840,25 +8860,34 @@ static void gen_dmfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
break;
|
||||
case CP0_REGISTER_23:
|
||||
switch (sel) {
|
||||
case 0:
|
||||
case CP0_REG23__DEBUG:
|
||||
gen_helper_mfc0_debug(arg, cpu_env); /* EJTAG support */
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_dmfc0_tracecontrol(arg, cpu_env); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_dmfc0_tracecontrol(arg, cpu_env); */
|
||||
register_name = "TraceControl";
|
||||
goto cp0_unimplemented;
|
||||
case 2:
|
||||
// gen_helper_dmfc0_tracecontrol2(arg, cpu_env); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL2:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_dmfc0_tracecontrol2(arg, cpu_env); */
|
||||
register_name = "TraceControl2";
|
||||
goto cp0_unimplemented;
|
||||
case 3:
|
||||
// gen_helper_dmfc0_usertracedata(arg, cpu_env); /* PDtrace support */
|
||||
register_name = "UserTraceData";
|
||||
case CP0_REG23__USERTRACEDATA1:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_dmfc0_usertracedata1(arg, cpu_env);*/
|
||||
register_name = "UserTraceData1";
|
||||
goto cp0_unimplemented;
|
||||
case 4:
|
||||
// gen_helper_dmfc0_tracebpc(arg, cpu_env); /* PDtrace support */
|
||||
register_name = "TraceBPC";
|
||||
case CP0_REG23__TRACEIBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_dmfc0_traceibpc(arg, cpu_env); */
|
||||
register_name = "TraceIBPC";
|
||||
goto cp0_unimplemented;
|
||||
case CP0_REG23__TRACEDBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_dmfc0_tracedbpc(arg, cpu_env); */
|
||||
register_name = "TraceDBPC";
|
||||
goto cp0_unimplemented;
|
||||
default:
|
||||
goto cp0_unimplemented;
|
||||
|
@ -9557,36 +9586,47 @@ static void gen_dmtc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
break;
|
||||
case CP0_REGISTER_23:
|
||||
switch (sel) {
|
||||
case 0:
|
||||
case CP0_REG23__DEBUG:
|
||||
gen_helper_mtc0_debug(cpu_env, arg); /* EJTAG support */
|
||||
/* DISAS_STOP isn't good enough here, hflags may have changed. */
|
||||
gen_save_pc(ctx->base.pc_next + 4);
|
||||
ctx->base.is_jmp = DISAS_EXIT;
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_mtc0_tracecontrol(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_tracecontrol(cpu_env, arg); */
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "TraceControl";
|
||||
goto cp0_unimplemented;
|
||||
case 2:
|
||||
// gen_helper_mtc0_tracecontrol2(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL2:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_tracecontrol2(cpu_env, arg); */
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "TraceControl2";
|
||||
goto cp0_unimplemented;
|
||||
case 3:
|
||||
// gen_helper_mtc0_usertracedata(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__USERTRACEDATA1:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_usertracedata1(cpu_env, arg);*/
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "UserTraceData";
|
||||
register_name = "UserTraceData1";
|
||||
goto cp0_unimplemented;
|
||||
case 4:
|
||||
// gen_helper_mtc0_tracebpc(cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACEIBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_traceibpc(cpu_env, arg); */
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "TraceBPC";
|
||||
register_name = "TraceIBPC";
|
||||
goto cp0_unimplemented;
|
||||
case CP0_REG23__TRACEDBPC:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mtc0_tracedbpc(cpu_env, arg); */
|
||||
/* Stop translation as we may have switched the execution mode */
|
||||
ctx->base.is_jmp = DISAS_STOP;
|
||||
register_name = "TraceDBPC";
|
||||
goto cp0_unimplemented;
|
||||
default:
|
||||
goto cp0_unimplemented;
|
||||
|
|
Loading…
Reference in New Issue