[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 15/19] target-ppc: fix SPE comparison functions
From: |
Aurelien Jarno |
Subject: |
[Qemu-devel] [PATCH v2 15/19] target-ppc: fix SPE comparison functions |
Date: |
Thu, 14 Apr 2011 01:11:10 +0200 |
efstst*() functions are fast SPE funtions which do not take into account
special values (infinites, NaN, etc.), while efscmp*() functions are
IEEE754 compliant.
Given that float32_*() functions are IEEE754 compliant, the efscmp*()
functions are correctly implemented, while efstst*() are not. This
patch reverse the implementation of this two groups of functions and
fix the comments. It also use float32_eq() instead of float32_eq_quiet()
as qNaNs should not be ignored.
Cc: Alexander Graf <address@hidden>
Cc: Nathan Froyd <address@hidden>
Signed-off-by: Aurelien Jarno <address@hidden>
---
target-ppc/op_helper.c | 26 +++++++++++++-------------
1 files changed, 13 insertions(+), 13 deletions(-)
v2: fix calls to efscmp*, removing an infinite loop
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index f645f57..9aa108e 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -3331,7 +3331,7 @@ HELPER_SPE_VECTOR_ARITH(fsmul);
HELPER_SPE_VECTOR_ARITH(fsdiv);
/* Single-precision floating-point comparisons */
-static inline uint32_t efststlt(uint32_t op1, uint32_t op2)
+static inline uint32_t efscmplt(uint32_t op1, uint32_t op2)
{
CPU_FloatU u1, u2;
u1.l = op1;
@@ -3339,7 +3339,7 @@ static inline uint32_t efststlt(uint32_t op1, uint32_t
op2)
return float32_lt(u1.f, u2.f, &env->vec_status) ? 4 : 0;
}
-static inline uint32_t efststgt(uint32_t op1, uint32_t op2)
+static inline uint32_t efscmpgt(uint32_t op1, uint32_t op2)
{
CPU_FloatU u1, u2;
u1.l = op1;
@@ -3347,30 +3347,30 @@ static inline uint32_t efststgt(uint32_t op1, uint32_t
op2)
return float32_le(u1.f, u2.f, &env->vec_status) ? 0 : 4;
}
-static inline uint32_t efststeq(uint32_t op1, uint32_t op2)
+static inline uint32_t efscmpeq(uint32_t op1, uint32_t op2)
{
CPU_FloatU u1, u2;
u1.l = op1;
u2.l = op2;
- return float32_eq_quiet(u1.f, u2.f, &env->vec_status) ? 4 : 0;
+ return float32_eq(u1.f, u2.f, &env->vec_status) ? 4 : 0;
}
-static inline uint32_t efscmplt(uint32_t op1, uint32_t op2)
+static inline uint32_t efststlt(uint32_t op1, uint32_t op2)
{
- /* XXX: TODO: test special values (NaN, infinites, ...) */
- return efststlt(op1, op2);
+ /* XXX: TODO: ignore special values (NaN, infinites, ...) */
+ return efscmplt(op1, op2);
}
-static inline uint32_t efscmpgt(uint32_t op1, uint32_t op2)
+static inline uint32_t efststgt(uint32_t op1, uint32_t op2)
{
- /* XXX: TODO: test special values (NaN, infinites, ...) */
- return efststgt(op1, op2);
+ /* XXX: TODO: ignore special values (NaN, infinites, ...) */
+ return efscmpgt(op1, op2);
}
-static inline uint32_t efscmpeq(uint32_t op1, uint32_t op2)
+static inline uint32_t efststeq(uint32_t op1, uint32_t op2)
{
- /* XXX: TODO: test special values (NaN, infinites, ...) */
- return efststeq(op1, op2);
+ /* XXX: TODO: ignore special values (NaN, infinites, ...) */
+ return efscmpeq(op1, op2);
}
#define HELPER_SINGLE_SPE_CMP(name) \
--
1.7.2.3
- [Qemu-devel] [PATCH v2 01/19] softfloat: use GCC builtins to count the leading zeros, (continued)
- [Qemu-devel] [PATCH v2 01/19] softfloat: use GCC builtins to count the leading zeros, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 03/19] target-i386: use CPU_LDoubleU instead of a private union, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 10/19] target-i386: fix CMPUNORDPS/D and CMPORDPS/D instructions, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 19/19] target-mips: clear softfpu exception state for comparison instructions, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 17/19] target-mips: don't hardcode softfloat exception bits, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 14/19] softfloat: improve description of comparison functions, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 18/19] target-mips: fix c.ps.* instructions, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 06/19] softfloat: add float*_unordered_{, quiet}() functions, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 09/19] target-mips: use new float*_unordered*() functions, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 12/19] softfloat: rename float*_eq_signaling() into float*_eq(), Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 15/19] target-ppc: fix SPE comparison functions,
Aurelien Jarno <=
- [Qemu-devel] [PATCH v2 02/19] cpu-all.h: define CPU_LDoubleU, Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 11/19] softfloat: rename float*_eq() into float*_eq_quiet(), Aurelien Jarno, 2011/04/13
- [Qemu-devel] [PATCH v2 16/19] target-mips: simplify FP comparisons, Aurelien Jarno, 2011/04/13