2002-02-19 Radek Doulik <rodo@ximian.com>
authorRadek Doulik <rodo@mono-cvs.ximian.com>
Tue, 19 Feb 2002 19:49:10 +0000 (19:49 -0000)
committerRadek Doulik <rodo@mono-cvs.ximian.com>
Tue, 19 Feb 2002 19:49:10 +0000 (19:49 -0000)
* ppc/tramp.c (emit_save_parameters): don't start saving 64bit
values to
even registers

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

mono/arch/ChangeLog
mono/arch/ppc/tramp.c

index 05dcf1206c8581f18ec85888067c706e9ce51d8e..dee1900df0fad5dd806a45195522146d692cbf4e 100644 (file)
@@ -1,3 +1,7 @@
+2002-02-19  Radek Doulik  <rodo@ximian.com>
+
+       * ppc/tramp.c (emit_save_parameters): don't start saving 64bit values to
+       even registers
 
 Tue Feb 19 20:19:38 CET 2002 Paolo Molaro <lupus@ximian.com>
 
index 3db11345186d1f1bf72d6a67e51da6e1e494a19c..41e05f879ceada6e2a4e5f1ca7cd99a70cd6a5b8 100644 (file)
@@ -21,8 +21,8 @@
 #endif
 #endif
 
-/* void
-fake_func (gdouble (*callme)(), stackval *retval, void *this_obj, stackval *arguments)
+/* gpointer
+fake_func (gpointer (*callme)(gpointer), stackval *retval, void *this_obj, stackval *arguments)
 {
        guint32 i = 0xc002becd;
 
@@ -30,6 +30,8 @@ fake_func (gdouble (*callme)(), stackval *retval, void *this_obj, stackval *argu
 
        *(gpointer*)retval = (gpointer)(*callme) (arguments [0].data.p, arguments [1].data.p, arguments [2].data.p);
        *(gdouble*) retval = (gdouble)(*callme) (arguments [0].data.f);
+
+       return (gpointer) (*callme) (((MonoType *)arguments [0]. data.p)->data.klass);
 } */
 
 #define MIN_CACHE_LINE 8
@@ -80,6 +82,8 @@ add_general (guint *gr, guint *stack_size, guint *code_size, gboolean simple)
                } else {
                        *code_size += 16;   /* 2x load from stack */
                }
+               if ((*gr) && 1)
+                       (*gr) ++;
                (*gr) ++;
        }
        (*gr) ++;
@@ -369,6 +373,8 @@ emit_save_parameters (guint8 *p, MonoMethod *method, guint stack_size, guint str
                        break;
                case MONO_TYPE_I8:
                        if (gr < 7) {
+                               if (gr & 1)
+                                       gr ++;
                                g_warning ("check endianess");
                                ppc_lwz  (p, ppc_r3 + gr, i*16, ARG_BASE);
                                gr ++;