@Override
	default JitType generateBinOpRunCode(JitCodeGenerator gen, T op, JitBlock block, JitType lType,
			JitType rType, MethodVisitor rv) {
		String mdesc = switch (lType) {
			case IntJitType lt -> switch (rType) {
				case IntJitType rt -> MDESC_$SHIFT_II;
				case LongJitType rt -> MDESC_$SHIFT_IJ;
				default -> throw new AssertionError();
			};
			case LongJitType lt -> switch (rType) {
				case IntJitType rt -> MDESC_$SHIFT_JI;
				case LongJitType rt -> MDESC_$SHIFT_JJ;
				default -> throw new AssertionError();
			};
			default -> throw new AssertionError();
		};
		rv.visitMethodInsn(INVOKESTATIC, NAME_JIT_COMPILED_PASSAGE, methodName(), mdesc, true);
		return lType.ext();
	}
{@inheritDoc}

<p>
This reduces the implementation to just the name of the method to invoke. This will select
the JVM signature of the method based on the p-code operand types.
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/ShiftIntBinOpGen.java