Fri Jul 19 14:21:18 CEST 2002 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Fri, 19 Jul 2002 12:23:32 +0000 (12:23 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Fri, 19 Jul 2002 12:23:32 +0000 (12:23 -0000)
* interp.c: fix float boxing on LE systems.

svn path=/trunk/mono/; revision=5911

mono/interpreter/ChangeLog
mono/interpreter/interp.c

index 3b0ef84b0ea7aead9f6605b1069651fe742ad935..96da86f58125bf2c276a8e40ea398694d2c72e9f 100644 (file)
@@ -1,4 +1,8 @@
 
+Fri Jul 19 14:21:18 CEST 2002 Paolo Molaro <lupus@ximian.com>
+
+       * interp.c: fix float boxing on LE systems.
+
 Sat Jul 13 19:54:56 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * interp.c: advance ip in conv.r.un.
index 1c264a0f142be669455ba8c2c84960d6cd4d24b3..75a5c3a8186f45b5497afa6be7751e91f44b2784 100644 (file)
@@ -2454,7 +2454,27 @@ ves_exec_method (MonoInvocation *frame)
                        }
                        sp [-1].type = VAL_I64;
                        BREAK;
-               CASE (CEE_CONV_R4) /* Fall through */
+               CASE (CEE_CONV_R4) {
+                       ++ip;
+                       switch (sp [-1].type) {
+                       case VAL_DOUBLE:
+                               sp [-1].data.f = (float)sp [-1].data.f;
+                               break;
+                       case VAL_I64:
+                               sp [-1].data.f = (float)sp [-1].data.l;
+                               break;
+                       case VAL_VALUET:
+                               ves_abort();
+                       case VAL_I32:
+                               sp [-1].data.f = (float)sp [-1].data.i;
+                               break;
+                       default:
+                               sp [-1].data.f = (float)sp [-1].data.nati;
+                               break;
+                       }
+                       sp [-1].type = VAL_DOUBLE;
+                       BREAK;
+               }
                CASE (CEE_CONV_R8) {
                        ++ip;
                        switch (sp [-1].type) {
@@ -3038,9 +3058,7 @@ array_constructed:
                        if (class->byval_arg.type == MONO_TYPE_VALUETYPE && !class->enumtype) 
                                sp [-1].data.p = mono_value_box (domain, class, sp [-1].data.p);
                        else {
-#if G_BYTE_ORDER != G_LITTLE_ENDIAN
                                stackval_to_data (&class->byval_arg, &sp [-1], (char*)&sp [-1]);
-#endif
                                sp [-1].data.p = mono_value_box (domain, class, &sp [-1]);
                        }
                        /* need to vt_free (sp); */