harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rana Dasgupta" <rdasg...@gmail.com>
Subject Re: [drlvm] Helper inlining in JIT
Date Wed, 06 Sep 2006 20:01:33 GMT
Hi Mikhail,
    Sorry I left this thread for a while. Are you implementing VMMagic
support in .OPT currently, and prototyping with bump allocation?  I am just
trying to understand in what order we are doing this.
   Would it be possible to list the fastpath helpers so that the java
interfaces to access them could be defined? All of them don't need magic
classes support and one of us could just write them. I don't know the list
of intrinsics implemented already in .JET. Can we just use them as is, and
what else ( other than TLS access, call support ) would need to be added?
  BTW, there may be a small omission in the example below..if I am reading
this right...

Thanks,
Rana

On 8/28/06, Mikhail Fursov <mike.fursov@gmail.com> wrote:

> Folks,
> Here is the example of fast allocation helper written in Java with the
> help
> of VMMagic
> If nobody objects I'm starting to implement VMMagic support in
> Jitrino.OPTthis week.
>
>
>
> private static final int GC_TLS_OFFSET = 10;
> private static final int GC_CURRENT_OFFSET= GC_TLS_OFFSET + 0;
> private static final int GC_CEILING_OFFSET= GC_TLS_OFFSET + 4;
> private static final int OBJ_VTABLE_OFFSET = 0;
>
> //annotate with calling convention and real VM helper id/name information
> private static Address slowAlloc(int vtable, int size) {throw new
> Error("must never be called!");}
>
> private static Address fastAlloc(int vtable, int size) {
>    Address tlsBase = TLS.getAddress();  //load thread local client area
> address
>
>    Address currentFieldAddress = tlsBase.plus(GC_CURRENT_OFFSET);
>    Address ceilingFieldAddress = tlsBase.plus(GC_CEILING_OFFSET);
>
>    Address newObjectAddress; //the result of the method
>
>    // check if there is enough size to do allocation in thread local
> buffer
>    Address current = currentFieldAddress.loadAddress();
>    Address ceiling = ceilingFieldAddress.loadAddress();
>    Address newCurrent = current.plus(size);
>    if (newCurrent.LT(ceiling)) {


>>    newCurrent = newCurrent.plus(-size);

       currentFieldAddress.store(newCurrent.toWord());
>        newObjectAddress = newCurrent;
>        newObjectAddress.store(vtable, Offset.fromInt(OBJ_VTABLE_OFFSET));
>
>    } else {
>        newObjectAddress = slowAlloc(vtable, size);
>    }
>    return newObjectAddress;
> }
>
> --
> Mikhail Fursov
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message