public Varnode or(Varnode val1, Varnode val2, ContextEvaluator evaluator) {
		if (val1 == null || val2 == null) {
			return null;
		}
		if (val1.equals(val2)) {
			return val1;
		}

		if (isConstant(val1) || val1.isAddress()) {
			Varnode swap = val1;
			val1 = val2;
			val2 = swap;
		}
		int spaceID = val1.getSpace();
		Long val2Const = getConstant(val2, null);
		if (val2Const == null) {
			return null;
		}
		// got a constant from val2, (value | 0) == value, so just return value
		if (val2Const == 0) {
			if (!isSuspectConstant(val2)) {
				return val1;
			}
			spaceID = val2.getSpace();
		}
		Long val1Const = getConstant(val1, evaluator);
		if (val1Const == null) {
			return null;
		}
		long lresult = val1Const | val2Const;
		return createVarnode(lresult, spaceID, val1.getSize());
	}
Add two varnodes together to get a new value
This could create a new space and return a varnode pointed into that space

@param val1 first value
@param val2 second value
@return varnode that could be a constant, or an offset into a space, or null
Ghidra/Features/Base/src/main/java/ghidra/program/util/VarnodeContext.java