Commit 134d77a14b969edf77117f34d9859bb667f9c922
1 parent
a3ffaf30
Convert exception ops to TCG
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4022 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
5 changed files
with
19 additions
and
18 deletions
target-sparc/cpu.h
... | ... | @@ -321,7 +321,6 @@ void cpu_set_cwp(CPUSPARCState *env1, int new_cwp); |
321 | 321 | #endif |
322 | 322 | |
323 | 323 | int cpu_sparc_signal_handler(int host_signum, void *pinfo, void *puc); |
324 | -void raise_exception(int tt); | |
325 | 324 | void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec, |
326 | 325 | int is_asi); |
327 | 326 | void cpu_check_irqs(CPUSPARCState *env); | ... | ... |
target-sparc/exec.h
... | ... | @@ -66,7 +66,6 @@ void do_fxtoq(void); |
66 | 66 | #endif |
67 | 67 | #endif |
68 | 68 | void do_interrupt(int intno); |
69 | -void raise_exception(int tt); | |
70 | 69 | void memcpy32(target_ulong *dst, const target_ulong *src); |
71 | 70 | target_ulong mmu_probe(CPUState *env, target_ulong address, int mmulev); |
72 | 71 | void dump_mmu(CPUState *env); | ... | ... |
target-sparc/helper.h
target-sparc/op.c
... | ... | @@ -857,22 +857,6 @@ void OPPROTO op_restore(void) |
857 | 857 | } |
858 | 858 | #endif |
859 | 859 | |
860 | -void OPPROTO op_exception(void) | |
861 | -{ | |
862 | - env->exception_index = PARAM1; | |
863 | - cpu_loop_exit(); | |
864 | - FORCE_RET(); | |
865 | -} | |
866 | - | |
867 | -void OPPROTO op_fpexception_im(void) | |
868 | -{ | |
869 | - env->exception_index = TT_FP_EXCP; | |
870 | - env->fsr &= ~FSR_FTT_MASK; | |
871 | - env->fsr |= PARAM1; | |
872 | - cpu_loop_exit(); | |
873 | - FORCE_RET(); | |
874 | -} | |
875 | - | |
876 | 860 | void OPPROTO op_eval_ba(void) |
877 | 861 | { |
878 | 862 | T2 = 1; | ... | ... |
target-sparc/translate.c
... | ... | @@ -807,6 +807,24 @@ static inline void gen_op_fcmpeq(int fccno) |
807 | 807 | |
808 | 808 | #endif |
809 | 809 | |
810 | +static inline void gen_op_exception(int exception) | |
811 | +{ | |
812 | + TCGv r_except; | |
813 | + | |
814 | + r_except = tcg_temp_new(TCG_TYPE_I32); | |
815 | + tcg_gen_movi_i32(r_except, exception); | |
816 | + tcg_gen_helper_0_1(raise_exception, r_except); | |
817 | +} | |
818 | + | |
819 | +static inline void gen_op_fpexception_im(int fsr_flags) | |
820 | +{ | |
821 | + tcg_gen_ld_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr)); | |
822 | + tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, ~FSR_FTT_MASK); | |
823 | + tcg_gen_ori_tl(cpu_tmp0, cpu_tmp0, fsr_flags); | |
824 | + tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, fsr)); | |
825 | + gen_op_exception(TT_FP_EXCP); | |
826 | +} | |
827 | + | |
810 | 828 | static int gen_trap_ifnofpu(DisasContext * dc) |
811 | 829 | { |
812 | 830 | #if !defined(CONFIG_USER_ONLY) | ... | ... |