[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 18/19] target-mips: simplify FP comparisons
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH 18/19] target-mips: simplify FP comparisons |
Date: |
Tue, 12 Apr 2011 23:59:30 +0200 |
As the softfloat comparison functions already test for NaN, there is no
need to always call the float*_unordered*() functions.
Signed-off-by: Aurelien Jarno <address@hidden>
---
target-mips/op_helper.c | 72 +++++++++++++++++++++++-----------------------
1 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 31a19ba..abcb6eb 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -2893,21 +2893,21 @@ void helper_cmpabs_d_ ## op (uint64_t fdt0, uint64_t
fdt1, int cc) \
* but float64_unordered_quiet() is still called. */
FOP_COND_D(f, (float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status), 0))
FOP_COND_D(un, float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status))
-FOP_COND_D(eq, !float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) && float64_eq_quiet(fdt0, fdt1,
&env->active_fpu.fp_status))
+FOP_COND_D(eq, float64_eq_quiet(fdt0, fdt1, &env->active_fpu.fp_status))
FOP_COND_D(ueq, float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) || float64_eq_quiet(fdt0, fdt1,
&env->active_fpu.fp_status))
-FOP_COND_D(olt, !float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) && float64_lt(fdt0, fdt1,
&env->active_fpu.fp_status))
-FOP_COND_D(ult, float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) || float64_lt(fdt0, fdt1,
&env->active_fpu.fp_status))
-FOP_COND_D(ole, !float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) && float64_le(fdt0, fdt1,
&env->active_fpu.fp_status))
-FOP_COND_D(ule, float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) || float64_le(fdt0, fdt1,
&env->active_fpu.fp_status))
+FOP_COND_D(olt, float64_lt_quiet(fdt0, fdt1, &env->active_fpu.fp_status))
+FOP_COND_D(ult, float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) || float64_lt_quiet(fdt0, fdt1,
&env->active_fpu.fp_status))
+FOP_COND_D(ole, float64_le_quiet(fdt0, fdt1, &env->active_fpu.fp_status))
+FOP_COND_D(ule, float64_unordered_quiet(fdt1, fdt0,
&env->active_fpu.fp_status) || float64_le_quiet(fdt0, fdt1,
&env->active_fpu.fp_status))
/* NOTE: the comma operator will make "cond" to eval to false,
* but float64_unordered() is still called. */
FOP_COND_D(sf, (float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status), 0))
FOP_COND_D(ngle,float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status))
-FOP_COND_D(seq, !float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) &&
float64_eq_quiet(fdt0, fdt1, &env->active_fpu.fp_status))
-FOP_COND_D(ngl, float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) ||
float64_eq_quiet(fdt0, fdt1, &env->active_fpu.fp_status))
-FOP_COND_D(lt, !float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) &&
float64_lt(fdt0, fdt1, &env->active_fpu.fp_status))
+FOP_COND_D(seq, float64_eq(fdt0, fdt1, &env->active_fpu.fp_status))
+FOP_COND_D(ngl, float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) ||
float64_eq(fdt0, fdt1, &env->active_fpu.fp_status))
+FOP_COND_D(lt, float64_lt(fdt0, fdt1, &env->active_fpu.fp_status))
FOP_COND_D(nge, float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) ||
float64_lt(fdt0, fdt1, &env->active_fpu.fp_status))
-FOP_COND_D(le, !float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) &&
float64_le(fdt0, fdt1, &env->active_fpu.fp_status))
+FOP_COND_D(le, float64_le(fdt0, fdt1, &env->active_fpu.fp_status))
FOP_COND_D(ngt, float64_unordered(fdt1, fdt0, &env->active_fpu.fp_status) ||
float64_le(fdt0, fdt1, &env->active_fpu.fp_status))
#define FOP_COND_S(op, cond) \
@@ -2937,21 +2937,21 @@ void helper_cmpabs_s_ ## op (uint32_t fst0, uint32_t
fst1, int cc) \
* but float32_unordered_quiet() is still called. */
FOP_COND_S(f, (float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status), 0))
FOP_COND_S(un, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status))
-FOP_COND_S(eq, !float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) && float32_eq_quiet(fst0, fst1,
&env->active_fpu.fp_status))
+FOP_COND_S(eq, float32_eq_quiet(fst0, fst1, &env->active_fpu.fp_status))
FOP_COND_S(ueq, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_eq_quiet(fst0, fst1,
&env->active_fpu.fp_status))
-FOP_COND_S(olt, !float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) && float32_lt(fst0, fst1,
&env->active_fpu.fp_status))
-FOP_COND_S(ult, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_lt(fst0, fst1,
&env->active_fpu.fp_status))
-FOP_COND_S(ole, !float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) && float32_le(fst0, fst1,
&env->active_fpu.fp_status))
-FOP_COND_S(ule, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_le(fst0, fst1,
&env->active_fpu.fp_status))
+FOP_COND_S(olt, float32_lt_quiet(fst0, fst1, &env->active_fpu.fp_status))
+FOP_COND_S(ult, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_lt_quiet(fst0, fst1,
&env->active_fpu.fp_status))
+FOP_COND_S(ole, float32_le_quiet(fst0, fst1, &env->active_fpu.fp_status))
+FOP_COND_S(ule, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_le_quiet(fst0, fst1,
&env->active_fpu.fp_status))
/* NOTE: the comma operator will make "cond" to eval to false,
* but float32_unordered() is still called. */
FOP_COND_S(sf, (float32_unordered(fst1, fst0, &env->active_fpu.fp_status), 0))
FOP_COND_S(ngle,float32_unordered(fst1, fst0, &env->active_fpu.fp_status))
-FOP_COND_S(seq, !float32_unordered(fst1, fst0, &env->active_fpu.fp_status) &&
float32_eq_quiet(fst0, fst1, &env->active_fpu.fp_status))
-FOP_COND_S(ngl, float32_unordered(fst1, fst0, &env->active_fpu.fp_status) ||
float32_eq_quiet(fst0, fst1, &env->active_fpu.fp_status))
-FOP_COND_S(lt, !float32_unordered(fst1, fst0, &env->active_fpu.fp_status) &&
float32_lt(fst0, fst1, &env->active_fpu.fp_status))
+FOP_COND_S(seq, float32_eq(fst0, fst1, &env->active_fpu.fp_status))
+FOP_COND_S(ngl, float32_unordered(fst1, fst0, &env->active_fpu.fp_status) ||
float32_eq(fst0, fst1, &env->active_fpu.fp_status))
+FOP_COND_S(lt, float32_lt(fst0, fst1, &env->active_fpu.fp_status))
FOP_COND_S(nge, float32_unordered(fst1, fst0, &env->active_fpu.fp_status) ||
float32_lt(fst0, fst1, &env->active_fpu.fp_status))
-FOP_COND_S(le, !float32_unordered(fst1, fst0, &env->active_fpu.fp_status) &&
float32_le(fst0, fst1, &env->active_fpu.fp_status))
+FOP_COND_S(le, float32_le(fst0, fst1, &env->active_fpu.fp_status))
FOP_COND_S(ngt, float32_unordered(fst1, fst0, &env->active_fpu.fp_status) ||
float32_le(fst0, fst1, &env->active_fpu.fp_status))
#define FOP_COND_PS(op, condl, condh) \
@@ -3000,33 +3000,33 @@ FOP_COND_PS(f, (float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status
(float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status), 0))
FOP_COND_PS(un, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status),
float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status))
-FOP_COND_PS(eq, !float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) && float32_eq_quiet(fst0, fst1,
&env->active_fpu.fp_status),
- !float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) && float32_eq_quiet(fsth0, fsth1,
&env->active_fpu.fp_status))
+FOP_COND_PS(eq, float32_eq_quiet(fst0, fst1, &env->active_fpu.fp_status),
+ float32_eq_quiet(fsth0, fsth1, &env->active_fpu.fp_status))
FOP_COND_PS(ueq, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_eq_quiet(fst0, fst1,
&env->active_fpu.fp_status),
float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) || float32_eq_quiet(fsth0, fsth1,
&env->active_fpu.fp_status))
-FOP_COND_PS(olt, !float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) && float32_lt(fst0, fst1,
&env->active_fpu.fp_status),
- !float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) && float32_lt(fsth0, fsth1,
&env->active_fpu.fp_status))
-FOP_COND_PS(ult, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_lt(fst0, fst1,
&env->active_fpu.fp_status),
- float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) || float32_lt(fsth0, fsth1,
&env->active_fpu.fp_status))
-FOP_COND_PS(ole, !float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) && float32_le(fst0, fst1,
&env->active_fpu.fp_status),
- !float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) && float32_le(fsth0, fsth1,
&env->active_fpu.fp_status))
-FOP_COND_PS(ule, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_le(fst0, fst1,
&env->active_fpu.fp_status),
- float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) || float32_le(fsth0, fsth1,
&env->active_fpu.fp_status))
+FOP_COND_PS(olt, float32_lt_quiet(fst0, fst1, &env->active_fpu.fp_status),
+ float32_lt_quiet(fsth0, fsth1, &env->active_fpu.fp_status))
+FOP_COND_PS(ult, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_lt_quiet(fst0, fst1,
&env->active_fpu.fp_status),
+ float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) || float32_lt_quiet(fsth0, fsth1,
&env->active_fpu.fp_status))
+FOP_COND_PS(ole, float32_le_quiet(fst0, fst1, &env->active_fpu.fp_status),
+ float32_le_quiet(fsth0, fsth1, &env->active_fpu.fp_status))
+FOP_COND_PS(ule, float32_unordered_quiet(fst1, fst0,
&env->active_fpu.fp_status) || float32_le_quiet(fst0, fst1,
&env->active_fpu.fp_status),
+ float32_unordered_quiet(fsth1, fsth0,
&env->active_fpu.fp_status) || float32_le_quiet(fsth0, fsth1,
&env->active_fpu.fp_status))
/* NOTE: the comma operator will make "cond" to eval to false,
* but float32_unordered() is still called. */
FOP_COND_PS(sf, (float32_unordered(fst1, fst0, &env->active_fpu.fp_status),
0),
(float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status),
0))
FOP_COND_PS(ngle,float32_unordered(fst1, fst0, &env->active_fpu.fp_status),
float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status))
-FOP_COND_PS(seq, !float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
&& float32_eq_quiet(fst0, fst1, &env->active_fpu.fp_status),
- !float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
&& float32_eq_quiet(fsth0, fsth1, &env->active_fpu.fp_status))
-FOP_COND_PS(ngl, float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
|| float32_eq_quiet(fst0, fst1, &env->active_fpu.fp_status),
- float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
|| float32_eq_quiet(fsth0, fsth1, &env->active_fpu.fp_status))
-FOP_COND_PS(lt, !float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
&& float32_lt(fst0, fst1, &env->active_fpu.fp_status),
- !float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
&& float32_lt(fsth0, fsth1, &env->active_fpu.fp_status))
+FOP_COND_PS(seq, float32_eq(fst0, fst1, &env->active_fpu.fp_status),
+ float32_eq(fsth0, fsth1, &env->active_fpu.fp_status))
+FOP_COND_PS(ngl, float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
|| float32_eq(fst0, fst1, &env->active_fpu.fp_status),
+ float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
|| float32_eq(fsth0, fsth1, &env->active_fpu.fp_status))
+FOP_COND_PS(lt, float32_lt(fst0, fst1, &env->active_fpu.fp_status),
+ float32_lt(fsth0, fsth1, &env->active_fpu.fp_status))
FOP_COND_PS(nge, float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
|| float32_lt(fst0, fst1, &env->active_fpu.fp_status),
float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
|| float32_lt(fsth0, fsth1, &env->active_fpu.fp_status))
-FOP_COND_PS(le, !float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
&& float32_le(fst0, fst1, &env->active_fpu.fp_status),
- !float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
&& float32_le(fsth0, fsth1, &env->active_fpu.fp_status))
+FOP_COND_PS(le, float32_le(fst0, fst1, &env->active_fpu.fp_status),
+ float32_le(fsth0, fsth1, &env->active_fpu.fp_status))
FOP_COND_PS(ngt, float32_unordered(fst1, fst0, &env->active_fpu.fp_status)
|| float32_le(fst0, fst1, &env->active_fpu.fp_status),
float32_unordered(fsth1, fsth0, &env->active_fpu.fp_status)
|| float32_le(fsth0, fsth1, &env->active_fpu.fp_status))
--
1.7.2.3
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, (continued)
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Aurelien Jarno, 2011/04/13
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Peter Maydell, 2011/04/14
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Richard Henderson, 2011/04/14
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Peter Maydell, 2011/04/14
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Richard Henderson, 2011/04/14
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Peter Maydell, 2011/04/14
- Re: [Qemu-devel] [PATCH 08/19] target-alpha: use new float64_unordered() function, Richard Henderson, 2011/04/14
[Qemu-devel] [PATCH 11/19] softfloat: rename float*_eq() into float*_eq_quiet(), Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 19/19] target-mips: don't hardcode softfloat exception bits, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 13/19] softfloat: move float*_eq and float*_eq_quiet, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 18/19] target-mips: simplify FP comparisons,
Aurelien Jarno <=
[Qemu-devel] [PATCH 09/19] target-mips: use new float*_unordered*() functions, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 16/19] target-alpha: fix wrong usage of float64_eq_quiet(), Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 10/19] target-i386: fix CMPUNORDPS/D and CMPORDPS/D instructions, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 14/19] softfloat: improve description of comparison functions, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 17/19] target-ppc: fix SPE comparison functions, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 01/19] softfloat: use GCC builtins to count the leading zeros, Aurelien Jarno, 2011/04/12
[Qemu-devel] [PATCH 12/19] softfloat: rename float*_eq_signaling() into float*_eq(), Aurelien Jarno, 2011/04/12