harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Fursov" <mike.fur...@gmail.com>
Subject Re: [drlvm] Helper inlining in JIT
Date Mon, 28 Aug 2006 15:20:55 GMT
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)) {
        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