Author: zoltan
Date: 2007-12-07 09:53:13 -0500 (Fri, 07 Dec 2007)
New Revision: 90934

Modified:
   trunk/mono/mono/mini/ChangeLog
   trunk/mono/mono/mini/mini-trampolines.c
   trunk/mono/mono/mini/mini.h
   trunk/mono/mono/mini/tramp-amd64.c
   trunk/mono/mono/mini/tramp-arm.c
   trunk/mono/mono/mini/tramp-ia64.c
   trunk/mono/mono/mini/tramp-sparc.c
   trunk/mono/mono/mini/tramp-x86.c
Log:
2007-12-07  Zoltan Varga  <[EMAIL PROTECTED]>

        * mini-trampolines.c (mono_get_trampoline_func): New helper function.

        * tramp-<ARCH>.c: Use the new helper function.


Modified: trunk/mono/mono/mini/ChangeLog
===================================================================
--- trunk/mono/mono/mini/ChangeLog      2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/ChangeLog      2007-12-07 14:53:13 UTC (rev 90934)
@@ -1,3 +1,9 @@
+2007-12-07  Zoltan Varga  <[EMAIL PROTECTED]>
+
+       * mini-trampolines.c (mono_get_trampoline_func): New helper function.
+
+       * tramp-<ARCH>.c: Use the new helper function.
+
 2007-12-07  Mark Probst  <[EMAIL PROTECTED]>
 
        * inssel.brg: Added a pattern for the OP_TRAMPCALL_VTABLE

Modified: trunk/mono/mono/mini/mini-trampolines.c
===================================================================
--- trunk/mono/mono/mini/mini-trampolines.c     2007-12-07 14:47:33 UTC (rev 
90933)
+++ trunk/mono/mono/mini/mini-trampolines.c     2007-12-07 14:53:13 UTC (rev 
90934)
@@ -383,4 +383,37 @@
 
 #endif
 
+/*
+ * mono_get_trampoline_func:
+ *
+ *   Return the C function which needs to be called by the generic trampoline 
of type
+ * TRAMP_TYPE.
+ */
+gconstpointer
+mono_get_trampoline_func (MonoTrampolineType tramp_type)
+{
+       switch (tramp_type) {
+       case MONO_TRAMPOLINE_GENERIC:
+       case MONO_TRAMPOLINE_JUMP:
+               return mono_magic_trampoline;
+       case MONO_TRAMPOLINE_CLASS_INIT:
+               return mono_class_init_trampoline;
+       case MONO_TRAMPOLINE_GENERIC_CLASS_INIT:
+               return mono_generic_class_init_trampoline;
+#ifdef MONO_ARCH_AOT_SUPPORTED
+       case MONO_TRAMPOLINE_AOT:
+               return mono_aot_trampoline;
+       case MONO_TRAMPOLINE_AOT_PLT:
+               return mono_aot_plt_trampoline;
+#endif
+#ifdef MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE
+       case MONO_TRAMPOLINE_DELEGATE:
+               return mono_delegate_trampoline;
+#endif
+       default:
+               g_assert_not_reached ();
+               return NULL;
+       }
+}
 
+

Modified: trunk/mono/mono/mini/mini.h
===================================================================
--- trunk/mono/mono/mini/mini.h 2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/mini.h 2007-12-07 14:53:13 UTC (rev 90934)
@@ -965,6 +965,7 @@
                                                                                
   guint8* tramp) MONO_INTERNAL;
 void              mono_class_init_trampoline (gssize *regs, guint8 *code, 
MonoVTable *vtable, guint8 *tramp) MONO_INTERNAL;
 void              mono_generic_class_init_trampoline (gssize *regs, guint8 
*code, gpointer dummy, guint8 *tramp) MONO_INTERNAL;
+gconstpointer     mono_get_trampoline_func (MonoTrampolineType tramp_type);
 gpointer          mini_get_vtable_trampoline (void) MONO_INTERNAL;
 gpointer          mono_debugger_create_notification_function (void) 
MONO_INTERNAL;
 

Modified: trunk/mono/mono/mini/tramp-amd64.c
===================================================================
--- trunk/mono/mono/mini/tramp-amd64.c  2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/tramp-amd64.c  2007-12-07 14:53:13 UTC (rev 90934)
@@ -314,19 +314,7 @@
        else
                amd64_mov_reg_membase (code, AMD64_ARG_REG4, AMD64_RBP, 
tramp_offset, 8);
 
-       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)
-               tramp = (guint8*)mono_class_init_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_GENERIC_CLASS_INIT)
-               tramp = (guint8*)mono_generic_class_init_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_AOT)
-               tramp = (guint8*)mono_aot_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_AOT_PLT)
-               tramp = (guint8*)mono_aot_plt_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_DELEGATE)
-               tramp = (guint8*)mono_delegate_trampoline;
-       else
-               tramp = (guint8*)mono_magic_trampoline;
-
+       tramp = mono_get_trampoline_func (tramp_type);
        amd64_mov_reg_imm (code, AMD64_RAX, tramp);
        amd64_call_reg (code, AMD64_RAX);
 

Modified: trunk/mono/mono/mini/tramp-arm.c
===================================================================
--- trunk/mono/mono/mini/tramp-arm.c    2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/tramp-arm.c    2007-12-07 14:53:13 UTC (rev 90934)
@@ -259,16 +259,7 @@
 
        constants = (gpointer*)buf;
        constants [0] = mono_get_lmf_addr;
-       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)
-               constants [1] = mono_class_init_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_AOT)
-               constants [1] = mono_aot_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_AOT_PLT)
-               constants [1] = mono_aot_plt_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_DELEGATE)
-               constants [1] = mono_delegate_trampoline;
-       else
-               constants [1] = mono_magic_trampoline;
+       constants [1] = mono_get_trampoline_func (tramp_type);
 
        /* backpatch by emitting the missing instructions skipped above */
        ARM_LDR_IMM (load_get_lmf_addr, ARMREG_R0, ARMREG_PC, (buf - 
load_get_lmf_addr - 8));

Modified: trunk/mono/mono/mini/tramp-ia64.c
===================================================================
--- trunk/mono/mono/mini/tramp-ia64.c   2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/tramp-ia64.c   2007-12-07 14:53:13 UTC (rev 90934)
@@ -225,8 +225,6 @@
 
        ia64_codegen_init (code, buf);
 
-       /* FIXME: Save/restore lmf */
-
        /* Stacked Registers */
        in0 = 32;
        local0 = in0 + 8;
@@ -317,16 +315,7 @@
        /* FIXME: */
        ia64_mov (code, o3, 0);
 
-       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)
-               tramp = (guint8*)mono_class_init_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_AOT)
-               tramp = (guint8*)mono_aot_trampoline;
-       /*
-       else if (tramp_type == MONO_TRAMPOLINE_DELEGATE)
-               tramp = (guint8*)mono_delegate_trampoline;
-       */
-       else
-               tramp = (guint8*)mono_magic_trampoline;
+       tramp = mono_get_trampoline_func (tramp_type);
 
        /* Call the trampoline using an indirect call */
        ia64_movl (code, l0, tramp);

Modified: trunk/mono/mono/mini/tramp-sparc.c
===================================================================
--- trunk/mono/mono/mini/tramp-sparc.c  2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/tramp-sparc.c  2007-12-07 14:53:13 UTC (rev 90934)
@@ -163,12 +163,7 @@
                }
        }
 
-       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)
-               tramp_addr = &mono_class_init_trampoline;
-       else if (tramp_type == MONO_TRAMPOLINE_AOT)
-               tramp_addr = mono_aot_trampoline;
-       else
-               tramp_addr = &mono_magic_trampoline;
+       tramp_addr = mono_get_trampoline_func (tramp_type);
        sparc_ldi_imm (code, sparc_sp, MONO_SPARC_STACK_BIAS + 200, sparc_o2);
        /* pass address of register table as third argument */
        sparc_add_imm (code, FALSE, sparc_sp, regs_offset, sparc_o0);

Modified: trunk/mono/mono/mini/tramp-x86.c
===================================================================
--- trunk/mono/mono/mini/tramp-x86.c    2007-12-07 14:47:33 UTC (rev 90933)
+++ trunk/mono/mono/mini/tramp-x86.c    2007-12-07 14:53:13 UTC (rev 90934)
@@ -181,7 +181,7 @@
 guchar*
 mono_arch_create_trampoline_code (MonoTrampolineType tramp_type)
 {
-       guint8 *buf, *code;
+       guint8 *buf, *code, *tramp;
        int pushed_args;
 
        code = buf = mono_global_codeman_reserve (256);
@@ -306,18 +306,8 @@
        x86_breakpoint (buf);*/
 #endif
 
-       if (tramp_type == MONO_TRAMPOLINE_CLASS_INIT)
-               x86_call_code (buf, mono_class_init_trampoline);
-       else if (tramp_type == MONO_TRAMPOLINE_GENERIC_CLASS_INIT)
-               x86_call_code (buf, mono_generic_class_init_trampoline);
-       else if (tramp_type == MONO_TRAMPOLINE_AOT)
-               x86_call_code (buf, mono_aot_trampoline);
-       else if (tramp_type == MONO_TRAMPOLINE_AOT_PLT)
-               x86_call_code (buf, mono_aot_plt_trampoline);
-       else if (tramp_type == MONO_TRAMPOLINE_DELEGATE)
-               x86_call_code (buf, mono_delegate_trampoline);
-       else
-               x86_call_code (buf, mono_magic_trampoline);
+       tramp = mono_get_trampoline_func (tramp_type);
+       x86_call_code (tramp);
 
        x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 4*4);
 

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to