target/mips: Clean up handling of CP0 register 31

Clean up handling of CP0 register 31.

Backports commit 14d92efd721755cc31df328261d301177980fa89 from qemu
This commit is contained in:
Aleksandar Markovic 2019-11-18 23:45:55 -05:00 committed by Lioncash
parent d012faa9bf
commit 84ec43131c
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7
2 changed files with 30 additions and 29 deletions

View File

@ -611,7 +611,6 @@ struct CPUMIPSState {
* CP0 Register 4
*/
target_ulong CP0_Context;
target_ulong CP0_KScratch[MIPS_KSCRATCH_NUM];
int32_t CP0_MemoryMapID;
/*
* CP0 Register 5
@ -1022,6 +1021,8 @@ struct CPUMIPSState {
* CP0 Register 31
*/
int32_t CP0_DESAVE;
target_ulong CP0_KScratch[MIPS_KSCRATCH_NUM];
/* We waste some space so we can handle shadow registers like TCs. */
TCState tcs[MIPS_SHADOW_SET_MAX];
CPUMIPSFPUContext fpus[MIPS_FPU_MAX];

View File

@ -7611,17 +7611,17 @@ static void gen_mfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break;
case CP0_REGISTER_31:
switch (sel) {
case 0:
case CP0_REG31__DESAVE:
/* EJTAG support */
gen_mfc0_load32(ctx, arg, offsetof(CPUMIPSState, CP0_DESAVE));
register_name = "DESAVE";
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case CP0_REG31__KSCRATCH1:
case CP0_REG31__KSCRATCH2:
case CP0_REG31__KSCRATCH3:
case CP0_REG31__KSCRATCH4:
case CP0_REG31__KSCRATCH5:
case CP0_REG31__KSCRATCH6:
CP0_CHECK(ctx->kscrexist & (1 << sel));
tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, CP0_KScratch[sel - 2]));
@ -8362,17 +8362,17 @@ static void gen_mtc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break;
case CP0_REGISTER_31:
switch (sel) {
case 0:
case CP0_REG31__DESAVE:
/* EJTAG support */
gen_mtc0_store32(ctx, arg, offsetof(CPUMIPSState, CP0_DESAVE));
register_name = "DESAVE";
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case CP0_REG31__KSCRATCH1:
case CP0_REG31__KSCRATCH2:
case CP0_REG31__KSCRATCH3:
case CP0_REG31__KSCRATCH4:
case CP0_REG31__KSCRATCH5:
case CP0_REG31__KSCRATCH6:
CP0_CHECK(ctx->kscrexist & (1 << sel));
tcg_gen_st_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, CP0_KScratch[sel-2]));
@ -9085,17 +9085,17 @@ static void gen_dmfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break;
case CP0_REGISTER_31:
switch (sel) {
case 0:
case CP0_REG31__DESAVE:
/* EJTAG support */
gen_mfc0_load32(ctx, arg, offsetof(CPUMIPSState, CP0_DESAVE));
register_name = "DESAVE";
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case CP0_REG31__KSCRATCH1:
case CP0_REG31__KSCRATCH2:
case CP0_REG31__KSCRATCH3:
case CP0_REG31__KSCRATCH4:
case CP0_REG31__KSCRATCH5:
case CP0_REG31__KSCRATCH6:
CP0_CHECK(ctx->kscrexist & (1 << sel));
tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, CP0_KScratch[sel-2]));
@ -9819,17 +9819,17 @@ static void gen_dmtc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break;
case CP0_REGISTER_31:
switch (sel) {
case 0:
case CP0_REG31__DESAVE:
/* EJTAG support */
gen_mtc0_store32(ctx, arg, offsetof(CPUMIPSState, CP0_DESAVE));
register_name = "DESAVE";
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case CP0_REG31__KSCRATCH1:
case CP0_REG31__KSCRATCH2:
case CP0_REG31__KSCRATCH3:
case CP0_REG31__KSCRATCH4:
case CP0_REG31__KSCRATCH5:
case CP0_REG31__KSCRATCH6:
CP0_CHECK(ctx->kscrexist & (1 << sel));
tcg_gen_st_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, CP0_KScratch[sel-2]));