All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [6511] Add various NaN-handling macros
@ 2009-02-04  9:05 Aurelien Jarno
  0 siblings, 0 replies; only message in thread
From: Aurelien Jarno @ 2009-02-04  9:05 UTC (permalink / raw)
  To: qemu-devel

Revision: 6511
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6511
Author:   aurel32
Date:     2009-02-04 09:05:53 +0000 (Wed, 04 Feb 2009)

Log Message:
-----------
Add various NaN-handling macros

These simplify the implementation of the floating-point Altivec
instructions and reduce clutter.

Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

Modified Paths:
--------------
    trunk/target-ppc/op_helper.c

Modified: trunk/target-ppc/op_helper.c
===================================================================
--- trunk/target-ppc/op_helper.c	2009-02-03 23:06:34 UTC (rev 6510)
+++ trunk/target-ppc/op_helper.c	2009-02-04 09:05:53 UTC (rev 6511)
@@ -1965,6 +1965,23 @@
   for (index = ARRAY_SIZE(r->element)-1; index >= 0; index--)
 #endif
 
+/* If X is a NaN, store the corresponding QNaN into RESULT.  Otherwise,
+ * execute the following block.  */
+#define DO_HANDLE_NAN(result, x)                \
+    if (float32_is_nan(x) || float32_is_signaling_nan(x)) {     \
+        CPU_FloatU __f;                                         \
+        __f.f = x;                                              \
+        __f.l = __f.l | (1 << 22);  /* Set QNaN bit. */         \
+        result = __f.f;                                         \
+    } else
+
+#define HANDLE_NAN1(result, x)                  \
+    DO_HANDLE_NAN(result, x)
+#define HANDLE_NAN2(result, x, y)               \
+    DO_HANDLE_NAN(result, x) DO_HANDLE_NAN(result, y)
+#define HANDLE_NAN3(result, x, y, z)            \
+    DO_HANDLE_NAN(result, x) DO_HANDLE_NAN(result, y) DO_HANDLE_NAN(result, z)
+
 /* Saturating arithmetic helpers.  */
 #define SATCVT(from, to, from_type, to_type, min, max, use_min, use_max) \
     static always_inline to_type cvt##from##to (from_type x, int *sat)  \
@@ -2818,6 +2835,10 @@
 #undef UPKHI
 #undef UPKLO
 
+#undef DO_HANDLE_NAN
+#undef HANDLE_NAN1
+#undef HANDLE_NAN2
+#undef HANDLE_NAN3
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
 #undef LO_IDX

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-02-04  9:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-04  9:05 [Qemu-devel] [6511] Add various NaN-handling macros Aurelien Jarno

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.