Author: gonzalo
Date: 2006-06-15 17:21:12 -0400 (Thu, 15 Jun 2006)
New Revision: 61775

Modified:
   branches/mono-1-1-13/mono/mono/io-layer/atomic.h
   branches/mono-1-1-13/mono/mono/mini/cpu-s390.md
   branches/mono-1-1-13/mono/mono/mini/cpu-s390x.md
   branches/mono-1-1-13/mono/mono/mini/inssel-amd64.brg
   branches/mono-1-1-13/mono/mono/mini/inssel-s390.brg
   branches/mono-1-1-13/mono/mono/mini/inssel-s390x.brg
   branches/mono-1-1-13/mono/mono/mini/mini-amd64.c
   branches/mono-1-1-13/mono/mono/mini/mini-arm.c
   branches/mono-1-1-13/mono/mono/mini/mini-codegen.c
   branches/mono-1-1-13/mono/mono/mini/mini-ia64.c
   branches/mono-1-1-13/mono/mono/mini/mini-s390.c
   branches/mono-1-1-13/mono/mono/mini/mini-s390.h
   branches/mono-1-1-13/mono/mono/mini/mini-s390x.c
   branches/mono-1-1-13/mono/mono/mini/mini-s390x.h
   branches/mono-1-1-13/mono/mono/mini/mini-sparc.c
   branches/mono-1-1-13/mono/mono/mini/mini-x86.c
   branches/mono-1-1-13/mono/mono/mini/mini.h
   branches/mono-1-1-13/mono/mono/mini/tramp-s390.c
   branches/mono-1-1-13/mono/mono/mini/tramp-s390x.c
Log:
backport from head

Modified: branches/mono-1-1-13/mono/mono/io-layer/atomic.h
===================================================================
--- branches/mono-1-1-13/mono/mono/io-layer/atomic.h    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/io-layer/atomic.h    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -326,21 +326,17 @@
        gpointer old;
 
        __asm__ __volatile__ ("\tLA\t1,%0\n"
-                             "0:\tLG\t%1,%0\n"
-                             "\tCGR\t%1,%3\n"
-                             "\tJNE\t1f\n"
-                             "\tCSG\t%1,%2,0(1)\n"
-                             "\tJNZ\t0b\n"
-                             "1:\n"
-                             : "+m" (*dest), "=r" (old)
-                             : "r" (exch), "r" (comp)
-                             : "1", "cc");
+                               "\tLGR\t%1,%3\n"
+                               "\tCSG\t%1,%2,0(1)\n"
+                               : "+m" (*dest), "=r" (old)
+                               : "r" (exch), "r" (comp)
+                               : "1", "cc");
 
        return(old);
 }
 # endif
 
-
+# ifndef __s390x__
 static inline gint32 
 InterlockedIncrement(volatile gint32 *val)
 {
@@ -358,7 +354,27 @@
 
        return(tmp);
 }
+# else
+static inline gint32 
+InterlockedIncrement(volatile gint32 *val)
+{
+       gint32 tmp;
+       
+       __asm__ __volatile__ ("\tLA\t2,%1\n"
+                             "0:\tLGF\t%0,%1\n"
+                             "\tLGFR\t1,%0\n"
+                             "\tAGHI\t1,1\n"
+                             "\tCS\t%0,1,0(2)\n"
+                             "\tJNZ\t0b\n"
+                             "\tLGFR\t%0,1"
+                             : "=r" (tmp), "+m" (*val)
+                             : : "1", "2", "cc");
 
+       return(tmp);
+}
+# endif
+
+# ifndef __s390x__
 static inline gint32 
 InterlockedDecrement(volatile gint32 *val)
 {
@@ -376,7 +392,25 @@
 
        return(tmp);
 }
+# else
+static inline gint32 
+InterlockedDecrement(volatile gint32 *val)
+{
+       gint32 tmp;
+       
+       __asm__ __volatile__ ("\tLA\t2,%1\n"
+                             "0:\tLGF\t%0,%1\n"
+                             "\tLGFR\t1,%0\n"
+                             "\tAGHI\t1,-1\n"
+                             "\tCS\t%0,1,0(2)\n"
+                             "\tJNZ\t0b\n"
+                             "\tLGFR\t%0,1"
+                             : "=r" (tmp), "+m" (*val)
+                             : : "1", "2", "cc");
 
+       return(tmp);
+}
+# endif
 
 static inline gint32 
 InterlockedExchange(volatile gint32 *val, gint32 new_val)
@@ -428,6 +462,7 @@
 }
 # endif
 
+# ifndef __s390x__
 static inline gint32 
 InterlockedExchangeAdd(volatile gint32 *val, gint32 add)
 {
@@ -445,7 +480,26 @@
        
        return(ret);
 }
+# else
+static inline gint32 
+InterlockedExchangeAdd(volatile gint32 *val, gint32 add)
+{
+       gint32 ret;
 
+       __asm__ __volatile__ ("\tLA\t2,%1\n"
+                             "0:\tLGF\t%0,%1\n"
+                             "\tLGFR\t1,%0\n"
+                             "\tAGR\t1,%2\n"
+                             "\tCS\t%0,1,0(2)\n"
+                             "\tJNZ\t0b"
+                             : "=r" (ret), "+m" (*val)
+                             : "r" (add) 
+                             : "1", "2", "cc");
+       
+       return(ret);
+}
+# endif
+
 #elif defined(__ppc__) || defined (__powerpc__)
 #define WAPI_ATOMIC_ASM
 

Modified: branches/mono-1-1-13/mono/mono/mini/cpu-s390.md
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/cpu-s390.md     2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/cpu-s390.md     2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -152,7 +152,7 @@
 conv.r4: dest:f src1:i len:4
 conv.r8: dest:f src1:i len:4
 conv.u1: dest:i src1:i len:8
-conv.u2: dest:i src1:i len:14
+conv.u2: dest:i src1:i len:16
 conv.u4: dest:i src1:i
 conv.u8:
 conv.u: dest:i src1:i len:4

Modified: branches/mono-1-1-13/mono/mono/mini/cpu-s390x.md
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/cpu-s390x.md    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/cpu-s390x.md    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -60,12 +60,12 @@
 aot_const: dest:i len:8
 arg:
 arglist:
-atomic_add_i4: src1:b src2:i dest:i len:20
+atomic_add_i4: src1:b src2:i dest:i len:28
 atomic_add_i8: src1:b src2:i dest:i len:30
-atomic_add_new_i4: src1:b src2:i dest:i len:20
+atomic_add_new_i4: src1:b src2:i dest:i len:28
 atomic_add_new_i8: src1:b src2:i dest:i len:30
-atomic_exchange_i4: src1:b src2:i dest:i len:14
-atomic_exchange_i8: src1:b src2:i dest:i len:20
+atomic_exchange_i4: src1:b src2:i dest:i len:18
+atomic_exchange_i8: src1:b src2:i dest:i len:24
 beq.s:
 beq: len:8
 bge.s:
@@ -269,7 +269,7 @@
 int_div_un: dest:a src1:i src2:i len:16
 int_div_un_imm: dest:a src1:i len:24
 int_mul: dest:i src1:i src2:i len:16
-int_mul_imm: dest:i src1:i len:20
+int_mul_imm: dest:i src1:i len:24
 int_mul_ovf: dest:i src1:i src2:i len:44
 int_mul_ovf_un: dest:i src1:i src2:i len:22
 int_neg: dest:i src1:i len:12

Modified: branches/mono-1-1-13/mono/mono/mini/inssel-amd64.brg
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/inssel-amd64.brg        2006-06-15 
20:58:55 UTC (rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/inssel-amd64.brg        2006-06-15 
21:21:12 UTC (rev 61775)
@@ -209,7 +209,7 @@
        tree->dreg = mono_regstate_next_int (s->rs);
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 # we need to reduce this code duplication with some burg syntax extension
@@ -298,7 +298,7 @@
        tree->dreg = mono_regstate_next_float (s->rs);
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_AMD64_OUTARG_XMMREG_R8 (freg) {
@@ -309,7 +309,7 @@
        tree->dreg = mono_regstate_next_float (s->rs);
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_OUTARG_VT (CEE_LDOBJ (base)) {

Modified: branches/mono-1-1-13/mono/mono/mini/inssel-s390.brg
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/inssel-s390.brg 2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/inssel-s390.brg 2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -190,7 +190,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (reg) {
@@ -208,7 +208,7 @@
        tree->sreg1        = state->left->tree->dreg;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (OP_REGVAR) {
@@ -225,14 +225,14 @@
        tdreg = mono_regstate_next_int (s->rs);
        MONO_EMIT_NEW_UNALU (s, OP_SETREG, tdreg, state->left->reg2);
        
-       mono_call_inst_add_outarg_reg (call, tdreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tdreg, tree->unused, FALSE);
 
        tree->opcode = OP_SETREG;
        tree->dreg = mono_regstate_next_int (s->rs);
        tree->sreg1 = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
        
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused + 1, 
FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused + 1, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (lreg) {
@@ -252,7 +252,7 @@
        tree->inst_c0      = state->left->tree->inst_c0;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (OP_ICONST) {
@@ -270,7 +270,7 @@
        tree->dreg         = mono_regstate_next_int (s->rs);
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (CEE_LDIND_REF (OP_REGVAR)) {
@@ -300,7 +300,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_OUTARG_R8 (freg),
@@ -312,7 +312,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_OUTARG_MEMBASE (freg) {
@@ -342,7 +342,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 freg: OP_FCONV_TO_R4 (CEE_LDOBJ (OP_REGOFFSET)) {
@@ -379,7 +379,7 @@
                                           vt->inst_basereg, soffset, size);
                        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, 
                                                 STK_BASE, arg->offPrm);
-                       mono_call_inst_add_outarg_reg (call, treg, start_reg, 
FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, treg, 
start_reg, FALSE);
                } else { 
                        MONO_EMIT_NEW_MOVE(s, STK_BASE, arg->offPrm,
                                           vt->inst_basereg, soffset, size);
@@ -436,7 +436,7 @@
                                            vt->inst_basereg, soffset, size);
                        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg,
                                                 STK_BASE, arg->offPrm);
-                       mono_call_inst_add_outarg_reg (call, treg, start_reg, 
FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, treg, 
start_reg, FALSE);
                } else {
                        MONO_EMIT_NEW_MOVE (s, STK_BASE, arg->offPrm,
                                            vt->inst_basereg, soffset, size);
@@ -471,7 +471,7 @@
        MONO_EMIT_NEW_MOVE (s, STK_BASE, soffset, treg, 0, size);
        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, STK_BASE, soffset);
        if (start_reg != STK_BASE) {
-               mono_call_inst_add_outarg_reg (call, treg, start_reg, FALSE);
+               mono_call_inst_add_outarg_reg (s, call, treg, start_reg, FALSE);
        } else {
                MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, 
                                             STK_BASE, arg->offset, treg);
@@ -494,7 +494,7 @@
        MONO_EMIT_NEW_MOVE (s, STK_BASE, arg->offPrm, treg, 0, size);
        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, STK_BASE, arg->offPrm);
        if (base_reg != STK_BASE) {
-               mono_call_inst_add_outarg_reg (call, treg, base_reg, FALSE);
+               mono_call_inst_add_outarg_reg (s, call, treg, base_reg, FALSE);
        } else {
                MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, 
                                             STK_BASE, arg->offset, treg);
@@ -516,7 +516,7 @@
                        tree->dreg    = mono_regstate_next_int (s->rs);
                        tree->inst_c0 = state->left->tree->inst_c0;
                        mono_bblock_add_inst (s->cbb, tree);
-                       mono_call_inst_add_outarg_reg (call, tree->dreg, 
start_reg, FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, tree->dreg, 
start_reg, FALSE);
                }
        } else {
                MONO_OUTPUT_VTS (s, size, STK_BASE, tree->inst_c0, 
@@ -541,7 +541,7 @@
                                            0, size);
                        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg,
                                                 STK_BASE, arg->offPrm);
-                       mono_call_inst_add_outarg_reg (call, treg, start_reg, 
FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, treg, 
start_reg, FALSE);
                } else {
                        MONO_EMIT_NEW_MOVE (s, STK_BASE, soffset+size, 
state->left->reg1,
                                            0, size);

Modified: branches/mono-1-1-13/mono/mono/mini/inssel-s390x.brg
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/inssel-s390x.brg        2006-06-15 
20:58:55 UTC (rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/inssel-s390x.brg        2006-06-15 
21:21:12 UTC (rev 61775)
@@ -136,7 +136,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (reg) {
@@ -154,7 +154,7 @@
        tree->sreg1        = state->left->tree->dreg;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (OP_REGVAR) {
@@ -173,7 +173,7 @@
        tree->inst_c0      = state->left->tree->inst_c0;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (OP_ICONST) {
@@ -191,7 +191,7 @@
        tree->dreg         = mono_regstate_next_int (s->rs);
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, FALSE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, 
FALSE);
 }
 
 stmt: OP_OUTARG_MEMBASE (CEE_LDIND_REF (OP_REGVAR)) {
@@ -220,7 +220,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_OUTARG_R8 (freg),
@@ -232,7 +232,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_OUTARG_MEMBASE (freg) {
@@ -262,7 +262,7 @@
        tree->sreg1  = state->left->reg1;
        mono_bblock_add_inst (s->cbb, tree);
 
-       mono_call_inst_add_outarg_reg (call, tree->dreg, tree->unused, TRUE);
+       mono_call_inst_add_outarg_reg (s, call, tree->dreg, tree->unused, TRUE);
 }
 
 stmt: OP_OUTARG_VT (CEE_LDOBJ (base)) {
@@ -282,7 +282,7 @@
                                   vt->inst_basereg, soffset, size);
                MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, STK_BASE, 
arg->offPrm);
                if (start_reg != STK_BASE) {
-                       mono_call_inst_add_outarg_reg (call, treg, start_reg, 
FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, treg, 
start_reg, FALSE);
                } else { 
                        MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, 
                                                     STK_BASE, arg->offset, 
treg);
@@ -333,7 +333,7 @@
                                    vt->inst_basereg, soffset, size);
                MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, STK_BASE, 
arg->offPrm);
                if (start_reg != STK_BASE) {
-                       mono_call_inst_add_outarg_reg (call, treg, start_reg, 
FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, treg, 
start_reg, FALSE);
                } else {
                        MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, 
                                                     STK_BASE, arg->offset, 
treg);
@@ -365,7 +365,7 @@
        MONO_EMIT_NEW_MOVE (s, STK_BASE, soffset, treg, 0, size);
        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, STK_BASE, soffset);
        if (start_reg != STK_BASE) {
-               mono_call_inst_add_outarg_reg (call, treg, start_reg, FALSE);
+               mono_call_inst_add_outarg_reg (s, call, treg, start_reg, FALSE);
        } else {
                MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, 
                                             STK_BASE, arg->offset, treg);
@@ -388,7 +388,7 @@
        MONO_EMIT_NEW_MOVE (s, STK_BASE, arg->offPrm, treg, 0, size);
        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg, STK_BASE, arg->offPrm);
        if (start_reg != STK_BASE) {
-               mono_call_inst_add_outarg_reg (call, treg, start_reg, FALSE);
+               mono_call_inst_add_outarg_reg (s, call, treg, start_reg, FALSE);
        } else {
                MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, 
                                             STK_BASE, arg->offset, treg);
@@ -410,7 +410,7 @@
                        tree->dreg    = mono_regstate_next_int (s->rs);
                        tree->inst_c0 = state->left->tree->inst_c0;
                        mono_bblock_add_inst (s->cbb, tree);
-                       mono_call_inst_add_outarg_reg (call, tree->dreg, 
start_reg, FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, tree->dreg, 
start_reg, FALSE);
                }
        } else {
                MONO_OUTPUT_VTS (s, size, STK_BASE, tree->inst_c0, 
@@ -436,7 +436,7 @@
                                            0, size);
                        MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, treg,
                                                 STK_BASE, arg->offPrm);
-                       mono_call_inst_add_outarg_reg (call, treg, start_reg, 
FALSE);
+                       mono_call_inst_add_outarg_reg (s, call, treg, 
start_reg, FALSE);
                } else {
 //printf("OP_OUTARG_VT(reg) 1\n");
                        MONO_EMIT_NEW_MOVE (s, STK_BASE, soffset+size, 
state->left->reg1,

Modified: branches/mono-1-1-13/mono/mono/mini/mini-amd64.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-amd64.c    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-amd64.c    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -389,7 +389,8 @@
        }
 
        for (quad = 0; quad < nquads; ++quad) {
-               int size, align;
+               int size;
+               guint32 align;
                ArgumentClass class1;
                
                class1 = ARG_CLASS_NO_CLASS;
@@ -1136,21 +1137,18 @@
                arg->inst_left = tree;
                arg->inst_right = (MonoInst*)call;
                arg->unused = reg;
-               call->used_iregs |= 1 << reg;
                break;
        case ArgInFloatSSEReg:
                arg->opcode = OP_AMD64_OUTARG_XMMREG_R4;
                arg->inst_left = tree;
                arg->inst_right = (MonoInst*)call;
                arg->unused = reg;
-               call->used_fregs |= 1 << reg;
                break;
        case ArgInDoubleSSEReg:
                arg->opcode = OP_AMD64_OUTARG_XMMREG_R8;
                arg->inst_left = tree;
                arg->inst_right = (MonoInst*)call;
                arg->unused = reg;
-               call->used_fregs |= 1 << reg;
                break;
        default:
                g_assert_not_reached ();
@@ -1250,7 +1248,7 @@
                        call->out_args = arg;
 
                        if ((i >= sig->hasthis) && 
(MONO_TYPE_ISSTRUCT(sig->params [i - sig->hasthis]))) {
-                               gint align;
+                               guint32 align;
                                guint32 size;
 
                                if (sig->params [i - sig->hasthis]->type == 
MONO_TYPE_TYPEDBYREF) {
@@ -4939,7 +4937,7 @@
                        vtarg->dreg = mono_regstate_next_int (cfg->rs);
                        mono_bblock_add_inst (cfg->cbb, vtarg);
 
-                       mono_call_inst_add_outarg_reg (call, vtarg->dreg, 
cinfo->ret.reg, FALSE);
+                       mono_call_inst_add_outarg_reg (cfg, call, vtarg->dreg, 
cinfo->ret.reg, FALSE);
                }
        }
 
@@ -4952,7 +4950,7 @@
                this->dreg = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, this);
 
-               mono_call_inst_add_outarg_reg (call, this->dreg, cinfo->args 
[0].reg, FALSE);
+               mono_call_inst_add_outarg_reg (cfg, call, this->dreg, 
cinfo->args [0].reg, FALSE);
        }
 
        g_free (cinfo);

Modified: branches/mono-1-1-13/mono/mono/mini/mini-arm.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-arm.c      2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-arm.c      2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -3138,7 +3138,7 @@
                this->sreg1 = this_reg;
                this->dreg = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, this);
-               mono_call_inst_add_outarg_reg (inst, this->dreg, this_dreg, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, inst, this->dreg, 
this_dreg, FALSE);
        }
 
        if (vt_reg != -1) {
@@ -3148,7 +3148,7 @@
                vtarg->sreg1 = vt_reg;
                vtarg->dreg = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, vtarg);
-               mono_call_inst_add_outarg_reg (inst, vtarg->dreg, ARMREG_R0, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, inst, vtarg->dreg, 
ARMREG_R0, FALSE);
        }
 }
 

Modified: branches/mono-1-1-13/mono/mono/mini/mini-codegen.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-codegen.c  2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-codegen.c  2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -52,6 +52,28 @@
 
 #define use_fpstack MONO_ARCH_USE_FPSTACK
 
+static inline GSList*
+g_slist_append_mempool (MonoMemPool *mp, GSList *list, gpointer data)
+{
+  GSList *new_list;
+  GSList *last;
+
+  new_list = mono_mempool_alloc (mp, sizeof (GSList));
+  new_list->data = data;
+  new_list->next = NULL;
+
+  if (list) {
+         last = list;
+         while (last->next)
+                 last = last->next;
+      last->next = new_list;
+
+      return list;
+    }
+  else
+      return new_list;
+}
+
 const char*
 mono_regname_full (int reg, gboolean fp)
 {
@@ -62,15 +84,18 @@
 }
 
 void
-mono_call_inst_add_outarg_reg (MonoCallInst *call, int vreg, int hreg, 
gboolean fp)
+mono_call_inst_add_outarg_reg (MonoCompile *cfg, MonoCallInst *call, int vreg, 
int hreg, gboolean fp)
 {
        guint32 regpair;
 
        regpair = (((guint32)hreg) << 24) + vreg;
-       if (fp)
-               call->out_freg_args = g_slist_append (call->out_freg_args, 
(gpointer)(gssize)(regpair));
-       else
-               call->out_ireg_args = g_slist_append (call->out_ireg_args, 
(gpointer)(gssize)(regpair));
+       if (fp) {
+               call->used_fregs |= 1 << hreg;
+               call->out_freg_args = g_slist_append_mempool (cfg->mempool, 
call->out_freg_args, (gpointer)(gssize)(regpair));
+       } else {
+               call->used_iregs |= 1 << hreg;
+               call->out_ireg_args = g_slist_append_mempool (cfg->mempool, 
call->out_ireg_args, (gpointer)(gssize)(regpair));
+       }
 }
 
 /*
@@ -1248,7 +1273,6 @@
 
                                        list = g_slist_next (list);
                                }
-                               g_slist_free (call->out_ireg_args);
                        }
 
                        list = call->out_freg_args;
@@ -1268,8 +1292,6 @@
                                        list = g_slist_next (list);
                                }
                        }
-                       if (call->out_freg_args)
-                               g_slist_free (call->out_freg_args);
                }
 
                /*

Modified: branches/mono-1-1-13/mono/mono/mini/mini-ia64.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-ia64.c     2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-ia64.c     2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -4691,7 +4691,7 @@
                        vtarg->dreg = mono_regstate_next_int (cfg->rs);
                        mono_bblock_add_inst (cfg->cbb, vtarg);
 
-                       mono_call_inst_add_outarg_reg (call, vtarg->dreg, 
out_reg, FALSE);
+                       mono_call_inst_add_outarg_reg (cfg, call, vtarg->dreg, 
out_reg, FALSE);
 
                        out_reg ++;
                }
@@ -4708,7 +4708,7 @@
                this->dreg = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, this);
 
-               mono_call_inst_add_outarg_reg (call, this->dreg, out_reg, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, call, this->dreg, out_reg, 
FALSE);
        }
 }
 

Modified: branches/mono-1-1-13/mono/mono/mini/mini-s390.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-s390.c     2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-s390.c     2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -239,7 +239,6 @@
 /*                   P r o t o t y p e s                            */
 /*------------------------------------------------------------------*/
 
-static guint8 * emit_memcpy (guint8 *, int, int, int, int, int);
 static void indent (int);
 static guint8 * backUpStackPtr(MonoCompile *, guint8 *, gint);
 static void decodeParm (MonoType *, void *, int);
@@ -342,56 +341,6 @@
 
 /*------------------------------------------------------------------*/
 /*                                                                  */
-/* Name                - emit_memcpy                                       */
-/*                                                                  */
-/* Function    - Emit code to move from memory-to-memory based on  */
-/*               the size of the variable. r0 is overwritten.      */
-/*                                                                  */
-/*------------------------------------------------------------------*/
-
-static guint8 *
-emit_memcpy (guint8 *code, int size, int dreg, int doffset, int sreg, int 
soffset)
-{
-       switch (size) {
-               case 4 :
-                       s390_l  (code, s390_r0, 0, sreg, soffset);
-                       s390_st (code, s390_r0, 0, dreg, doffset);
-                       break;
-
-               case 3 : 
-                       s390_icm  (code, s390_r0, 14, sreg, soffset);
-                       s390_stcm (code, s390_r0, 14, dreg, doffset);
-                       break;
-
-               case 2 : 
-                       s390_lh  (code, s390_r0, 0, sreg, soffset);
-                       s390_sth (code, s390_r0, 0, dreg, doffset);
-                       break;
-
-               case 1 : 
-                       s390_ic  (code, s390_r0, 0, sreg, soffset);
-                       s390_stc (code, s390_r0, 0, dreg, doffset);
-                       break;
-       
-               default : 
-                       while (size > 0) {
-                               int len;
-
-                               if (size > 256) 
-                                       len = 256;
-                               else
-                                       len = size;
-                               s390_mvc (code, len, dreg, doffset, sreg, 
soffset);
-                               size -= len;
-                       }
-       }
-       return code;
-}
-
-/*========================= End of Function ========================*/
-
-/*------------------------------------------------------------------*/
-/*                                                                  */
 /* Name                - arch_get_argument_info                            */
 /*                                                                  */
 /* Function    - Gathers information on parameters such as size,   */
@@ -2735,10 +2684,6 @@
                        }
                }
                        break;
-               case OP_X86_TEST_NULL: {
-                       s390_ltr (code, ins->sreg1, ins->sreg1);
-               }
-                       break;
                case CEE_BREAK: {
                        mono_add_patch_info (cfg, offset, MONO_PATCH_INFO_ABS, 
mono_arch_break);
                         s390_brasl (code, s390_r14, 0);
@@ -3984,7 +3929,7 @@
                        s390_lr  (code, s390_r1, ins->sreg2);
                        s390_l   (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
                        s390_a   (code, s390_r1, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_cs  (code, s390_r0, s390_r0, ins->inst_basereg, 
ins->inst_offset);
+                       s390_cs  (code, s390_r0, s390_r1, ins->inst_basereg, 
ins->inst_offset);
                        s390_jnz (code, -7);
                        s390_lr  (code, ins->dreg, s390_r1);
                }
@@ -4779,7 +4724,7 @@
                this->sreg1 = this_reg;
                this->dreg  = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, this);
-               mono_call_inst_add_outarg_reg (inst, this->dreg, this_dreg, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, inst, this->dreg, 
this_dreg, FALSE);
        }
 
        if (vt_reg != -1) {
@@ -4789,7 +4734,7 @@
                vtarg->sreg1 = vt_reg;
                vtarg->dreg  = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, vtarg);
-               mono_call_inst_add_outarg_reg (inst, vtarg->dreg, s390_r2, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, inst, vtarg->dreg, s390_r2, 
FALSE);
        }
 }
 

Modified: branches/mono-1-1-13/mono/mono/mini/mini-s390.h
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-s390.h     2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-s390.h     2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -58,32 +58,32 @@
        switch (size) {                                                         
\
                case 0:                                                         
\
                        MONO_EMIT_NEW_ICONST(cfg, reg, 0);                      
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 1:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADU1_MEMBASE,   
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 2:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADU2_MEMBASE,   
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 4:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE,     
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 8:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE,     
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                        dr++; so += sizeof(guint32);                            
\
                        reg = mono_regstate_next_int (cfg->rs);                 
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE,     
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
        }                                                                       
\
 } while (0)
@@ -254,7 +254,7 @@
 
 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do {                     \
                MonoS390StackFrame *sframe;                             \
-               __asm__ volatile("l     %0,0(15)" : "=r" (sframe));     \
+               __asm__ volatile("lr    %0,15" : "=r" (sframe));        \
                MONO_CONTEXT_SET_BP ((ctx), sframe->prev);              \
                sframe = (MonoS390StackFrame*)sframe->prev;             \
                MONO_CONTEXT_SET_IP ((ctx), sframe->return_address);    \

Modified: branches/mono-1-1-13/mono/mono/mini/mini-s390x.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-s390x.c    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-s390x.c    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -599,7 +599,7 @@
                                        printf("%p [%p] ",obj,curParm);
                                        if (class == 
mono_defaults.string_class) {
                                                printf("[STRING:%p:%s]", 
-                                                      *obj, 
mono_string_to_utf8 (obj));
+                                                      obj, mono_string_to_utf8 
(obj));
                                        } else if (class == 
mono_defaults.int32_class) { 
                                                printf("[INT32:%p:%d]", 
                                                        obj, *(gint32 *)((char 
*)obj + sizeof (MonoObject)));
@@ -2444,13 +2444,13 @@
                switch (ins->opcode) {
                case OP_STOREI1_MEMBASE_IMM: {
                        s390_lghi (code, s390_r0, ins->inst_imm);
-                       S390_LONG (code, stcy, stc, s390_r0, 0,
+                       S390_LONG (code, stcy, stc, s390_r0, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_STOREI2_MEMBASE_IMM: {
                        s390_lghi (code, s390_r0, ins->inst_imm);
-                       S390_LONG (code, sthy, sth, s390_r0, 0,
+                       S390_LONG (code, sthy, sth, s390_r0, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
@@ -2463,7 +2463,7 @@
                                s390_llong(code, ins->inst_imm);
                                s390_lg   (code, s390_r0, 0, s390_r13, 4);
                        }
-                       S390_LONG (code, sty, st, s390_r0, 0,
+                       S390_LONG (code, sty, st, s390_r0, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
@@ -2477,28 +2477,28 @@
                                s390_llong(code, ins->inst_imm);
                                s390_lg   (code, s390_r0, 0, s390_r13, 4);
                        }
-                       S390_LONG (code, stg, stg, s390_r0, 0,
+                       S390_LONG (code, stg, stg, s390_r0, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_STOREI1_MEMBASE_REG: {
-                       S390_LONG (code, stcy, stc, ins->sreg1, 0,
+                       S390_LONG (code, stcy, stc, ins->sreg1, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_STOREI2_MEMBASE_REG: {
-                       S390_LONG (code, sthy, sth, ins->sreg1, 0,
+                       S390_LONG (code, sthy, sth, ins->sreg1, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_STOREI4_MEMBASE_REG: {
-                       S390_LONG (code, sty, st, ins->sreg1, 0,
+                       S390_LONG (code, sty, st, ins->sreg1, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_STORE_MEMBASE_REG:
                case OP_STOREI8_MEMBASE_REG: {
-                       S390_LONG (code, stg, stg, ins->sreg1, 0,
+                       S390_LONG (code, stg, stg, ins->sreg1, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
@@ -2524,37 +2524,37 @@
                        break;
                case OP_LOAD_MEMBASE:
                case OP_LOADI8_MEMBASE: {
-                       S390_LONG (code, lg, lg, ins->dreg, 0,
+                       S390_LONG (code, lg, lg, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_LOADI4_MEMBASE: {
-                       S390_LONG (code, lgf, lgf, ins->dreg, 0,
+                       S390_LONG (code, lgf, lgf, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_LOADU4_MEMBASE: {
-                       S390_LONG (code, llgf, llgf, ins->dreg, 0,
+                       S390_LONG (code, llgf, llgf, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_LOADU1_MEMBASE: {
-                       S390_LONG (code, llgc, llgc, ins->dreg, 0,
+                       S390_LONG (code, llgc, llgc, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_LOADI1_MEMBASE: {
-                       S390_LONG (code, lb, lb, ins->dreg, 0,
+                       S390_LONG (code, lb, lb, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_LOADU2_MEMBASE: {
-                       S390_LONG (code, llgh, llgh, ins->dreg, 0,
+                       S390_LONG (code, llgh, llgh, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_LOADI2_MEMBASE: {
-                       S390_LONG (code, lgh, lgh, ins->dreg, 0,
+                       S390_LONG (code, lgh, lgh, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
@@ -2660,10 +2660,6 @@
                        }
                }
                        break;
-               case OP_X86_TEST_NULL: {
-                       s390_ltgr (code, ins->sreg1, ins->sreg1);
-               }
-                       break;
                case CEE_BREAK: {
                        s390_basr  (code, s390_r13, 0);
                        s390_j     (code, 6);
@@ -3696,23 +3692,23 @@
                }
                        break;
                case OP_START_HANDLER: {
-                       S390_LONG (code, stg, stg, s390_r14, 0,
-                                  ins->inst_left->inst_basereg,
+                       S390_LONG (code, stg, stg, s390_r14, 0, 
+                                  ins->inst_left->inst_basereg, 
                                   ins->inst_left->inst_offset);
                }
                        break;
                case OP_ENDFILTER: {
                        if (ins->sreg1 != s390_r2)
                                s390_lgr(code, s390_r2, ins->sreg1);
-                       S390_LONG (code, lg, lg, s390_r14, 0,
-                                  ins->inst_left->inst_basereg,
+                       S390_LONG (code, lg, lg, s390_r14, 0, 
+                                  ins->inst_left->inst_basereg, 
                                   ins->inst_left->inst_offset);
                        s390_br  (code, s390_r14);
                }
                        break;
                case CEE_ENDFINALLY: {
-                       S390_LONG (code, lg, lg, s390_r14, 0,
-                                  ins->inst_left->inst_basereg,
+                       S390_LONG (code, lg, lg, s390_r14, 0, 
+                                  ins->inst_left->inst_basereg, 
                                   ins->inst_left->inst_offset);
                        s390_br  (code, s390_r14);
                }
@@ -3862,23 +3858,23 @@
                }
                        break;
                case OP_STORER8_MEMBASE_REG: {
-                       S390_LONG (code, stdy, std, ins->sreg1, 0,
+                       S390_LONG (code, stdy, std, ins->sreg1, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_LOADR8_MEMBASE: {
-                       S390_LONG (code, ldy, ld, ins->dreg, 0,
+                       S390_LONG (code, ldy, ld, ins->dreg, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                }
                        break;
                case OP_STORER4_MEMBASE_REG: {
                        s390_ledbr (code, s390_f15, ins->sreg1);
-                       S390_LONG (code, stey, ste, s390_f15, 0,
+                       S390_LONG (code, stey, ste, s390_f15, 0, 
                                   ins->inst_destbasereg, ins->inst_offset);
                }
                        break;
                case OP_LOADR4_MEMBASE: {
-                       S390_LONG (code, ldy, ld, s390_f15, 0,
+                       S390_LONG (code, ldy, ld, s390_f15, 0, 
                                   ins->inst_basereg, ins->inst_offset);
                        s390_ldebr (code, ins->dreg, s390_f15);
                }
@@ -4111,18 +4107,18 @@
                case OP_ATOMIC_ADD_I8: {
                        s390_lgr (code, s390_r1, ins->sreg2);
                        s390_lg  (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_ag  (code, s390_r1, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_csg (code, s390_r0, s390_r0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_jnz (code, -11);
+                       s390_agr (code, s390_r1, s390_r0);
+                       s390_csg (code, s390_r0, s390_r1, ins->inst_basereg, 
ins->inst_offset);
+                       s390_jnz (code, -10);
                        s390_lgr (code, ins->dreg, s390_r1);
                }
                        break;  
                case OP_ATOMIC_ADD_NEW_I8: {
                        s390_lgr (code, s390_r1, ins->sreg2);
                        s390_lg  (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_ag  (code, s390_r1, 0, ins->inst_basereg, 
ins->inst_offset);
+                       s390_agr (code, s390_r1, s390_r0);
                        s390_csg (code, s390_r0, s390_r1, ins->inst_basereg, 
ins->inst_offset);
-                       s390_jnz (code, -11);
+                       s390_jnz (code, -10);
                        s390_lgr (code, ins->dreg, s390_r1);
                }
                        break;  
@@ -4134,28 +4130,28 @@
                }
                        break;  
                case OP_ATOMIC_ADD_I4: {
-                       s390_lr  (code, s390_r1, ins->sreg2);
-                       s390_l   (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_a   (code, s390_r1, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_cs  (code, s390_r0, s390_r0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_jnz (code, -7);
-                       s390_lr  (code, ins->dreg, s390_r1);
+                       s390_lgfr(code, s390_r1, ins->sreg2);
+                       s390_lgf (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
+                       s390_agr (code, s390_r1, s390_r0);
+                       s390_cs  (code, s390_r0, s390_r1, ins->inst_basereg, 
ins->inst_offset);
+                       s390_jnz (code, -9);
+                       s390_lgfr(code, ins->dreg, s390_r1);
                }
                        break;  
                case OP_ATOMIC_ADD_NEW_I4: {
-                       s390_lr  (code, s390_r1, ins->sreg2);
-                       s390_l   (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
-                       s390_a   (code, s390_r1, 0, ins->inst_basereg, 
ins->inst_offset);
+                       s390_lgfr(code, s390_r1, ins->sreg2);
+                       s390_lgf (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
+                       s390_agr (code, s390_r1, s390_r0);
                        s390_cs  (code, s390_r0, s390_r1, ins->inst_basereg, 
ins->inst_offset);
-                       s390_jnz (code, -7);
-                       s390_lr  (code, ins->dreg, s390_r1);
+                       s390_jnz (code, -9);
+                       s390_lgfr(code, ins->dreg, s390_r1);
                }
                        break;  
                case OP_ATOMIC_EXCHANGE_I4: {
-                       s390_l   (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
+                       s390_lg  (code, s390_r0, 0, ins->inst_basereg, 
ins->inst_offset);
                        s390_cs  (code, s390_r0, ins->sreg2, ins->inst_basereg, 
ins->inst_offset);
                        s390_jnz (code, -4);
-                       s390_lr  (code, ins->dreg, s390_r0);
+                       s390_lgfr(code, ins->dreg, s390_r0);
                }
                        break;  
                case OP_S390_BKCHAIN: {
@@ -4940,7 +4936,7 @@
                this->sreg1 = this_reg;
                this->dreg  = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, this);
-               mono_call_inst_add_outarg_reg (inst, this->dreg, this_dreg, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, inst, this->dreg, 
this_dreg, FALSE);
        }
 
        if (vt_reg != -1) {
@@ -4950,7 +4946,7 @@
                vtarg->sreg1 = vt_reg;
                vtarg->dreg  = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, vtarg);
-               mono_call_inst_add_outarg_reg (inst, vtarg->dreg, s390_r2, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, inst, vtarg->dreg, s390_r2, 
FALSE);
        }
 }
 

Modified: branches/mono-1-1-13/mono/mono/mini/mini-s390x.h
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-s390x.h    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-s390x.h    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -58,27 +58,27 @@
        switch (size) {                                                         
\
                case 0:                                                         
\
                        MONO_EMIT_NEW_ICONST(cfg, reg, 0);                      
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 1:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADU1_MEMBASE,   
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 2:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADU2_MEMBASE,   
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 4:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOADI4_MEMBASE,   
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
                case 8:                                                         
\
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP(cfg, OP_LOAD_MEMBASE,     
\
                                reg, sr, so);                                   
\
-                       mono_call_inst_add_outarg_reg (call, reg, dr, FALSE);   
\
+                       mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE); 
\
                break;                                                          
\
        }                                                                       
\
 } while (0)
@@ -265,7 +265,7 @@
 
 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,func) do {                     \
                MonoS390StackFrame *sframe;                             \
-               __asm__ volatile("lg    %0,0(15)" : "=r" (sframe));     \
+               __asm__ volatile("lgr   %0,15" : "=r" (sframe));        \
                MONO_CONTEXT_SET_BP ((ctx), sframe->prev);              \
                sframe = (MonoS390StackFrame*)sframe->prev;             \
                MONO_CONTEXT_SET_IP ((ctx), sframe->return_address);    \

Modified: branches/mono-1-1-13/mono/mono/mini/mini-sparc.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-sparc.c    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-sparc.c    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -4303,7 +4303,7 @@
                ins->dreg = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, ins);
 
-               mono_call_inst_add_outarg_reg (call, ins->dreg, sparc_o0, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, call, ins->dreg, sparc_o0, 
FALSE);
 
                this_out_reg = sparc_o1;
 #else
@@ -4321,7 +4321,7 @@
                this->dreg = mono_regstate_next_int (cfg->rs);
                mono_bblock_add_inst (cfg->cbb, this);
 
-               mono_call_inst_add_outarg_reg (call, this->dreg, this_out_reg, 
FALSE);
+               mono_call_inst_add_outarg_reg (cfg, call, this->dreg, 
this_out_reg, FALSE);
        }
 }
 

Modified: branches/mono-1-1-13/mono/mono/mini/mini-x86.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini-x86.c      2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini-x86.c      2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -3729,7 +3729,7 @@
                        this->dreg = mono_regstate_next_int (cfg->rs);
                        mono_bblock_add_inst (cfg->cbb, this);
 
-                       mono_call_inst_add_outarg_reg (call, this->dreg, 
cinfo->args [0].reg, FALSE);
+                       mono_call_inst_add_outarg_reg (cfg, call, this->dreg, 
cinfo->args [0].reg, FALSE);
                }
                else {
                        MonoInst *this;
@@ -3762,7 +3762,7 @@
                        vtarg->dreg = mono_regstate_next_int (cfg->rs);
                        mono_bblock_add_inst (cfg->cbb, vtarg);
 
-                       mono_call_inst_add_outarg_reg (call, vtarg->dreg, 
cinfo->ret.reg, FALSE);
+                       mono_call_inst_add_outarg_reg (cfg, call, vtarg->dreg, 
cinfo->ret.reg, FALSE);
                } else {
                        MonoInst *vtarg;
                        MONO_INST_NEW (cfg, vtarg, OP_OUTARG);

Modified: branches/mono-1-1-13/mono/mono/mini/mini.h
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/mini.h  2006-06-15 20:58:55 UTC (rev 
61774)
+++ branches/mono-1-1-13/mono/mono/mini/mini.h  2006-06-15 21:21:12 UTC (rev 
61775)
@@ -285,7 +285,7 @@
        gboolean virtual;
        regmask_t used_iregs;
        regmask_t used_fregs;
-#if defined(MONO_ARCH_HAS_XP_LOCAL_REGALLOC) || defined(__x86_64__)
+#if defined(MONO_ARCH_HAS_XP_LOCAL_REGALLOC)
        GSList *out_ireg_args;
        GSList *out_freg_args;
 #endif
@@ -884,9 +884,9 @@
 void     *mono_arch_instrument_prolog           (MonoCompile *cfg, void *func, 
void *p, gboolean enable_arguments);
 void     *mono_arch_instrument_epilog           (MonoCompile *cfg, void *func, 
void *p, gboolean enable_arguments);
 MonoCallInst *mono_arch_call_opcode             (MonoCompile *cfg, 
MonoBasicBlock* bb, MonoCallInst *call, int is_virtual);
-MonoInst *mono_arch_get_inst_for_method       (MonoCompile *cfg, MonoMethod 
*cmethod, MonoMethodSignature *fsig, MonoInst **args);
+MonoInst *mono_arch_get_inst_for_method         (MonoCompile *cfg, MonoMethod 
*cmethod, MonoMethodSignature *fsig, MonoInst **args);
 void      mono_codegen                          (MonoCompile *cfg);
-void      mono_call_inst_add_outarg_reg         (MonoCallInst *call, int vreg, 
int hreg, gboolean fp);
+void      mono_call_inst_add_outarg_reg         (MonoCompile *cfg, 
MonoCallInst *call, int vreg, int hreg, gboolean fp);
 const char *mono_arch_regname                   (int reg);
 const char *mono_arch_fregname                  (int reg);
 gpointer  mono_arch_get_throw_exception         (void);

Modified: branches/mono-1-1-13/mono/mono/mini/tramp-s390.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/tramp-s390.c    2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/tramp-s390.c    2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -48,7 +48,7 @@
 #include <mono/metadata/marshal.h>
 #include <mono/metadata/tabledefs.h>
 #include <mono/arch/s390/s390-codegen.h>
-#include <mono/metadata/debug-helpers.h>
+
 #include "mini.h"
 #include "mini-s390.h"
 
@@ -611,14 +611,12 @@
 /*------------------------------------------------------------------*/
 
 gpointer
-mono_debugger_create_notification_function (gpointer *notification_address)
+mono_debugger_create_notification_function (MonoCodeManager *codeman)
 {
        guint8 *ptr, *buf;
 
-       ptr = buf = mono_global_codeman_reserve (16);
+       ptr = buf = mono_code_manager_reserve (codeman, 16);
        s390_break (buf);
-       if (notification_address)
-               *notification_address = buf;
        s390_br (buf, s390_r14);
 
        return ptr;

Modified: branches/mono-1-1-13/mono/mono/mini/tramp-s390x.c
===================================================================
--- branches/mono-1-1-13/mono/mono/mini/tramp-s390x.c   2006-06-15 20:58:55 UTC 
(rev 61774)
+++ branches/mono-1-1-13/mono/mono/mini/tramp-s390x.c   2006-06-15 21:21:12 UTC 
(rev 61775)
@@ -633,14 +633,12 @@
 /*------------------------------------------------------------------*/
 
 gpointer
-mono_debugger_create_notification_function (gpointer *notification_address)
+mono_debugger_create_notification_function (MonoCodeManager *codeman)
 {
        guint8 *ptr, *buf;
 
-       ptr = buf = mono_global_codeman_reserve (16);
+       ptr = buf = mono_code_manager_reserve (codeman, 16);
        s390_break (buf);
-       if (notification_address)
-               *notification_address = buf;
        s390_br (buf, s390_r14);
 
        return ptr;

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

Reply via email to