Author: zoltan
Date: 2008-02-07 18:37:46 -0500 (Thu, 07 Feb 2008)
New Revision: 95208
Modified:
trunk/mono/mono/mini/ChangeLog
trunk/mono/mono/mini/cpu-s390x.md
trunk/mono/mono/mini/inssel-s390x.brg
trunk/mono/mono/mini/mini-s390x.c
trunk/mono/mono/mini/mini-s390x.h
Log:
2008-02-08 Zoltan Varga <[EMAIL PROTECTED]>
* mini-s390x.c mini-s390x.h cpu-s390x.md inssel-s390x.brg: Get rid of
CEE_ opcodes.
Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog 2008-02-07 23:22:28 UTC (rev 95207)
+++ trunk/mono/mono/mini/ChangeLog 2008-02-07 23:37:46 UTC (rev 95208)
@@ -1,3 +1,7 @@
+2008-02-08 Zoltan Varga <[EMAIL PROTECTED]>
+
+ * mini-s390x.c mini-s390x.h cpu-s390x.md inssel-s390x.brg: Get rid of
CEE_ opcodes.
+
2008-02-07 Zoltan Varga <[EMAIL PROTECTED]>
* mini-s390.c mini-s390.h cpu-s390.md: Get rid of CEE_ opcodes.
Modified: trunk/mono/mono/mini/cpu-s390x.md
===================================================================
--- trunk/mono/mono/mini/cpu-s390x.md 2008-02-07 23:22:28 UTC (rev 95207)
+++ trunk/mono/mono/mini/cpu-s390x.md 2008-02-07 23:37:46 UTC (rev 95208)
@@ -48,14 +48,10 @@
adc: dest:i src1:i src2:i len:6
adc_imm: dest:i src1:i len:14
-add.ovf.un: len:18 dest:i src1:i src2:i
-add.ovf: len: 28 dest:i src1:i src2:i
-add: dest:i src1:i src2:i len:12
add_imm: dest:i src1:i len:24
add_ovf_carry: dest:i src1:1 src2:i len:28
add_ovf_un_carry: dest:i src1:1 src2:i len:12
addcc: dest:i src1:i src2:i len:12
-and: dest:i src1:i src2:i len:8
and_imm: dest:i src1:i len:24
aot_const: dest:i len:8
atomic_add_i4: src1:b src2:i dest:i len:28
@@ -64,16 +60,6 @@
atomic_add_new_i8: src1:b src2:i dest:i len:30
atomic_exchange_i4: src1:b src2:i dest:i len:18
atomic_exchange_i8: src1:b src2:i dest:i len:24
-beq: len:8
-bge.un: len:8
-bge: len:8
-bgt.un: len:8
-bgt: len:8
-ble.un: len:8
-ble: len:8
-blt.un: len:8
-blt: len:8
-bne.un: len:8
br: len:6
br_reg: src1:i len:8
break: len:22
@@ -104,23 +90,6 @@
cond_exc_ne_un: len:8
cond_exc_no: len:8
cond_exc_ov: len:8
-conv.i1: dest:i src1:i len:30
-conv.i2: dest:i src1:i len:36
-conv.i4: dest:i src1:i len:4
-conv.i8: dest:i src1:i len:4
-conv.i: dest:i src1:i len:4
-conv.ovf.i4.un: dest:i src1:i len:50
-conv.ovf.u4: dest:i src1:i len:48
-conv.ovf.u8.un: dest:i src1:i len:4
-conv.ovf.u8:
-conv.r.un: dest:f src1:i len:32
-conv.r4: dest:f src1:i len:4
-conv.r8: dest:f src1:i len:4
-conv.u1: dest:i src1:i len:14
-conv.u2: dest:i src1:i len:24
-conv.u4: dest:i src1:i len:4
-conv.u8: dest:i src1:i len:4
-conv.u: dest:i src1:i len:4
div.un: dest:a src1:i src2:i len:12
div: dest:a src1:i src2:i len:10
div_imm: dest:i src1:i src2:i len:24
@@ -170,57 +139,8 @@
icompare: src1:i src2:i len:4
icompare_imm: src1:i src2:i len:14
iconst: dest:i len:40
-int_adc: dest:i src1:i src2:i len:12
-int_adc_imm: dest:i src1:i len:14
-int_addcc: dest:i src1:i src2:i len:12
-int_add: dest:i src1:i src2:i len:12
-int_add_imm: dest:i src1:i len:20
-int_and: dest:i src1:i src2:i len:12
-int_and_imm: dest:i src1:i len:24
-int_beq: len:8
-int_bge: len:8
-int_bge_un: len:8
-int_bgt: len:8
-int_bgt_un: len:8
-int_ble: len:8
-int_ble_un: len:8
-int_blt: len:8
-int_blt_un: len:8
-int_bne_un: len:8
-int_ceq: dest:i len:12
-int_cgt: dest:i len:12
-int_cgt_un: dest:i len:12
-int_clt: dest:i len:12
-int_clt_un: dest:i len:12
-int_div: dest:a src1:i src2:i len:16
-int_div_imm: dest:a src1:i len:24
-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: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
-int_not: dest:i src1:i len:12
-int_or: dest:i src1:i src2:i len:12
-int_or_imm: dest:i src1:i len:24
-int_rem: dest:d src1:i src2:i len:16
-int_rem_imm: dest:d src1:i len:24
-int_rem_un: dest:d src1:i src2:i len:16
-int_rem_un_imm: dest:d src1:i len:24
-int_sbb: dest:i src1:i src2:i len:6
-int_sbb_imm: dest:i src1:i len:14
-int_shl: dest:i src1:i src2:i clob:s len:10
-int_shl_imm: dest:i src1:i len:10
-int_shr: dest:i src1:i src2:i clob:s len:10
-int_shr_imm: dest:i src1:i len:10
-int_shr_un: dest:i src1:i src2:i clob:s len:10
-int_shr_un_imm: dest:i src1:i len:10
-int_subcc: dest:i src1:i src2:i len:12
-int_sub: dest:i src1:i src2:i len:12
-int_sub_imm: dest:i src1:i len:18
-int_xor: dest:i src1:i src2:i len:12
-int_xor_imm: dest:i src1:i len:24
+
+
jmp: len:40
label: len:0
lcall: dest:o len:22 clob:c
@@ -239,34 +159,6 @@
loadu4_mem: dest:i len:8
loadu4_membase: dest:i src1:b len:26
localloc: dest:i src1:i len:106
-long_add_ovf: len:14 dest:i src1:i src2:i
-long_add_ovf_un: len:14 dest:i src1:i src2:i
-long_conv_to_ovf_i: dest:i src1:i src2:i len:44
-long_conv_to_r4: dest:f src1:i len:16
-long_conv_to_r8: dest:f src1:i len:16
-long_conv_to_r_un: dest:f src1:i src2:i len:37
-long_div: dest:i src1:i src2:i len:12
-long_div_un: dest:i src1:i src2:i len:16
-long_mul: dest:i src1:i src2:i len:12
-long_mul_imm: dest:i src1:i src2:i len:20
-long_mul_ovf: dest:i src1:i src2:i len:56
-long_mul_ovf_un: dest:i src1:i src2:i len:64
-long_neg: dest:i src1:i len:6
-long_not: dest:i src1:i len:6
-long_or: dest:i src1:i src2:i len:6
-long_rem: dest:i src1:i src2:i len:12
-long_rem_un: dest:i src1:i src2:i len:16
-long_shl: dest:i src1:i src2:i len:14
-long_shl_imm: dest:i src1:i len:14
-long_shr_un: dest:i src1:i src2:i len:14
-long_shr: dest:i src1:i src2:i len:14
-long_shr_imm: dest:i src1:i len:14
-long_shr_un_imm: dest:i src1:i len:14
-long_sub: dest:i src1:i src2:i len:12
-long_sub_imm: dest:i src1:i len:16
-long_sub_ovf: len:14 dest:i src1:i src2:i
-long_sub_ovf_un: len:14 dest:i src1:i src2:i
-long_xor: dest:i src1:i len:6
memory_barrier: len: 10
move: dest:i src1:i len:4
mul.ovf.un: dest:i src1:i src2:i len:20
@@ -281,7 +173,6 @@
bigmul_un: len:2 dest:i src1:a src2:i
endfilter: src1:i len:28
rethrow: src1:i len:26
-or: dest:i src1:i src2:i len:8
or_imm: dest:i src1:i len:24
outarg: src1:i len:1
outarg_imm: len:5
@@ -298,6 +189,7 @@
sbb_imm: dest:i src1:i len:14
setret: dest:a src1:i len:4
sext_i4: dest:i src1:i len:4
+zext_i4: dest:i src1:i len:4
shl: dest:i src1:i src2:i clob:s len:6
shl_imm: dest:i src1:i len:8
shr.un: dest:i src1:i src2:i clob:s len:6
@@ -318,9 +210,6 @@
storei8_membase_reg: dest:b src1:i len:26
storer4_membase_reg: dest:b src1:f len:28
storer8_membase_reg: dest:b src1:f len:24
-sub.ovf.un: len:16 dest:i src1:i src2:i
-sub.ovf: len:28 dest:i src1:i src2:i
-sub: dest:i src1:i src2:i len:12
sub_imm: dest:i src1:i len:18
sub_ovf_carry: dest:i src1:1 src2:i len:28
sub_ovf_un_carry: dest:i src1:1 src2:i len:12
@@ -332,5 +221,122 @@
voidcall: len:22 clob:c
voidcall_membase: src1:b len:12 clob:c
voidcall_reg: src1:i len:8 clob:c
-xor: dest:i src1:i src2:i len:8
xor_imm: dest:i src1:i len:20
+
+# 32 bit opcodes
+int_adc: dest:i src1:i src2:i len:12
+int_adc_imm: dest:i src1:i len:14
+int_addcc: dest:i src1:i src2:i len:12
+int_add: dest:i src1:i src2:i len:12
+int_add_imm: dest:i src1:i len:20
+int_and: dest:i src1:i src2:i len:12
+int_and_imm: dest:i src1:i len:24
+int_beq: len:8
+int_bge: len:8
+int_bge_un: len:8
+int_bgt: len:8
+int_bgt_un: len:8
+int_ble: len:8
+int_ble_un: len:8
+int_blt: len:8
+int_blt_un: len:8
+int_bne_un: len:8
+int_ceq: dest:i len:12
+int_cgt: dest:i len:12
+int_cgt_un: dest:i len:12
+int_clt: dest:i len:12
+int_clt_un: dest:i len:12
+int_div: dest:a src1:i src2:i len:16
+int_div_imm: dest:a src1:i len:24
+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: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_add_ovf: dest:i src1:i src2:i len:32
+int_add_ovf_un: dest:i src1:i src2:i len:32
+int_sub_ovf: dest:i src1:i src2:i len:32
+int_sub_ovf_un: dest:i src1:i src2:i len:32
+int_neg: dest:i src1:i len:12
+int_not: dest:i src1:i len:12
+int_or: dest:i src1:i src2:i len:12
+int_or_imm: dest:i src1:i len:24
+int_rem: dest:d src1:i src2:i len:16
+int_rem_imm: dest:d src1:i len:24
+int_rem_un: dest:d src1:i src2:i len:16
+int_rem_un_imm: dest:d src1:i len:24
+int_sbb: dest:i src1:i src2:i len:6
+int_sbb_imm: dest:i src1:i len:14
+int_shl: dest:i src1:i src2:i clob:s len:10
+int_shl_imm: dest:i src1:i len:10
+int_shr: dest:i src1:i src2:i clob:s len:10
+int_shr_imm: dest:i src1:i len:10
+int_shr_un: dest:i src1:i src2:i clob:s len:10
+int_shr_un_imm: dest:i src1:i len:10
+int_subcc: dest:i src1:i src2:i len:12
+int_sub: dest:i src1:i src2:i len:12
+int_sub_imm: dest:i src1:i len:18
+int_xor: dest:i src1:i src2:i len:12
+int_xor_imm: dest:i src1:i len:24
+int_conv_to_r4: dest:f src1:i len:16
+int_conv_to_r8: dest:f src1:i len:16
+
+# 64 bit opcodes
+long_add: dest:i src1:i src2:i len:12
+long_sub: dest:i src1:i src2:i len:12
+long_add_ovf: dest:i src1:i src2:i len:32
+long_add_ovf_un: dest:i src1:i src2:i len:32
+long_div: dest:i src1:i src2:i len:12
+long_div_un: dest:i src1:i src2:i len:16
+long_mul: dest:i src1:i src2:i len:12
+long_mul_imm: dest:i src1:i src2:i len:20
+long_mul_ovf: dest:i src1:i src2:i len:56
+long_mul_ovf_un: dest:i src1:i src2:i len:64
+long_and: dest:i src1:i src2:i len:8
+long_or: dest:i src1:i src2:i len:8
+long_xor: dest:i src1:i src2:i len:8
+long_neg: dest:i src1:i len:6
+long_not: dest:i src1:i len:12
+long_rem: dest:i src1:i src2:i len:12
+long_rem_un: dest:i src1:i src2:i len:16
+long_shl: dest:i src1:i src2:i len:14
+long_shl_imm: dest:i src1:i len:14
+long_shr_un: dest:i src1:i src2:i len:14
+long_shr: dest:i src1:i src2:i len:14
+long_shr_imm: dest:i src1:i len:14
+long_shr_un_imm: dest:i src1:i len:14
+long_sub_imm: dest:i src1:i len:16
+long_sub_ovf: dest:i src1:i src2:i len:16
+long_sub_ovf_un: dest:i src1:i src2:i len:28
+
+long_conv_to_i1: dest:i src1:i len:30
+long_conv_to_i2: dest:i src1:i len:36
+long_conv_to_i4: dest:i src1:i len:4
+long_conv_to_i8: dest:i src1:i len:4
+long_conv_to_i: dest:i src1:i len:4
+long_conv_to_ovf_i: dest:i src1:i src2:i len:44
+long_conv_to_ovf_i4_un: dest:i src1:i len:50
+long_conv_to_ovf_u4: dest:i src1:i len:48
+long_conv_to_ovf_u8_un: dest:i src1:i len:4
+long_conv_to_r4: dest:f src1:i len:16
+long_conv_to_r8: dest:f src1:i len:16
+long_conv_to_u1: dest:i src1:i len:14
+long_conv_to_u2: dest:i src1:i len:24
+long_conv_to_u4: dest:i src1:i len:4
+long_conv_to_u8: dest:i src1:i len:4
+long_conv_to_u: dest:i src1:i len:4
+
+conv.r.un: dest:f src1:i src2:i len:37
+
+long_beq: len:8
+long_bge_un: len:8
+long_bge: len:8
+long_bgt_un: len:8
+long_bgt: len:8
+long_ble_un: len:8
+long_ble: len:8
+long_blt_un: len:8
+long_blt: len:8
+long_bne_un: len:8
+
Modified: trunk/mono/mono/mini/inssel-s390x.brg
===================================================================
--- trunk/mono/mono/mini/inssel-s390x.brg 2008-02-07 23:22:28 UTC (rev
95207)
+++ trunk/mono/mono/mini/inssel-s390x.brg 2008-02-07 23:37:46 UTC (rev
95208)
@@ -30,17 +30,29 @@
mono_bblock_add_inst (s->cbb, tree);
}
-reg: CEE_ADD_OVF (reg, reg),
reg: OP_LADD_OVF (reg, reg),
-reg: CEE_ADD_OVF_UN (reg, reg),
reg: OP_LADD_OVF_UN (reg, reg),
-reg: CEE_SUB_OVF (reg, reg),
reg: OP_LSUB_OVF (reg, reg),
-reg: CEE_SUB_OVF_UN (reg, reg),
reg: OP_LSUB_OVF_UN (reg, reg) "0" {
MONO_EMIT_BIALU (s, tree, tree->opcode, state->reg1, state->left->reg1,
state->right->reg1);
}
+reg: CEE_ADD_OVF (reg, reg) "0" {
+ MONO_EMIT_BIALU (s, tree, OP_IADD_OVF, state->reg1, state->left->reg1,
state->right->reg1);
+}
+
+reg: CEE_ADD_OVF_UN (reg, reg) "0" {
+ MONO_EMIT_BIALU (s, tree, OP_IADD_OVF_UN, state->reg1,
state->left->reg1, state->right->reg1);
+}
+
+reg: CEE_SUB_OVF (reg, reg) "0" {
+ MONO_EMIT_BIALU (s, tree, OP_ISUB_OVF, state->reg1, state->left->reg1,
state->right->reg1);
+}
+
+reg: CEE_SUB_OVF_UN (reg, reg) "0" {
+ MONO_EMIT_BIALU (s, tree, OP_ISUB_OVF_UN, state->reg1,
state->left->reg1, state->right->reg1);
+}
+
stmt: CEE_STIND_I8 (OP_REGVAR, reg) {
MONO_EMIT_NEW_UNALU (s, OP_MOVE, state->left->tree->dreg,
state->right->reg1);
}
Modified: trunk/mono/mono/mini/mini-s390x.c
===================================================================
--- trunk/mono/mono/mini/mini-s390x.c 2008-02-07 23:22:28 UTC (rev 95207)
+++ trunk/mono/mono/mini/mini-s390x.c 2008-02-07 23:37:46 UTC (rev 95208)
@@ -273,7 +273,6 @@
static guchar * emit_float_to_int (MonoCompile *, guchar *, int, int, int,
gboolean);
gpointer mono_arch_get_lmf_addr (void);
static guint8 * emit_load_volatile_registers (guint8 *, MonoCompile *);
-static CompRelation opcode_to_cond (int);
static void catch_SIGILL(int, siginfo_t *, void *);
static void emit_sig_cookie (MonoCompile *, MonoCallInst *, CallInfo *, int);
@@ -2293,7 +2292,7 @@
if (last_ins && (last_ins->opcode ==
OP_STOREI1_MEMBASE_REG) &&
ins->inst_basereg ==
last_ins->inst_destbasereg &&
ins->inst_offset ==
last_ins->inst_offset) {
- ins->opcode = (ins->opcode ==
OP_LOADI1_MEMBASE) ? CEE_CONV_I1 : CEE_CONV_U1;
+ ins->opcode = (ins->opcode ==
OP_LOADI1_MEMBASE) ? OP_LCONV_TO_I1 : OP_LCONV_TO_U1;
ins->sreg1 = last_ins->sreg1;
}
break;
@@ -2302,12 +2301,10 @@
if (last_ins && (last_ins->opcode ==
OP_STOREI2_MEMBASE_REG) &&
ins->inst_basereg ==
last_ins->inst_destbasereg &&
ins->inst_offset ==
last_ins->inst_offset) {
- ins->opcode = (ins->opcode ==
OP_LOADI2_MEMBASE) ? CEE_CONV_I2 : CEE_CONV_U2;
+ ins->opcode = (ins->opcode ==
OP_LOADI2_MEMBASE) ? OP_LCONV_TO_I2 : OP_LCONV_TO_U2;
ins->sreg1 = last_ins->sreg1;
}
break;
- case CEE_CONV_I4:
- case CEE_CONV_U4:
case OP_MOVE:
/*
* OP_MOVE reg, reg
@@ -2547,7 +2544,7 @@
ins->inst_basereg, ins->inst_offset);
}
break;
- case CEE_CONV_I1: {
+ case OP_LCONV_TO_I1: {
s390_lghi (code, s390_r0, 0x80);
if (ins->dreg != ins->sreg1) {
s390_lgr (code, ins->dreg, ins->sreg1);
@@ -2559,7 +2556,7 @@
s390_ogr (code, ins->dreg, s390_r13);
}
break;
- case CEE_CONV_I2: {
+ case OP_LCONV_TO_I2: {
s390_lghi (code, s390_r0, 0x80);
s390_sllg (code, s390_r0, s390_r0, 0, 8);
if (ins->dreg != ins->sreg1) {
@@ -2572,7 +2569,7 @@
s390_ogr (code, ins->dreg, s390_r13);
}
break;
- case CEE_CONV_U1: {
+ case OP_LCONV_TO_U1: {
s390_lghi (code, s390_r0, 0xff);
if (ins->dreg != ins->sreg1) {
s390_lgr (code, ins->dreg, ins->sreg1);
@@ -2580,7 +2577,7 @@
s390_ngr (code, ins->dreg, s390_r0);
}
break;
- case CEE_CONV_U2: {
+ case OP_LCONV_TO_U2: {
s390_lghi (code, s390_r0, -1);
s390_sllg (code, s390_r0, s390_r0, 0, 16);
s390_srlg (code, s390_r0, s390_r0, 0, 16);
@@ -2593,7 +2590,7 @@
case OP_COMPARE:
case OP_LCOMPARE: {
next = mono_inst_list_next (&ins->node, &bb->ins_list);
- if ((next) && (opcode_to_cond(next->opcode) >=
CMP_LE_UN))
+ if ((next) && (mono_opcode_to_cond(next->opcode) >=
CMP_LE_UN))
s390_clgr (code, ins->sreg1, ins->sreg2);
else
s390_cgr (code, ins->sreg1, ins->sreg2);
@@ -2604,7 +2601,7 @@
if (s390_is_imm16 (ins->inst_imm)) {
s390_lghi (code, s390_r0, ins->inst_imm);
if ((next) &&
- (opcode_to_cond(next->opcode) >= CMP_LE_UN))
+ (mono_opcode_to_cond(next->opcode) >=
CMP_LE_UN))
s390_clgr (code, ins->sreg1, s390_r0);
else
s390_cgr (code, ins->sreg1, s390_r0);
@@ -2613,7 +2610,7 @@
s390_j (code, 6);
s390_llong(code, ins->inst_imm);
if ((next) &&
- (opcode_to_cond(next->opcode) >= CMP_LE_UN))
+ (mono_opcode_to_cond(next->opcode) >=
CMP_LE_UN))
s390_clg (code, ins->sreg1, 0,
s390_r13, 4);
else
s390_cg (code, ins->sreg1, 0,
s390_r13, 4);
@@ -2622,7 +2619,7 @@
break;
case OP_ICOMPARE: {
next = mono_inst_list_next (&ins->node, &bb->ins_list);
- if ((next) && (opcode_to_cond(next->opcode) >=
CMP_LE_UN))
+ if ((next) && (mono_opcode_to_cond(next->opcode) >=
CMP_LE_UN))
s390_clr (code, ins->sreg1, ins->sreg2);
else
s390_cr (code, ins->sreg1, ins->sreg2);
@@ -2633,7 +2630,7 @@
if (s390_is_imm16 (ins->inst_imm)) {
s390_lghi (code, s390_r0, ins->inst_imm);
if ((next) &&
- (opcode_to_cond(next->opcode) >= CMP_LE_UN))
+ (mono_opcode_to_cond(next->opcode) >=
CMP_LE_UN))
s390_clr (code, ins->sreg1, s390_r0);
else
s390_cr (code, ins->sreg1, s390_r0);
@@ -2643,7 +2640,7 @@
s390_j (code, 4);
s390_word (code, ins->inst_imm);
if ((next) &&
- (opcode_to_cond(next->opcode) >= CMP_LE_UN))
+ (mono_opcode_to_cond(next->opcode) >=
CMP_LE_UN))
s390_cl (code, ins->sreg1, 0,
s390_r13, 4);
else
s390_c (code, ins->sreg1, 0,
s390_r13, 4);
@@ -2665,7 +2662,7 @@
s390_algr (code, ins->dreg, src2);
}
break;
- case CEE_ADD: {
+ case OP_LADD: {
CHECK_SRCDST_COM;
s390_agr (code, ins->dreg, src2);
}
@@ -2705,16 +2702,18 @@
}
}
break;
- case OP_LADD_OVF: {
+ case OP_IADD_OVF: {
CHECK_SRCDST_COM;
- s390_agr (code, ins->dreg, src2);
+ s390_ar (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
+ s390_lgfr (code, ins->dreg, ins->dreg);
}
break;
- case OP_LADD_OVF_UN: {
+ case OP_IADD_OVF_UN: {
CHECK_SRCDST_COM;
s390_algr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_CY,
"OverflowException");
+ s390_llgfr (code, ins->dreg, ins->dreg);
}
break;
case OP_ADD_OVF_CARRY: {
@@ -2739,7 +2738,7 @@
s390_slgr (code, ins->dreg, src2);
}
break;
- case CEE_SUB: {
+ case OP_LSUB: {
CHECK_SRCDST_NCOM;
s390_sgr (code, ins->dreg, src2);
}
@@ -2779,18 +2778,6 @@
}
}
break;
- case OP_LSUB_OVF: {
- CHECK_SRCDST_NCOM;
- s390_sgr (code, ins->dreg, src2);
- EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
- }
- break;
- case OP_LSUB_OVF_UN: {
- CHECK_SRCDST_NCOM;
- s390_slgr (code, ins->dreg, src2);
- EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC,
"OverflowException");
- }
- break;
case OP_SUB_OVF_CARRY: {
CHECK_SRCDST_NCOM;
s390_lghi (code, s390_r0, 0);
@@ -2808,7 +2795,7 @@
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC,
"OverflowException");
}
break;
- case CEE_AND: {
+ case OP_LAND: {
if (ins->sreg1 == ins->dreg) {
s390_ngr (code, ins->dreg, ins->sreg2);
}
@@ -2894,7 +2881,7 @@
s390_lgr (code, ins->dreg, s390_r0);
}
break;
- case CEE_OR: {
+ case OP_LOR: {
if (ins->sreg1 == ins->dreg) {
s390_ogr (code, ins->dreg, ins->sreg2);
}
@@ -2924,7 +2911,7 @@
}
}
break;
- case CEE_XOR: {
+ case OP_LXOR: {
if (ins->sreg1 == ins->dreg) {
s390_xgr (code, ins->dreg, ins->sreg2);
}
@@ -2954,7 +2941,6 @@
}
}
break;
- case CEE_SHL:
case OP_LSHL: {
CHECK_SRCDST_NCOM;
s390_sllg (code, ins->dreg, ins->dreg, src2, 0);
@@ -2968,7 +2954,6 @@
s390_sllg (code, ins->dreg, ins->dreg, 0,
(ins->inst_imm & 0x3f));
}
break;
- case CEE_SHR:
case OP_LSHR: {
CHECK_SRCDST_NCOM;
s390_srag (code, ins->dreg, ins->dreg, src2, 0);
@@ -2990,13 +2975,12 @@
s390_srlg (code, ins->dreg, ins->dreg, 0,
(ins->inst_imm & 0x3f));
}
break;
- case CEE_SHR_UN:
case OP_LSHR_UN: {
CHECK_SRCDST_NCOM;
s390_srlg (code, ins->dreg, ins->dreg, src2, 0);
}
break;
- case CEE_NOT: {
+ case OP_LNOT: {
if (ins->sreg1 != ins->dreg) {
s390_lgr (code, ins->dreg, ins->sreg1);
}
@@ -3004,11 +2988,10 @@
s390_xgr (code, ins->dreg, s390_r0);
}
break;
- case CEE_NEG: {
+ case OP_LNEG: {
s390_lcgr (code, ins->dreg, ins->sreg1);
}
break;
- case CEE_MUL:
case OP_LMUL: {
CHECK_SRCDST_COM;
s390_msgr (code, ins->dreg, src2);
@@ -3030,8 +3013,7 @@
s390_msgr (code, ins->dreg, s390_r13);
}
break;
- case OP_LMUL_OVF:
- case CEE_MUL_OVF: {
+ case OP_LMUL_OVF: {
short int *o[2];
s390_ltgr (code, s390_r1, ins->sreg1);
s390_jz (code, 0); CODEPTR(code, o[0]);
@@ -3050,8 +3032,7 @@
s390_lgr (code, ins->dreg, s390_r1);
}
break;
- case OP_LMUL_OVF_UN:
- case CEE_MUL_OVF_UN: {
+ case OP_LMUL_OVF_UN: {
s390_lghi (code, s390_r0, 0);
s390_lgr (code, s390_r1, ins->sreg1);
s390_mlgr (code, s390_r0, ins->sreg2);
@@ -3107,18 +3088,16 @@
}
}
break;
- case CEE_ADD_OVF: {
+ case OP_LADD_OVF: {
CHECK_SRCDST_COM;
- s390_ar (code, ins->dreg, src2);
+ s390_agr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
- s390_lgfr (code, ins->dreg, ins->dreg);
}
break;
- case CEE_ADD_OVF_UN: {
+ case OP_LADD_OVF_UN: {
CHECK_SRCDST_COM;
s390_algr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_CY,
"OverflowException");
- s390_llgfr (code, ins->dreg, ins->dreg);
}
break;
case OP_ISUBCC: {
@@ -3157,20 +3136,32 @@
s390_slgf (code, ins->dreg, 0, s390_r13, 4);
}
break;
- case CEE_SUB_OVF: {
+ case OP_ISUB_OVF: {
CHECK_SRCDST_NCOM;
s390_sr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
s390_lgfr (code, ins->dreg, ins->dreg);
}
break;
- case CEE_SUB_OVF_UN: {
+ case OP_ISUB_OVF_UN: {
CHECK_SRCDST_NCOM;
s390_slr (code, ins->dreg, src2);
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC,
"OverflowException");
s390_llgfr(code, ins->dreg, ins->dreg);
}
break;
+ case OP_LSUB_OVF: {
+ CHECK_SRCDST_NCOM;
+ s390_sgr (code, ins->dreg, src2);
+ EMIT_COND_SYSTEM_EXCEPTION (S390_CC_OV,
"OverflowException");
+ }
+ break;
+ case OP_LSUB_OVF_UN: {
+ CHECK_SRCDST_NCOM;
+ s390_slgr (code, ins->dreg, src2);
+ EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC,
"OverflowException");
+ }
+ break;
case OP_IAND: {
CHECK_SRCDST_NCOM_I;
s390_ngr (code, ins->dreg, src2);
@@ -3418,20 +3409,21 @@
s390_lgr (code, ins->dreg, ins->sreg1);
}
break;
- case CEE_CONV_I:
- case CEE_CONV_I8:
+ case OP_LCONV_TO_I:
+ case OP_LCONV_TO_I8:
case OP_SEXT_I4:
s390_lgfr (code, ins->dreg, ins->sreg1);
break;
- case CEE_CONV_I4:
+ case OP_LCONV_TO_I4:
s390_lgfr (code, ins->dreg, ins->sreg1);
break;
- case CEE_CONV_U:
- case CEE_CONV_U8:
- case CEE_CONV_U4:
+ case OP_LCONV_TO_U:
+ case OP_LCONV_TO_U8:
+ case OP_LCONV_TO_U4:
+ case OP_ZEXT_I4:
s390_llgfr (code, ins->dreg, ins->sreg1);
break;
- case CEE_CONV_OVF_U4:
+ case OP_LCONV_TO_OVF_U4:
s390_basr (code, s390_r13, 0);
s390_j (code, 6);
s390_llong(code, 4294967295);
@@ -3441,7 +3433,7 @@
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_LT,
"OverflowException");
s390_llgfr(code, ins->dreg, ins->sreg1);
break;
- case CEE_CONV_OVF_I4_UN:
+ case OP_LCONV_TO_OVF_I4_UN:
s390_basr (code, s390_r13, 0);
s390_j (code, 6);
s390_llong(code, 2147483647);
@@ -3757,34 +3749,34 @@
case OP_COND_EXC_NC:
EMIT_COND_SYSTEM_EXCEPTION (S390_CC_NC, ins->inst_p1);
break;
- case CEE_BEQ:
+ case OP_LBEQ:
case OP_IBEQ:
EMIT_COND_BRANCH (ins, S390_CC_EQ);
break;
- case CEE_BNE_UN:
+ case OP_LBNE_UN:
case OP_IBNE_UN:
EMIT_COND_BRANCH (ins, S390_CC_NE);
break;
- case CEE_BLT:
- case CEE_BLT_UN:
+ case OP_LBLT:
+ case OP_LBLT_UN:
case OP_IBLT:
case OP_IBLT_UN:
EMIT_COND_BRANCH (ins, S390_CC_LT);
break;
- case CEE_BGT:
- case CEE_BGT_UN:
+ case OP_LBGT:
+ case OP_LBGT_UN:
case OP_IBGT:
case OP_IBGT_UN:
EMIT_COND_BRANCH (ins, S390_CC_GT);
break;
- case CEE_BGE:
- case CEE_BGE_UN:
+ case OP_LBGE:
+ case OP_LBGE_UN:
case OP_IBGE:
case OP_IBGE_UN:
EMIT_COND_BRANCH (ins, S390_CC_GE);
break;
- case CEE_BLE:
- case CEE_BLE_UN:
+ case OP_LBLE:
+ case OP_LBLE_UN:
case OP_IBLE:
case OP_IBLE_UN:
EMIT_COND_BRANCH (ins, S390_CC_LE);
@@ -3848,13 +3840,13 @@
s390_adb (code, ins->dreg, 0, s390_r13, 4);
}
break;
- case OP_LCONV_TO_R4:
- case CEE_CONV_R4: {
+ case OP_LCONV_TO_R4:
+ case OP_ICONV_TO_R4: {
s390_cdgbr (code, ins->dreg, ins->sreg1);
}
break;
- case OP_LCONV_TO_R8:
- case CEE_CONV_R8: {
+ case OP_LCONV_TO_R8:
+ case OP_ICONV_TO_R8: {
s390_cdgbr (code, ins->dreg, ins->sreg1);
}
break;
@@ -3881,14 +3873,6 @@
case OP_FCONV_TO_I8:
s390_cgdbr (code, ins->dreg, 5, ins->sreg1);
break;
- case OP_FCONV_TO_U8:
- g_assert_not_reached ();
- /* Implemented as helper calls */
- break;
- case OP_LCONV_TO_R_UN:
- g_assert_not_reached ();
- /* Implemented as helper calls */
- break;
case OP_LCONV_TO_OVF_I: {
/* Valid ints: 0xffffffff:8000000 to
00000000:0x7f000000 */
short int *o[5];
@@ -5127,92 +5111,6 @@
/*========================= End of Function ========================*/
-/*------------------------------------------------------------------*/
-/* */
-/* Name - opcode_to_cond */
-/* */
-/* Function - Simplify the branch on condition opcode from */
-/* more than 20 to just a handful for easy manipu- */
-/* lation within the instruction emitting code. */
-/* */
-/* Returns - CMP_xxx - this simplified condition type. */
-/* */
-/*------------------------------------------------------------------*/
-
-static CompRelation
-opcode_to_cond (int opcode)
-{
- switch (opcode) {
- case CEE_BEQ:
- case OP_CEQ:
- case OP_IBEQ:
- case OP_ICEQ:
- case OP_FBEQ:
- case OP_FCEQ:
- case OP_COND_EXC_EQ:
- return CMP_EQ;
- case CEE_BNE_UN:
- case OP_COND_EXC_NE_UN:
- case OP_IBNE_UN:
- case OP_FBNE_UN:
- return CMP_NE;
- case CEE_BLE:
- case OP_IBLE:
- case OP_FBLE:
- return CMP_LE;
- case CEE_BGE:
- case OP_IBGE:
- case OP_FBGE:
- return CMP_GE;
- case CEE_BLT:
- case OP_COND_EXC_LT:
- case OP_CLT:
- case OP_IBLT:
- case OP_ICLT:
- case OP_FBLT:
- case OP_FCLT:
- return CMP_LT;
- case CEE_BGT:
- case OP_COND_EXC_GT:
- case OP_CGT:
- case OP_IBGT:
- case OP_ICGT:
- case OP_FBGT:
- case OP_FCGT:
- return CMP_GT;
-
- case CEE_BLE_UN:
- case OP_COND_EXC_LE_UN:
- case OP_IBLE_UN:
- case OP_FBLE_UN:
- return CMP_LE_UN;
- case CEE_BGE_UN:
- case OP_IBGE_UN:
- case OP_FBGE_UN:
- return CMP_GE_UN;
- case CEE_BLT_UN:
- case OP_CLT_UN:
- case OP_IBLT_UN:
- case OP_ICLT_UN:
- case OP_FBLT_UN:
- case OP_FCLT_UN:
- case OP_COND_EXC_LT_UN:
- return CMP_LT_UN;
- case CEE_BGT_UN:
- case OP_COND_EXC_GT_UN:
- case OP_CGT_UN:
- case OP_IBGT_UN:
- case OP_ICGT_UN:
- case OP_FCGT_UN:
- case OP_FBGT_UN:
- return CMP_GT_UN;
- default:
- printf ("%s\n", mono_inst_name (opcode));
- g_error("Not implemented\n");
- }
- return CMP_EQ;
-}
-
/*========================= End of Function ========================*/
/*------------------------------------------------------------------*/
Modified: trunk/mono/mono/mini/mini-s390x.h
===================================================================
--- trunk/mono/mono/mini/mini-s390x.h 2008-02-07 23:22:28 UTC (rev 95207)
+++ trunk/mono/mono/mini/mini-s390x.h 2008-02-07 23:37:46 UTC (rev 95208)
@@ -178,6 +178,7 @@
#define MONO_ARCH_HAVE_ATOMIC_ADD 1
#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
#define MONO_ARCH_SIGNAL_STACK_SIZE 256*1024
+#define MONO_ARCH_ENABLE_NORMALIZE_OPCODES 1
// #define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
#define MONO_ARCH_USE_SIGACTION 1
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches