Convert exception ops to TCG

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4022 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
blueswir1 2008-03-06 20:09:54 +00:00
parent a3ffaf3060
commit 134d77a14b
5 changed files with 19 additions and 18 deletions

View File

@ -321,7 +321,6 @@ void cpu_set_cwp(CPUSPARCState *env1, int new_cwp);
#endif
int cpu_sparc_signal_handler(int host_signum, void *pinfo, void *puc);
void raise_exception(int tt);
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
int is_asi);
void cpu_check_irqs(CPUSPARCState *env);

View File

@ -66,7 +66,6 @@ void do_fxtoq(void);
#endif
#endif
void do_interrupt(int intno);
void raise_exception(int tt);
void memcpy32(target_ulong *dst, const target_ulong *src);
target_ulong mmu_probe(CPUState *env, target_ulong address, int mmulev);
void dump_mmu(CPUState *env);

View File

@ -72,3 +72,4 @@ void TCG_HELPER_PROTO helper_fcmpeq_fcc2(void);
void TCG_HELPER_PROTO helper_fcmpeq_fcc3(void);
#endif
#endif
void TCG_HELPER_PROTO raise_exception(int tt);

View File

@ -857,22 +857,6 @@ void OPPROTO op_restore(void)
}
#endif
void OPPROTO op_exception(void)
{
env->exception_index = PARAM1;
cpu_loop_exit();
FORCE_RET();
}
void OPPROTO op_fpexception_im(void)
{
env->exception_index = TT_FP_EXCP;
env->fsr &= ~FSR_FTT_MASK;
env->fsr |= PARAM1;
cpu_loop_exit();
FORCE_RET();
}
void OPPROTO op_eval_ba(void)
{
T2 = 1;

View File

@ -807,6 +807,24 @@ static inline void gen_op_fcmpeq(int fccno)
#endif
static inline void gen_op_exception(int exception)
{
TCGv r_except;
r_except = tcg_temp_new(TCG_TYPE_I32);
tcg_gen_movi_i32(r_except, exception);
tcg_gen_helper_0_1(raise_exception, r_except);
}
static inline void gen_op_fpexception_im(int fsr_flags)
{
tcg_gen_ld_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr));
tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, ~FSR_FTT_MASK);
tcg_gen_ori_tl(cpu_tmp0, cpu_tmp0, fsr_flags);
tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr));
gen_op_exception(TT_FP_EXCP);
}
static int gen_trap_ifnofpu(DisasContext * dc)
{
#if !defined(CONFIG_USER_ONLY)