Development

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • r48652 - trunk/mono/mono/mini

    0 answers - 4285 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    Author: zoltan
    Date: 2005-08-22 08:17:57 -0400 (Mon, 22 Aug 2005)
    New Revision: 48652
    Modified:
    trunk/mono/mono/mini/ChangeLog
    Log:
    2005-08-22 Zoltan Varga <vargaz (AT) freemail (DOT) hu>
    * mini-x86.h tramp-x86.c: Add support for delegate trampolines.
    * inssel-x86.brg: Add some optimized call rules.
    Modified: trunk/mono/mono/mini/ChangeLog
    trunk/mono/mono/mini/ChangeLog2005-08-22 12:00:13 UTC (rev 48651)
    trunk/mono/mono/mini/ChangeLog2005-08-22 12:17:57 UTC (rev 48652)
    @@ -1,3 +1,9 @@
    +2005-08-22 Zoltan Varga <vargaz (AT) freemail (DOT) hu>
    +
    +* mini-x86.h tramp-x86.c: Add support for delegate trampolines.
    +
    +* inssel-x86.brg: Add some optimized call rules.
    +
    2005-08-21 Zoltan Varga <vargaz (AT) freemail (DOT) hu>
    * mini.c (): Do not return an already compiled
    Modified:
    2005-08-22 12:00:13 UTC (rev 48651)
    2005-08-22 12:17:57 UTC (rev 48652)
    @@ -37,6 +37,7 @@
    } \
    } while (0)
    +int call_reg_to_call_membase (int opcode);
    %%
    @@ -743,4 +744,54 @@
    mono_bblock_add_inst (s->cbb, tree);
    }
    +# call instructions
    +# depends on these
    +reg: P_CALL_REG (CEE_LDIND_I (base)),
    +reg: P_FCALL_REG (CEE_LDIND_I (base)),
    +reg: P_LCALL_REG (CEE_LDIND_I (base)) {
    +tree->opcode = call_reg_to_call_membase (tree->opcode);
    +tree->inst_basereg = state->left->left->tree->inst_basereg;
    +tree->inst_offset = state->left->left->tree->inst_offset;
    +tree->dreg = state->reg1;
    +mono_bblock_add_inst (s->cbb, tree);
    +}
    +
    +stmt: P_VIDCALL_REG (CEE_LDIND_I (base)) {
    +tree->opcode = call_reg_to_call_membase (tree->opcode);
    +tree->inst_basereg = state->left->left->tree->inst_basereg;
    +tree->inst_offset = state->left->left->tree->inst_offset;
    +mono_bblock_add_inst (s->cbb, tree);
    +}
    +
    +stmt: P_VCALL_REG (CEE_LDIND_I (base), reg) {
    +mono_arch_emit_this_vret_args (s, (MonoCallInst*)tree, -1, -1, state->right->reg1);
    +
    +tree->opcode = call_reg_to_call_membase (tree->opcode);
    +tree->inst_basereg = state->left->left->tree->inst_basereg;
    +tree->inst_offset = state->left->left->tree->inst_offset;
    +tree->dreg = state->reg1;
    +mono_bblock_add_inst (s->cbb, tree);
    +}
    +
    %%
    +
    +int
    +call_reg_to_call_membase (int opcode)
    +{
    +switch (opcode) {
    +case P_CALL_REG:
    +return P_CALL_MEMBASE;
    +case P_FCALL_REG:
    +return P_FCALL_MEMBASE;
    +case P_VCALL_REG:
    +return P_VCALL_MEMBASE;
    +case P_LCALL_REG:
    +return P_LCALL_MEMBASE;
    +case P_VIDCALL_REG:
    +return P_VIDCALL_MEMBASE;
    +default:
    +g_assert_not_reached ();
    +}
    +
    +return -1;
    +}
    Modified:
    2005-08-22 12:00:13 UTC (rev 48651)
    2005-08-22 12:17:57 UTC (rev 48652)
    @@ -241,6 +241,7 @@
    #define MNARCH_ENABLE_EMIT_STATEPT 1
    #define 1
    #define 1
    +#define 1
    #define MNARCH_HAVE_CREATE_VARS 1
    #endif /* __MNMINI_X86_H__ */
    Modified:
    2005-08-22 12:00:13 UTC (rev 48651)
    2005-08-22 12:17:57 UTC (rev 48652)
    @@ -134,6 +134,24 @@
    }
    }
    +void
    + (guint8 *code, guint8 *tramp, gssize *regs, guint8 *addr)
    +{
    +guint32 reg;
    +guint32 disp;
    +
    +if ((code [-3] == 0xff) && (x86_modrm_reg (code [-2]) == 0x2) && (x86_modrm_mod (code [-2]) == 0x1)) {
    +/* call *[reg+disp8] */
    +reg = x86_modrm_rm (code [-2]);
    +disp = *(guint8*)(code - 1);
    +//printf ("B: [%%r%d+0x%x]\n", reg, disp);
    +}
    +else
    +g_assert_not_reached ();
    +
    +*(gpointer*)(((guint32)(regs [reg])) + disp) = addr;
    +}
    +
    guchar*
    (MonoTrampolineType tramp_type)
    {
    @@ -194,6 +212,8 @@
    x86_call_code (buf, mono_class_init_trampoline);
    else if (tramp_type == MNTRAMPLINE_AT)
    x86_call_code (buf, mono_aot_trampoline);
    +else if (tramp_type == MNTRAMPLINE_DELEGATE)
    +x86_call_code (buf, mono_delegate_trampoline);
    else
    x86_call_code (buf, mono_magic_trampoline);
    x86_alu_reg_imm (buf, X86_ADD, X86_ESP, 4*4);
    Mono-patches maillist - Mono-patches (AT) lists (DOT) ximian.com

Re: r48652 - trunk/mono/mono/mini


max 4000 letters.
Your nickname that display:
In order to stop the spam: 9 + 9 =
QUESTION ON "Development"

EMSDN.COM