public RegisterValue getRegisterValue(Register register, Address fromAddr, Address destAddr) {
		if (isFlowActive() && destAddr.compareTo(startAddr) >= 0 &&
				destAddr.compareTo(currentAddress) <= 0) {
			return getRegisterValue(register);
		}
		
		Map<Address, Map<Register, RegisterValue>> futureRegisterStateMap = noAddressFutureRegisterStateMap;
		if (destAddr != Address.NO_ADDRESS) {
			futureRegisterStateMap = futureFlowRegisterStateMaps.get(destAddr);
		}
		Map<Register, RegisterValue> map = null;
		if (futureRegisterStateMap != null) {
			map = futureRegisterStateMap.get(fromAddr);
		}
		
		if (map != null) {
			RegisterValue value = map.get(register.getBaseRegister());
			if (value != null) {
				return value.getRegisterValue(register);
			}
		}
		return programContext.getRegisterValue(register, destAddr);
	}
Returns the future RegisterValue at the specified address that occurred because of a flow from
the fromAddr.  If no future value is stored, it will return the value stored in the program.
The value returned may not have a complete value for the requested register.

@param register the register to get a value for.
@param fromAddr the address from which the flow originated
@param destAddr the address at which to get a value.

@return a RegisterValue object if one has been stored in the future flow or the program.
The RegisterValue object may have a "no value" state for the bits specified by the given register.
Also, null may be returned if no value have been stored.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/DisassemblerContextImpl.java