Author: zoltan
Date: 2005-06-04 07:20:50 -0400 (Sat, 04 Jun 2005)
New Revision: 45397

Modified:
   trunk/mono/mono/mini/ChangeLog
   trunk/mono/mono/mini/mini-ia64.c
   trunk/mono/mono/mini/mini-ia64.h
Log:
2005-06-04  Zoltan Varga  <[EMAIL PROTECTED]>

        * mini-ia64.c mini-ia64.h: Fix cleanup of memory stack.


Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog      2005-06-04 10:06:28 UTC (rev 45396)
+++ trunk/mono/mono/mini/ChangeLog      2005-06-04 11:20:50 UTC (rev 45397)
@@ -1,3 +1,7 @@
+2005-06-04  Zoltan Varga  <[EMAIL PROTECTED]>
+
+       * mini-ia64.c mini-ia64.h: Fix cleanup of memory stack.
+
 2005-06-03  Zoltan Varga  <[EMAIL PROTECTED]>
 
        * mini-amd64.c (emit_call): Fix yet another bug in the near call 
optimization.

Modified: trunk/mono/mono/mini/mini-ia64.c
===================================================================
--- trunk/mono/mono/mini/mini-ia64.c    2005-06-04 10:06:28 UTC (rev 45396)
+++ trunk/mono/mono/mini/mini-ia64.c    2005-06-04 11:20:50 UTC (rev 45397)
@@ -2307,7 +2307,7 @@
 {
        int template, i;
        guint64 instructions [3];
-       guint8 gen_buf [8];
+       guint8 gen_buf [16];
        Ia64CodegenState gen;
 
        template = ia64_bundle_template (code);
@@ -2340,6 +2340,16 @@
                        continue;
 
                switch (ins_types_in_template [template][i]) {
+               case IA64_INS_TYPE_A:
+               case IA64_INS_TYPE_M:
+                       if ((opcode == 8) && (ia64_ins_x2a (ins) == 2) && 
(ia64_ins_ve (ins) == 0)) {
+                               /* adds */
+                               ia64_adds_imm_pred (gen, ia64_ins_qp (ins), 
ia64_ins_r1 (ins), (guint64)target, ia64_ins_r3 (ins));
+                               instructions [i] = gen.instructions [0];
+                       }
+                       else
+                               NOT_IMPLEMENTED;
+                       break;
                case IA64_INS_TYPE_B:
                        if ((opcode == 4) && (ia64_ins_btype (ins) == 0)) {
                                /* br.cond */
@@ -2436,6 +2446,8 @@
                alloc_size += 16;
        alloc_size = ALIGN_TO (alloc_size, MONO_ARCH_FRAME_ALIGNMENT);
 
+       cfg->arch.stack_alloc_size = alloc_size;
+
        pos = 0;
 
        if (method->save_lmf) {
@@ -2608,7 +2620,7 @@
        }
        g_free (cinfo);
 
-       if (cfg->stack_offset)
+       if (cfg->arch.stack_alloc_size)
                ia64_mov (code, IA64_SP, cfg->arch.reg_saved_sp);
 
        ia64_mov_to_ar_i (code, IA64_PFS, cfg->arch.reg_saved_ar_pfs);

Modified: trunk/mono/mono/mini/mini-ia64.h
===================================================================
--- trunk/mono/mono/mini/mini-ia64.h    2005-06-04 10:06:28 UTC (rev 45396)
+++ trunk/mono/mono/mini/mini-ia64.h    2005-06-04 11:20:50 UTC (rev 45397)
@@ -57,6 +57,7 @@
 } MonoContext;
 
 typedef struct MonoCompileArch {
+       gint32 stack_alloc_size;
        gint32 lmf_offset;
        gint32 localloc_offset;
        gint32 n_out_regs;
@@ -106,5 +107,4 @@
 #define MONO_ARCH_HAVE_PIC_AOT 1
 #define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1
 
-
 #endif /* __MONO_MINI_IA64_H__ */  

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to