public void flowToAddress(Address fromAddr, Address destAddr) {
		if (!isFlowActive()) {
			throw new IllegalStateException("Attempted to continue a flow that was not started.");
		}
		if (currentAddress.compareTo(destAddr) > 0) {
			throw new IllegalArgumentException("address must not be less than current address");
		}
		if (currentAddress.equals(destAddr)) {
			return;
		}

		currentAddress = destAddr;

		if (delayedContextRegisterValue != null &&
			!delayedContextRegisterValue.equals(contextRegisterValue)) {
			// flush current range due to delayed context change
			if (!startAddr.equals(currentAddress)) {
				saveProgramContext(startAddr, currentAddress.previous());
			}
			contextRegisterValue = delayedContextRegisterValue;
			startAddr = currentAddress;
		}

		// get next context value within flow, combining current, future, previously stored and default context values
		Map<Register, RegisterValue> futureStateMap = getFutureRegisterStateMap(fromAddr, destAddr, true);
		
		RegisterValue nextContextRegisterValue = getNextContextInFlow(destAddr, futureStateMap, false);
		delayedContextRegisterValue = null;

		// continue flowing context if no change
		if (futureStateMap == null && nextContextRegisterValue.equals(contextRegisterValue)) {
			return;
		}

		// store context to program over previous range
		if (!startAddr.equals(currentAddress)) {
			saveProgramContext(startAddr, currentAddress.previous());
		}

		// start new range using modified context
		startAddr = destAddr;
		contextRegisterValue = nextContextRegisterValue;

		// update all other registers values in current state
		if (futureStateMap != null) {
			for (Register register : futureStateMap.keySet()) {
				RegisterValue futureValue = futureStateMap.get(register);
				RegisterValue currentValue = registerStateMap.get(register);
				if (currentValue != null) {
					futureValue = currentValue.combineValues(futureValue);
				}
				registerStateMap.put(register, futureValue);
			}
		}
	}
Continues the current flow from an address to the given address.  Checks for register values that have been
stored in the future flow state.  If any registers have saved future state, the current state
for all registers is written to the program context upto the specified address(exclusive).
The future flow state values are then loaded into the current context.

@param fromAddr address that this flow is flowing from.
@param destAddr the starting address of a new instruction flow.
@throws IllegalStateException if a previous flow was not ended.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerContextImpl.java