On 8/28/06, Mikhail Fursov <[EMAIL PROTECTED]> 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.
I like it! It makes sense. No objections to what you propose. - Weldon
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
-- Weldon Washburn Intel Middleware Products Division --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]