Math functions helper for CONFIG_SOFTFLOAT=yes
authoraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 13 Mar 2008 19:20:00 +0000 (19:20 +0000)
committeraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 13 Mar 2008 19:20:00 +0000 (19:20 +0000)
The patch below adds isfinite() and isnormal() functions which can
work with float64 type, used when CONFIG_SOFTFLOAT=yes.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4048 c046a42c-6fe2-441c-8c8c-71466251a162

target-ppc/op_helper.c

index 7136e51..544d906 100644 (file)
@@ -492,6 +492,27 @@ static always_inline int isinfinity (float64 d)
         (u.ll & 0x000FFFFFFFFFFFFFULL) == 0;
 }
 
+#ifdef CONFIG_SOFTFLOAT
+static always_inline int isfinite (float64 d)
+{
+    CPU_DoubleU u;
+
+    u.d = d;
+
+    return (((u.ll >> 52) & 0x7FF) != 0x7FF);
+}
+
+static always_inline int isnormal (float64 d)
+{
+    CPU_DoubleU u;
+
+    u.d = d;
+
+    uint32_t exp = (u.ll >> 52) & 0x7FF;
+    return ((0 < exp) && (exp < 0x7FF));
+}
+#endif
+
 void do_compute_fprf (int set_fprf)
 {
     int isneg;