}
#endif
+ if (!skip && acfg->aot_opts.llvm_only && (acfg->opts & MONO_OPT_GSHAREDVT) && mini_gsharedvt_runtime_invoke_supported (sig))
+ /* Supported by the gsharedvt based runtime-invoke wrapper */
+ skip = TRUE;
+
if (!skip) {
//printf ("%s\n", mono_method_full_name (method, TRUE));
add_method (acfg, get_runtime_invoke (acfg, method, FALSE));
gpointer *wrapper_arg;
} RuntimeInvokeInfo;
+gboolean
+mini_gsharedvt_runtime_invoke_supported (MonoMethodSignature *sig)
+{
+ gboolean supported = TRUE;
+ int i;
+
+ for (i = 0; i < sig->param_count; ++i) {
+ MonoType *t = sig->params [i];
+
+ if (t->byref && t->type == MONO_TYPE_GENERICINST && mono_class_is_nullable (mono_class_from_mono_type (t)))
+ supported = FALSE;
+ }
+
+ return supported;
+}
+
static RuntimeInvokeInfo*
create_runtime_invoke_info (MonoDomain *domain, MonoMethod *method, gpointer compiled_method)
{
if (!info->dyn_call_info) {
if (mono_llvm_only) {
- gboolean supported = TRUE;
- int i;
-
- for (i = 0; i < sig->param_count; ++i) {
- MonoType *t = sig->params [i];
+ gboolean supported;
- if (t->byref && t->type == MONO_TYPE_GENERICINST && mono_class_is_nullable (mono_class_from_mono_type (t)))
- supported = FALSE;
- }
+ supported = mini_gsharedvt_runtime_invoke_supported (sig);
if (mono_class_is_contextbound (method->klass) || !info->compiled_method)
supported = FALSE;
MonoMethod* mini_get_gsharedvt_in_sig_wrapper (MonoMethodSignature *sig);
MonoMethod* mini_get_gsharedvt_out_sig_wrapper (MonoMethodSignature *sig);
MonoMethodSignature* mini_get_gsharedvt_out_sig_wrapper_signature (gboolean has_this, gboolean has_ret, int param_count);
-MonoMethod* mono_get_runtime_invoke_wrapper_gsharedvt (gboolean has_this, gboolean has_ret, int param_count);
+gboolean mini_gsharedvt_runtime_invoke_supported (MonoMethodSignature *sig);
/* SIMD support */