* runtime specifies that the implementation of the method is automatically
* provided by the runtime and is primarily used for the methods of delegates.
*/
+#ifndef ENABLE_NETCORE
static MONO_NEVER_INLINE MonoException*
ves_imethod (InterpFrame *frame, MonoMethod *method, MonoMethodSignature *sig, stackval *sp, stackval *retval)
{
m_class_get_name_space (method->klass), m_class_get_name (method->klass),
method->name);
}
+#endif
#if DEBUG_INTERP
static char*
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_CALLRUN) {
+#ifndef ENABLE_NETCORE
MonoMethod *target_method = (MonoMethod*) frame->imethod->data_items [ip [1]];
MonoMethodSignature *sig = (MonoMethodSignature*) frame->imethod->data_items [ip [2]];
stackval *retval;
sp++;
}
ip += 3;
+#else
+ g_assert_not_reached ();
+#endif
MINT_IN_BREAK;
}
MINT_IN_CASE(MINT_RET)
interp_emit_ldelema (td, target_method->klass, check_class);
td->ip += 5;
return TRUE;
+#ifndef ENABLE_NETCORE
} else if (!strcmp (tm, "UnsafeMov") || !strcmp (tm, "UnsafeLoad")) {
*op = MINT_CALLRUN;
+#endif
} else if (!strcmp (tm, "Get")) {
interp_emit_ldelema (td, target_method->klass, NULL);
interp_emit_ldobj (td, m_class_get_element_class (target_method->klass));
#endif
}
+#ifndef ENABLE_NETCORE
if (op == MINT_CALLRUN) {
td->last_ins->data [0] = get_data_item_index (td, target_method);
td->last_ins->data [1] = get_data_item_index (td, mono_method_signature_internal (target_method));
}
+#endif
} else if (!calli && !is_virtual && jit_call_supported (target_method, csignature)) {
interp_add_ins (td, MINT_JIT_CALL);
td->last_ins->data [0] = get_data_item_index (td, (void *)mono_interp_get_imethod (domain, target_method, error));
*push = opcode == MINT_CALL || opcode == MINT_CALLVIRT || opcode == MINT_CALLVIRT_FAST;
break;
}
+#ifndef ENABLE_NETCORE
case MINT_CALLRUN: {
MonoMethodSignature *csignature = (MonoMethodSignature*) td->data_items [ins->data [1]];
*pop = csignature->param_count + csignature->hasthis;
*push = csignature->ret->type != MONO_TYPE_VOID;
break;
}
+#endif
case MINT_CALLI:
case MINT_CALLI_NAT:
case MINT_CALLI_NAT_FAST: {
return NULL;
}
+#ifndef ENABLE_NETCORE
MonoInst*
mini_emit_inst_for_sharable_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args)
{
return NULL;
}
+#endif
MonoInst*
mini_emit_inst_for_field_load (MonoCompile *cfg, MonoClassField *field)
if ((m_class_get_parent (cmethod->klass) == mono_defaults.multicastdelegate_class) && !strcmp (cmethod->name, "Invoke"))
delegate_invoke = TRUE;
+#ifndef ENABLE_NETCORE
if ((cfg->opt & MONO_OPT_INTRINS) && (ins = mini_emit_inst_for_sharable_method (cfg, cmethod, fsig, sp))) {
if (!MONO_TYPE_IS_VOID (fsig->ret)) {
mini_type_to_eval_stack_type ((cfg), fsig->ret, ins);
mono_tailcall_print ("missed tailcall intrins_sharable %s -> %s\n", method->name, cmethod->name);
goto call_end;
}
+#endif
/*
* Implement a workaround for the inherent races involved in locking:
MonoInst* mini_emit_array_store (MonoCompile *cfg, MonoClass *klass, MonoInst **sp, gboolean safety_checks);
MonoInst* mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args);
MonoInst* mini_emit_inst_for_ctor (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args);
+#ifndef ENABLE_NETCORE
MonoInst* mini_emit_inst_for_sharable_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsig, MonoInst **args);
+#endif
MonoInst* mini_emit_inst_for_field_load (MonoCompile *cfg, MonoClassField *field);
MonoInst* mini_handle_enum_has_flag (MonoCompile *cfg, MonoClass *klass, MonoInst *enum_this, int enum_val_reg, MonoInst *enum_flag);
return Marshal.GetArrayElementSize (GetType ());
}
- //
- // Moved value from instance into target of different type with no checks (JIT intristics)
- //
- // Restrictions:
- //
- // S and R must either:
- // both be blitable valuetypes
- // both be reference types (IOW, an unsafe cast)
- // S and R cannot be float or double
- // S and R must either:
- // both be a struct
- // both be a scalar
- // S and R must either:
- // be of same size
- // both be a scalar of size <= 4
- //
- internal static R UnsafeMov<S,R> (S instance)
- {
- return (R)(object) instance;
- }
-
[MethodImplAttribute (MethodImplOptions.InternalCall)]
extern static void ClearInternal (Array a, int index, int count);