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

Reply via email to