[Mono-dev] [Mono-patches] r135715 - trunk/mono/mono/mini
Zoltan Varga
vargaz at gmail.com
Tue Jun 9 00:08:35 EDT 2009
Not for full-aot hopefully.
Zoltan
On Tue, Jun 9, 2009 at 5:00 AM, Rodrigo Kumpera <kumpera at gmail.com> wrote:
> Zoltan, BLX is ARMv5 only. I believe we still have to support v4.
>
>
>
> On Mon, Jun 8, 2009 at 11:22 PM, Zoltan Varga (vargaz AT gmail.com) <
> mono-patches-list at lists.ximian.com> wrote:
>
>> Author: zoltan
>> Date: 2009-06-08 22:22:25 -0400 (Mon, 08 Jun 2009)
>> New Revision: 135715
>>
>> Modified:
>> trunk/mono/mono/mini/ChangeLog
>> trunk/mono/mono/mini/aot-compiler.c
>> trunk/mono/mono/mini/tramp-arm.c
>> Log:
>> 2009-06-09 Zoltan Varga <vargaz at gmail.com>
>>
>> * aot-compiler.c (arch_emit_specific_trampoline): Rework the arm
>> trampoline to save 8 bytes per trampoline.
>>
>> * tramp-arm.c (mono_arch_create_trampoline_code_full): Update after
>> the
>> change above.
>>
>> Modified: trunk/mono/mono/mini/ChangeLog
>> ===================================================================
>> --- trunk/mono/mono/mini/ChangeLog 2009-06-09 02:21:21 UTC (rev
>> 135714)
>> +++ trunk/mono/mono/mini/ChangeLog 2009-06-09 02:22:25 UTC (rev
>> 135715)
>> @@ -1,3 +1,11 @@
>> +2009-06-09 Zoltan Varga <vargaz at gmail.com>
>> +
>> + * aot-compiler.c (arch_emit_specific_trampoline): Rework the arm
>> + trampoline to save 8 bytes per trampoline.
>> +
>> + * tramp-arm.c (mono_arch_create_trampoline_code_full): Update
>> after the
>> + change above.
>> +
>> 2009-06-08 Zoltan Varga <vargaz at gmail.com>
>>
>> * aot-compiler.c: Use acfg->temp_prefix instead of .L to prefix
>> labels.
>>
>> Modified: trunk/mono/mono/mini/aot-compiler.c
>> ===================================================================
>> --- trunk/mono/mono/mini/aot-compiler.c 2009-06-09 02:21:21 UTC (rev
>> 135714)
>> +++ trunk/mono/mono/mini/aot-compiler.c 2009-06-09 02:22:25 UTC (rev
>> 135715)
>> @@ -605,23 +605,26 @@
>> guint8 buf [128];
>> guint8 *code;
>>
>> - /* This should be exactly 28 bytes long */
>> - *tramp_size = 28;
>> + /* This should be exactly 20 bytes long */
>> + *tramp_size = 20;
>> code = buf;
>> ARM_PUSH (code, 0x5fff);
>> - ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 8);
>> + ARM_LDR_IMM (code, ARMREG_R1, ARMREG_PC, 4);
>> /* Load the value from the GOT */
>> ARM_LDR_REG_REG (code, ARMREG_R1, ARMREG_PC, ARMREG_R1);
>> /* Branch to it */
>> - ARM_MOV_REG_REG (code, ARMREG_LR, ARMREG_PC);
>> - ARM_MOV_REG_REG (code, ARMREG_PC, ARMREG_R1);
>> + ARM_BLX_REG (code, ARMREG_R1);
>>
>> - g_assert (code - buf == 20);
>> + g_assert (code - buf == 16);
>>
>> /* Emit it */
>> emit_bytes (acfg, buf, code - buf);
>> - emit_symbol_diff (acfg, acfg->got_symbol, ".", (offset * sizeof
>> (gpointer)) - 4 + 8);
>> - emit_symbol_diff (acfg, acfg->got_symbol, ".", ((offset + 1) *
>> sizeof (gpointer)) - 4 + 8);
>> + /*
>> + * Only one offset is needed, since the second one would be equal
>> to the
>> + * first one.
>> + */
>> + emit_symbol_diff (acfg, acfg->got_symbol, ".", (offset * sizeof
>> (gpointer)) - 4 + 4);
>> + //emit_symbol_diff (acfg, acfg->got_symbol, ".", ((offset + 1) *
>> sizeof (gpointer)) - 4 + 8);
>> #else
>> g_assert_not_reached ();
>> #endif
>>
>> Modified: trunk/mono/mono/mini/tramp-arm.c
>> ===================================================================
>> --- trunk/mono/mono/mini/tramp-arm.c 2009-06-09 02:21:21 UTC (rev
>> 135714)
>> +++ trunk/mono/mono/mini/tramp-arm.c 2009-06-09 02:22:25 UTC (rev
>> 135715)
>> @@ -89,7 +89,7 @@
>>
>> ARM_LDR_IMM (code, MONO_ARCH_RGCTX_REG, ARMREG_PC, 0);
>> ARM_LDR_IMM (code, ARMREG_PC, ARMREG_PC, 0);
>> - *(guint32*)code = mrgctx;
>> + *(guint32*)code = (guint32)mrgctx;
>> code += 4;
>> *(guint32*)code = (guint32)addr;
>> code += 4;
>> @@ -227,10 +227,12 @@
>> ARM_MOV_REG_REG (code, ARMREG_V1, ARMREG_SP);
>> if (aot && tramp_type != MONO_TRAMPOLINE_GENERIC_CLASS_INIT) {
>> /*
>> - * The trampoline contains a pc-relative offset to the got
>> slot where the
>> - * value is stored. The offset can be found at [lr + 4].
>> + * The trampoline contains a pc-relative offset to the got
>> slot
>> + * preceeding the got slot where the value is stored. The
>> offset can be
>> + * found at [lr + 0].
>> */
>> - ARM_LDR_IMM (code, ARMREG_V2, ARMREG_LR, 4);
>> + ARM_LDR_IMM (code, ARMREG_V2, ARMREG_LR, 0);
>> + ARM_ADD_REG_IMM (code, ARMREG_V2, ARMREG_V2, 4, 0);
>> ARM_LDR_REG_REG (code, ARMREG_V2, ARMREG_V2, ARMREG_LR);
>> } else {
>> if (tramp_type != MONO_TRAMPOLINE_GENERIC_CLASS_INIT)
>>
>> _______________________________________________
>> Mono-patches maillist - Mono-patches at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-patches
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20090609/0d17225f/attachment-0001.html
More information about the Mono-devel-list
mailing list