private static Register.Width join(Register.Width lhs, Register.Width rhs) {
		if(lhs == rhs) { 
			return lhs;
		} else if(lhs == Width.ScalarDouble) {
			return join(Width.Quad,rhs);
		} else if(lhs == Width.ScalarSingle) {
			return join(Width.Long,rhs);
		} else if(rhs == Width.ScalarDouble) {
			return join(lhs,Width.Quad);
		} else if(rhs == Width.ScalarSingle) {
			return join(lhs,Width.Long);
		}  
		
		throw new IllegalArgumentException("incomparable register widths: " + lhs + ", " + rhs);
	}