do { oldValue = ObjectModel.prepareAvailableBits(object); markBit = oldValue.and(MARK_BIT_MASK); if (markBit.EQ(value)) return false; } while (!ObjectModel.attemptAvailableBits(object, oldValue, oldValue.xor(MARK_BIT_MASK)));
oldValue = ObjectModel.readAvailableBitsWord(object); markBit = oldValue.and(MARK_BIT_MASK); if (markBit.EQ(value)) return false; ObjectModel.writeAvailableBitsWord(object, oldValue.and(MARK_BIT_MASK.not()).or(value));
  private static boolean testAndMark(ObjectReference object, Word value)      throws InlinePragma {    Word oldValue, markBit;    do {      oldValue = ObjectModel.prepareAvailableBits(object);      markBit = oldValue.and(MARK_BIT_MASK);      if (markBit.EQ(value)) return false;    } while (!ObjectModel.attemptAvailableBits(object, oldValue,                                                oldValue.xor(MARK_BIT_MASK)));    return true;  }