VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -4, VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -4));
VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), Offset.fromIntSignExtend(-4), VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), Offset.fromIntSignExtend(-4)));
  public static void arraycopy8Bit(Object src, int srcPos, Object dst, int dstPos, int len) throws InlinePragma {    if (USE_NATIVE && len > NATIVE_THRESHOLD) {      memcopy(VM_Magic.objectAsAddress(dst).add(dstPos),               VM_Magic.objectAsAddress(src).add(srcPos),               len);    } else {      if (len >= BYTES_IN_ADDRESS && (srcPos & (BYTES_IN_ADDRESS - 1)) == (dstPos & (BYTES_IN_ADDRESS - 1))) {        // relative alignment is the same        int byteStart = srcPos;        int wordStart = alignUp(srcPos, BYTES_IN_ADDRESS);        int wordEnd = alignDown(srcPos + len, BYTES_IN_ADDRESS);        int byteEnd = srcPos + len;        int startDiff = wordStart - byteStart;        int endDiff = byteEnd - wordEnd;        int wordLen = wordEnd - wordStart;        Address srcPtr = VM_Magic.objectAsAddress(src).add(srcPos+startDiff);        Address dstPtr = VM_Magic.objectAsAddress(dst).add(dstPos+startDiff);        switch(startDiff) {        //-#if RVM_FOR_64_ADDR        case 7:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -7,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -7));        case 6:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -6,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -6));        case 5:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -5,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -5));        case 4:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -4,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -4));        //-#endif        case 3:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -3,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -3));        case 2:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -2,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -2));        case 1:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), -1,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), -1));        }                Address endPtr = srcPtr.add(wordLen);        while (srcPtr.LT(endPtr)) {          dstPtr.store(srcPtr.loadWord());          srcPtr = srcPtr.add(BYTES_IN_ADDRESS);          dstPtr = dstPtr.add(BYTES_IN_ADDRESS);        }        switch(endDiff) {        //-#if RVM_FOR_64_ADDR        case 7:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 6,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 6));        case 6:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 5,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 5));        case 5:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 4,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 4));        case 4:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 3,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 3));        //-#endif        case 3:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 2,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 2));        case 2:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 1,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 1));        case 1:          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 0,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 0));        }      } else {        Address srcPtr = VM_Magic.objectAsAddress(src).add(srcPos);        Address dstPtr = VM_Magic.objectAsAddress(dst).add(dstPos);        Address endPtr = srcPtr.add(len);        while (srcPtr.LT(endPtr)) {          VM_Magic.setByteAtOffset(VM_Magic.addressAsObject(dstPtr), 0,                                   VM_Magic.getByteAtOffset(VM_Magic.addressAsObject(srcPtr), 0));          srcPtr = srcPtr.add(1);          dstPtr = dstPtr.add(1);        }      }    }  }