@Override
			public boolean evaluateReference(VarnodeContext context, Instruction instr, int pcodeop,
					Address address, int size, DataType dataType, RefType refType) {

				Address addr = address;
				
				if (addr == Address.NO_ADDRESS) {
					return false;
				}

				//if (instr.getFlowType().isJump() && !instr.getPrototype().hasDelaySlots()) {
				// if this isn't straight code (thunk computation), let someone else lay down the reference
				//	return !symEval.encounteredBranch();
				//}

				if (instr.getMnemonicString().endsWith("lui")) {
					return false;
				}

				if ((refType.isJump() || refType.isCall()) & refType.isComputed()) {
					addr = mipsExtDisassembly(program, instr, context, address, monitor);
					if (addr == null) {
						addr = address;
					}
				}

				// if this is a call, some processors use the register value
				// used in the call for PIC calculations
				if (refType.isCall() && !addr.isExternalAddress()) {
					// set the called function to have a constant value for this register
					// WARNING: This might not always be the case, if called directly or with a different register
					//          But then it won't matter, because the function won't depend on the registers value.
					if (instr.getFlowType().isComputed()) {
						Register reg = instr.getRegister(0);
						if (reg != null && t9.equals(reg) && assumeT9EntryAddress) {
							BigInteger val = context.getValue(reg, false);
							if (val != null) {
								try {
									// clear the register, so it won't be set below this call.
									//  if it is assumed to be set to the same value, it can lead
									//   to incorrect re-use of the value (non-returning functions)
									context.clearRegister(reg);

									// need to add the reference here, register operand will no longer have a value
									instr.addOperandReference(0, addr, instr.getFlowType(),
										SourceType.ANALYSIS);

									// set the register value on the target address
									ProgramContext progContext = program.getProgramContext();
									if (progContext.getValue(reg, addr, false) == null) {
										progContext.setValue(reg, addr, addr, val);
										// if we do this, probably need to restart code analysis with function body,
										AutoAnalysisManager amgr =
											AutoAnalysisManager.getAnalysisManager(program);
										amgr.codeDefined(new AddressSet(addr));
									}
								}
								catch (ContextChangeException e) {
									// ignore context change
								}
							}
						}
					}
				}

				return super.evaluateReference(context, instr, pcodeop, address, size, dataType, refType);
			}
Check for a global GP register symbol or discovered symbol
@param set
Ghidra/Processors/MIPS/src/main/java/ghidra/app/plugin/core/analysis/MipsAddressAnalyzer.java