PatchSet 7745 
Date: 2008/02/14 23:31:38
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
cache Double.NaN for conversions

2008-02-15  Dalibor Topic  <[EMAIL PROTECTED]>

* kaffe/kaffevm/fp.c (doubleAdd, doubleSubtract, doubleMultiply)
(doubleDivide): Use KAFFE_JDOUBLE_NAN.

* kaffe/kaffevm/soft.c (soft_cvtfd): Use KAFFE_JDOUBLE_NAN. Documented.

* kaffe/kaffevm/baseClasses.c (initBaseClasses): Initialize KAFFE_JDOUBLE_NAN.

* kaffe/kaffevm/baseClasses.h (KAFFE_JDOUBLE_NAN): New field caching
java.lang.Double.NaN.

Members: 
        ChangeLog:1.5245->1.5246 
        kaffe/kaffevm/baseClasses.c:1.80->1.81 
        kaffe/kaffevm/baseClasses.h:1.25->1.26 
        kaffe/kaffevm/fp.c:1.8->1.9 
        kaffe/kaffevm/soft.c:1.88->1.89 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.5245 kaffe/ChangeLog:1.5246
--- kaffe/ChangeLog:1.5245      Thu Feb 14 22:24:40 2008
+++ kaffe/ChangeLog     Thu Feb 14 23:31:38 2008
@@ -1,3 +1,15 @@
+2008-02-15  Dalibor Topic  <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/fp.c (doubleAdd, doubleSubtract, doubleMultiply)
+       (doubleDivide): Use KAFFE_JDOUBLE_NAN.
+
+       * kaffe/kaffevm/soft.c (soft_cvtfd): Use KAFFE_JDOUBLE_NAN. Documented.
+
+       * kaffe/kaffevm/baseClasses.c (initBaseClasses): Initialize 
KAFFE_JDOUBLE_NAN.
+
+       * kaffe/kaffevm/baseClasses.h (KAFFE_JDOUBLE_NAN): New field caching
+       java.lang.Double.NaN.
+
 2008-02-14  Dalibor Topic  <[EMAIL PROTECTED]>
 
        * kaffe/kaffevm/fp.h (DISNAN): Removed.
Index: kaffe/kaffe/kaffevm/baseClasses.c
diff -u kaffe/kaffe/kaffevm/baseClasses.c:1.80 
kaffe/kaffe/kaffevm/baseClasses.c:1.81
--- kaffe/kaffe/kaffevm/baseClasses.c:1.80      Mon Jan 21 01:04:36 2008
+++ kaffe/kaffe/kaffevm/baseClasses.c   Thu Feb 14 23:31:41 2008
@@ -44,6 +44,7 @@
 #include "fileSections.h"
 #include "verify-type.h"
 #include "jar.h"
+#include "jni_funcs.h"
 
 Utf8Const* init_name;
 Utf8Const* final_name;
@@ -90,6 +91,8 @@
 Hjava_lang_Class* javaLangFloatClass;
 Hjava_lang_Class* javaLangDoubleClass;
 
+jdouble KAFFE_JDOUBLE_NAN;
+
 Hjava_lang_Class *javaNioBufferClass;
 Hjava_lang_Class *javaNioDirectByteBufferImplClass;
 Hjava_lang_Class *javaNioDirectByteBufferImplReadWriteClass;
@@ -421,5 +424,9 @@
            DBG(INIT, dprintf("Cannot resolve fields necessary for NIO 
operations\n"); );
            KAFFEVM_EXIT(-1);
          }
+
+       KAFFE_JDOUBLE_NAN = KaffeJNI_GetStaticDoubleField(NULL, 
javaLangDoubleClass, 
+                                                         
KNI_lookupFieldC(javaLangDoubleClass,
+                                                                          
"NaN", true, &einfo));
 }
 
Index: kaffe/kaffe/kaffevm/baseClasses.h
diff -u kaffe/kaffe/kaffevm/baseClasses.h:1.25 
kaffe/kaffe/kaffevm/baseClasses.h:1.26
--- kaffe/kaffe/kaffevm/baseClasses.h:1.25      Fri Dec 16 20:35:47 2005
+++ kaffe/kaffe/kaffevm/baseClasses.h   Thu Feb 14 23:31:41 2008
@@ -50,6 +50,7 @@
 extern struct Hjava_lang_Class*        javaLangLongClass;
 extern struct Hjava_lang_Class*        javaLangFloatClass;
 extern struct Hjava_lang_Class*        javaLangDoubleClass;
+extern jdouble KAFFE_JDOUBLE_NAN;
 
 extern struct Hjava_lang_Class *javaNioDirectByteBufferImplClass;
 extern struct Hjava_lang_Class *javaNioDirectByteBufferImplReadWriteClass;
Index: kaffe/kaffe/kaffevm/fp.c
diff -u kaffe/kaffe/kaffevm/fp.c:1.8 kaffe/kaffe/kaffevm/fp.c:1.9
--- kaffe/kaffe/kaffevm/fp.c:1.8        Thu Feb 14 22:24:41 2008
+++ kaffe/kaffe/kaffevm/fp.c    Thu Feb 14 23:31:41 2008
@@ -15,6 +15,7 @@
 #include "config-mem.h"
 #include "config-hacks.h"
 #include <math.h>
+#include "baseClasses.h"
 #include "gtypes.h"
 #include "defs.h"
 #include "files.h"
@@ -106,7 +107,7 @@
 doubleAdd(jdouble v1, jdouble v2)
 {
        if (isnan(v1) || isnan(v2)) {
-               return longToDouble(DNANBITS);
+               return KAFFE_JDOUBLE_NAN;
        }
        return (v1 + v2);
 }
@@ -130,7 +131,7 @@
 doubleSubtract(jdouble v1, jdouble v2)
 {
        if (isnan(v1) || isnan(v2)) {
-               return longToDouble(DNANBITS);
+         return KAFFE_JDOUBLE_NAN;
        }
        return (v1 - v2);
 }
@@ -154,7 +155,7 @@
 doubleMultiply(jdouble v1, jdouble v2)
 {
        if (isnan(v1) || isnan(v2)) {
-               return longToDouble(DNANBITS);
+         return KAFFE_JDOUBLE_NAN;
        }
        return (v1 * v2);
 }
@@ -183,13 +184,13 @@
        v2bits = doubleToLong(v2);
 
        if (isnan(v1) || isnan(v2)) {
-               return longToDouble(DNANBITS);
+               return KAFFE_JDOUBLE_NAN;
        }
        if (v2 != 0.0) {
                return (v1 / v2);
        }
        if (v1 == 0.0) {
-               return longToDouble(DNANBITS);
+               return KAFFE_JDOUBLE_NAN;
        }
        return longToDouble((jlong)(DINFBITS | ((v1bits ^ v2bits) & DSIGNBIT)));
 }
Index: kaffe/kaffe/kaffevm/soft.c
diff -u kaffe/kaffe/kaffevm/soft.c:1.88 kaffe/kaffe/kaffevm/soft.c:1.89
--- kaffe/kaffe/kaffevm/soft.c:1.88     Thu Feb 14 22:24:41 2008
+++ kaffe/kaffe/kaffevm/soft.c  Thu Feb 14 23:31:41 2008
@@ -845,15 +845,20 @@
        return ((jdouble)v);
 }
 
+/**
+ * convert a float to a double
+ *
+ * @param v a float
+ * 
+ * @return the double corresponding to the float, or Double.NaN if the float 
is a NaN.
+ */
 jdouble
 soft_cvtfd(jfloat v)
 {
-        if (isnan(v)) {
-               return (longToDouble(DNANBITS));
-       }
-       else {
-               return ((jdouble)v);
-       }
+        if (isnan(v))
+               return KAFFE_JDOUBLE_NAN;
+       else
+               return (jdouble)v;
 }
 
 jfloat

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to