@Override
	public void decode(Decoder decoder) throws DecoderException {
		opSeq = null;
		opcode = null;
		previousOpcode = null;
		previousOpSeq = null;
		int pos = 0;
		int el = decoder.openElement();
		hash = (int) decoder.readUnsignedInteger(ATTRIB_HASH);
		index = (int) decoder.readSignedInteger(ATTRIB_INDEX);
		blockSeq = AddressXML.decode(decoder);
		for (;;) {
			int subel = decoder.openElement();
			if (subel == 0) {
				break;
			}
			int opc = (int) decoder.readSignedInteger(ATTRIB_CODE);
			String currentOpcode = PcodeOp.getMnemonic(opc);
			SequenceNumber currentOpSeq = SequenceNumber.decode(decoder);
			decoder.closeElementSkipping(subel);
			if (pos == 0) {
				opSeq = currentOpSeq;
				opcode = currentOpcode;
			}
			else {
				previousOpSeq = currentOpSeq;
				previousOpcode = currentOpcode;
			}
			pos += 1;
		}
		decoder.closeElement(el);
	}
A feature rooted in a basic block.  There are two forms of a block feature.
Form 1 contains only local control-flow information about the basic block.
Form 2 is a feature that combines two operations that occur in sequence within the block.
This form incorporates info about the operations and data-flow info about their inputs.
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/signature/BlockSignature.java