public void fillinZero(OpTpl op, VectorSTL<OpTpl> ops) { // Try to get rid of
		// zero size varnodes in
		// op
		// Right now this is written assuming operands for the constructor are
		// are built before any other pcode in the constructor is generated

//        entry("fillinZero", op, ops);
		int inputsize, i;

		switch (op.getOpcode()) {
			case CPUI_COPY: // Instructions where all inputs and output are same
				// size
			case CPUI_INT_ADD:
			case CPUI_INT_SUB:
			case CPUI_INT_2COMP:
			case CPUI_INT_NEGATE:
			case CPUI_INT_XOR:
			case CPUI_INT_AND:
			case CPUI_INT_OR:
			case CPUI_INT_MULT:
			case CPUI_INT_DIV:
			case CPUI_INT_SDIV:
			case CPUI_INT_REM:
			case CPUI_INT_SREM:
			case CPUI_FLOAT_ADD:
			case CPUI_FLOAT_DIV:
			case CPUI_FLOAT_MULT:
			case CPUI_FLOAT_SUB:
			case CPUI_FLOAT_NEG:
			case CPUI_FLOAT_ABS:
			case CPUI_FLOAT_SQRT:
			case CPUI_FLOAT_CEIL:
			case CPUI_FLOAT_FLOOR:
			case CPUI_FLOAT_ROUND:
				if ((op.getOut() != null) && (op.getOut().isZeroSize())) {
					matchSize(-1, op, false, ops);
				}
				inputsize = op.numInput();
				for (i = 0; i < inputsize; ++i) {
					if (op.getIn(i).isZeroSize()) {
						matchSize(i, op, false, ops);
					}
				}
				break;
			case CPUI_INT_EQUAL: // Instructions with bool output
			case CPUI_INT_NOTEQUAL:
			case CPUI_INT_SLESS:
			case CPUI_INT_SLESSEQUAL:
			case CPUI_INT_LESS:
			case CPUI_INT_LESSEQUAL:
			case CPUI_INT_CARRY:
			case CPUI_INT_SCARRY:
			case CPUI_INT_SBORROW:
			case CPUI_FLOAT_EQUAL:
			case CPUI_FLOAT_NOTEQUAL:
			case CPUI_FLOAT_LESS:
			case CPUI_FLOAT_LESSEQUAL:
			case CPUI_FLOAT_NAN:
			case CPUI_BOOL_NEGATE:
			case CPUI_BOOL_XOR:
			case CPUI_BOOL_AND:
			case CPUI_BOOL_OR:
				if (op.getOut().isZeroSize()) {
					force_size(op.getOut(), new ConstTpl(ConstTpl.const_type.real, 1), ops);
				}
				inputsize = op.numInput();
				for (i = 0; i < inputsize; ++i) {
					if (op.getIn(i).isZeroSize()) {
						matchSize(i, op, true, ops);
					}
				}
				break;
			// The shift amount does not necessarily have to be the same size
			// But if no size is specified, assume it is the same size
			case CPUI_INT_LEFT:
			case CPUI_INT_RIGHT:
			case CPUI_INT_SRIGHT:
				if (op.getOut().isZeroSize()) {
					if (!op.getIn(0).isZeroSize()) {
						force_size(op.getOut(), op.getIn(0).getSize(), ops);
					}
				}
				else if (op.getIn(0).isZeroSize()) {
					force_size(op.getIn(0), op.getOut().getSize(), ops);
				}
				// fallthru to subpiece constant check
			case CPUI_SUBPIECE:
				if (op.getIn(1).isZeroSize()) {
					force_size(op.getIn(1), new ConstTpl(ConstTpl.const_type.real, 4), ops);
				}
				break;
			case CPUI_CPOOLREF:
				if (op.getOut().isZeroSize() && (!op.getIn(0).isZeroSize())) {
					force_size(op.getOut(), op.getIn(0).getSize(), ops);
				}
				if (op.getIn(0).isZeroSize() && (!op.getOut().isZeroSize())) {
					force_size(op.getIn(0), op.getOut().getSize(), ops);
				}
				for (i = 1; i < op.numInput(); ++i) {
					force_size(op.getIn(i), new ConstTpl(ConstTpl.const_type.real, 8), ops);
				}
			default:
				break;
		}
	}
Handle a sleigh 'macro' invocation, returning the resulting p-code op templates (OpTpl)

@param location is the file/line where the macro is invoked
@param sym MacroSymbol is the macro symbol
@param param is the parsed list of operand expressions
@return a list of p-code op templates
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java