private static VM_Lock inflate (Object o, int lockOffset) {
private static VM_Lock inflate (Object o, Offset lockOffset) {
  private static VM_Lock inflate (Object o, int lockOffset) {    Word old;    Word changed;    VM_Lock l = VM_Lock.allocate();    if (VM.VerifyAssertions) VM._assert(l != null); // inflate called by wait (or notify) which shouldn't be called during GC    Word locked = TL_FAT_LOCK_MASK.or(Word.fromIntZeroExtend(l.index).lsh(TL_LOCK_ID_SHIFT));    l.mutex.lock();    do {      old = VM_Magic.prepareWord(o, lockOffset);      // check to see if another thread has already created a fat lock      if (!(old.and(TL_FAT_LOCK_MASK).isZero())) { // already a fat lock in place        int index = old.and(TL_LOCK_ID_MASK).rshl(TL_LOCK_ID_SHIFT).toInt();        VM_Lock.free(l);        l.mutex.unlock();        l = VM_Scheduler.locks[index];        return l;      }      changed = locked.or(old.and(TL_UNLOCK_MASK));      if (VM_Magic.attemptWord(o, lockOffset, old, changed)) {        l.lockedObject = o;        l.ownerId      = old.and(TL_THREAD_ID_MASK).toInt();        if (l.ownerId != 0)           l.recursionCount = old.and(TL_LOCK_COUNT_MASK).rshl(TL_LOCK_COUNT_SHIFT).toInt() +1;        l.mutex.unlock();        return l;      // VM_Lock in place      }      // contention detected, try again    } while (true);  }