mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-28 05:50:37 +00:00
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. */
|
||||
static void gen_load_fpr32(TCGv_i32 t, int reg)
|
||||
{
|
||||
@ -1626,66 +1684,6 @@ static inline int get_fp_bit (int cc)
|
||||
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 */
|
||||
static inline void gen_op_addr_add (DisasContext *ctx, TCGv ret, TCGv arg0, TCGv arg1)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user