@Override
	public void setRegisterValue(RegisterValue value) {
		if (value == null) {
			return;
		}
		if (!isFlowActive()) {
			throw new IllegalStateException("Context flow has not been started");
		}

		Register register = value.getRegister();
		if (register.isProcessorContext()) {
			// flow is already active - assume delayed flow context
			if (delayedContextRegisterValue == null) {
				delayedContextRegisterValue = contextRegisterValue;
			}
			delayedContextRegisterValue =
				combineRegisterValues(delayedContextRegisterValue, value, true);
			return; // delay saving of range context
		}

		if (!startAddr.equals(currentAddress)) {
			saveProgramContext(startAddr, currentAddress.previous());
			startAddr = currentAddress;
		}

		Register baseRegister = register.getBaseRegister();
		RegisterValue currentValue = registerStateMap.remove(baseRegister);
		RegisterValue newValue = combineRegisterValues(currentValue, value, true);
		registerStateMap.put(baseRegister, newValue);
	}
Modify the current context register value at the specified address.  If current 
disassembly toAddr address equals specified address the current disassembly context 
will be changed, otherwise the future flow state flowing from the fromAddr will be changed.
This differs from {@link #setValue(Register, Address, BigInteger)} in that is can
affect the current context state at the current address in a non-delayed fashion.

@param value register value
@param fromAddr the address from which this flow originated
@param toAddr the future flow address to save the value.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerContextImpl.java