JavaVM.st
branchdevelopment
changeset 1867 cd4ec4fbe798
parent 1865 96e851c925de
child 1876 482ad5ebe5da
--- a/JavaVM.st	Mon Dec 10 20:27:49 2012 +0000
+++ b/JavaVM.st	Tue Dec 11 23:15:40 2012 +0000
@@ -7558,50 +7558,36 @@
      * @since 1.3
      */
     "
-    | f b |
+    | f |
     f := aJavaContext argAt:1.
-    (f =  0.0) ifTrue:[^0].
-    (f = -0.0) ifTrue:[^(1 bitShift: 63)].
-
-    b := ByteArray streamContents:[:s|Float storeBinaryIEEEDouble:f on:s].
-    ^ LargeInteger digitBytes: b MSB: UninterpretedBytes isBigEndian not.
+    f class == Float ifFalse:[ ^self throwIllegalArgumentException: 'Not a float'].
+%{
+    {
+        double d = __floatVal(f);
+        RETURN (__MKINT64( &d ));
+    }
+%}.
+    self primitiveFailed.
 
     "Created: / 10-11-2010 / 14:48:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 07-08-2011 / 21:43:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-12-2012 / 22:32:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Double_longBitsToDouble: nativeContext
 
     <javanative: 'java/lang/Double' name: 'longBitsToDouble'>
 
-        |i aFloat|
+    | i f|
 
     i := nativeContext argAt:1.
-
-    aFloat := Float new.
-    UninterpretedBytes isBigEndian ifTrue:[
-	aFloat basicAt:1 put:((i bitShift:-56) bitAnd:16rFF).
-	aFloat basicAt:2 put:((i bitShift:-48) bitAnd:16rFF).
-	aFloat basicAt:3 put:((i bitShift:-40) bitAnd:16rFF).
-	aFloat basicAt:4 put:((i bitShift:-32) bitAnd:16rFF).
-	aFloat basicAt:5 put:((i bitShift:-24) bitAnd:16rFF).
-	aFloat basicAt:6 put:((i bitShift:-16) bitAnd:16rFF).
-	aFloat basicAt:7 put:((i bitShift:-8) bitAnd:16rFF).
-	aFloat basicAt:8 put:(i bitAnd:16rFF).
-    ] ifFalse:[
-	aFloat basicAt:1 put:(i bitAnd:16rFF).
-	aFloat basicAt:2 put:((i bitShift:-8) bitAnd:16rFF).
-	aFloat basicAt:3 put:((i bitShift:-16) bitAnd:16rFF).
-	aFloat basicAt:4 put:((i bitShift:-24) bitAnd:16rFF).
-	aFloat basicAt:5 put:((i bitShift:-32) bitAnd:16rFF).
-	aFloat basicAt:6 put:((i bitShift:-40) bitAnd:16rFF).
-	aFloat basicAt:7 put:((i bitShift:-48) bitAnd:16rFF).
-	aFloat basicAt:8 put:((i bitShift:-56) bitAnd:16rFF).
-    ].
-
-    ^ aFloat.
-
-    "Created: / 4.1.1998 / 01:45:00 / cg"
+    f := Float new.
+%{
+    __floatVal(f) = (double)(__longIntVal(i));
+%}.
+    ^f
+
+    "Created: / 04-01-1998 / 01:45:00 / cg"
+    "Modified: / 11-12-2012 / 21:58:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Float_floatToRawIntBits: aJavaContext
@@ -7645,42 +7631,36 @@
      * @since 1.3
      */
     "
-    | f b |
+    | f |
     f := aJavaContext argAt:1.
-    (f =  0.0) ifTrue:[^0].
-    (f = -0.0) ifTrue:[^(1 bitShift: 31) ].
-
-    b := ByteArray streamContents:[:s|ShortFloat storeBinaryIEEESingle:f on:s].
-    ^ (LargeInteger digitBytes: b MSB: UninterpretedBytes isBigEndian not) compressed
+    f class == ShortFloat ifFalse:[ self throwIllegalArgumentException: 'Not a float'].
+%{
+    {
+        int *i = &(__shortFloatVal(f));
+        printf(">> F2raw bits: f=%f i=0x%04x\n", __shortFloatVal(f), *i);
+        RETURN (__MKINT(*i));
+    }
+%}.
+    self primitiveFailed.
 
     "Created: / 09-11-2010 / 20:59:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 07-08-2011 / 21:45:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 11-12-2012 / 21:56:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Float_intBitsToFloat: nativeContext
 
     <javanative: 'java/lang/Float' name: 'intBitsToFloat(I)F'>
 
-    |i aFloat|
+    | i f|
 
     i := nativeContext argAt:1.
-
-    aFloat := ShortFloat basicNew.
-    UninterpretedBytes isBigEndian ifTrue:[
-        aFloat basicAt:1 put:((i bitShift:-24) bitAnd:16rFF).
-        aFloat basicAt:2 put:((i bitShift:-16) bitAnd:16rFF).
-        aFloat basicAt:3 put:((i bitShift:-8) bitAnd:16rFF).
-        aFloat basicAt:4 put:(i bitAnd:16rFF).
-    ] ifFalse:[
-        aFloat basicAt:1 put:(i bitAnd:16rFF).
-        aFloat basicAt:2 put:((i bitShift:-8) bitAnd:16rFF).
-        aFloat basicAt:3 put:((i bitShift:-16) bitAnd:16rFF).
-        aFloat basicAt:4 put:((i bitShift:-24) bitAnd:16rFF).
-    ].
-
-    ^ aFloat.
-
-    "Modified: / 13-09-2011 / 20:05:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    f := ShortFloat new.
+%{
+    __shortFloatVal(f) = (float)(__intVal(i));
+%}.
+    ^f
+
+    "Modified: / 11-12-2012 / 21:53:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 _java_lang_Object_clone: nativeContext