float32 helper_fsqrt_FT(CPUSH4State *env, float32 t0) { set_float_exception_flags(0, &env->fp_status); t0 = float32_sqrt(t0, &env->fp_status); update_fpscr(env, GETPC()); return t0; }
float64 helper_fsub_DT(CPUSH4State *env, float64 t0, float64 t1) { set_float_exception_flags(0, &env->fp_status); t0 = float64_sub(t0, t1, &env->fp_status); update_fpscr(env, GETPC()); return t0; }
float64 helper_fsqrt_DT(float64 t0) { set_float_exception_flags(0, &env->fp_status); t0 = float64_sqrt(t0, &env->fp_status); update_fpscr(GETPC()); return t0; }
float32 helper_fmul_FT(CPUSH4State *env, float32 t0, float32 t1) { set_float_exception_flags(0, &env->fp_status); t0 = float32_mul(t0, t1, &env->fp_status); update_fpscr(env, GETPC()); return t0; }
float32 helper_fsub_FT(float32 t0, float32 t1) { set_float_exception_flags(0, &env->fp_status); t0 = float32_sub(t0, t1, &env->fp_status); update_fpscr(GETPC()); return t0; }
float64 helper_fmul_DT(float64 t0, float64 t1) { set_float_exception_flags(0, &env->fp_status); t0 = float64_mul(t0, t1, &env->fp_status); update_fpscr(GETPC()); return t0; }
void helper_ftrv(CPUSH4State *env, uint32_t n) { int bank_matrix, bank_vector; int i, j; float32 r[4]; float32 p; bank_matrix = (env->sr & FPSCR_FR) ? 0 : 16; bank_vector = (env->sr & FPSCR_FR) ? 16 : 0; set_float_exception_flags(0, &env->fp_status); for (i = 0 ; i < 4 ; i++) { r[i] = float32_zero; for (j = 0 ; j < 4 ; j++) { p = float32_mul(env->fregs[bank_matrix + 4 * j + i], env->fregs[bank_vector + j], &env->fp_status); r[i] = float32_add(r[i], p, &env->fp_status); } } update_fpscr(env, GETPC()); for (i = 0 ; i < 4 ; i++) { env->fregs[bank_vector + i] = r[i]; } }
float64 helper_float_DT(CPUSH4State *env, uint32_t t0) { float64 ret; set_float_exception_flags(0, &env->fp_status); ret = int32_to_float64(t0, &env->fp_status); update_fpscr(env, GETPC()); return ret; }
float32 helper_fcnvds_DT_FT(CPUSH4State *env, float64 t0) { float32 ret; set_float_exception_flags(0, &env->fp_status); ret = float64_to_float32(t0, &env->fp_status); update_fpscr(env, GETPC()); return ret; }
float64 helper_fcnvsd_FT_DT(float32 t0) { float64 ret; set_float_exception_flags(0, &env->fp_status); ret = float32_to_float64(t0, &env->fp_status); update_fpscr(GETPC()); return ret; }
uint32_t helper_ftrc_FT(float32 t0) { uint32_t ret; set_float_exception_flags(0, &env->fp_status); ret = float32_to_int32_round_to_zero(t0, &env->fp_status); update_fpscr(GETPC()); return ret; }
float32 helper_fmac_FT(float32 t0, float32 t1, float32 t2) { set_float_exception_flags(0, &env->fp_status); t0 = float32_mul(t0, t1, &env->fp_status); t0 = float32_add(t0, t2, &env->fp_status); update_fpscr(GETPC()); return t0; }
float32 helper_float_FT(uint32_t t0) { float32 ret; set_float_exception_flags(0, &env->fp_status); ret = int32_to_float32(t0, &env->fp_status); update_fpscr(GETPC()); return ret; }
uint32_t helper_ftrc_DT(CPUSH4State *env, float64 t0) { uint32_t ret; set_float_exception_flags(0, &env->fp_status); ret = float64_to_int32_round_to_zero(t0, &env->fp_status); update_fpscr(env, GETPC()); return ret; }
void helper_fcmp_gt_DT(CPUSH4State *env, float64 t0, float64 t1) { int relation; set_float_exception_flags(0, &env->fp_status); relation = float64_compare(t0, t1, &env->fp_status); if (unlikely(relation == float_relation_unordered)) { update_fpscr(env, GETPC()); } else { env->sr_t = (relation == float_relation_greater); } }
void helper_fcmp_eq_FT(CPUSH4State *env, float32 t0, float32 t1) { int relation; set_float_exception_flags(0, &env->fp_status); relation = float32_compare(t0, t1, &env->fp_status); if (unlikely(relation == float_relation_unordered)) { update_fpscr(env, GETPC()); } else if (relation == float_relation_equal) { set_t(env); } else { clr_t(env); } }
void helper_fcmp_gt_DT(float64 t0, float64 t1) { int relation; set_float_exception_flags(0, &env->fp_status); relation = float64_compare(t0, t1, &env->fp_status); if (unlikely(relation == float_relation_unordered)) { update_fpscr(GETPC()); } else if (relation == float_relation_greater) { set_t(); } else { clr_t(); } }
void helper_fipr(CPUSH4State *env, uint32_t m, uint32_t n) { int bank, i; float32 r, p; bank = (env->sr & FPSCR_FR) ? 16 : 0; r = float32_zero; set_float_exception_flags(0, &env->fp_status); for (i = 0 ; i < 4 ; i++) { p = float32_mul(env->fregs[bank + m + i], env->fregs[bank + n + i], &env->fp_status); r = float32_add(r, p, &env->fp_status); } update_fpscr(env, GETPC()); env->fregs[bank + n + 3] = r; }