PatchSet 7747 
Date: 2008/02/15 00:01:16
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
cache Float.NaN for conversions

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

* kaffe/kaffevm/fp.c (floatAdd, floatSubtract, floatMultiply)
(floatDivide):  Use KAFFE_JFLOAT_NAN.

* kaffe/kaffevm/soft.c (soft_cvtdf):  Use KAFFE_JFLOAT_NAN. Documented.

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

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

Members: 
        ChangeLog:1.5247->1.5248 
        kaffe/kaffevm/baseClasses.c:1.81->1.82 
        kaffe/kaffevm/baseClasses.h:1.26->1.27 
        kaffe/kaffevm/fp.c:1.10->1.11 
        kaffe/kaffevm/soft.c:1.89->1.90 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.5247 kaffe/ChangeLog:1.5248
--- kaffe/ChangeLog:1.5247      Thu Feb 14 23:42:20 2008
+++ kaffe/ChangeLog     Fri Feb 15 00:01:16 2008
@@ -1,5 +1,17 @@
 2008-02-15  Dalibor Topic  <[EMAIL PROTECTED]>
 
+       * kaffe/kaffevm/fp.c (floatAdd, floatSubtract, floatMultiply)
+       (floatDivide):  Use KAFFE_JFLOAT_NAN.
+
+       * kaffe/kaffevm/soft.c (soft_cvtdf):  Use KAFFE_JFLOAT_NAN. Documented.
+
+       * kaffe/kaffevm/baseClasses.c (initBaseClasses): Initialize 
KAFFE_JFLOAT_NAN.
+
+       * kaffe/kaffevm/baseClasses.h (KAFFE_JFLOAT_NAN): New field caching
+       java.lang.Float.NaN.
+
+2008-02-15  Dalibor Topic  <[EMAIL PROTECTED]>
+
        * kaffe/kaffevm/fp.h (DNANBITS, longToDouble): Removed.
 
        * kaffe/kaffevm/fp.c (longToDouble): Simplified collapsing of NaNs.
Index: kaffe/kaffe/kaffevm/baseClasses.c
diff -u kaffe/kaffe/kaffevm/baseClasses.c:1.81 
kaffe/kaffe/kaffevm/baseClasses.c:1.82
--- kaffe/kaffe/kaffevm/baseClasses.c:1.81      Thu Feb 14 23:31:41 2008
+++ kaffe/kaffe/kaffevm/baseClasses.c   Fri Feb 15 00:01:18 2008
@@ -91,6 +91,7 @@
 Hjava_lang_Class* javaLangFloatClass;
 Hjava_lang_Class* javaLangDoubleClass;
 
+jfloat KAFFE_JFLOAT_NAN;
 jdouble KAFFE_JDOUBLE_NAN;
 
 Hjava_lang_Class *javaNioBufferClass;
@@ -425,6 +426,9 @@
            KAFFEVM_EXIT(-1);
          }
 
+       KAFFE_JFLOAT_NAN = KaffeJNI_GetStaticFloatField(NULL, 
javaLangFloatClass, 
+                                                         
KNI_lookupFieldC(javaLangFloatClass,
+                                                                          
"NaN", true, &einfo));
        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.26 
kaffe/kaffe/kaffevm/baseClasses.h:1.27
--- kaffe/kaffe/kaffevm/baseClasses.h:1.26      Thu Feb 14 23:31:41 2008
+++ kaffe/kaffe/kaffevm/baseClasses.h   Fri Feb 15 00:01:19 2008
@@ -50,6 +50,7 @@
 extern struct Hjava_lang_Class*        javaLangLongClass;
 extern struct Hjava_lang_Class*        javaLangFloatClass;
 extern struct Hjava_lang_Class*        javaLangDoubleClass;
+extern jfloat KAFFE_JFLOAT_NAN;
 extern jdouble KAFFE_JDOUBLE_NAN;
 
 extern struct Hjava_lang_Class *javaNioDirectByteBufferImplClass;
Index: kaffe/kaffe/kaffevm/fp.c
diff -u kaffe/kaffe/kaffevm/fp.c:1.10 kaffe/kaffe/kaffevm/fp.c:1.11
--- kaffe/kaffe/kaffevm/fp.c:1.10       Thu Feb 14 23:42:22 2008
+++ kaffe/kaffe/kaffevm/fp.c    Fri Feb 15 00:01:19 2008
@@ -121,7 +121,7 @@
 floatAdd(jfloat v1, jfloat v2)
 {
        if (isnan(v1) || isnan(v2)) {
-               return intToFloat(FNANBITS);
+               return KAFFE_JFLOAT_NAN;
        }
        return (v1 + v2);
 }
@@ -145,7 +145,7 @@
 floatSubtract(jfloat v1, jfloat v2)
 {
        if (isnan(v1) || isnan(v2)) {
-               return intToFloat(FNANBITS);
+               return KAFFE_JFLOAT_NAN;
        }
        return (v1 - v2);
 }
@@ -169,7 +169,7 @@
 floatMultiply(jfloat v1, jfloat v2)
 {
        if (isnan(v1) || isnan(v2)) {
-               return intToFloat(FNANBITS);
+               return KAFFE_JFLOAT_NAN;
        }
        return (v1 * v2);
 }
@@ -209,13 +209,13 @@
        v2bits = floatToInt(v2);
 
        if (isnan(v1) || isnan(v2)) {
-               return intToFloat(FNANBITS);
+               return KAFFE_JFLOAT_NAN;
        }
        if (v2 != 0.0) {
                return (v1 / v2);
        }
        if (v1 == 0.0) {
-               return intToFloat(FNANBITS);
+               return KAFFE_JFLOAT_NAN;
        }
        return intToFloat((jint)(FINFBITS | ((v1bits ^ v2bits) & FSIGNBIT)));
 }
Index: kaffe/kaffe/kaffevm/soft.c
diff -u kaffe/kaffe/kaffevm/soft.c:1.89 kaffe/kaffe/kaffevm/soft.c:1.90
--- kaffe/kaffe/kaffevm/soft.c:1.89     Thu Feb 14 23:31:41 2008
+++ kaffe/kaffe/kaffevm/soft.c  Fri Feb 15 00:01:19 2008
@@ -861,15 +861,20 @@
                return (jdouble)v;
 }
 
+/**
+ * convert a double to float
+ *
+ * @param v a double
+ * 
+ * @return the float corresponding to the double, or Float.NaN if the double 
is a NaN.
+ */
 jfloat
 soft_cvtdf(jdouble v)
 {
-        if (isnan(v)) {
-               return (intToFloat(FNANBITS));
-       }
-       else {
-               return ((jfloat)v);
-       }
+        if (isnan(v))
+               return KAFFE_JFLOAT_NAN;
+       else
+               return (jfloat)v;
 }
 
 /*

_______________________________________________
kaffe mailing list
kaffe@kaffe.org
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to