int objectEndOffset;
  public static Object moveObject(VM_Address toAddress, Object fromObj,                                   int numBytes, VM_Class type, 				  VM_Word availBitsWord) throws VM_PragmaInline {    int objectEndOffset;    VM_Word hashState = HASH_STATE_UNHASHED;    if (ADDRESS_BASED_HASHING) hashState = availBitsWord.and(HASH_STATE_MASK);    if (hashState.EQ(HASH_STATE_UNHASHED)) {      objectEndOffset = -numBytes;    } else {      objectEndOffset = -numBytes + HASHCODE_BYTES;    }    VM_Address fromAddress = VM_Magic.objectAsAddress(fromObj).add(objectEndOffset);    int copyBytes = numBytes;    if (VM_AllocatorHeader.STEAL_NURSERY_SCALAR_GC_HEADER)      copyBytes -= GC_HEADER_BYTES;    VM_Memory.aligned32Copy(toAddress, fromAddress, copyBytes);     Object toObj = VM_Magic.addressAsObject(toAddress.sub(objectEndOffset));    if (hashState.EQ(HASH_STATE_HASHED)) {      int hashCode = VM_Magic.objectAsAddress(fromObj).toWord().rshl(LOG_BYTES_IN_ADDRESS).toInt();        VM_Magic.setIntAtOffset(toObj, HASHCODE_SCALAR_OFFSET, hashCode);      VM_Magic.setWordAtOffset(toObj, STATUS_OFFSET, availBitsWord.or(HASH_STATE_HASHED_AND_MOVED));      if (VM_ObjectModel.HASH_STATS) VM_ObjectModel.hashTransition2++;    } else {      VM_Magic.setWordAtOffset(toObj, STATUS_OFFSET, availBitsWord);    }    return toObj; }