private Address backwardToCommon(Listing[] listings, Address start) {
		CodeUnitIterator iter = listings[0].getCodeUnits(start, false);
		while (iter.hasNext()) {
			boolean matches = true;
			CodeUnit cu = iter.next();
			if (cu instanceof Instruction) {
				Instruction checkInstr = (Instruction) cu;
				while (checkInstr != null && checkInstr.isInDelaySlot() && iter.hasNext()) {
					cu = iter.next();
					if (cu instanceof Instruction) {
						checkInstr = (Instruction) cu;
					}
					else {
						checkInstr = null;
					}
				}
			}
			Address addr = cu.getMinAddress();
			for (int i = 1; i < listings.length; i++) {
				CodeUnit checkCU = listings[i].getCodeUnitAt(addr);
				if (checkCU == null) {
					matches = false;
					break;
				}
				if (checkCU instanceof Instruction) {
					Instruction checkInstr = (Instruction) checkCU;
					if (checkInstr.isInDelaySlot()) {
						matches = false;
						break;
					}
				}
			}
			if (matches) {
				return addr;
			}
		}
		return null;
	}
Code units are compared between the indicated listings starting at the
indicated address. The listings are searched in reverse address order
until the address is found where all the listings have a code unit
with the same minimum address.
@param listings the program listings in the order LATEST, MY, ORIGINAL.
@param start the address to start at.
@return the common address where code units begin for all listings or null.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/CodeUnitMerger.java