mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-02 05:01:06 +00:00
target/mips: Clean up handling of CP0 register 23
Clean up handling of CP0 register 23. Backports commit 4cbf4b6d00aa27176f1a19b3c739423875d702fe from qemu
This commit is contained in:
parent
6d070f1346
commit
4626d0d314
|
@ -404,6 +404,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 */
|
||||
|
|
|
@ -7450,25 +7450,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(tcg_ctx, arg, tcg_ctx->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;
|
||||
|
@ -8185,39 +8194,50 @@ 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(tcg_ctx, tcg_ctx->cpu_env, arg); /* EJTAG support */
|
||||
/* DISAS_STOP isn't good enough here, hflags may have changed. */
|
||||
gen_save_pc(ctx, ctx->base.pc_next + 4);
|
||||
ctx->base.is_jmp = DISAS_EXIT;
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_mtc0_tracecontrol(tcg_ctx->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(tcg_ctx->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(tcg_ctx->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(tcg_ctx->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";
|
||||
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;
|
||||
}
|
||||
|
@ -8916,25 +8936,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(tcg_ctx, arg, tcg_ctx->cpu_env); /* EJTAG support */
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_dmfc0_tracecontrol(arg, tcg_ctx->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, tcg_ctx->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, tcg_ctx->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, tcg_ctx->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;
|
||||
|
@ -9630,36 +9659,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(tcg_ctx, tcg_ctx->cpu_env, arg); /* EJTAG support */
|
||||
/* DISAS_STOP isn't good enough here, hflags may have changed. */
|
||||
gen_save_pc(ctx, ctx->base.pc_next + 4);
|
||||
ctx->base.is_jmp = DISAS_EXIT;
|
||||
register_name = "Debug";
|
||||
break;
|
||||
case 1:
|
||||
// gen_helper_mtc0_tracecontrol(tcg_ctx->cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_tracecontrol(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(tcg_ctx->cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__TRACECONTROL2:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_tracecontrol2(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(tcg_ctx->cpu_env, arg); /* PDtrace support */
|
||||
case CP0_REG23__USERTRACEDATA1:
|
||||
/* PDtrace support */
|
||||
/* gen_helper_mfc0_usertracedata1(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(tcg_ctx->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 a new issue