public boolean hasEntryPrototype(AddrCtx pcCtx) {
		/**
		 * TODO: Investigate ignoring synchronization and instead catching the CME. This would be to
		 * avoid locking on every instruction decode. If we thing there's no an entry, and there
		 * turns out we just won a race, it's little loss.
		 * 
		 * I don't think in the grand scheme of things, this is the most expensive operation of the
		 * translation. Nevertheless, it'll be hit a lot, so worth investigating.
		 */
		synchronized (codeCache) {
			CompletableFuture<EntryPointPrototype> proto = codeCache.get(pcCtx);
			return proto != null && proto.isDone();
		}
	}
Check if the emulator already has translated a given entry point.

<p>
This is used by the decoder to detect if it should end a stride before reaching its natural
end (i.e., a non-fall-through instruction.) This was a design decision to reduce
re-translation of the same machine code. Terminating the stride will cause execution to exit
the translated passage, but it will then immediately enter the existing translated passage.

@param pcCtx the program counter and contextreg value to check
@return true if the emulator has a translation which can be entered at the given pcCtx.
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitPcodeEmulator.java