int offset = (index>>LOG_BITS_IN_ADDRESS)<<(LOG_BYTES_IN_ADDRESS + LOG_SET_SIZE);
int offset = (index>>LOG_BITS_IN_ADDRESS)<<LOG_BYTES_IN_ADDRESS;
  public static final void internalMarkObject(VM_Address object, byte tag)     throws VM_PragmaInline {    VM_Address ref = VM_Interface.refToAddress(object);    VM_Address block = BlockAllocator.getBlockStart(ref, tag);    int sizeClass = getBlockSizeClass(block);    // establish bitmask & offset for this cell in the block    int index = (ref.diff(block.add(blockHeaderSize[sizeClass])).toInt())/cellSize[sizeClass];    int bitnumber = index & (BITS_IN_ADDRESS - 1);    VM_Word mask = VM_Word.fromInt(1<<bitnumber);    int offset = (index>>LOG_BITS_IN_ADDRESS)<<(LOG_BYTES_IN_ADDRESS + LOG_SET_SIZE);    // set the mark bit (this method is unsynchroinzed, so need explicit sync)    VM_Address tgt = block.add(MARK_BITMAP_BASE + offset);    if (VM_Interface.VerifyAssertions)      VM_Interface._assert((MARK_BITMAP_BASE + offset) < blockHeaderSize[sizeClass]);    VM_Word oldValue, newValue;    do {      oldValue = VM_Word.fromInt(VM_Magic.prepareInt(tgt, 0));      newValue = oldValue.or(mask);    } while(!VM_Magic.attemptInt(tgt, 0, oldValue.toInt(), newValue.toInt()));  }