target-mips: use CP0_CHECK for gen_m{f|t}hc0
Reuse CP0_CHECK macro for gen_m{f|t}hc0. Signed-off-by: Yongbok Kim <yongbok.kim@imgtec.com> Reviewed-by: Leon Alrae <leon.alrae@imgtec.com> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
parent
408294352a
commit
c98d3d79ee
|
@ -4775,13 +4775,18 @@ static inline void gen_mtc0_store32 (TCGv arg, target_ulong off)
|
|||
tcg_temp_free_i32(t0);
|
||||
}
|
||||
|
||||
#define CP0_CHECK(c) \
|
||||
do { \
|
||||
if (!(c)) { \
|
||||
goto cp0_unimplemented; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static void gen_mfhc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
||||
{
|
||||
const char *rn = "invalid";
|
||||
|
||||
if (!(ctx->hflags & MIPS_HFLAG_ELPA)) {
|
||||
goto mfhc0_read_zero;
|
||||
}
|
||||
CP0_CHECK(ctx->hflags & MIPS_HFLAG_ELPA);
|
||||
|
||||
switch (reg) {
|
||||
case 2:
|
||||
|
@ -4791,7 +4796,7 @@ static void gen_mfhc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "EntryLo0";
|
||||
break;
|
||||
default:
|
||||
goto mfhc0_read_zero;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
@ -4801,7 +4806,7 @@ static void gen_mfhc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "EntryLo1";
|
||||
break;
|
||||
default:
|
||||
goto mfhc0_read_zero;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
case 17:
|
||||
|
@ -4812,7 +4817,7 @@ static void gen_mfhc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "LLAddr";
|
||||
break;
|
||||
default:
|
||||
goto mfhc0_read_zero;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
case 28:
|
||||
|
@ -4825,18 +4830,18 @@ static void gen_mfhc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "TagLo";
|
||||
break;
|
||||
default:
|
||||
goto mfhc0_read_zero;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
goto mfhc0_read_zero;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
|
||||
(void)rn; /* avoid a compiler warning */
|
||||
LOG_DISAS("mfhc0 %s (reg %d sel %d)\n", rn, reg, sel);
|
||||
return;
|
||||
|
||||
mfhc0_read_zero:
|
||||
cp0_unimplemented:
|
||||
LOG_DISAS("mfhc0 %s (reg %d sel %d)\n", rn, reg, sel);
|
||||
tcg_gen_movi_tl(arg, 0);
|
||||
}
|
||||
|
@ -4846,9 +4851,7 @@ static void gen_mthc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
const char *rn = "invalid";
|
||||
uint64_t mask = ctx->PAMask >> 36;
|
||||
|
||||
if (!(ctx->hflags & MIPS_HFLAG_ELPA)) {
|
||||
goto mthc0_nop;
|
||||
}
|
||||
CP0_CHECK(ctx->hflags & MIPS_HFLAG_ELPA);
|
||||
|
||||
switch (reg) {
|
||||
case 2:
|
||||
|
@ -4859,7 +4862,7 @@ static void gen_mthc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "EntryLo0";
|
||||
break;
|
||||
default:
|
||||
goto mthc0_nop;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
@ -4870,7 +4873,7 @@ static void gen_mthc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "EntryLo1";
|
||||
break;
|
||||
default:
|
||||
goto mthc0_nop;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
case 17:
|
||||
|
@ -4883,7 +4886,7 @@ static void gen_mthc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "LLAddr";
|
||||
break;
|
||||
default:
|
||||
goto mthc0_nop;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
case 28:
|
||||
|
@ -4897,15 +4900,15 @@ static void gen_mthc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
|||
rn = "TagLo";
|
||||
break;
|
||||
default:
|
||||
goto mthc0_nop;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
goto mthc0_nop;
|
||||
goto cp0_unimplemented;
|
||||
}
|
||||
|
||||
(void)rn; /* avoid a compiler warning */
|
||||
mthc0_nop:
|
||||
cp0_unimplemented:
|
||||
LOG_DISAS("mthc0 %s (reg %d sel %d)\n", rn, reg, sel);
|
||||
}
|
||||
|
||||
|
@ -4918,13 +4921,6 @@ static inline void gen_mfc0_unimplemented(DisasContext *ctx, TCGv arg)
|
|||
}
|
||||
}
|
||||
|
||||
#define CP0_CHECK(c) \
|
||||
do { \
|
||||
if (!(c)) { \
|
||||
goto cp0_unimplemented; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static void gen_mfc0(DisasContext *ctx, TCGv arg, int reg, int sel)
|
||||
{
|
||||
const char *rn = "invalid";
|
||||
|
|
Loading…
Reference in a new issue