[Mono-dev] ARM/NativeClient port
Zoltan Varga
vargaz at gmail.com
Fri Feb 22 23:24:11 UTC 2013
Hi,
I added some comments using the github review system. The rest of the
stuff looks ok, All the #ifdefs make the code look a bit ugly, but I don't
know how else to do it. So its ok.
Zoltan
On Thu, Feb 21, 2013 at 6:04 PM, Nikolay Igotti <olonho at google.com> wrote:
> Hi,
>
> This pull request https://github.com/mono/mono/pull/571 implements
> approach suggested
> (only jumptables are no longer bound to domain, as trampolines init
> happens eariler than root domain init) and it would be great to have change
> reviewed and integrated.
>
> It passes SciMark and few other tests. SciMark score with jumptables is
> 44.5MFlops, vs. 55.7MFlops without on Google Nexus 7, which is pretty
> natural, considering nature of the change.
> Performance likely could be improved, as in few places we could replace
> always
> indirect jumps with direct ones.
>
> Thanks,
> Nikolay
>
> On Tue, Feb 5, 2013 at 4:14 PM, Nikolay Igotti <olonho at google.com> wrote:
>
>> Hi Zoltan,
>>
>> Good idea, but unfortunately for [reg + reg] loads it's hard to easily
>> verify
>> that address does not escapes sandbox, so NaCL only allows [reg + imm]
>> addressing mode.
>>
>> So far, my approach is to augment MonoDomain with jumptable field, and
>> replace inline jumptable with access to this domain-wide table.
>>
>> Generated ASM for trampoline looks like:
>>
>> movw rX, lo(jump_table_entry_addr)
>> movt rX, hi(jump_table_entry_addr)
>> ldr rX, [rX]
>> bic rX, rX, #MASK ; for NaCL only
>> bx rX
>>
>> and patching code decodes location to patch from movw/movt instruction
>> (similar to what you suggested).
>>
>> Nikolay.
>>
>>
>> On Tue, Feb 5, 2013 at 10:35 AM, Zoltan Varga <vargaz at gmail.com> wrote:
>>
>>>
>>> On Mon, Feb 4, 2013 at 10:34 AM, Nikolay Igotti <olonho at google.com>wrote:
>>>
>>>> Hi Zoltan,
>>>>
>>>> For PC-relative addressing at least 2 conditions has to be satisfied:
>>>> 1. code must know which PC it runs at
>>>> 2. offset to data must be smaller than 4K to fit into immediate
>>>> encoding
>>>>
>>>> If we're not using inline constant pools, it would lead to rather
>>>> tricky memory layout of code
>>>> interleaved with data.
>>>>
>>>> Nikolay
>>>>
>>>>
>>> PC relative addressing is already used by the runtime in AOT mode, see
>>> the implementation of the OP_AOTCONST opcode, you can generate:
>>> movw <temp reg>, 0
>>> movt <temp reg>, 0
>>> mov <dreg>, [pc+temp reg]
>>> and patch the movw/movt when the address of the code and the data is
>>> known. I.e. for trampolines, this is already known, for methods, you can
>>> patch the movw/movt
>>> in mono_arch_patch_code ().
>>>
>>> Zoltan
>>>
>>>
>>>>
>>>> On Sun, Feb 3, 2013 at 10:09 PM, Zoltan Varga <vargaz at gmail.com> wrote:
>>>>
>>>>> > Hi,
>>>>> >
>>>>> > We're working on implementation of Mono JIT/ARM for Native Client,
>>>>> and want to discuss certain details about design of our solution.
>>>>> > Native Client's sandboxing mechanism, being a SFI solution, has
>>>>> rather strict limitations on how verifiable machine code may look like. To
>>>>> be precise:
>>>>>
>>>>> > Our idea is to emit per-method (or per class?) "jump table"
>>>>> somewhere in .data, which contains list of all relocations, and use some
>>>>> register to point to this table.
>>>>> > So for example, trampoline like this:
>>>>> > ldr ip, [pc, #0]
>>>>> > b skip
>>>>> > .word target
>>>>> > skip:
>>>>> > mov lr, pc
>>>>> > mov pc, ip
>>>>> > would become (if r10 is used as jump table base register):
>>>>> > .align 4 # for NaCl only
>>>>> > ldr ip, [r10, #32] # unique (per-method or class) index for
>>>>> every callsite
>>>>> > nop # for NaCl only, to have bl at bundle end
>>>>> > bic r10, r10, #0xc000000f # for NaCl only
>>>>> > bl ip # or blx
>>>>> > r10 could point somewhere in method metadata, where its relocation
>>>>> table is stored.
>>>>>
>>>>> > So our question is if someone sees problem with such approach, or
>>>>> could suggest better alternative. Also advises which register could be used
>>>>> as the jump table base, and where > to store
>>>>> > such a table (maybe patch info?) are very welcome.
>>>>>
>>>>> Hi,
>>>>>
>>>>> ARM has PC relative addressing, so it would be easier to use that
>>>>> instead of reserving a register.
>>>>>
>>>>> Zoltan
>>>>>
>>>>> _______________________________________________
>>>>> Mono-devel-list mailing list
>>>>> Mono-devel-list at lists.ximian.com
>>>>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>>>>>
>>>>>
>>>>
>>>
>>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20130223/7a3e3cb0/attachment-0001.html>
More information about the Mono-devel-list
mailing list