[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PULL 07/26] target/ppc: Tidy helper_fsqrt
From: |
David Gibson |
Subject: |
[Qemu-ppc] [PULL 07/26] target/ppc: Tidy helper_fsqrt |
Date: |
Tue, 21 Aug 2018 14:33:24 +1000 |
From: Richard Henderson <address@hidden>
Tidy the invalid exception checking so that we rely on softfloat for
initial argument validation, and select the kind of invalid operand
exception only when we know we must. Pass and return float64 values
directly rather than bounce through the CPU_DoubleU union.
Signed-off-by: Richard Henderson <address@hidden>
Signed-off-by: David Gibson <address@hidden>
---
target/ppc/fpu_helper.c | 29 ++++++++++++++---------------
target/ppc/helper.h | 2 +-
2 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c
index 7758372ecd..44f3fed17d 100644
--- a/target/ppc/fpu_helper.c
+++ b/target/ppc/fpu_helper.c
@@ -858,25 +858,24 @@ uint64_t helper_frsp(CPUPPCState *env, uint64_t arg)
}
/* fsqrt - fsqrt. */
-uint64_t helper_fsqrt(CPUPPCState *env, uint64_t arg)
+float64 helper_fsqrt(CPUPPCState *env, float64 arg)
{
- CPU_DoubleU farg;
-
- farg.ll = arg;
+ float64 ret = float64_sqrt(arg, &env->fp_status);
+ int status = get_float_exception_flags(&env->fp_status);
- if (unlikely(float64_is_any_nan(farg.d))) {
- if (unlikely(float64_is_signaling_nan(farg.d, &env->fp_status))) {
- /* sNaN reciprocal square root */
- float_invalid_op_excp(env, POWERPC_EXCP_FP_VXSNAN, 1);
- farg.ll = float64_snan_to_qnan(farg.ll);
+ if (unlikely(status & float_flag_invalid)) {
+ if (unlikely(float64_is_any_nan(arg))) {
+ if (unlikely(float64_is_signaling_nan(arg, &env->fp_status))) {
+ /* sNaN square root */
+ float_invalid_op_excp(env, POWERPC_EXCP_FP_VXSNAN, 1);
+ }
+ } else {
+ /* Square root of a negative nonzero number */
+ float_invalid_op_excp(env, POWERPC_EXCP_FP_VXSQRT, 1);
}
- } else if (unlikely(float64_is_neg(farg.d) && !float64_is_zero(farg.d))) {
- /* Square root of a negative nonzero number */
- farg.ll = float_invalid_op_excp(env, POWERPC_EXCP_FP_VXSQRT, 1);
- } else {
- farg.d = float64_sqrt(farg.d, &env->fp_status);
}
- return farg.ll;
+
+ return ret;
}
/* fre - fre. */
diff --git a/target/ppc/helper.h b/target/ppc/helper.h
index d81806dd2c..7ed72c2337 100644
--- a/target/ppc/helper.h
+++ b/target/ppc/helper.h
@@ -93,7 +93,7 @@ DEF_HELPER_4(fmadd, i64, env, i64, i64, i64)
DEF_HELPER_4(fmsub, i64, env, i64, i64, i64)
DEF_HELPER_4(fnmadd, i64, env, i64, i64, i64)
DEF_HELPER_4(fnmsub, i64, env, i64, i64, i64)
-DEF_HELPER_2(fsqrt, i64, env, i64)
+DEF_HELPER_2(fsqrt, f64, env, f64)
DEF_HELPER_2(fre, i64, env, i64)
DEF_HELPER_2(fres, i64, env, i64)
DEF_HELPER_2(frsqrte, i64, env, i64)
--
2.17.1
- [Qemu-ppc] [PULL 00/26] ppc-for-3.1 queue 20180821, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 11/26] vfio/spapr: Allow backing bigger guest IOMMU pages with smaller physical pages, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 01/26] spapr_cpu_core: vmstate_[un]register per-CPU data from (un)realizefn, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 07/26] target/ppc: Tidy helper_fsqrt,
David Gibson <=
- [Qemu-ppc] [PULL 10/26] target/ppc: bcdsub fix sign when result is zero, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 04/26] target/ppc: Honor fpscr_ze semantics and tidy fdiv, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 14/26] spapr: Add a pseries-3.1 machine type, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 03/26] target/ppc: Enable fp exceptions for user-only, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 23/26] mac_oldworld: don't use legacy fw_cfg_init_mem() function, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 24/26] mac_newworld: don't use legacy fw_cfg_init_mem() function, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 06/26] target/ppc: Tidy helper_fadd, helper_fsub, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 17/26] hw/ppc/ppc_boards: Don't use old_mmio for ref405ep_fpga, David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 12/26] xics: don't include "target/ppc/cpu-qom.h" in "hw/ppc/xics.h", David Gibson, 2018/08/21
- [Qemu-ppc] [PULL 13/26] target/ppc: simplify bcdadd/sub functions, David Gibson, 2018/08/21