protected FormatResult formatOpTemplate(A appender, OpTpl op) {
		int opcode = op.getOpcode();
		if (PcodeOp.PTRADD == opcode) {
			appender.appendLineLabel(op.getInput()[0].getOffset().getReal());
			return FormatResult.CONTINUE;
		}

		appender.appendIndent();

		if (opcode >= PcodeOp.PCODE_MAX) {
			throw new RuntimeException("Unsupported opcode encountered: " + opcode);
		}
		VarnodeTpl output = op.getOutput();
		if (output != null) {
			formatOutput(appender, opcode, output);
			appender.appendCharacter('=');
		}
		appender.appendMnemonic(opcode);
		VarnodeTpl[] inputs = op.getInput();
		for (int i = 0; i < inputs.length; i++) {
			if (i > 0) {
				appender.appendCharacter(',');
			}
			appender.appendCharacter(' ');
			if (i == 0) {
				if (!isFormatRaw()) {
					if (opcode == PcodeOp.LOAD || opcode == PcodeOp.STORE) {
						formatMemoryInput(appender, inputs[0], inputs[1]);
						++i;
						continue;
					}
					if (opcode == PcodeOp.CALLOTHER) {
						formatCallOtherName(appender, inputs[0]);
						continue;
					}
				}
				if (opcode == PcodeOp.BRANCH || opcode == PcodeOp.CBRANCH) {
					if (formatLabelInput(appender, inputs[i])) {
						continue;
					}
				}
			}
			formatInput(appender, opcode, i, inputs[i]);
		}
		return FormatResult.CONTINUE;
	}
Format a single op template

@param appender the appender to receive the formatted text
@param op the template to format
@return instructions to continue or terminate. The loop in
        {@link #formatTemplates(Language, List)} is terminated if this method returns
        {@link FormatResult#TERMINATE}.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/pcode/AbstractPcodeFormatter.java