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_
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);
}
}
}
-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;
-}
-
-