tmp = VM_Magic.prepareInt(o, STATUS_OFFSET); } while (!VM_Magic.attemptInt(o, STATUS_OFFSET, tmp, tmp | HASH_STATE_HASHED));
tmp = VM_Magic.prepareWord(o, STATUS_OFFSET); } while (!VM_Magic.attemptWord(o, STATUS_OFFSET, tmp, tmp.or(HASH_STATE_HASHED)));
  public static int getObjectHashCode(Object o) {     if (ADDRESS_BASED_HASHING) {      if (MM_Interface.MOVES_OBJECTS) {        int hashState = VM_Magic.getIntAtOffset(o, STATUS_OFFSET) & HASH_STATE_MASK;        if (hashState == HASH_STATE_HASHED) {          return VM_Magic.objectAsAddress(o).toInt() >>> LOG_BYTES_IN_ADDRESS;          } else if (hashState == HASH_STATE_HASHED_AND_MOVED) {          VM_Type t = VM_Magic.getObjectType(o);          if (t.isArrayType()) {            return VM_Magic.getIntAtOffset(o, HASHCODE_ARRAY_OFFSET);          } else {            return VM_Magic.getIntAtOffset(o, HASHCODE_SCALAR_OFFSET);          }        } else {          int tmp;          do {            tmp = VM_Magic.prepareInt(o, STATUS_OFFSET);          } while (!VM_Magic.attemptInt(o, STATUS_OFFSET, tmp, tmp | HASH_STATE_HASHED));          if (VM_ObjectModel.HASH_STATS) VM_ObjectModel.hashTransition1++;          return getObjectHashCode(o);        }      } else {        return VM_Magic.objectAsAddress(o).toInt() >>> LOG_BYTES_IN_ADDRESS;        }    } else { // 10 bit hash code in status word      int hashCode = (VM_Magic.getIntAtOffset(o, STATUS_OFFSET) & HASH_CODE_MASK) >> HASH_CODE_SHIFT;      if (hashCode != 0)         return hashCode;       return installHashCode(o);    }  }