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]

Reply via email to