2009-12-26 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Sat, 26 Dec 2009 00:20:40 +0000 (00:20 -0000)
committerZoltan Varga <vargaz@gmail.com>
Sat, 26 Dec 2009 00:20:40 +0000 (00:20 -0000)
* 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

mono/mini/ChangeLog
mono/mini/mini-amd64.c
mono/mini/mini-arm.c
mono/mini/mini-ia64.c
mono/mini/mini-mips.c
mono/mini/mini-ppc.c
mono/mini/mini-sparc.c
mono/mini/mini-trampolines.c
mono/mini/mini-x86.c
mono/mini/mini.h
mono/mini/tramp-x86.c

index 9d9f366899b1a745321e73f0a9637e1cac00a759..20da30b9fa0f075017873ab2ea2c29ed4179203f 100644 (file)
@@ -1,3 +1,10 @@
+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
index 794e4d6d8b822f6b36f829d3b74af6cd00cc464e..d8b6a66524688f3a974569bec3ff9f444af559ee 100644 (file)
@@ -7266,12 +7266,6 @@ mono_arch_find_imt_method (mgreg_t *regs, guint8 *code)
 {
        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*
index 84f3ee1d4450a8a0ec8a0874c59f9623704fee07..55b27bf8ef7a76227ea54d39a73694e2969f1bd2 100644 (file)
@@ -5100,12 +5100,6 @@ mono_arch_find_imt_method (mgreg_t *regs, guint8 *code)
                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)
 {
index 31105352e4de642feef1fc794ecd16bd40507200..1d9b54ed0c45d24294c1a98896572287029ded73 100644 (file)
@@ -4697,12 +4697,6 @@ mono_arch_get_this_arg_from_call (MonoGenericSharingContext *gsctx, MonoMethodSi
        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)
 {
index d9fdff36fb2a94cac5d4e0d2f8d16c408b711e11..92bff32ea743db6b728e940e18e85f85ee547ffc 100644 (file)
@@ -5555,12 +5555,6 @@ mono_arch_find_imt_method (mgreg_t *regs, guint8 *code)
 {
        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*
index 7e68a6a060a09415210725ba9a9f42f43b626d0d..0ffb0ef3acfcae93cc6e5111d0f182dd8b86ffe5 100644 (file)
@@ -5873,12 +5873,6 @@ mono_arch_find_imt_method (mgreg_t *regs, guint8 *code)
 
        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*
index 4b1d9f6166e9e235976b3bcb83ae6f1f6498f257..b1825eb6c64f61d9a5866b1ac575c2c603da3f31 100644 (file)
@@ -2452,8 +2452,8 @@ mono_arch_find_imt_method (mgreg_t *regs, guint8 *code)
        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 ();
 
index cf422c0344e381bf73d65a7c47c2d7d8bb7d0aed..51f6335a914b669c0bb11840b3f0ce1a2eb3b62a 100644 (file)
@@ -156,8 +156,7 @@ mono_get_vcall_slot_addr (guint8* code, mgreg_t *regs)
 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);
 
@@ -305,7 +304,6 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, gpointer arg, guint8* tramp
 #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 ()
@@ -315,8 +313,7 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, gpointer arg, guint8* tramp
                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 */
@@ -395,8 +392,7 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, gpointer arg, guint8* tramp
 #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;
index e0f010dc451871d157c31f40737ce7af42a64fac..40ab916edccf072c3c298ac4d3526d66254448f4 100644 (file)
@@ -5218,28 +5218,6 @@ mono_arch_find_imt_method (mgreg_t *regs, guint8 *code)
 {
        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*
index fcd58d7b52a715f7b8a81af94c71928280b9edd1..c24afa36314bf4e57375293b5ab74d0f2c1f9bb3 100644 (file)
@@ -1760,7 +1760,6 @@ void     mono_arch_nullify_class_init_trampoline(guint8 *code, mgreg_t *regs) MO
 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;
index 4378b162c94498133a0ddd347d90bc3b551cccba..a1961773a488f59f2e9e3fc1762770c3dffd9819 100644 (file)
@@ -240,7 +240,7 @@ mono_arch_create_trampoline_code (MonoTrampolineType tramp_type)
 
        /* 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);