Initial prototype for handling handle stack setup and argument/return value conversio...
[mono.git] / mono / mini / decompose.c
index 9546009e724697247abc5e7e3e11ff1f67c8e685..0409cd7d78d0b20f7c73f59982a985442802ecfa 100644 (file)
@@ -1264,6 +1264,9 @@ mono_decompose_vtype_opts (MonoCompile *cfg)
                                case OP_STOREV_MEMBASE: {
                                        src_var = get_vreg_to_inst (cfg, ins->sreg1);
 
+                                       if (COMPILE_LLVM (cfg) && !mini_is_gsharedvt_klass (ins->klass) && !cfg->gen_write_barriers)
+                                               break;
+
                                        if (!src_var) {
                                                g_assert (ins->klass);
                                                src_var = mono_compile_create_var_for_vreg (cfg, &ins->klass->byval_arg, OP_LOCAL, ins->sreg1);
@@ -1520,7 +1523,7 @@ mono_decompose_array_access_opts (MonoCompile *cfg)
                                                MONO_INST_NEW (cfg, iargs [2], OP_MOVE);
                                                iargs [2]->dreg = ins->sreg1;
 
-                                               dest = mono_emit_jit_icall (cfg, mono_array_new, iargs);
+                                               dest = mono_emit_jit_icall (cfg, ves_icall_array_new, iargs);
                                                dest->dreg = ins->dreg;
                                        } else {
                                                MonoClass *array_class = mono_array_class_get (ins->inst_newa_class, 1);
@@ -1922,9 +1925,9 @@ mono_local_emulate_ops (MonoCompile *cfg)
 
                                /* We emit the call on a separate dummy basic block */
                                cfg->cbb = mono_mempool_alloc0 ((cfg)->mempool, sizeof (MonoBasicBlock));
-                               first_bb = cfg->cbb;
+                               first_bb = cfg->cbb;
 
-                               call = mono_emit_jit_icall_by_info (cfg, info, args);
+                               call = mono_emit_jit_icall_by_info (cfg, bb->real_offset, info, args);
                                call->dreg = ins->dreg;
 
                                /* Replace ins with the emitted code and do the necessary bb linking */