int forwardingPtr = CopyingHeader.attemptToForward(object);  VM_Magic.isync();    if (CopyingHeader.stateIsForwardedOrBeingForwarded(forwardingPtr)) { while (CopyingHeader.stateIsBeingForwarded(forwardingPtr)) forwardingPtr = CopyingHeader.getForwardingWord(object);  VM_Magic.isync(); VM_Address newObject = VM_Address.fromInt(forwardingPtr & ~CopyingHeader.GC_FORWARDING_MASK); return newObject; }    VM_Address newObject = VM_Interface.copy(object, forwardingPtr); CopyingHeader.setForwardingPointer(object, newObject);  return newObject;
return forwardObject(object, false);
  public static VM_Address forwardObject(VM_Address object)     throws VM_PragmaInline {    int forwardingPtr = CopyingHeader.attemptToForward(object);    // prevent instructions moving infront of attemptToForward    VM_Magic.isync();       // Somebody else got to it first.    //    if (CopyingHeader.stateIsForwardedOrBeingForwarded(forwardingPtr)) {      while (CopyingHeader.stateIsBeingForwarded(forwardingPtr)) 	forwardingPtr = CopyingHeader.getForwardingWord(object);      // prevent following instructions from being moved in front of waitloop      VM_Magic.isync();        VM_Address newObject = VM_Address.fromInt(forwardingPtr & ~CopyingHeader.GC_FORWARDING_MASK);      return newObject;    }    // We are the designated copier    //    VM_Address newObject = VM_Interface.copy(object, forwardingPtr);    CopyingHeader.setForwardingPointer(object, newObject);    return newObject;  }