diff options
-rwxr-xr-x | mono/mini/ChangeLog | 5 | ||||
-rw-r--r-- | mono/mini/method-to-ir.c | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index 4c4f0efeaf5..fd069819e2a 100755 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,5 +1,10 @@ 2010-05-28 Mark Probst <mark.probst@gmail.com> + * method-to-ir.c (mono_method_to_ir): Emit a write barrier for + cpobj with reference types. + +2010-05-28 Mark Probst <mark.probst@gmail.com> + * method-to-ir.c (mono_method_to_ir): Only explicitly add the write barrier for reference types. diff --git a/mono/mini/method-to-ir.c b/mono/mini/method-to-ir.c index 13466a6d94b..b689dff1569 100644 --- a/mono/mini/method-to-ir.c +++ b/mono/mini/method-to-ir.c @@ -7190,6 +7190,15 @@ mono_method_to_ir (MonoCompile *cfg, MonoMethod *method, MonoBasicBlock *start_b NEW_STORE_MEMBASE (cfg, store, OP_STORE_MEMBASE_REG, sp [0]->dreg, 0, dreg); store->flags |= ins_flag; MONO_ADD_INS (cfg->cbb, store); + +#if HAVE_WRITE_BARRIERS + if (cfg->method->wrapper_type != MONO_WRAPPER_WRITE_BARRIER) { + MonoInst *dummy_use; + MonoMethod *write_barrier = mono_gc_get_write_barrier (); + mono_emit_method_call (cfg, write_barrier, sp, NULL); + EMIT_NEW_DUMMY_USE (cfg, dummy_use, sp [1]); + } +#endif } else { mini_emit_stobj (cfg, sp [0], sp [1], klass, FALSE); } |