private void checkRegisterAccess(Instruction instr) {

		if (instr.getNumOperands() == 0) {
			return;
		}

		String mnemonic = instr.getMnemonicString();

		if ("MOVLB".equals(mnemonic)) {
			bsrContext.writeValue(instr.getMaxAddress());
			Scalar s = instr.getScalar(0);
			if (s != null) {
				long value = (bsrContext.hasValue() ? bsrContext.longValue() : 0) & 0xf0;
				value |= s.getUnsignedValue() & 0xf;
				bsrContext.setValueAt(instr, value, false);
			}
			else {
				bsrContext.setValueUnknown();
			}
			return;
		}

		if ("MOVLR".equals(mnemonic)) {
			bsrContext.writeValue(instr.getMaxAddress());
			Scalar s = instr.getScalar(0);
			if (s != null) {
				long value = (bsrContext.hasValue() ? bsrContext.longValue() : 0) & 0x0f;
				value |= (s.getUnsignedValue() & 0xf) << 4;
				bsrContext.setValueAt(instr, value, false);
			}
			else {
				bsrContext.setValueUnknown();
			}
			return;
		}

		int opIndex = 0;
		if ("MOVFP".equals(mnemonic) || "MOVPF".equals(mnemonic)) {
			opIndex = 1;
		}

		Object[] objs = instr.getOpObjects(opIndex);
		if (objs.length == 0) {
			return;
		}

		if (alustaReg.equals(objs[0]) || alustaReg.getAddress().equals(objs[0])) {
			handleStatusModification(instr);
		}
		if (bsrReg.equals(objs[0]) || bsrReg.getAddress().equals(objs[0])) {
			handleBSRModification(instr);
		}
		else if (pclathReg.equals(objs[0]) || pclathReg.getAddress().equals(objs[0])) {
			handlePclathModification(instr);
		}
		else if (pclReg.equals(objs[0]) || pclReg.getAddress().equals(objs[0])) {
			handlePclModification(instr);
		}
		else if (isRead(instr, pclReg)) {
			pclathContext.writeValue(instr.getMaxAddress());
			pclathContext.setValueAt(instr, instr.getMaxAddress().add(1).getOffset() >> 8, false);
		}
	}
Attempt to markup FReg access instruction with register reference.

@param instr
@return register name if identified, else null
Ghidra/Processors/PIC/src/main/java/ghidra/app/plugin/core/analysis/Pic17c7xxAnalyzer.java