2004-09-11 Ben Maurer <bmaurer@users.sourceforge.net>
[mono.git] / mono / mini / inssel.brg
index d15d5fd957585694377c7d9f52860c4df6afc7fa..0cb8129cca0e0b6754a3569a5a925a9a2cd47ed1 100644 (file)
@@ -274,8 +274,6 @@ void mini_emit_castclass_iface_class (MonoCompile *s, int klass_reg, MonoClass *
 void mini_emit_memcpy (MonoCompile *s, int destreg, int doffset, int srcreg, int soffset, int size, int align);
 void mini_emit_memset (MonoCompile *s, int destreg, int offset, int size, int val, int align);
 
-int ldind_to_load_membase (int opcode);
-
 %%
 
 %termprefix OP_ CEE_
@@ -1738,7 +1736,14 @@ reg: OP_CHECK_ARRAY_TYPE (reg) {
                                       vtable_reg, G_STRUCT_OFFSET (MonoVTable, klass));
        MONO_EMIT_NEW_LOAD_MEMBASE_OP (s, OP_LOAD_MEMBASE, elclass_reg, 
                                       class_reg, G_STRUCT_OFFSET (MonoClass, element_class));
-       MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, elclass_reg, tree->klass);
+       if (mono_compile_aot) {
+               int klass_reg = mono_regstate_next_int (s->rs);
+               MONO_EMIT_NEW_CLASSCONST (s, klass_reg, tree->klass);
+               MONO_EMIT_NEW_BIALU (s, OP_COMPARE, -1, elclass_reg, klass_reg);
+       } else {
+               MONO_EMIT_NEW_BIALU_IMM (s, OP_COMPARE_IMM, -1, elclass_reg, tree->klass);
+       }
+       
        MONO_EMIT_NEW_COND_EXC (s, NE_UN, "ArrayTypeMismatchException");
        MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, state->left->reg1);
 }
@@ -2088,31 +2093,3 @@ mini_emit_memset (MonoCompile *s, int destreg, int offset, int size, int val, in
        }
 }
 
-int
-ldind_to_load_membase (int opcode)
-{
-       switch (opcode) {
-       case CEE_LDIND_I1:
-               return OP_LOADI1_MEMBASE;
-       case CEE_LDIND_U1:
-               return OP_LOADU1_MEMBASE;
-       case CEE_LDIND_I2:
-               return OP_LOADI2_MEMBASE;
-       case CEE_LDIND_U2:
-               return OP_LOADU2_MEMBASE;
-       case CEE_LDIND_I4:
-               return OP_LOADI4_MEMBASE;
-       case CEE_LDIND_U4:
-               return OP_LOADU4_MEMBASE;
-       case CEE_LDIND_I:
-               return OP_LOAD_MEMBASE;
-       case CEE_LDIND_REF:
-               return OP_LOAD_MEMBASE;
-       default:
-               g_assert_not_reached ();
-       }
-
-       return -1;
-}
-
-