DECL_OFFSET(MonoProfilerCallContext, return_value)
DECL_OFFSET(MonoProfilerCallContext, args)
+DECL_OFFSET(MonoError, init)
+
#ifdef HAVE_SGEN_GC
DECL_OFFSET(SgenClientThreadInfo, in_critical_region)
DECL_OFFSET(SgenThreadInfo, tlab_next)
g_assert (ins->klass);
EMIT_NEW_VARLOADA_VREG (cfg, dest, ins->dreg, m_class_get_byval_arg (ins->klass));
- mini_emit_initobj (cfg, dest, NULL, ins->klass);
+
+ if (m_class_get_image (ins->klass) == mono_defaults.corlib && !strcmp (m_class_get_name (ins->klass), "MonoError")) {
+ // Used in icall wrappers, optimize initialization
+ MONO_EMIT_NEW_STORE_MEMBASE_IMM (cfg, OP_STOREI4_MEMBASE_IMM, dest->dreg, MONO_STRUCT_OFFSET (MonoError, init), 0);
+ } else {
+ mini_emit_initobj (cfg, dest, NULL, ins->klass);
+ }
if (cfg->compute_gc_maps) {
MonoInst *tmp;