Author: lupus
Date: 2007-01-17 13:23:33 -0500 (Wed, 17 Jan 2007)
New Revision: 71222

Modified:
   trunk/mono/mono/mini/ChangeLog
   trunk/mono/mono/mini/inssel.brg
Log:


Wed Jan 17 19:22:34 CET 2007 Paolo Molaro <[EMAIL PROTECTED]>

        * inssel.brg: patch from Mark Mason <[EMAIL PROTECTED]>
        to deal with mips missing of flags.



Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog      2007-01-17 17:59:25 UTC (rev 71221)
+++ trunk/mono/mono/mini/ChangeLog      2007-01-17 18:23:33 UTC (rev 71222)
@@ -1,4 +1,9 @@
 
+Wed Jan 17 19:22:34 CET 2007 Paolo Molaro <[EMAIL PROTECTED]>
+
+       * inssel.brg: patch from Mark Mason <[EMAIL PROTECTED]>
+       to deal with mips missing of flags.
+
 Tue Jan 16 20:01:01 CET 2007 Paolo Molaro <[EMAIL PROTECTED]>
 
        * exceptions-ppc.c: execute fault handlers.

Modified: trunk/mono/mono/mini/inssel.brg
===================================================================
--- trunk/mono/mono/mini/inssel.brg     2007-01-17 17:59:25 UTC (rev 71221)
+++ trunk/mono/mono/mini/inssel.brg     2007-01-17 18:23:33 UTC (rev 71222)
@@ -278,8 +278,7 @@
                if (! (state->tree->flags & MONO_INST_NORANGECHECK)) { \
                        int _length_reg = mono_regstate_next_int (cfg->rs); \
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, 
_length_reg, array_reg, G_STRUCT_OFFSET (array_type, array_length_field)); \
-                       MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, _length_reg, 
index_reg); \
-                       MONO_EMIT_NEW_COND_EXC (cfg, LE_UN, 
"IndexOutOfRangeException"); \
+                       MONO_EMIT_NEW_COMPARE_EXC (cfg, LE_UN, _length_reg, 
index_reg, "IndexOutOfRangeException"); \
                } \
        } while (0)
 
@@ -287,11 +286,31 @@
                if (! (state->tree->flags & MONO_INST_NORANGECHECK)) { \
                        int _length_reg = mono_regstate_next_int (cfg->rs); \
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP (cfg, OP_LOADI4_MEMBASE, 
_length_reg, array_reg, G_STRUCT_OFFSET (array_type, array_length_field)); \
-                       MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, 
_length_reg, index_imm); \
-                       MONO_EMIT_NEW_COND_EXC (cfg, LE_UN, 
"IndexOutOfRangeException"); \
+                       MONO_EMIT_NEW_COMPARE_IMM_EXC (cfg, LE_UN, _length_reg, 
index_imm, "IndexOutOfRangeException"); \
                } \
        } while (0)
 
+#ifndef MONO_EMIT_NEW_COMPARE_EXC
+#define MONO_EMIT_NEW_COMPARE_EXC(cfg, cmp_op, sreg1, sreg2, exc) do { \
+               MONO_EMIT_NEW_BIALU (cfg, OP_COMPARE, -1, sreg1, sreg2); \
+               MONO_EMIT_NEW_COND_EXC (cfg, cmp_op, exc); \
+       } while (0)
+#endif
+
+#ifndef MONO_EMIT_NEW_COMPARE_IMM_EXC
+#define MONO_EMIT_NEW_COMPARE_IMM_EXC(cfg, cmp_op, sreg1, imm, exc) do { \
+               MONO_EMIT_NEW_BIALU_IMM (cfg, OP_COMPARE_IMM, -1, sreg1, imm); \
+               MONO_EMIT_NEW_COND_EXC (cfg, cmp_op, exc); \
+       } while (0)
+#endif
+
+#ifndef MONO_EMIT_NEW_ICOMPARE_IMM_EXC
+#define MONO_EMIT_NEW_ICOMPARE_IMM_EXC(cfg, cmp_op, sreg1, imm, exc) do { \
+               MONO_EMIT_NEW_ICOMPARE_IMM(cfg, sreg1, imm); \
+               MONO_EMIT_NEW_COND_EXC (cfg, cmp_op, exc); \
+       } while (0)
+#endif
+
 #ifndef MONO_EMIT_NEW_COMPARE_BRANCH_LABEL
 #define MONO_EMIT_NEW_COMPARE_BRANCH_LABEL(cfg, cmp_op, sreg1, sreg2, label) \
        do { \
@@ -629,16 +648,14 @@
        MONO_EMIT_NEW_BIALU (s, CEE_SUB, realidx1_reg, index1, low1_reg);
        MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOADI4_MEMBASE, high1_reg, 
                                       bounds_reg, G_STRUCT_OFFSET 
(MonoArrayBounds, length));
-       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, high1_reg, realidx1_reg);
-       MONO_EMIT_NEW_COND_EXC (s, LE_UN, "IndexOutOfRangeException");
+       MONO_EMIT_NEW_COMPARE_EXC (s, LE_UN, high1_reg, realidx1_reg, 
"IndexOutOfRangeException");
 
        MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOADI4_MEMBASE, low2_reg, 
                                       bounds_reg, sizeof (MonoArrayBounds) + 
G_STRUCT_OFFSET (MonoArrayBounds, lower_bound));
        MONO_EMIT_NEW_BIALU (s, CEE_SUB, realidx2_reg, index2, low2_reg);
        MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOADI4_MEMBASE, high2_reg, 
                                       bounds_reg, sizeof (MonoArrayBounds) + 
G_STRUCT_OFFSET (MonoArrayBounds, length));
-       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, high2_reg, realidx2_reg);
-       MONO_EMIT_NEW_COND_EXC (s, LE_UN, "IndexOutOfRangeException");
+       MONO_EMIT_NEW_COMPARE_EXC (s, LE_UN, high2_reg, realidx2_reg, 
"IndexOutOfRangeException");
 
        MONO_EMIT_NEW_BIALU (s, CEE_MUL, mult_reg, high2_reg, realidx1_reg);
        MONO_EMIT_NEW_BIALU (s, CEE_ADD, sum_reg, mult_reg, realidx2_reg);
@@ -683,56 +700,47 @@
        if (sizeof (void *) == 8) {
                MONO_EMIT_UNALU (s, tree, tree->opcode, state->reg1, 
state->left->reg1);
        } else {        
-               MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 0);
-               MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, LT, state->left->reg1, 0, 
"OverflowException");
                MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, 
state->left->reg1);
        }
 }
 
 reg: CEE_CONV_OVF_I1 (reg) {     
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, 127);
-       MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, -128);
-       MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, GT, state->left->reg1, 127, 
"OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, LT, state->left->reg1, -128, 
"OverflowException");
        MONO_EMIT_UNALU (s, tree, CEE_CONV_I1, state->reg1, state->left->reg1);
 }
 
 reg: CEE_CONV_OVF_I1_UN (reg) {
        /* probe values between 0 to 127 */
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, 127);
-       MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, GT_UN, state->left->reg1, 127, 
"OverflowException");
        MONO_EMIT_UNALU (s, tree, CEE_CONV_I1, state->reg1, state->left->reg1);
 }
 
 reg: CEE_CONV_OVF_U1 (reg),
 reg: CEE_CONV_OVF_U1_UN (reg) {
        /* probe value to be within 0 to 255 */
-       MONO_EMIT_NEW_COMPARE_IMM (s, state->left->reg1, 255);
-       MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");
+       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, GT_UN, state->left->reg1, 255, 
"OverflowException");
        MONO_EMIT_BIALU_IMM (s, tree, OP_AND_IMM, state->reg1, 
state->left->reg1, 0xff);
 }
 
 reg: CEE_CONV_OVF_I2 (reg) {   
        /* Probe value to be within -32768 and 32767 */
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, 32767);
-       MONO_EMIT_NEW_COND_EXC (s, GT, "OverflowException");
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, -32768);
-       MONO_EMIT_NEW_COND_EXC (s, LT, "OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, GT, state->left->reg1, 32767, 
"OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, LT, state->left->reg1, -32768, 
"OverflowException");
        MONO_EMIT_UNALU (s, tree, CEE_CONV_I2, state->reg1, state->left->reg1);
 }
 
 reg: CEE_CONV_OVF_I2_UN (reg) {
        /* Convert uint value into short, value within 0 and 32767 */
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, 32767);
-       MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, GT_UN, state->left->reg1, 32767, 
"OverflowException");
        MONO_EMIT_UNALU (s, tree, CEE_CONV_I2, state->reg1, state->left->reg1);
 }
 
 reg: CEE_CONV_OVF_U2 (reg),
 reg: CEE_CONV_OVF_U2_UN (reg) {
        /* Probe value to be within 0 and 65535 */
-       MONO_EMIT_NEW_ICOMPARE_IMM (s, state->left->reg1, 0xffff);
-       MONO_EMIT_NEW_COND_EXC (s, GT_UN, "OverflowException");
+       MONO_EMIT_NEW_ICOMPARE_IMM_EXC (s, GT_UN, state->left->reg1, 0xffff, 
"OverflowException");
        MONO_EMIT_BIALU_IMM (s, tree, OP_AND_IMM, state->reg1, 
state->left->reg1, 0xffff);
 }
 
@@ -1208,8 +1216,7 @@
        g_assert (klass->rank == 0);
 
        // Check rank == 0
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, rank_reg, 0);
-       MONO_EMIT_NEW_COND_EXC (s, NE_UN, "InvalidCastException");
+       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, rank_reg, 0, 
"InvalidCastException");
 
        MONO_EMIT_NEW_LOAD_MEMBASE (s, klass_reg, vtable_reg, G_STRUCT_OFFSET 
(MonoVTable, klass));
        MONO_EMIT_NEW_LOAD_MEMBASE (s, eclass_reg, klass_reg, G_STRUCT_OFFSET 
(MonoClass, element_class));
@@ -1217,12 +1224,11 @@
        if (s->compile_aot) {
                int const_reg = mono_regstate_next_int (s->rs);
                MONO_EMIT_NEW_CLASSCONST (s, const_reg, klass->element_class);
-               MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, eclass_reg, const_reg);
+               MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, eclass_reg, const_reg, 
"InvalidCastException");
        } else {
-               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, eclass_reg, 
klass->element_class);
+               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, eclass_reg, 
klass->element_class, "InvalidCastException");
        }
        
-       MONO_EMIT_NEW_COND_EXC (s, NE_UN, "InvalidCastException");
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, obj_reg);
 }
 
@@ -1249,8 +1255,7 @@
                        int eclass_reg = mono_regstate_next_int (s->rs);
 
                        MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOADU1_MEMBASE, 
rank_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, rank));
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, 
rank_reg, klass->rank);
-                       MONO_EMIT_NEW_COND_EXC (s, NE_UN, 
"InvalidCastException");
+                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, rank_reg, 
klass->rank, "InvalidCastException");
                        MONO_EMIT_NEW_LOAD_MEMBASE (s, klass_reg, vtable_reg, 
G_STRUCT_OFFSET (MonoVTable, klass));
                        MONO_EMIT_NEW_LOAD_MEMBASE (s, eclass_reg, klass_reg, 
G_STRUCT_OFFSET (MonoClass, cast_class));
                        if (klass->cast_class == mono_defaults.object_class) {
@@ -1267,11 +1272,10 @@
                                }
                                if (s->compile_aot) {
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, 
mono_defaults.enum_class);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, 
eclass_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, 
eclass_reg, const_reg, "InvalidCastException");
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, 
OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class);
+                                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, 
NE_UN, eclass_reg, mono_defaults.enum_class, "InvalidCastException");
                                }
-                               MONO_EMIT_NEW_COND_EXC (s, NE_UN, 
"InvalidCastException");
                        } else if (klass->cast_class == 
mono_defaults.enum_class->parent) {
                                int const_reg = mono_regstate_next_int (s->rs);
                                if (s->compile_aot) {
@@ -1283,20 +1287,18 @@
                                }
                                if (s->compile_aot) {
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, 
mono_defaults.enum_class);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, 
eclass_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, 
eclass_reg, const_reg, "InvalidCastException");
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, 
OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class);
+                                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, 
NE_UN, eclass_reg, mono_defaults.enum_class, "InvalidCastException");
                                }
-                               MONO_EMIT_NEW_COND_EXC (s, NE_UN, 
"InvalidCastException");
                        } else if (klass->cast_class == 
mono_defaults.enum_class) {
                                if (s->compile_aot) {
                                        int const_reg = mono_regstate_next_int 
(s->rs);
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, 
mono_defaults.enum_class);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, 
eclass_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, 
eclass_reg, const_reg, "InvalidCastException");
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, 
OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class);
+                                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, 
NE_UN, eclass_reg, mono_defaults.enum_class, "InvalidCastException");
                                }
-                               MONO_EMIT_NEW_COND_EXC (s, NE_UN, 
"InvalidCastException");
                        } else if (klass->cast_class->flags & 
TYPE_ATTRIBUTE_INTERFACE) {
                                mini_emit_castclass_iface_class (s, eclass_reg, 
klass->cast_class);
                        } else {
@@ -1307,20 +1309,18 @@
                                /* Check that the object is a vector too */
                                int bounds_reg = mono_regstate_next_int (s->rs);
                                MONO_EMIT_NEW_LOAD_MEMBASE (s, bounds_reg, 
obj_reg, G_STRUCT_OFFSET (MonoArray, bounds));
-                               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, 
bounds_reg, 0);
-                               MONO_EMIT_NEW_COND_EXC (s, NE_UN, 
"InvalidCastException");
+                               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, 
bounds_reg, 0, "InvalidCastException");
                        }
                } else {
                        if (!s->compile_aot && !(s->opt & MONO_OPT_SHARED) && 
(klass->flags & TYPE_ATTRIBUTE_SEALED)) {
                                /* the remoting code is broken, access the 
class for now */
                                if (0) {
                                        MonoVTable *vt = mono_class_vtable 
(s->domain, klass);
-                                       MONO_EMIT_NEW_BIALU_IMM (s, 
OP_COMPARE_IMM, -1, vtable_reg, vt);
+                                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, 
NE_UN, vtable_reg, vt, "InvalidCastException");
                                } else {
                                        MONO_EMIT_NEW_LOAD_MEMBASE (s, 
klass_reg, vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
-                                       MONO_EMIT_NEW_BIALU_IMM (s, 
OP_COMPARE_IMM, -1, klass_reg, klass);
+                                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, 
NE_UN, klass_reg, klass, "InvalidCastException");
                                }
-                               MONO_EMIT_NEW_COND_EXC (s, NE_UN, 
"InvalidCastException");
                        } else {
                                MONO_EMIT_NEW_LOAD_MEMBASE (s, klass_reg, 
vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
                                mini_emit_castclass (s, klass_reg, klass);
@@ -1362,19 +1362,17 @@
                if (s->compile_aot) {
                        int tproxy_reg = mono_regstate_next_int (s->rs);
                        MONO_EMIT_NEW_CLASSCONST (s, tproxy_reg, 
mono_defaults.transparent_proxy_class);
-                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, klass_reg, 
tproxy_reg);
+                       MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, klass_reg, 
tproxy_reg, "InvalidCastException");
                } else {
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, 
klass_reg, mono_defaults.transparent_proxy_class);
+                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, klass_reg, 
mono_defaults.transparent_proxy_class, "InvalidCastException");
                }
                
-               MONO_EMIT_NEW_COND_EXC (s, NE_UN, "InvalidCastException");
                
                MONO_EMIT_NEW_LOAD_MEMBASE (s, tmp_reg, obj_reg, 
G_STRUCT_OFFSET (MonoTransparentProxy, remote_class));
                MONO_EMIT_NEW_LOAD_MEMBASE (s, klass_reg, tmp_reg, 
G_STRUCT_OFFSET (MonoRemoteClass, proxy_class));
                
                MONO_EMIT_NEW_LOAD_MEMBASE (s, tmp_reg, obj_reg, 
G_STRUCT_OFFSET (MonoTransparentProxy, custom_type_info));
-               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, tmp_reg, 0);
-               MONO_EMIT_NEW_COND_EXC (s, EQ, "InvalidCastException");
+               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, EQ, tmp_reg, 0, 
"InvalidCastException");
                
                MONO_EMIT_NEW_ICONST (s, state->reg1, 1);
                MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, end_label);
@@ -1520,21 +1518,20 @@
                if (s->compile_aot) {
                        int klass_reg = mono_regstate_next_int (s->rs);
                        MONO_EMIT_NEW_CLASSCONST (s, klass_reg, array_class);
-                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, class_reg, 
klass_reg);
+                       MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, class_reg, 
klass_reg, "ArrayTypeMismatchException");
                } else {
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, 
class_reg, array_class);
+                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, class_reg, 
array_class, "ArrayTypeMismatchException");
                }
        } else {
                if (s->compile_aot) {
                        int vt_reg = mono_regstate_next_int (s->rs);
                        MONO_EMIT_NEW_VTABLECONST (s, vt_reg, mono_class_vtable 
(s->domain, array_class));
-                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, vtable_reg, 
vt_reg);
+                       MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, vtable_reg, 
vt_reg, "ArrayTypeMismatchException");
                } else {
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, 
vtable_reg, mono_class_vtable (s->domain, array_class));
+                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, vtable_reg, 
mono_class_vtable (s->domain, array_class), "ArrayTypeMismatchException");
                }
        }
        
-       MONO_EMIT_NEW_COND_EXC (s, NE_UN, "ArrayTypeMismatchException");
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
 }
 
@@ -1564,11 +1561,10 @@
        if (s->compile_aot) {
                int const_reg = mono_regstate_next_int (s->rs);
                MONO_EMIT_NEW_CLASSCONST (s, const_reg, tree->inst_newa_class);
-               MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, klass_reg, const_reg);
+               MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, klass_reg, const_reg, 
"InvalidCastException");
        } else {
-               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, klass_reg, 
tree->inst_newa_class);
+               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, klass_reg, 
tree->inst_newa_class, "InvalidCastException");
        }
-       MONO_EMIT_NEW_COND_EXC (s, NE_UN, "InvalidCastException");
        MONO_EMIT_NEW_LOAD_MEMBASE (s, state->reg1, state->left->reg1, 
G_STRUCT_OFFSET (MonoTypedRef, value));
 }      
 
@@ -1612,15 +1608,13 @@
                if (false_target)
                        MONO_EMIT_NEW_COMPARE_BRANCH_LABEL (s, CEE_BLT_UN, 
max_iid_reg, iid_reg, false_target);
                else
-                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, max_iid_reg, 
iid_reg);
+                       MONO_EMIT_NEW_COMPARE_EXC (s, LT_UN, max_iid_reg, 
iid_reg, "InvalidCastException");
        } else {
                if (false_target)
                        MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BLT_UN, 
max_iid_reg, klass->interface_id, false_target);
                else
-                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, 
max_iid_reg, klass->interface_id);
+                       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, LT_UN, max_iid_reg, 
klass->interface_id, "InvalidCastException");
        }
-       if (!false_target)
-               MONO_EMIT_NEW_COND_EXC (s, LT_UN, "InvalidCastException");
 }
 
 /* Same as above, but obtains max_iid from a vtable */
@@ -1790,19 +1784,17 @@
 
        if (klass->idepth > MONO_DEFAULT_SUPERTABLE_SIZE) {
                MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOADU2_MEMBASE, 
idepth_reg, klass_reg, G_STRUCT_OFFSET (MonoClass, idepth));
-               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, idepth_reg, 
klass->idepth);
-               MONO_EMIT_NEW_COND_EXC (s, LT_UN, "InvalidCastException");
+               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, LT_UN, idepth_reg, 
klass->idepth, "InvalidCastException");
        }
        MONO_EMIT_NEW_LOAD_MEMBASE (s, stypes_reg, klass_reg, G_STRUCT_OFFSET 
(MonoClass, supertypes));
        MONO_EMIT_NEW_LOAD_MEMBASE (s, stype, stypes_reg, ((klass->idepth - 1) 
* SIZEOF_VOID_P));
        if (s->compile_aot) {
                int const_reg = mono_regstate_next_int (s->rs);
                MONO_EMIT_NEW_CLASSCONST (s, const_reg, klass);
-               MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, stype, const_reg);
+               MONO_EMIT_NEW_COMPARE_EXC (s, NE_UN, stype, const_reg, 
"InvalidCastException");
        } else {
-               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, stype, klass);
+               MONO_EMIT_NEW_COMPARE_IMM_EXC (s, NE_UN, stype, klass, 
"InvalidCastException");
        }
-       MONO_EMIT_NEW_COND_EXC (s, NE_UN, "InvalidCastException");
 }
 
 static void
@@ -1812,8 +1804,7 @@
 
        mini_emit_max_iid_check_vtable (s, vtable_reg, klass, NULL);
        mini_emit_load_intf_reg_vtable (s, intf_reg, vtable_reg, klass);
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, intf_reg, 0);
-       MONO_EMIT_NEW_COND_EXC (s, EQ, "InvalidCastException");
+       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, EQ, intf_reg, 0, 
"InvalidCastException");
 }
 
 /*
@@ -1827,8 +1818,7 @@
 
        mini_emit_max_iid_check_class (s, klass_reg, klass, NULL);
        mini_emit_load_intf_reg_class (s, intf_reg, klass_reg, klass);
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, intf_reg, -1);
-       MONO_EMIT_NEW_COND_EXC (s, EQ, "InvalidCastException");
+       MONO_EMIT_NEW_COMPARE_IMM_EXC (s, EQ, intf_reg, -1, 
"InvalidCastException");
 }
 
 static void

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to