target-mips: move group of functions above gen_load_fpr32()
Move the "Tests" group of functions so that gen_load_fpr32() and gen_store_fpr32() can use generate_exception(). Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
parent
0e12e61ff9
commit
eab9944c78
|
@ -1557,6 +1557,64 @@ static inline void gen_store_srsgpr (int from, int to)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tests */
|
||||||
|
static inline void gen_save_pc(target_ulong pc)
|
||||||
|
{
|
||||||
|
tcg_gen_movi_tl(cpu_PC, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void save_cpu_state(DisasContext *ctx, int do_save_pc)
|
||||||
|
{
|
||||||
|
LOG_DISAS("hflags %08x saved %08x\n", ctx->hflags, ctx->saved_hflags);
|
||||||
|
if (do_save_pc && ctx->pc != ctx->saved_pc) {
|
||||||
|
gen_save_pc(ctx->pc);
|
||||||
|
ctx->saved_pc = ctx->pc;
|
||||||
|
}
|
||||||
|
if (ctx->hflags != ctx->saved_hflags) {
|
||||||
|
tcg_gen_movi_i32(hflags, ctx->hflags);
|
||||||
|
ctx->saved_hflags = ctx->hflags;
|
||||||
|
switch (ctx->hflags & MIPS_HFLAG_BMASK_BASE) {
|
||||||
|
case MIPS_HFLAG_BR:
|
||||||
|
break;
|
||||||
|
case MIPS_HFLAG_BC:
|
||||||
|
case MIPS_HFLAG_BL:
|
||||||
|
case MIPS_HFLAG_B:
|
||||||
|
tcg_gen_movi_tl(btarget, ctx->btarget);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void restore_cpu_state(CPUMIPSState *env, DisasContext *ctx)
|
||||||
|
{
|
||||||
|
ctx->saved_hflags = ctx->hflags;
|
||||||
|
switch (ctx->hflags & MIPS_HFLAG_BMASK_BASE) {
|
||||||
|
case MIPS_HFLAG_BR:
|
||||||
|
break;
|
||||||
|
case MIPS_HFLAG_BC:
|
||||||
|
case MIPS_HFLAG_BL:
|
||||||
|
case MIPS_HFLAG_B:
|
||||||
|
ctx->btarget = env->btarget;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void generate_exception_err(DisasContext *ctx, int excp, int err)
|
||||||
|
{
|
||||||
|
TCGv_i32 texcp = tcg_const_i32(excp);
|
||||||
|
TCGv_i32 terr = tcg_const_i32(err);
|
||||||
|
save_cpu_state(ctx, 1);
|
||||||
|
gen_helper_raise_exception_err(cpu_env, texcp, terr);
|
||||||
|
tcg_temp_free_i32(terr);
|
||||||
|
tcg_temp_free_i32(texcp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void generate_exception(DisasContext *ctx, int excp)
|
||||||
|
{
|
||||||
|
save_cpu_state(ctx, 1);
|
||||||
|
gen_helper_0e0i(raise_exception, excp);
|
||||||
|
}
|
||||||
|
|
||||||
/* Floating point register moves. */
|
/* Floating point register moves. */
|
||||||
static void gen_load_fpr32(TCGv_i32 t, int reg)
|
static void gen_load_fpr32(TCGv_i32 t, int reg)
|
||||||
{
|
{
|
||||||
|
@ -1626,66 +1684,6 @@ static inline int get_fp_bit (int cc)
|
||||||
return 23;
|
return 23;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tests */
|
|
||||||
static inline void gen_save_pc(target_ulong pc)
|
|
||||||
{
|
|
||||||
tcg_gen_movi_tl(cpu_PC, pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void save_cpu_state (DisasContext *ctx, int do_save_pc)
|
|
||||||
{
|
|
||||||
LOG_DISAS("hflags %08x saved %08x\n", ctx->hflags, ctx->saved_hflags);
|
|
||||||
if (do_save_pc && ctx->pc != ctx->saved_pc) {
|
|
||||||
gen_save_pc(ctx->pc);
|
|
||||||
ctx->saved_pc = ctx->pc;
|
|
||||||
}
|
|
||||||
if (ctx->hflags != ctx->saved_hflags) {
|
|
||||||
tcg_gen_movi_i32(hflags, ctx->hflags);
|
|
||||||
ctx->saved_hflags = ctx->hflags;
|
|
||||||
switch (ctx->hflags & MIPS_HFLAG_BMASK_BASE) {
|
|
||||||
case MIPS_HFLAG_BR:
|
|
||||||
break;
|
|
||||||
case MIPS_HFLAG_BC:
|
|
||||||
case MIPS_HFLAG_BL:
|
|
||||||
case MIPS_HFLAG_B:
|
|
||||||
tcg_gen_movi_tl(btarget, ctx->btarget);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void restore_cpu_state (CPUMIPSState *env, DisasContext *ctx)
|
|
||||||
{
|
|
||||||
ctx->saved_hflags = ctx->hflags;
|
|
||||||
switch (ctx->hflags & MIPS_HFLAG_BMASK_BASE) {
|
|
||||||
case MIPS_HFLAG_BR:
|
|
||||||
break;
|
|
||||||
case MIPS_HFLAG_BC:
|
|
||||||
case MIPS_HFLAG_BL:
|
|
||||||
case MIPS_HFLAG_B:
|
|
||||||
ctx->btarget = env->btarget;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
generate_exception_err (DisasContext *ctx, int excp, int err)
|
|
||||||
{
|
|
||||||
TCGv_i32 texcp = tcg_const_i32(excp);
|
|
||||||
TCGv_i32 terr = tcg_const_i32(err);
|
|
||||||
save_cpu_state(ctx, 1);
|
|
||||||
gen_helper_raise_exception_err(cpu_env, texcp, terr);
|
|
||||||
tcg_temp_free_i32(terr);
|
|
||||||
tcg_temp_free_i32(texcp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
generate_exception (DisasContext *ctx, int excp)
|
|
||||||
{
|
|
||||||
save_cpu_state(ctx, 1);
|
|
||||||
gen_helper_0e0i(raise_exception, excp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Addresses computation */
|
/* Addresses computation */
|
||||||
static inline void gen_op_addr_add (DisasContext *ctx, TCGv ret, TCGv arg0, TCGv arg1)
|
static inline void gen_op_addr_add (DisasContext *ctx, TCGv ret, TCGv arg0, TCGv arg1)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue