srcOffset += increment; dstOffset += increment;
srcOffset = srcOffset.add(increment); dstOffset = dstOffset.add(increment);
  private static void fastArrayCopy(Object[] src, int srcIdx, Object[] dst,                                     int dstIdx, int len) {    boolean loToHi = (srcIdx > dstIdx);  // direction of copy    int srcOffset = srcIdx << LOG_BYTES_IN_ADDRESS;    int dstOffset = dstIdx << LOG_BYTES_IN_ADDRESS;    int bytes = len << LOG_BYTES_IN_ADDRESS;        if ((src != dst) || loToHi) {      if (!MM_Interface.NEEDS_WRITE_BARRIER ||          !MM_Interface.arrayCopyWriteBarrier(src, srcOffset, dst, dstOffset,                                               bytes)) {        VM_Memory.alignedWordCopy(VM_Magic.objectAsAddress(dst).add(dstOffset),                                  VM_Magic.objectAsAddress(src).add(srcOffset),                                  bytes);      }    } else {      // set up things according to the direction of the copy      int increment;      if (loToHi)        increment = BYTES_IN_ADDRESS;      else {        srcOffset += (bytes - BYTES_IN_ADDRESS);        dstOffset += (bytes - BYTES_IN_ADDRESS);        increment = -BYTES_IN_ADDRESS;      }       // perform the copy      while (len-- != 0) {        Object value = VM_Magic.getObjectAtOffset(src, srcOffset);        if (MM_Interface.NEEDS_WRITE_BARRIER)          MM_Interface.arrayStoreWriteBarrier(dst, dstOffset>>LOG_BYTES_IN_ADDRESS, value);        else          VM_Magic.setObjectAtOffset(dst, dstOffset, value);        srcOffset += increment;        dstOffset += increment;      }    }  }