@Override
			public boolean evaluateContext(VarnodeContext context, Instruction instr) {
				if (markupDualInstructionOption) {
					markupDualInstructions(context, instr);
				}

				// if ra is a constant and is set right after this, this is a call
				// this was copylefted from the arm analyzer
				Varnode raVal = context.getRegisterVarnodeValue(rareg);
				if (raVal != null) {
					if (context.isConstant(raVal)) {
						long target = raVal.getAddress().getOffset();
						Address addr = instr.getMaxAddress();
						if (target == (addr.getOffset() + 1) && !instr.getFlowType().isCall()) {
							instr.setFlowOverride(FlowOverride.CALL);
							// need to trigger disassembly below! if not already
							mipsExtDisassembly(program, instr, context, addr.add(1), monitor);

							// need to trigger re-function creation!
							Function f = program.getFunctionManager().getFunctionContaining(
								instr.getMinAddress());

							if (f != null) {
								try {
									CreateFunctionCmd.fixupFunctionBody(program, f, monitor);
								}
								catch (CancelledException e) {
									return true;
								}
								//AutoAnalysisManager.getAnalysisManager(program).functionDefined(
								//	func.getBody());
							}
						}
					}
				}

				// check if the GP register is set
				FlowType flowType = instr.getFlowType();
				if (discoverGlobalGPSetting && (flowType.isCall() || flowType.isTerminal())) {
					// check for GP set
					RegisterValue registerValue = context.getRegisterValue(gp);
					if (registerValue != null) {
						BigInteger value = registerValue.getUnsignedValue();
						long unsignedValue = value.longValue();
						if (localGPAssumptionValue == null ||
							!(unsignedValue == localGPAssumptionValue.getOffset())) {
							synchronized (gp) {
								Address gpRefAddr =
									instr.getMinAddress().getNewAddress(unsignedValue);
								setGPSymbol(program, gpRefAddr);

								Address lastSetAddr = context.getLastSetLocation(gp, value);
								Instruction lastSetInstr = instr;
								if (lastSetAddr != null) {
									Instruction instructionAt =
										program.getListing().getInstructionContaining(lastSetAddr);
									if (instructionAt != null) {
										lastSetInstr = instructionAt;
									}
								}
								// if an instruction actually set the GP
								if (lastSetAddr != null) {
									symEval.makeReference(context, lastSetInstr, -1,
										instr.getMinAddress().getAddressSpace().getSpaceID(),
										unsignedValue, 1, null, RefType.DATA, PcodeOp.UNIMPLEMENTED, true,
										false, monitor);
									if (localGPAssumptionValue == null) {
										program.getBookmarkManager().setBookmark(
											lastSetInstr.getMinAddress(), BookmarkType.WARNING,
											"GP Global Register Set",
											"Global GP Register is set here.");
									}
									if (localGPAssumptionValue != null &&
										!localGPAssumptionValue.equals(gpRefAddr)) {
										localGPAssumptionValue = gp_assumption_value = null;
									}
									else {
										localGPAssumptionValue = gp_assumption_value = gpRefAddr;
									}
								}
							}
						}
					}
				}
				return mustStopNow;
			}
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