code: long readTagAndSet(long bucketIndex, int posInBucket, long newTag) {
  		long tagStartIdx = getTagOffset(bucketIndex, posInBucket);
  		long tag = 0;
  		long tagEndIdx = tagStartIdx + bitsPerTag;
  		int tagPos = 0;
  		for (long i = tagStartIdx; i < tagEndIdx; i++) {
  			if ((newTag & (1L << tagPos)) != 0) {
  				if (memBlock.getAndSet(i)) {
  					tag |= 1 << tagPos;
  				}
  			} else {
  				if (memBlock.getAndClear(i)) {
  					tag |= 1 << tagPos;
  				}
  			}
  			tagPos++;
  		}
  		return tag;
  	}
docs: Reads a tag and sets the bits to a new tag at same time for max
  speedification