static JitDefOp binOp(PcodeOp op, JitOutVar out, JitVal l, JitVal r) {
		return switch (op.getOpcode()) {
			case PcodeOp.INT_EQUAL -> new JitIntEqualOp(op, out, l, r);
			case PcodeOp.INT_NOTEQUAL -> new JitIntNotEqualOp(op, out, l, r);
			case PcodeOp.INT_SLESS -> new JitIntSLessOp(op, out, l, r);
			case PcodeOp.INT_SLESSEQUAL -> new JitIntSLessEqualOp(op, out, l, r);
			case PcodeOp.INT_LESS -> new JitIntLessOp(op, out, l, r);
			case PcodeOp.INT_LESSEQUAL -> new JitIntLessEqualOp(op, out, l, r);
			case PcodeOp.INT_ADD -> new JitIntAddOp(op, out, l, r);
			case PcodeOp.INT_SUB -> new JitIntSubOp(op, out, l, r);
			case PcodeOp.INT_CARRY -> new JitIntCarryOp(op, out, l, r);
			case PcodeOp.INT_SCARRY -> new JitIntSCarryOp(op, out, l, r);
			case PcodeOp.INT_SBORROW -> new JitIntSBorrowOp(op, out, l, r);
			case PcodeOp.INT_XOR -> new JitIntXorOp(op, out, l, r);
			case PcodeOp.INT_AND -> new JitIntAndOp(op, out, l, r);
			case PcodeOp.INT_OR -> new JitIntOrOp(op, out, l, r);
			case PcodeOp.INT_LEFT -> new JitIntLeftOp(op, out, l, r);
			case PcodeOp.INT_RIGHT -> new JitIntRightOp(op, out, l, r);
			case PcodeOp.INT_SRIGHT -> new JitIntSRightOp(op, out, l, r);
			case PcodeOp.INT_MULT -> new JitIntMultOp(op, out, l, r);
			case PcodeOp.INT_DIV -> new JitIntDivOp(op, out, l, r);
			case PcodeOp.INT_SDIV -> new JitIntSDivOp(op, out, l, r);
			case PcodeOp.INT_REM -> new JitIntRemOp(op, out, l, r);
			case PcodeOp.INT_SREM -> new JitIntSRemOp(op, out, l, r);

			case PcodeOp.BOOL_XOR -> new JitBoolXorOp(op, out, l, r);
			case PcodeOp.BOOL_AND -> new JitBoolAndOp(op, out, l, r);
			case PcodeOp.BOOL_OR -> new JitBoolOrOp(op, out, l, r);

			case PcodeOp.FLOAT_EQUAL -> new JitFloatEqualOp(op, out, l, r);
			case PcodeOp.FLOAT_NOTEQUAL -> new JitFloatNotEqualOp(op, out, l, r);
			case PcodeOp.FLOAT_LESS -> new JitFloatLessOp(op, out, l, r);
			case PcodeOp.FLOAT_LESSEQUAL -> new JitFloatLessEqualOp(op, out, l, r);

			case PcodeOp.FLOAT_ADD -> new JitFloatAddOp(op, out, l, r);
			case PcodeOp.FLOAT_DIV -> new JitFloatDivOp(op, out, l, r);
			case PcodeOp.FLOAT_MULT -> new JitFloatMultOp(op, out, l, r);
			case PcodeOp.FLOAT_SUB -> new JitFloatSubOp(op, out, l, r);

			case PcodeOp.SUBPIECE -> new JitSubPieceOp(op, out, l,
				((JitConstVal) r).value().intValue());

			default -> throw new UnsupportedOperationException(
				"Unrecognized bin op: " + op.getMnemonic());
		};
	}
Create a use-def node for a binary p-coe op

@param op the p-code op
@param out the (pre-made) output operand use-def node
@param l the left input operand use-def node
@param r the right input operand use-def node
@return the use-def node
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitOp.java