public void setValue(Address start, Address end, RegisterValue newValue) {

		if (rangeWriteCacheEnabled) {
			if (rangeWriteCacheValue != null) {
				try {
					Address nextAddrInRange = rangeWriteCacheMax.addNoWrap(1);
					if (start.equals(nextAddrInRange) && newValue.equals(rangeWriteCacheValue)) {
						rangeWriteCacheMax = end;
						return;
					}
				}
				catch (AddressOverflowException e) {
					// assume we were at end of space
				}
				flushWriteCache();
			}
			else {
				// Ensure that transaction is open to avoid delayed error condition
				rangeMap.checkWritableState();
			}
			synchronized (this) {
				rangeWriteCacheValue = newValue;
				rangeWriteCacheMin = start;
				rangeWriteCacheMax = end;
			}
			return;
		}

		doSetValue(start, end, newValue);
	}
Sets the given register value (contains value and mask) across the given address range.  Any
existing values in the range that have values that are not part of the input mask are 
not changed. 
@param start the start of the range to set the register value. 
@param end the end of the range(inclusive) to set the register value.
@param newValue the new register value to set.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/RegisterValueStore.java