* mini-trampolines.c: Use mono_arch_get_this_arg_from_call () to avoid the slow
mono_get_generic_context_from_code () call.
* mini-<ARCH>.c: Get rid of mono_arch_find_this_arg (), it is no longer used.
svn path=/trunk/mono/; revision=148897
+2009-12-26 Zoltan Varga <vargaz@gmail.com>
+
+ * mini-trampolines.c: Use mono_arch_get_this_arg_from_call () to avoid the slow
+ mono_get_generic_context_from_code () call.
+
+ * mini-<ARCH>.c: Get rid of mono_arch_find_this_arg (), it is no longer used.
+
2009-12-25 Zoltan Varga <vargaz@gmail.com>
* aot-runtime.c (decode_klass_ref): Don't call mono_class_init (), its not
{
return (MonoMethod*)regs [MONO_ARCH_IMT_REG];
}
-
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
-{
- return mono_arch_get_this_arg_from_call (gsctx, mono_method_signature (method), regs, NULL);
-}
#endif
MonoVTable*
return (MonoMethod*) code_ptr [1];
}
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
-{
- return mono_arch_get_this_arg_from_call (gsctx, mono_method_signature (method), regs, NULL);
-}
-
MonoVTable*
mono_arch_find_static_call_vtable (mgreg_t *regs, guint8 *code)
{
return (gpointer)regs [IA64_R10];
}
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
-{
- return mono_arch_get_this_arg_from_call (gsctx, mono_method_signature (method), regs, NULL);
-}
-
gpointer
mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_target)
{
{
return (MonoMethod*) regs [MONO_ARCH_IMT_REG];
}
-
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
-{
- return mono_arch_get_this_arg_from_call (gsctx, mono_method_signature (method), regs, NULL);
-}
#endif
MonoVTable*
return (MonoMethod*)(gsize) r [MONO_ARCH_IMT_REG];
}
-
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
-{
- return mono_arch_get_this_arg_from_call (gsctx, mono_method_signature (method), regs, NULL);
-}
#endif
MonoVTable*
return (MonoMethod*)regs [sparc_g1];
}
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
+gpointer
+mono_arch_get_this_arg_from_call (MonoGenericSharingContext *gsctx, MonoMethodSignature *sig, mgreg_t *regs, guint8 *code)
{
mono_sparc_flushw ();
static gpointer*
mono_convert_imt_slot_to_vtable_slot (gpointer* slot, mgreg_t *regs, guint8 *code, MonoMethod *method, MonoMethod **impl_method, gboolean *need_rgctx_tramp)
{
- MonoGenericSharingContext *gsctx = mono_get_generic_context_from_code (code);
- MonoObject *this_argument = mono_arch_find_this_argument (regs, method, gsctx);
+ MonoObject *this_argument = mono_arch_get_this_arg_from_call (NULL, mono_method_signature (method), regs, code);
MonoVTable *vt = this_argument->vtable;
int displacement = slot - ((gpointer*)vt);
#ifdef MONO_ARCH_HAVE_IMT
if (m == MONO_FAKE_IMT_METHOD) {
MonoMethod *impl_method;
- MonoGenericSharingContext *gsctx;
MonoObject *this_arg;
/* we get the interface method because mono_convert_imt_slot_to_vtable_slot ()
vtable_slot = orig_vtable_slot;
g_assert (vtable_slot);
- gsctx = mono_get_generic_context_from_code (code);
- this_arg = mono_arch_find_this_argument (regs, m, gsctx);
+ this_arg = mono_arch_get_this_arg_from_call (NULL, mono_method_signature (m), regs, code);
if (this_arg->vtable->klass == mono_defaults.transparent_proxy_class) {
/* Use the slow path for now */
#endif
} else {
#ifdef MONO_ARCH_HAVE_IMT
- MonoObject *this_argument = mono_arch_find_this_argument (regs, m,
- mono_get_generic_context_from_code (code));
+ MonoObject *this_argument = mono_arch_get_this_arg_from_call (NULL, mono_method_signature (m), regs, code);
vt = this_argument->vtable;
vtable_slot = orig_vtable_slot;
{
return (MonoMethod*) regs [MONO_ARCH_IMT_REG];
}
-
-MonoObject*
-mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx)
-{
- MonoMethodSignature *sig = mono_method_signature (method);
- CallInfo *cinfo = get_call_info (gsctx, NULL, sig, FALSE);
- int this_argument_offset;
- MonoObject *this_argument;
-
- /*
- * this is the offset of the this arg from esp as saved at the start of
- * mono_arch_create_trampoline_code () in tramp-x86.c.
- */
- this_argument_offset = 5;
- if (MONO_TYPE_ISSTRUCT (sig->ret) && (cinfo->ret.storage == ArgOnStack))
- this_argument_offset++;
-
- this_argument = * (MonoObject**) (((guint8*) regs [X86_ESP]) + this_argument_offset * sizeof (gpointer));
-
- g_free (cinfo);
- return this_argument;
-}
#endif
MonoVTable*
void mono_arch_nullify_plt_entry (guint8 *code, mgreg_t *regs) MONO_INTERNAL;
int mono_arch_get_this_arg_reg (MonoMethodSignature *sig, MonoGenericSharingContext *gsctx, guint8 *code) MONO_INTERNAL;
gpointer mono_arch_get_this_arg_from_call (MonoGenericSharingContext *gsctx, MonoMethodSignature *sig, mgreg_t *regs, guint8 *code) MONO_INTERNAL;
-MonoObject* mono_arch_find_this_argument (mgreg_t *regs, MonoMethod *method, MonoGenericSharingContext *gsctx) MONO_INTERNAL;
gpointer mono_arch_get_delegate_invoke_impl (MonoMethodSignature *sig, gboolean has_target) MONO_INTERNAL;
gpointer mono_arch_create_specific_trampoline (gpointer arg1, MonoTrampolineType tramp_type, MonoDomain *domain, guint32 *code_len) MONO_INTERNAL;
void mono_arch_emit_imt_argument (MonoCompile *cfg, MonoCallInst *call, MonoInst *imt_arg) MONO_INTERNAL;
/* Put all registers into an array on the stack
* If this code is changed, make sure to update the offset value in
- * mono_arch_find_this_argument () in mini-x86.c.
+ * mono_arch_get_this_arg_from_call () in mini-x86.c.
*/
x86_push_reg (buf, X86_EDI);
x86_push_reg (buf, X86_ESI);