target/mips: Clean up handling of CP0 register 4

Clean up handling of CP0 register 4.

Backports commit 020fe379093deb116d72174268335d60133f0e26 from qemu
This commit is contained in:
Aleksandar Markovic 2019-11-18 22:46:45 -05:00 committed by Lioncash
parent d96b3d06c4
commit 11ac98331a
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7
2 changed files with 22 additions and 16 deletions

View file

@ -304,7 +304,9 @@ typedef struct mips_def_t mips_def_t;
#define CP0_REG03__TCOPT 7 #define CP0_REG03__TCOPT 7
/* CP0 Register 04 */ /* CP0 Register 04 */
#define CP0_REG04__CONTEXT 0 #define CP0_REG04__CONTEXT 0
#define CP0_REG04__CONTEXTCONFIG 1
#define CP0_REG04__USERLOCAL 2 #define CP0_REG04__USERLOCAL 2
#define CP0_REG04__XCONTEXTCONFIG 3
#define CP0_REG04__DBGCONTEXTID 4 #define CP0_REG04__DBGCONTEXTID 4
#define CP0_REG00__MMID 5 #define CP0_REG00__MMID 5
/* CP0 Register 05 */ /* CP0 Register 05 */

View file

@ -7058,16 +7058,17 @@ static void gen_mfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break; break;
case CP0_REGISTER_04: case CP0_REGISTER_04:
switch (sel) { switch (sel) {
case 0: case CP0_REG04__CONTEXT:
tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env, offsetof(CPUMIPSState, CP0_Context)); tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env, offsetof(CPUMIPSState, CP0_Context));
tcg_gen_ext32s_tl(tcg_ctx, arg, arg); tcg_gen_ext32s_tl(tcg_ctx, arg, arg);
register_name = "Context"; register_name = "Context";
break; break;
case 1: case CP0_REG04__CONTEXTCONFIG:
/* gen_helper_mfc0_contextconfig(arg); - SmartMIPS ASE */ /* SmartMIPS ASE */
/* gen_helper_mfc0_contextconfig(arg); */
register_name = "ContextConfig"; register_name = "ContextConfig";
goto cp0_unimplemented; goto cp0_unimplemented;
case 2: case CP0_REG04__USERLOCAL:
CP0_CHECK(ctx->ulri); CP0_CHECK(ctx->ulri);
tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env, tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, active_tc.CP0_UserLocal)); offsetof(CPUMIPSState, active_tc.CP0_UserLocal));
@ -7790,15 +7791,16 @@ static void gen_mtc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break; break;
case CP0_REGISTER_04: case CP0_REGISTER_04:
switch (sel) { switch (sel) {
case 0: case CP0_REG04__CONTEXT:
gen_helper_mtc0_context(tcg_ctx, tcg_ctx->cpu_env, arg); gen_helper_mtc0_context(tcg_ctx, tcg_ctx->cpu_env, arg);
register_name = "Context"; register_name = "Context";
break; break;
case 1: case CP0_REG04__CONTEXTCONFIG:
// gen_helper_mtc0_contextconfig(tcg_ctx->cpu_env, arg); /* SmartMIPS ASE */ /* SmartMIPS ASE */
/* gen_helper_mtc0_contextconfig(tcg_ctx->cpu_env, arg); */
register_name = "ContextConfig"; register_name = "ContextConfig";
goto cp0_unimplemented; goto cp0_unimplemented;
case 2: case CP0_REG04__USERLOCAL:
CP0_CHECK(ctx->ulri); CP0_CHECK(ctx->ulri);
tcg_gen_st_tl(tcg_ctx, arg, tcg_ctx->cpu_env, tcg_gen_st_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, active_tc.CP0_UserLocal)); offsetof(CPUMIPSState, active_tc.CP0_UserLocal));
@ -8530,15 +8532,16 @@ static void gen_dmfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break; break;
case CP0_REGISTER_04: case CP0_REGISTER_04:
switch (sel) { switch (sel) {
case 0: case CP0_REG04__CONTEXT:
tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env, offsetof(CPUMIPSState, CP0_Context)); tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env, offsetof(CPUMIPSState, CP0_Context));
register_name = "Context"; register_name = "Context";
break; break;
case 1: case CP0_REG04__CONTEXTCONFIG:
// gen_helper_dmfc0_contextconfig(arg); /* SmartMIPS ASE */ /* SmartMIPS ASE */
/* gen_helper_dmfc0_contextconfig(arg); */
register_name = "ContextConfig"; register_name = "ContextConfig";
goto cp0_unimplemented; goto cp0_unimplemented;
case 2: case CP0_REG04__USERLOCAL:
CP0_CHECK(ctx->ulri); CP0_CHECK(ctx->ulri);
tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env, tcg_gen_ld_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, active_tc.CP0_UserLocal)); offsetof(CPUMIPSState, active_tc.CP0_UserLocal));
@ -9241,15 +9244,16 @@ static void gen_dmtc0(DisasContext *ctx, TCGv arg, int reg, int sel)
break; break;
case CP0_REGISTER_04: case CP0_REGISTER_04:
switch (sel) { switch (sel) {
case 0: case CP0_REG04__CONTEXT:
gen_helper_mtc0_context(tcg_ctx, tcg_ctx->cpu_env, arg); gen_helper_mtc0_context(tcg_ctx, tcg_ctx->cpu_env, arg);
register_name = "Context"; register_name = "Context";
break; break;
case 1: case CP0_REG04__CONTEXTCONFIG:
// gen_helper_mtc0_contextconfig(tcg_ctx->cpu_env, arg); /* SmartMIPS ASE */ /* SmartMIPS ASE */
/* gen_helper_mtc0_contextconfig(tcg_ctx->cpu_env, arg); */
register_name = "ContextConfig"; register_name = "ContextConfig";
goto cp0_unimplemented; goto cp0_unimplemented;
case 2: case CP0_REG04__USERLOCAL:
CP0_CHECK(ctx->ulri); CP0_CHECK(ctx->ulri);
tcg_gen_st_tl(tcg_ctx, arg, tcg_ctx->cpu_env, tcg_gen_st_tl(tcg_ctx, arg, tcg_ctx->cpu_env,
offsetof(CPUMIPSState, active_tc.CP0_UserLocal)); offsetof(CPUMIPSState, active_tc.CP0_UserLocal));