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