@Override
	public Pattern doAnd(Pattern b, int sa) {
		if (b.numDisjoint() != 0) {
			return b.doAnd(this, -sa);
		}

		CombinePattern tmp;
		if (b instanceof CombinePattern) {
			ContextPattern c = (ContextPattern) context.doAnd(((CombinePattern) b).context, 0);
			InstructionPattern i = (InstructionPattern) instr.doAnd(((CombinePattern) b).instr, sa);
			tmp = new CombinePattern(c, i);
		}
		else {
			if (b instanceof InstructionPattern) {
				InstructionPattern i = (InstructionPattern) instr.doAnd(b, sa);
				tmp = new CombinePattern((ContextPattern) context.simplifyClone(), i);
			}
			else {		// Must be a ContextPattern
				ContextPattern c = (ContextPattern) context.doAnd(b, 0);
				InstructionPattern newpat = (InstructionPattern) instr.simplifyClone();
				if (sa < 0) {
					newpat.shiftInstruction(-sa);
				}
				tmp = new CombinePattern(c, newpat);
			}
		}
		return tmp;
	}
A pattern that has both an instruction part and non-instruction part
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/CombinePattern.java