public ValueLocation intOr(ValueLocation that) {
		if (this.isEmpty()) {
			return that;
		}
		if (that.isEmpty()) {
			return this;
		}
		ListIterator<Varnode> itA = this.nodes.listIterator(this.nodeCount());
		ListIterator<Varnode> itB = that.nodes.listIterator(that.nodeCount());
		Varnode[] result = new Varnode[Math.max(this.nodeCount(), that.nodeCount())];
		int i = result.length;
		while (itA.hasPrevious() && itB.hasPrevious()) {
			Varnode vnA = itA.previous();
			Varnode vnB = itB.previous();
			if (vnA.getSize() != vnB.getSize()) {
				return null;
			}
			if (isZero(vnA)) {
				result[--i] = vnB;
			}
			else if (isZero(vnB)) {
				result[--i] = vnA;
			}
		}
		while (itA.hasPrevious()) {
			result[--i] = itA.previous();
		}
		while (itB.hasPrevious()) {
			result[--i] = itB.previous();
		}
		return new ValueLocation(result);
	}
Apply a {@link PcodeOp#INT_OR} operator

<p>
There is a very restrictive set of constraints for which this yields a non-null location. If
either this or that is empty, the other is returned. Otherwise, the varnodes are arranged in
pairs by taking one from each storage starting at the right, or least-significant varnode.
Each pair must match in length, and one of the pair must be a constant zero. The non-zero
varnode is taken. The unpaired varnodes to the left, if any, are all taken. If any pair does
not match in length, or if neither is zero, the resulting location is null. This logic is to
ensure location information is accrued during concatenation.

@param that the other location
@return the location
Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/exec/ValueLocation.java