@Override
	public Pattern doAnd(Pattern b, int sa) {
		if (b.numDisjoint() > 0) {
			return b.doAnd(this, -sa);
		}
		if (b instanceof CombinePattern) {
			return b.doAnd(this, -sa);
		}
		if (b instanceof ContextPattern) {
			InstructionPattern newpat = (InstructionPattern) simplifyClone();
			if (sa < 0) {
				newpat.shiftInstruction(-sa);
			}
			return new CombinePattern((ContextPattern) b.simplifyClone(), newpat);
		}
		// b must be an InstructionPattern if it reaches here
		PatternBlock respattern;
		if (sa < 0) {
			PatternBlock a = (PatternBlock) maskvalue.clone();
			a.shift(-sa);
			respattern = a.andBlock(((InstructionPattern) b).maskvalue);
		}
		else {
			PatternBlock c = (PatternBlock) ((InstructionPattern) b).maskvalue.clone();
			c.shift(sa);
			respattern = maskvalue.andBlock(c);
		}
		return new InstructionPattern(respattern);
	}
Matches against the actual instruction bit stream
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/pattern/InstructionPattern.java