Mon Nov 27 15:13:41 CET 2006 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Mon, 27 Nov 2006 14:14:13 +0000 (14:14 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Mon, 27 Nov 2006 14:14:13 +0000 (14:14 -0000)
* inssel.brg: fixes from me and Mark Mason.

svn path=/trunk/mono/; revision=68513

mono/mini/ChangeLog
mono/mini/inssel.brg

index 0e540fe521226afee55f37715402ad9f717f6427..086e4d329c250eeeb480255cbb70d328cd710145 100644 (file)
@@ -1,3 +1,8 @@
+
+Mon Nov 27 15:13:41 CET 2006 Paolo Molaro <lupus@ximian.com>
+
+       * inssel.brg: fixes from me and Mark Mason.
+
 2006-11-23  Dick Porter  <dick@ximian.com>
 
        * wapihandles.c (mini_wapi_seminfo): No need to adjust the counter
index d2b9a8429dd76bc7240c2e953c2c34cb1e817788..d559b0a72a0dc68d18b1d1c9cc30a0f7dfbeea09 100644 (file)
@@ -1028,18 +1028,19 @@ reg: CEE_ISINST (reg) {
                                if (s->compile_aot) {
                                        const_reg = mono_regstate_next_int (s->rs);
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, mono_defaults.enum_class->parent);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, parent_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_BRANCH_LABEL (s, CEE_BNE_UN, parent_reg,
+                                                       const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, parent_reg, mono_defaults.enum_class->parent);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BNE_UN, parent_reg,
+                                                       mono_defaults.enum_class->parent, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BNE_UN, object_is_null);
                                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_BRANCH_LABEL (s, CEE_BEQ, eclass_reg, const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BEQ, eclass_reg,
+                                               mono_defaults.enum_class, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BEQ, object_is_null);
                                MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, false_label);
                        } else if (klass->cast_class == mono_defaults.enum_class->parent) {
                                int const_reg = -1;
@@ -1047,28 +1048,28 @@ reg: CEE_ISINST (reg) {
                                if (s->compile_aot) {
                                        const_reg = mono_regstate_next_int (s->rs);
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, mono_defaults.enum_class->parent);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, eclass_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_BRANCH_LABEL (s, CEE_BEQ, eclass_reg, const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class->parent);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BEQ, eclass_reg,
+                                               mono_defaults.enum_class->parent, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BEQ, object_is_null);
                                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_BRANCH_LABEL (s, CEE_BEQ, eclass_reg, const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BEQ, eclass_reg,
+                                               mono_defaults.enum_class, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BEQ, object_is_null);
                                MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, false_label);
                        } 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_BRANCH_LABEL (s, CEE_BEQ, eclass_reg, const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BEQ, eclass_reg,
+                                               mono_defaults.enum_class, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BEQ, object_is_null);
                                MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BR, false_label);
                        } else if (klass->cast_class->flags & TYPE_ATTRIBUTE_INTERFACE) {
                                mini_emit_isninst_iface_class_cast (s, eclass_reg, klass->cast_class, false_label, object_is_null);
@@ -1259,11 +1260,11 @@ reg: CEE_CASTCLASS (reg) {
                                if (s->compile_aot) {
                                        const_reg = mono_regstate_next_int (s->rs);
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, mono_defaults.enum_class->parent);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, parent_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_BRANCH_LABEL (s, CEE_BNE_UN, parent_reg, const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, parent_reg, mono_defaults.enum_class->parent);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BNE_UN, parent_reg,
+                                               mono_defaults.enum_class->parent, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BNE_UN, object_is_null);
                                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);
@@ -1275,11 +1276,11 @@ reg: CEE_CASTCLASS (reg) {
                                int const_reg = mono_regstate_next_int (s->rs);
                                if (s->compile_aot) {
                                        MONO_EMIT_NEW_CLASSCONST (s, const_reg, mono_defaults.enum_class->parent);
-                                       MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, eclass_reg, const_reg);
+                                       MONO_EMIT_NEW_COMPARE_BRANCH_LABEL (s, CEE_BEQ, eclass_reg, const_reg, object_is_null);
                                } else {
-                                       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, eclass_reg, mono_defaults.enum_class->parent);
+                                       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BEQ, eclass_reg,
+                                               mono_defaults.enum_class->parent, object_is_null);
                                }
-                               MONO_EMIT_NEW_BRANCH_LABEL (s, CEE_BEQ, object_is_null);
                                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);
@@ -1777,7 +1778,7 @@ mini_emit_isninst_iface_class_cast (MonoCompile *s, int klass_reg, MonoClass *kl
        mini_emit_max_iid_check_class (s, klass_reg, klass, false_target);
        mini_emit_load_intf_reg_class (s, intf_reg, klass_reg, klass);
        /* the object_is_null target simply copies the input register to the output */
-       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BNE_UN, intf_reg, -1, true_target);
+       MONO_EMIT_NEW_COMPARE_IMM_BRANCH_LABEL (s, CEE_BGE, intf_reg, -1, true_target);
 }
 
 static void