--- 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