Author: zoltan
Date: 2008-02-15 09:48:17 -0500 (Fri, 15 Feb 2008)
New Revision: 95758
Modified:
branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog
branches/vargaz/mini-linear-il/mono/mono/mini/cpu-s390.md
branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h
branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.c
branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.h
Log:
2008-02-15 Zoltan Varga <[EMAIL PROTECTED]>
* mini-s390.h mini-s390.c cpu-s390.md mini-ops.h: Ongoing s390 work.
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog 2008-02-15
14:39:13 UTC (rev 95757)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog 2008-02-15
14:48:17 UTC (rev 95758)
@@ -1,5 +1,7 @@
2008-02-15 Zoltan Varga <[EMAIL PROTECTED]>
+ * mini-s390.h mini-s390.c cpu-s390.md mini-ops.h: Ongoing s390 work.
+
* exceptions-arm.c mini-arm.c cpu-arm.md: Fix arm build.
* method-to-ir.c (mini_emit_inst_for_method): Fix 64 bit issues in
array access
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/cpu-s390.md
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/cpu-s390.md 2008-02-15
14:39:13 UTC (rev 95757)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/cpu-s390.md 2008-02-15
14:48:17 UTC (rev 95758)
@@ -46,38 +46,12 @@
# See the code in mini-x86.c for more details on how the specifiers are used.
#
-<<<<<<< .working
-nop: len:0
-dummy_use: len:0
-dummy_store: len:0
-not_reached: len:0
-not_null: src1:i len:0
-
-ceq: dest:i len:12
-cgt.un: dest:i len:12
-cgt: dest:i len:12
-clt.un: dest:i len:12
-clt: dest:i len:12
-
-add.ovf.un: len: 10 dest:i src1:i src2:i
-add.ovf: len: 24 dest:i src1:i src2:i
-addcc_imm: dest:i src1:i len:18
-
-add_imm: dest:i src1:i len:18
-sub_imm: dest:i src1:i len:18
-mul_imm: dest:i src1:i len:20
-div_imm: dest:i src1:i src2:i len:24
-div_un_imm: dest:i src1:i src2:i len:24
-adc_imm: dest:i src1:i len:18
-sbb_imm: dest:i src1:i len:18
-
-=======
nop: len:4
adc: dest:i src1:i src2:i len:6
->>>>>>> .merge-right.r95529
add_ovf_carry: dest:i src1:1 src2:i len:28
add_ovf_un_carry: dest:i src1:1 src2:i len:28
+addcc: dest:i src1:i src2:i len:6
aot_const: dest:i len:8
atomic_add_i4: src1:b src2:i dest:i len:20
atomic_exchange_i4: src1:b src2:i dest:i len:20
@@ -86,10 +60,16 @@
br_reg: src1:i len:8
break: len:6
call: dest:o len:6 clob:c
-checkthis: src1:b len:4
call_handler: len:12
call_membase: dest:o src1:b len:12 clob:c
call_reg: dest:o src1:i len:8 clob:c
+ceq: dest:i len:12
+cgt.un: dest:i len:12
+cgt: dest:i len:12
+checkthis: src1:b len:4
+ckfinite: dest:f src1:f len:22
+clt.un: dest:i len:12
+clt: dest:i len:12
compare: src1:i src2:i len:4
compare_imm: src1:i len:14
cond_exc_c: len:8
@@ -106,27 +86,12 @@
cond_exc_ne_un: len:8
cond_exc_no: len:8
cond_exc_ov: len:8
-<<<<<<< .working
-conv.i1: dest:i src1:i len:26
-conv.i2: dest:i src1:i len:26
-conv.i4: dest:i src1:i len:2
-conv.i: dest:i src1:i len:2
-conv.r.un: dest:f src1:i len:30
-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:16
-conv.u4: dest:i src1:i
-conv.u: dest:i src1:i len:4
-=======
->>>>>>> .merge-right.r95529
endfinally: len: 20
fcall: dest:g len:10 clob:c
fcall_membase: dest:g src1:b len:14 clob:c
fcall_reg: dest:g src1:i len:10 clob:c
fcompare: src1:f src2:f len:14
-ckfinite: dest:f src1:f len:22
-
+float_add: dest:f src1:f src2:f len:6
float_beq: len:10
float_bge: len:10
float_bge_un: len:8
@@ -153,19 +118,16 @@
float_conv_to_u4: dest:i src1:f len:62
float_conv_to_u8: dest:l src1:f len:62
float_conv_to_u: dest:i src1:f len:36
-float_add: dest:f src1:f src2:f len:6
-float_sub: dest:f src1:f src2:f len:6
-float_mul: dest:f src1:f src2:f len:6
float_div: dest:f src1:f src2:f len:6
float_div_un: dest:f src1:f src2:f len:6
-float_rem: dest:f src1:f src2:f len:16
-float_rem_un: dest:f src1:f src2:f len:16
+float_mul: dest:f src1:f src2:f len:6
float_neg: dest:f src1:f len:6
float_not: dest:f src1:f len:6
+float_rem: dest:f src1:f src2:f len:16
+float_rem_un: dest:f src1:f src2:f len:16
+float_sub: dest:f src1:f src2:f len:6
fmove: dest:f src1:f len:4
-
iconst: dest:i len:16
-jump_table: dest:i len:16
jmp: len:56
label: len:0
lcall: dest:L len:8 clob:c
@@ -197,13 +159,6 @@
long_sub_ovf: len:36 dest:l src1:l src2:i clob:1
memory_barrier: len: 10
move: dest:i src1:i len:4
-<<<<<<< .working
-mul.ovf.un: dest:i src1:i src2:i len:20
-mul.ovf: dest:i src1:i src2:i len:42
-neg: dest:i src1:i len:4
-not: dest:i src1:i len:8
-=======
->>>>>>> .merge-right.r95529
bigmul: len:2 dest:l src1:a src2:i
bigmul_un: len:2 dest:l src1:a src2:i
endfilter: src1:i len:12
@@ -217,10 +172,7 @@
s390_move: len:48 dest:b src1:b
s390_setf4ret: dest:f src1:f len:4
tls_get: dest:i len:44
-<<<<<<< .working
-=======
sbb: dest:i src1:i src2:i len:8
->>>>>>> .merge-right.r95529
setlret: src1:i src2:i len:12
setret: dest:a src1:i len:6
sqrt: dest:f src1:f len:4
@@ -237,14 +189,9 @@
storei8_membase_reg: dest:b src1:i
storer4_membase_reg: dest:b src1:f len:22
storer8_membase_reg: dest:b src1:f len:22
-<<<<<<< .working
-sub.ovf.un: len:10 dest:i src1:i src2:i
-sub.ovf: len:24 dest:i src1:i src2:i
-subcc_imm: dest:i src1:i len:18
-=======
->>>>>>> .merge-right.r95529
sub_ovf_carry: dest:i src1:1 src2:i len:28
sub_ovf_un_carry: dest:i src1:1 src2:i len:28
+subcc: dest:i src1:i src2:i len:6
throw: src1:i len:8
vcall: len:8 clob:c
vcall_membase: src1:b len:12 clob:c
@@ -317,69 +264,17 @@
subcc_imm: dest:i src1:i len:18
xor_imm: dest:i src1:i len:16
+# Linear IR opcodes
+dummy_use: len:0
+dummy_store: len:0
+not_reached: len:0
+not_null: src1:i len:0
+
+jump_table: dest:i len:16
+
icompare: src1:i src2:i len:4
icompare_imm: src1:i len:14
-int_add: dest:i src1:i src2:i len:6
-int_sub: dest:i src1:i src2:i len:6
-int_mul: dest:i src1:i src2:i len:6
-int_mul_ovf: dest:i src1:i src2:i clob:1 len:64
-int_mul_ovf_un: dest:i src1:i src2:i clob:1 len:64
-int_div: dest:a src1:i src2:i len:10
-int_div_un: dest:a src1:i src2:i len:12
-int_rem: dest:d src1:i src2:i len:10
-int_rem_un: dest:d src1:i src2:i len:12
-int_and: dest:i src1:i src2:i len:6
-int_or: dest:i src1:i src2:i len:4
-int_xor: dest:i src1:i src2:i len:4
-int_adc: dest:i src1:i src2:i len:6
-int_sbb: dest:i src1:i src2:i len:8
-int_addcc: dest:i src1:i src2:i len:6
-int_subcc: dest:i src1:i src2:i len:6
-int_shl: dest:i src1:i src2:i clob:s len:8
-int_shr_un: dest:i src1:i src2:i clob:s len:8
-int_shr: dest:i src1:i src2:i clob:s len:8
-
-int_add_imm: dest:i src1:i len:18
-int_sub_imm: dest:i src1:i len:18
-int_mul_imm: dest:i src1:i len:20
-int_div_imm: dest:i src1:i len:24
-int_div_un_imm: dest:i src1:i len:24
-int_rem_imm: dest:i src1:i len:24
-int_rem_un_imm: dest:i src1:i len:24
-int_and_imm: dest:i src1:i len:16
-int_or_imm: dest:i src1:i len:16
-int_xor_imm: dest:i src1:i len:16
-int_adc_imm: dest:i src1:i len:18
-int_sbb_imm: dest:i src1:i len:18
-int_shl_imm: dest:i src1:i len:8
-int_shr_imm: dest:i src1:i len:8
-int_shr_un_imm: dest:i src1:i len:8
-
-
-int_conv_to_i1: dest:i src1:i len:26
-int_conv_to_i2: dest:i src1:i len:26
-int_conv_to_i4: dest:i src1:i len:2
-int_conv_to_i: dest:i src1:i len:2
-int_conv_to_r_un: dest:f src1:i len:30
-int_conv_to_r4: dest:f src1:i len:4
-int_conv_to_r8: dest:f src1:i len:4
-int_conv_to_u1: dest:i src1:i len:8
-int_conv_to_u2: dest:i src1:i len:16
-int_conv_to_u4: dest:i src1:i
-int_conv_to_u: dest:i src1:i len:4
-
-int_beq: len:8
-int_bge_un: len:8
-int_bge: len:8
-int_bgt_un: len:8
-int_bgt: len:8
-int_ble_un: len:8
-int_ble: len:8
-int_blt_un: len:8
-int_blt: len:8
-int_bne_un: len:8
-
int_ceq: dest:i len:12
int_cgt_un: dest:i len:12
int_cgt: dest:i len:12
@@ -400,3 +295,26 @@
cond_exc_ine_un: len:8
cond_exc_ino: len:8
cond_exc_iov: len:8
+
+int_add_imm: dest:i src1:i len:18
+int_sub_imm: dest:i src1:i len:18
+int_mul_imm: dest:i src1:i len:20
+int_div_imm: dest:i src1:i len:24
+int_div_un_imm: dest:i src1:i len:24
+int_rem_imm: dest:i src1:i len:24
+int_rem_un_imm: dest:i src1:i len:24
+int_and_imm: dest:i src1:i len:16
+int_or_imm: dest:i src1:i len:16
+int_xor_imm: dest:i src1:i len:16
+int_adc_imm: dest:i src1:i len:18
+int_sbb_imm: dest:i src1:i len:18
+int_shl_imm: dest:i src1:i len:8
+int_shr_imm: dest:i src1:i len:8
+int_shr_un_imm: dest:i src1:i len:8
+
+int_adc: dest:i src1:i src2:i len:6
+int_sbb: dest:i src1:i src2:i len:8
+int_addcc: dest:i src1:i src2:i len:6
+int_subcc: dest:i src1:i src2:i len:6
+
+long_conv_to_ovf_i4_2: dest:i src1:i src2:i len:44
\ No newline at end of file
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h 2008-02-15
14:39:13 UTC (rev 95757)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-ops.h 2008-02-15
14:48:17 UTC (rev 95758)
@@ -772,7 +772,7 @@
MINI_OP(OP_S390_ARGPTR, "s390_argptr", NONE, NONE, NONE)
MINI_OP(OP_S390_STKARG, "s390_stkarg", NONE, NONE, NONE)
MINI_OP(OP_S390_MOVE, "s390_move", NONE, NONE, NONE)
-MINI_OP(OP_S390_SETF4RET, "s390_setf4ret", NONE, NONE, NONE)
+MINI_OP(OP_S390_SETF4RET, "s390_setf4ret", FREG, FREG, NONE)
MINI_OP(OP_S390_BKCHAIN, "s390_bkchain", NONE, NONE, NONE)
#endif
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.c 2008-02-15
14:39:13 UTC (rev 95757)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.c 2008-02-15
14:48:17 UTC (rev 95758)
@@ -204,6 +204,7 @@
RegTypeGeneral,
RegTypeBase,
RegTypeFP,
+ RegTypeFPR4,
RegTypeStructByVal,
RegTypeStructByAddr
} ArgStorage;
@@ -213,7 +214,7 @@
gint32 offparm; /* offset from callee's stack */
guint16 vtsize; /* in param area */
guint8 reg;
- guint8 regtype; /* See RegType* */
+ ArgStorage regtype; /* See RegType* */
guint32 size; /* Size of structure used by RegTypeStructByVal
*/
} ArgInfo;
@@ -1999,6 +2000,20 @@
MONO_ADD_INS (cfg->cbb, ins);
mono_call_inst_add_outarg_reg (cfg, call, ins->dreg, reg,
FALSE);
break;
+ case RegTypeFP:
+ MONO_INST_NEW (cfg, ins, OP_FMOVE);
+ ins->dreg = mono_alloc_freg (cfg);
+ ins->sreg1 = tree->dreg;
+ MONO_ADD_INS (cfg->cbb, ins);
+ mono_call_inst_add_outarg_reg (cfg, call, ins->dreg, reg, TRUE);
+ break;
+ case RegTypeFPR4:
+ MONO_INST_NEW (cfg, ins, OP_S390_SETF4RET);
+ ins->dreg = mono_alloc_freg (cfg);
+ ins->sreg1 = tree->dreg;
+ MONO_ADD_INS (cfg->cbb, ins);
+ mono_call_inst_add_outarg_reg (cfg, call, ins->dreg, reg, TRUE);
+ break;
default:
g_assert_not_reached ();
}
@@ -2016,6 +2031,7 @@
MonoInst *in;
MonoCallArgParm *arg;
MonoMethodSignature *sig;
+ MonoInst *ins;
int i, n, lParamArea;
CallInfo *cinfo;
ArgInfo *ainfo = NULL;
@@ -2042,7 +2058,14 @@
for (i = 0; i < n; ++i) {
ainfo = cinfo->args + i;
+ MonoType *t;
+ if (i >= sig->hasthis)
+ t = sig->params [i - sig->hasthis];
+ else
+ t = &mono_defaults.int_class->byval_arg;
+ t = mono_type_get_underlying_type (t);
+
in = call->args [i];
if ((sig->call_convention == MONO_CALL_VARARG) &&
@@ -2052,9 +2075,89 @@
emit_sig_cookie (cfg, call, cinfo, ainfo->size);
}
- if (ainfo->regtype == RegTypeGeneral) {
+ switch (ainfo->regtype) {
+ case RegTypeGeneral:
+ if (!t->byref && (t->type == MONO_TYPE_I8 || t->type ==
MONO_TYPE_U8)) {
+ MONO_INST_NEW (cfg, ins, OP_MOVE);
+ ins->dreg = mono_alloc_ireg (cfg);
+ ins->sreg1 = in->dreg + 2;
+ MONO_ADD_INS (cfg->cbb, ins);
+ mono_call_inst_add_outarg_reg (cfg, call,
ins->dreg, ainfo->reg, FALSE);
+ MONO_INST_NEW (cfg, ins, OP_MOVE);
+ ins->dreg = mono_alloc_ireg (cfg);
+ ins->sreg1 = in->dreg + 1;
+ MONO_ADD_INS (cfg->cbb, ins);
+ mono_call_inst_add_outarg_reg (cfg, call,
ins->dreg, ainfo->reg + 1, FALSE);
+ } else {
+ add_outarg_reg2 (cfg, call, ainfo->regtype,
ainfo->reg, in);
+ }
+ break;
+ case RegTypeFP:
+ if (ainfo->size == 4)
+ ainfo->regtype = RegTypeFPR4;
add_outarg_reg2 (cfg, call, ainfo->regtype, ainfo->reg,
in);
- } else {
+ break;
+ case RegTypeStructByVal: {
+ guint32 align;
+ guint32 size;
+
+ if (sig->params [i - sig->hasthis]->type ==
MONO_TYPE_TYPEDBYREF) {
+ size = sizeof (MonoTypedRef);
+ align = sizeof (gpointer);
+ }
+ else
+ if (sig->pinvoke)
+ size = mono_type_native_stack_size
(&in->klass->byval_arg, &align);
+ else {
+ /*
+ * Other backends use
mono_type_stack_size (), but that
+ * aligns the size to 8, which is
larger than the size of
+ * the source, leading to reads of
invalid memory if the
+ * source is at the end of address
space.
+ */
+ size = mono_class_value_size
(in->klass, &align);
+ }
+
+ g_assert (in->klass);
+
+ /*
+ if (ainfo->reg != STK_BASE) {
+ switch (ainfo->size) {
+ case 0:
+ case 1:
+ case 2:
+ case 4:
+ call->used_iregs |= 1 << ainfo->reg;
+ break;
+ case 8:
+ call->used_iregs |= 1 << ainfo->reg;
+ call->used_iregs |= 1 << (ainfo->reg+1);
+ break;
+ default:
+ call->used_iregs |= 1 << ainfo->reg;
+ }
+ }
+ arg->ins.sreg1 = ainfo->reg;
+ arg->ins.opcode = OP_OUTARG_VT;
+ arg->size = ainfo->size;
+ arg->offset = ainfo->offset;
+ arg->offPrm = ainfo->offparm + sz.offStruct;
+ */
+
+ ainfo->offparm += sz.offStruct;
+
+ MONO_INST_NEW (cfg, ins, OP_OUTARG_VT);
+ ins->sreg1 = in->dreg;
+ ins->klass = in->klass;
+ ins->backend.size = size;
+ ins->inst_p0 = call;
+ ins->inst_p1 = mono_mempool_alloc (cfg->mempool, sizeof
(ArgInfo));
+ memcpy (ins->inst_p1, ainfo, sizeof (ArgInfo));
+
+ MONO_ADD_INS (cfg->cbb, ins);
+ break;
+ }
+ default:
// FIXME:
NOT_IMPLEMENTED;
@@ -2144,8 +2247,31 @@
void
mono_arch_emit_outarg_vt (MonoCompile *cfg, MonoInst *ins, MonoInst *src)
{
- // FIXME:
- NOT_IMPLEMENTED;
+ MonoInst *arg;
+ MonoCallInst *call = (MonoCallInst*)ins->inst_p0;
+ ArgInfo *ainfo = (ArgInfo*)ins->inst_p1;
+ int size = ins->backend.size;
+
+ if (ainfo->regtype == RegTypeStructByVal) {
+ /*
+ arg->ins.sreg1 = ainfo->reg;
+ arg->ins.opcode = OP_OUTARG_VT;
+ arg->size = ainfo->size;
+ arg->offset = ainfo->offset;
+ arg->offPrm = ainfo->offparm + sz.offStruct;
+ */
+ if (ainfo->size < 0)
+ NOT_IMPLEMENTED;
+
+ if (ainfo->reg != STK_BASE) {
+ MONO_OUTPUT_VTR(cfg, size, ainfo->reg, src->dreg, 0);
+ } else {
+ MONO_OUTPUT_VTS(cfg, size, ainfo->reg, ainfo->offset,
+ src->dreg, 0);
+ }
+ } else {
+ g_assert_not_reached ();
+ }
}
/*------------------------------------------------------------------*/
@@ -2161,15 +2287,15 @@
if (!ret->byref) {
if (ret->type == MONO_TYPE_R4) {
- // FIXME:
- NOT_IMPLEMENTED;
- //MONO_EMIT_NEW_UNALU (cfg, OP_AMD64_SET_XMMREG_R4,
cfg->ret->dreg, val->dreg);
+ MONO_EMIT_NEW_UNALU (cfg, OP_S390_SETF4RET, s390_f0,
val->dreg);
return;
} else if (ret->type == MONO_TYPE_R8) {
- // FIXME:
- NOT_IMPLEMENTED;
- //MONO_EMIT_NEW_UNALU (cfg, use_sse2 ? OP_FMOVE :
OP_AMD64_SET_XMMREG_R8, cfg->ret->dreg, val->dreg);
+ MONO_EMIT_NEW_UNALU (cfg, OP_FMOVE, s390_f0, val->dreg);
return;
+ } else if (ret->type == MONO_TYPE_I8 || ret->type ==
MONO_TYPE_U8) {
+ MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, s390_r3, val->dreg +
1);
+ MONO_EMIT_NEW_UNALU (cfg, OP_MOVE, s390_r2, val->dreg +
2);
+ return;
}
}
@@ -2940,17 +3066,7 @@
if (s390_is_imm16 (ins->inst_imm)) {
s390_lhi (code, s390_r0, ins->inst_imm);
-<<<<<<< .working
if (un)
-=======
- if ((next) &&
- (((next->opcode >= OP_IBNE_UN) &&
- (next->opcode <= OP_IBLT_UN)) ||
- ((next->opcode >= OP_COND_EXC_NE_UN) &&
- (next->opcode <= OP_COND_EXC_LT_UN)) ||
- ((next->opcode == OP_CLT_UN) ||
- (next->opcode == OP_CGT_UN))))
->>>>>>> .merge-right.r95529
s390_clr (code, ins->sreg1, s390_r0);
else
s390_cr (code, ins->sreg1, s390_r0);
@@ -2959,17 +3075,7 @@
s390_basr (code, s390_r13, 0);
s390_j (code, 4);
s390_word (code, ins->inst_imm);
-<<<<<<< .working
if (un)
-=======
- if ((next) &&
- (((next->opcode >= OP_IBNE_UN) &&
- (next->opcode <= OP_IBLT_UN)) ||
- ((next->opcode >= OP_COND_EXC_NE_UN) &&
- (next->opcode <= OP_COND_EXC_LT_UN)) ||
- ((next->opcode == OP_CLT_UN) ||
- (next->opcode == OP_CGT_UN))))
->>>>>>> .merge-right.r95529
s390_cl (code, ins->sreg1, 0,
s390_r13, 4);
else
s390_c (code, ins->sreg1, 0,
s390_r13, 4);
@@ -2992,7 +3098,8 @@
s390_ar (code, ins->dreg, src2);
}
break;
- case OP_ADC: {
+ case OP_ADC:
+ case OP_IADC: {
CHECK_SRCDST_COM;
s390_alcr (code, ins->dreg, src2);
}
@@ -3563,7 +3670,6 @@
s390_l (code,ins->dreg, 0, s390_r13, 4);
}
break;
-<<<<<<< .working
case OP_JUMP_TABLE: {
mono_add_patch_info (cfg, code - cfg->native_code,
(MonoJumpInfoType)ins->inst_i1, ins->inst_p0);
@@ -3573,10 +3679,8 @@
s390_l (code, ins->dreg, 0, s390_r13, 4);
}
break;
-=======
case OP_ICONV_TO_I4:
case OP_ICONV_TO_U4:
->>>>>>> .merge-right.r95529
case OP_MOVE: {
if (ins->dreg != ins->sreg1) {
s390_lr (code, ins->dreg, ins->sreg1);
@@ -3619,11 +3723,17 @@
}
break;
case OP_FCONV_TO_R4: {
+ // FIXME:
+ if (ins->dreg != ins->sreg1) {
+ s390_ldr (code, ins->dreg, ins->sreg1);
+ }
+ /*
NOT_IMPLEMENTED;
if ((ins->next) &&
(ins->next->opcode != OP_FMOVE) &&
(ins->next->opcode != OP_STORER4_MEMBASE_REG))
s390_ledbr (code, ins->dreg, ins->sreg1);
+ */
}
break;
case OP_JMP: {
@@ -3675,15 +3785,10 @@
s390_ldebr (code, s390_f0, s390_f0);
}
break;
- case OP_CALL:
case OP_LCALL:
case OP_VCALL:
-<<<<<<< .working
- case OP_VOIDCALL: {
-=======
case OP_VOIDCALL:
case OP_CALL: {
->>>>>>> .merge-right.r95529
call = (MonoCallInst*)ins;
if (ins->flags & MONO_INST_HAS_METHOD)
mono_add_patch_info (cfg, offset,
MONO_PATCH_INFO_METHOD, call->method);
@@ -4096,7 +4201,8 @@
g_assert_not_reached ();
/* Implemented as helper calls */
break;
- case OP_LCONV_TO_OVF_I: {
+ case OP_LCONV_TO_OVF_I:
+ case OP_LCONV_TO_OVF_I4_2: {
/* Valid ints: 0xffffffff:8000000 to
00000000:0x7f000000 */
short int *o[5];
s390_ltr (code, ins->sreg1, ins->sreg1);
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.h
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.h 2008-02-15
14:39:13 UTC (rev 95757)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/mini-s390.h 2008-02-15
14:48:17 UTC (rev 95758)
@@ -59,32 +59,31 @@
switch (size) {
\
case 0:
\
MONO_EMIT_NEW_ICONST(cfg, reg, 0);
\
- mono_call_inst_add_outarg_reg(s, call, reg, dr, FALSE);
\
+ mono_call_inst_add_outarg_reg(cfg, 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(s, call, reg, dr, FALSE);
\
+ mono_call_inst_add_outarg_reg(cfg, 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(s, call, reg, dr, FALSE);
\
+ mono_call_inst_add_outarg_reg(cfg, 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(s, call, reg, dr, FALSE);
\
+ mono_call_inst_add_outarg_reg(cfg, 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(s, call, reg, dr, FALSE);
\
- dr++; so += sizeof(guint32);
\
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr,
FALSE); \
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(s, call, reg, dr, FALSE);
\
+ reg, sr, so + sizeof (guint32));
\
+ mono_call_inst_add_outarg_reg(cfg, call, reg, dr + 1,
FALSE); \
break;
\
}
\
} while (0)
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches