public Object findInternalFunction(Location location, String name,
			VectorSTL<ExprTree> operands) {
		ExprTree r = null;
		ExprTree s = null;
		if (operands.size() > 0) {
			r = operands.get(0);
		}
		if (operands.size() > 1) {
			s = operands.get(1);
		}

		if ("zext".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_INT_ZEXT, r);
		}
		if ("carry".equals(name) && hasOperands(2, operands, location, name)) {
			return createOp(location, OpCode.CPUI_INT_CARRY, r, s);
		}
		if ("sext".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_INT_SEXT, r);
		}
		if ("scarry".equals(name) && hasOperands(2, operands, location, name)) {
			return createOp(location, OpCode.CPUI_INT_SCARRY, r, s);
		}
		if ("sborrow".equals(name) && hasOperands(2, operands, location, name)) {
			return createOp(location, OpCode.CPUI_INT_SBORROW, r, s);
		}
		if ("abs".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_ABS, r);
		}
		if ("nan".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_NAN, r);
		}
		if ("sqrt".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_SQRT, r);
		}
		if ("ceil".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_CEIL, r);
		}
		if ("floor".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_FLOOR, r);
		}
		if ("round".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_ROUND, r);
		}
		if ("int2float".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_INT2FLOAT, r);
		}
		if ("float2float".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_FLOAT2FLOAT, r);
		}
		if ("trunc".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_FLOAT_TRUNC, r);
		}
		if ("delayslot".equals(name) && hasOperands(1, operands, location, name)) {
			return createOpConst(location, OpCode.CPUI_INDIRECT, r.outvn.getOffset().getReal());
		}
		if ("cpool".equals(name)) {
			if (operands.size() >= 2) {
				return createVariadic(location, OpCode.CPUI_CPOOLREF, operands);
			}
			reportError(location, name + "() expects at least two arguments");
		}
		if ("newobject".equals(name)) {
			if (operands.size() >= 1) {
				return createVariadic(location, OpCode.CPUI_NEW, operands);
			}
			reportError(location, name + "() expects at least one argument");
		}
		if ("popcount".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_POPCOUNT, r);
		}
		if ("lzcount".equals(name) && hasOperands(1, operands, location, name)) {
			return createOp(location, OpCode.CPUI_LZCOUNT, r);
		}

		return null;
	}
EXTREMELY IMPORTANT: keep this up to date with isInternalFunction below!!! Lookup the given
identifier as part of parsing p-code with functional syntax. Build the resulting p-code
expression object from the parsed operand expressions.

@param location identifies the file/line where the p-code is parsed from
@param name is the given functional identifier
@param operands is the ordered list of operand expressions
@return the new expression (ExprTree) object
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/PcodeCompile.java