From 6a922e6dcde088d796e549ff5f9d767a886963dc Mon Sep 17 00:00:00 2001 From: neale Date: Thu, 15 Jul 2004 01:03:54 +0000 Subject: [PATCH] Correct definitions of CONV_R_UN and a couple of LCONVs git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mono@31163 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- mono/mini/inssel-s390.brg | 41 ++++++++++++++++++++++++++++++++--------- mono/mini/mini-s390.c | 4 ++-- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/mono/mini/inssel-s390.brg b/mono/mini/inssel-s390.brg index f85df29a5..505381e49 100644 --- a/mono/mini/inssel-s390.brg +++ b/mono/mini/inssel-s390.brg @@ -80,10 +80,22 @@ stmt: CEE_STIND_I8 (OP_REGVAR, lreg) { } freg: OP_LCONV_TO_R8 (lreg) { + tree->dreg = state->reg1; + tree->sreg1 = state->left->reg1; + tree->sreg2 = state->left->reg2; mono_bblock_add_inst (s->cbb, tree); } freg: OP_LCONV_TO_R4 (lreg) { + tree->dreg = state->reg1; + tree->sreg1 = state->left->reg1; + tree->sreg2 = state->left->reg2; + mono_bblock_add_inst (s->cbb, tree); +} + +freg: CEE_CONV_R_UN (reg) { + tree->dreg = state->reg1; + tree->sreg1 = state->left->reg1; mono_bblock_add_inst (s->cbb, tree); } @@ -273,7 +285,7 @@ stmt: OP_OUTARG_VT (CEE_LDOBJ (base)) { int soffset = vt->inst_offset; int tmpr; -printf("OP_OUTARG_VT(CEE_LDOBJ(base))\n"); +//printf("OP_OUTARG_VT(CEE_LDOBJ(base))\n"); if (size < 0) { size = -size; if (start_reg != STK_BASE) { @@ -307,7 +319,7 @@ stmt: OP_OUTARG_VT (CEE_LDOBJ (OP_S390_ARGPTR)) { int soffset = vt->inst_offset; int tmpr; -printf("OP_OUTARG_VT(CEE_LDOBJ(OP_S390_ARGPTR))\n"); +//printf("OP_OUTARG_VT(CEE_LDOBJ(OP_S390_ARGPTR))\n"); if (size < 0) { size = -size; if (start_reg != STK_BASE) { @@ -344,7 +356,7 @@ stmt: OP_OUTARG_VT (CEE_LDOBJ (OP_REGOFFSET)) "0" { int soffset = vt->inst_offset; int tmpr; -printf("OP_OUTARG_VT(CEE_LDOBJ(OP_REGOFFSET))\n"); +//printf("OP_OUTARG_VT(CEE_LDOBJ(OP_REGOFFSET))\n"); if (size < 0) { size = -size; if (start_reg != STK_BASE) { @@ -380,7 +392,7 @@ stmt: OP_OUTARG_VT (CEE_LDOBJ (OP_S390_LOADARG)) { int soffset = vt->inst_offset; int tmpr; -printf("OP_OUTARG_VT(CEE_LDOBJ(OP_S390_LOADARG))\n"); +//printf("OP_OUTARG_VT(CEE_LDOBJ(OP_S390_LOADARG))\n"); if (start_reg != STK_BASE) { MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, start_reg, STK_BASE, soffset); MONO_EMIT_NEW_MOVE (s, STK_BASE, tree->sreg2, start_reg, 0, size); @@ -424,15 +436,26 @@ stmt: OP_OUTARG_VT (reg) { int soffset = tree->sreg2; int tmpr; -printf("OP_OUTARG_VT(reg)\n"); +//printf("OP_OUTARG_VT(reg)\n"); if (size < 0) { size = -size; - MONO_EMIT_NEW_MOVE (s, STK_BASE, soffset, - state->left->tree->sreg1, - tree->inst_imm, size); if (start_reg != STK_BASE) { + MONO_EMIT_NEW_MOVE (s, STK_BASE, soffset, + state->left->tree->sreg1, + tree->inst_imm, size); MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, start_reg, - STK_BASE, soffset); + STK_BASE, soffset); + } else { + MONO_EMIT_NEW_MOVE (s, STK_BASE, + soffset+sizeof(gpointer), + state->left->tree->sreg1, + tree->inst_imm, size); + tmpr = mono_regstate_next_int (s->rs); + MONO_EMIT_NEW_BIALU_IMM (s, OP_ADD_IMM, tmpr, STK_BASE, + soffset+sizeof(gpointer)); + MONO_EMIT_NEW_STORE_MEMBASE (s, OP_STORE_MEMBASE_REG, + STK_BASE, tree->inst_imm, + tmpr); } } else { if (start_reg != STK_BASE) { diff --git a/mono/mini/mini-s390.c b/mono/mini/mini-s390.c index 6ba99c22d..e7674761c 100644 --- a/mono/mini/mini-s390.c +++ b/mono/mini/mini-s390.c @@ -2935,12 +2935,12 @@ emit_float_to_int (MonoCompile *cfg, guchar *code, int dreg, int sreg, int size, switch (size) { case 1: s390_lhi (code, s390_r0, 0xff); - s390_or (code, dreg, s390_r0); + s390_nr (code, dreg, s390_r0); break; case 2: s390_lhi (code, s390_r0, -1); s390_srl (code, s390_r0, 0, 16); - s390_or (code, dreg, s390_r0); + s390_nr (code, dreg, s390_r0); break; } } -- 2.11.4.GIT