public static void encodeInstruction(Encoder encoder, Address addr, PcodeOp[] ops,
			int fallthruoffset, int paramshift, AddressFactory addrFactory) throws IOException {
		if ((ops.length == 1) && (ops[0].getOpcode() == PcodeOp.UNIMPLEMENTED)) {
			encoder.openElement(ELEM_UNIMPL);
			encoder.writeSignedInteger(ATTRIB_OFFSET, fallthruoffset);
			encoder.closeElement(ELEM_UNIMPL);
			return;
		}
		encoder.openElement(ELEM_INST);
		encoder.writeSignedInteger(ATTRIB_OFFSET, fallthruoffset);
		if (paramshift != 0) {
			encoder.writeSignedInteger(ATTRIB_PARAMSHIFT, paramshift);
		}
		AddressXML.encode(encoder, addr);
		for (PcodeOp op : ops) {
			op.encodeRaw(encoder, addrFactory);
		}
		encoder.closeElement(ELEM_INST);
	}
Encode a list of pcode, representing an entire Instruction, to the stream

@param encoder is the stream encoder
@param addr is the Address to associate with the Instruction
@param ops is the pcode ops
@param fallthruoffset number of bytes after instruction start that pcode
           flow falls into
@param paramshift special instructions for injection use
@param addrFactory is the address factory for recovering address space names
@throws IOException for errors in the underlying stream
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java