private String markupFRegInstruction(Instruction instr) {
		Object[] objs = instr.getOpObjects(0);
		if (objs.length != 1) {
			return null;
		}

		Address addr;
		Register reg = null;
		if (objs[0] instanceof Register) {
			reg = ((Register) objs[0]);
			addr = reg.getAddress();
		}
		else if (objs[0] instanceof Address) {
			addr = (Address) objs[0];
			reg = program.getRegister(addr, 1);
		}
		else if (objs[0] instanceof Scalar) {
			long offset = ((Scalar) objs[0]).getUnsignedValue();
			if ((offset & 0x1f) >= 0x10) {
				if (!fsrContext.hasValue()) {
					return null;
				}
				offset = (fsrContext.longValue() & 0x60) + offset;
			}
			addr = program.getAddressFactory().getAddressSpace("DATA").getAddress(offset);
			reg = program.getRegister(addr);
		}
		else {
			return null;
		}

		// Determine RefType
		String mnemonic = instr.getMnemonicString();
		RefType refType = RefType.READ;
		if ("CLRF".equals(mnemonic) || "MOVWF".equals(mnemonic)) {
			refType = RefType.WRITE;
		}
		else if (FREG_BIT_INSTRUCTIONS.contains(mnemonic)) {
			if ("BCF".equals(mnemonic) || "BSF".equals(mnemonic)) {
				refType = RefType.READ_WRITE;
			}
		}
		else if (instr.getNumOperands() == 2) {
			List<?> repObjs = instr.getDefaultOperandRepresentationList(1);
			if (repObjs.size() == 1 && DEST_FREG.equals(repObjs.get(0))) {
				refType = RefType.READ_WRITE;
			}
		}

		if (statusReg.equals(reg)) {
			addr = status0Reg.getAddress();
		}
		else if (fsrReg.equals(reg)) {
			addr = fsr0Reg.getAddress();
		}
		else if (pclReg.equals(reg)) {
			addr = pcl0Reg.getAddress();
		}

		if (addr.isMemoryAddress()) {
			refMgr.addMemoryReference(instr.getMinAddress(), addr, refType, SourceType.DEFAULT, 0);
		}

		return reg != null ? reg.getName() : null;
	}
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/Pic12Analyzer.java