public DecodedStride decode() {
		AddrCtx at = start;
		while (true) {
			if (passage.firstOps.containsKey(at)) {
				return toStride();
			}

			StepResult result = stepAddrCtx(at);

			if (result == null) {
				return toStride();
			}

			Reachability reach = result.checkFallthroughAndAccumulate();
			if (reach == null) {
				return toStride();
			}

			AddrCtx next = result.next();
			if (at.equals(next)) {
				// Would happen because of inject without control flow
				ExitPcodeOp exitOp = ExitPcodeOp.exit(at);
				opsForStride.add(exitOp);
				passage.otherBranches.put(exitOp, new RExtBranch(exitOp, at, reach));
				return toStride();
			}
			at = next;

			switch (reach) {
				case WITHOUT_CTXMOD -> {
					continue;
				}
				case WITH_CTXMOD -> {
					// Looks like the without-control-flow case, but at has advanced
					ExitPcodeOp exitOp = ExitPcodeOp.exit(at);
					opsForStride.add(exitOp);
					passage.otherBranches.put(exitOp, new RExtBranch(exitOp, at, reach));
					return toStride();
				}
				case MAYBE_CTXMOD -> {
					ExitPcodeOp exitOp = ExitPcodeOp.cond(at);
					opsForStride.add(exitOp);
					passage.otherBranches.put(exitOp, new RExtBranch(exitOp, at, reach));
					continue;
				}
			}
		}

		/**
		 * NOTE: If we impose a max instruction count within the stride, be sure to add the
		 * "external branch" that falls-through to the next instruction outside the passage.
		 */
	}
Decode the stride.

@return the decoded stride
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/DecoderForOneStride.java