[jit] Fix some issues with constrained gsharedvt calls to be able to handle some...
[mono.git] / mono / mini / jit-icalls.c
index 60ab0af5794c041c61a881d69d7d8dc06ff6a688..1f7e5283767aab5144d50a5d5883b1573547a965 100644 (file)
@@ -940,6 +940,39 @@ mono_fconv_ovf_u8 (double v)
        return res;
 }
 
+#ifdef MONO_ARCH_EMULATE_FCONV_TO_I8
+gint64
+mono_rconv_i8 (float v)
+{
+       return (gint64)v;
+}
+#endif
+
+gint64
+mono_rconv_ovf_i8 (float v)
+{
+       gint64 res;
+
+       res = (gint64)v;
+
+       if (isnan(v) || trunc (v) != res) {
+               mono_raise_exception (mono_get_exception_overflow ());
+       }
+       return res;
+}
+
+guint64
+mono_rconv_ovf_u8 (float v)
+{
+       guint64 res;
+
+       res = (guint64)v;
+       if (isnan(v) || trunc (v) != res) {
+               mono_raise_exception (mono_get_exception_overflow ());
+       }
+       return res;
+}
+
 #ifdef MONO_ARCH_EMULATE_LCONV_TO_R8
 double
 mono_lconv_to_r8 (gint64 a)
@@ -1193,6 +1226,8 @@ constrained_gsharedvt_call_setup (gpointer mp, MonoMethod *cmethod, MonoClass *k
                        vt_slot += iface_offset;
                }
                m = klass->vtable [vt_slot];
+               if (cmethod->is_inflated)
+                       m = mono_class_inflate_generic_method (m, mono_method_get_context (cmethod));
        }
        if (klass->valuetype && (m->klass == mono_defaults.object_class || m->klass == mono_defaults.enum_class->parent || m->klass == mono_defaults.enum_class))
                /*