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]