- Move FPU exception handling into helper functions, since they are big.

- Fix FP-conditional branches.
- Check FPU register mode at runtime, not translation time, as the F64
  status bit can change.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2828 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-05-18 11:55:54 +00:00
parent 34ae7b51f5
commit fd4a04ebb2
5 changed files with 793 additions and 636 deletions

View file

@ -165,4 +165,75 @@ void cpu_mips_update_irq (CPUState *env);
void cpu_mips_clock_init (CPUState *env);
void cpu_mips_tlb_flush (CPUState *env, int flush_global);
void do_ctc1 (void);
void do_float_cvtd_s(void);
void do_float_cvtd_w(void);
void do_float_cvtd_l(void);
void do_float_cvtl_d(void);
void do_float_cvtl_s(void);
void do_float_cvtps_pw(void);
void do_float_cvtpw_ps(void);
void do_float_cvts_d(void);
void do_float_cvts_w(void);
void do_float_cvts_l(void);
void do_float_cvts_pl(void);
void do_float_cvts_pu(void);
void do_float_cvtw_s(void);
void do_float_cvtw_d(void);
void do_float_roundl_d(void);
void do_float_roundl_s(void);
void do_float_roundw_d(void);
void do_float_roundw_s(void);
void do_float_truncl_d(void);
void do_float_truncl_s(void);
void do_float_truncw_d(void);
void do_float_truncw_s(void);
void do_float_ceill_d(void);
void do_float_ceill_s(void);
void do_float_ceilw_d(void);
void do_float_ceilw_s(void);
void do_float_floorl_d(void);
void do_float_floorl_s(void);
void do_float_floorw_d(void);
void do_float_floorw_s(void);
void do_float_add_d(void);
void do_float_add_s(void);
void do_float_add_ps(void);
void do_float_sub_d(void);
void do_float_sub_s(void);
void do_float_sub_ps(void);
void do_float_mul_d(void);
void do_float_mul_s(void);
void do_float_mul_ps(void);
void do_float_div_d(void);
void do_float_div_s(void);
void do_float_div_ps(void);
void do_float_addr_ps(void);
#define CMP_OPS(op) \
void do_cmp_d_ ## op(long cc); \
void do_cmpabs_d_ ## op(long cc); \
void do_cmp_s_ ## op(long cc); \
void do_cmpabs_s_ ## op(long cc); \
void do_cmp_ps_ ## op(long cc); \
void do_cmpabs_ps_ ## op(long cc);
CMP_OPS(f)
CMP_OPS(un)
CMP_OPS(eq)
CMP_OPS(ueq)
CMP_OPS(olt)
CMP_OPS(ult)
CMP_OPS(ole)
CMP_OPS(ule)
CMP_OPS(sf)
CMP_OPS(ngle)
CMP_OPS(seq)
CMP_OPS(ngl)
CMP_OPS(lt)
CMP_OPS(nge)
CMP_OPS(le)
CMP_OPS(ngt)
#undef CMP_OPS
#endif /* !defined(__QEMU_MIPS_EXEC_H__) */