void mergeProgramContext(AddressSetView p1MergeSet, ProgramMergeFilter filter,
			TaskMonitor monitor) throws CancelledException {

		monitor.setMessage("Applying Program Context...");
		if (filter.getFilter(ProgramMergeFilter.PROGRAM_CONTEXT) == ProgramMergeFilter.IGNORE) {
			return;
		}

		ProgramDiffFilter programContextDiffFilter =
			new ProgramDiffFilter(ProgramDiffFilter.PROGRAM_CONTEXT_DIFFS);
		AddressSet diffAddrSet =
			p1MergeSet.intersect(programDiff.getDifferences(programContextDiffFilter, monitor));
		AddressSet diffAddrSet2 = DiffUtility.getCompatibleAddressSet(diffAddrSet, program2);
		if (diffAddrSet2.isEmpty()) {
			return;
		}
		merger.mergeProgramContext(diffAddrSet2, monitor);
	}
<CODE>mergeProgramContext</CODE> merges all program context register values
(as indicated) in the specified address set from the second program. 
It merges them into the merge program.

@param p1MergeSet the addresses to be merged.
The addresses in this set should be derived from program1.
@param filter the current merge filter settings indicating what types
of differences should be merged.
@param monitor the task monitor for notifying the user of this merge's
progress.

@throws CancelledException if user cancels via the monitor.
Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMergeManager.java