private void evaluateMatch(Match match, Program program, MemoryBlock block,
			PatternEvaluationStats matchStats) {
		Address blockStart = block.getStart();
		int alignment = program.getLanguage().getInstructionAlignment();
		Address matchStart = blockStart.add(match.getMatchStart());
		if (matchStart.getOffset() % alignment != 0) {
			return; //inconsistent with instruction alignment for language
		}
		long streamoffset = blockStart.getOffset();
		if (!match.checkPostRules(streamoffset)) {
			return;
		}
		Address matchEnd = matchStart.add(indexToSize.get(match.getSequenceIndex()) - 1);
		Address funcStart = blockStart.add(match.getMarkOffset());

		//see whether the pattern conflict with any existing context
		//perhaps this should be after?
		ContextRegisterFilter cRegFilter = sequenceToCRegFilter.get(match.getSequence());
		int totalBits = match.getSequence().getNumFixedBits();
		int postBits = match.getNumPostBits();
		int index = (totalBits - postBits) / BITS_PER_BYTE - 1;
		PatternMatchType type = getMatchType(program, funcStart, cRegFilter);
		PatternEvalRowObject rowObject =
			new PatternEvalRowObject(type, new AddressSet(matchStart, matchEnd),
				addSeparator(match.getHexString(), index), funcStart, postBits, totalBits);
		matchStats.addRowObject(rowObject);
	}
Evaluate a set of patterns
@param rows patterns to evaluate
@return statistics about the pattern matches
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ClipboardPanel.java