private List<Register> getTransitionRegisters(ProgramContext context, Function function,
			Address currAddr, Address prevAddr) {
		List<Register> transitionRegisters = new ArrayList<>();
		if (function != null) {
			return transitionRegisters; // if at function entry, don't show transitions since
			// the function header already shows register values.
		}
		Register[] registers = context.getRegistersWithValues();
		for (Register register : registers) {
			BigInteger currentValue = context.getValue(register, currAddr, false);
			BigInteger previousValue =
				prevAddr == null ? null : context.getValue(register, prevAddr, false);

			boolean addRegister = !isEqual(currentValue, previousValue);
			if (addRegister && register.isProcessorContext()) {
				// only add context registers if that option is enabled
				addRegister = showContextRegisters;
			}

			if (addRegister) {
				transitionRegisters.add(register);
			}
		}

		if (transitionRegisters.size() > 1) {
			List<Register> dedupedRegisters = new ArrayList<>();
			for (Register register : transitionRegisters) {
				Register parent = register.getParentRegister();
				if (parent == null || !transitionRegisters.contains(parent)) {
					dedupedRegisters.add(register);
				}
			}
			return dedupedRegisters;
		}
		return transitionRegisters;
	}
Returns the FactoryField for the given object at index index.
@param varWidth the amount of variable width spacing for any fields
before this one.
@param proxy the object whose properties should be displayed.
Ghidra/Features/Base/src/main/java/ghidra/app/util/viewer/field/RegisterTransitionFieldFactory.java