mod scalar;
#[cfg(target_arch = "x86_64")]
mod simd;
pub use verify::verify_pattern;
mod verify {
use super::scalar::verify_pattern_scalar;
#[cfg(target_arch = "x86_64")]
use super::simd::{verify_pattern_avx2, verify_pattern_avx512};
use crate::memory_aobscan::pattern::Pattern;
#[inline]
pub fn verify_pattern(buffer: &[u8], offset: usize, pattern: &Pattern) -> bool {
#[cfg(target_arch = "x86_64")]
{
if pattern.bytes.len() >= 32 && std::is_x86_feature_detected!("avx512f") {
unsafe {
return verify_pattern_avx512(buffer, offset, pattern);
}
}
if pattern.bytes.len() >= 16 && std::is_x86_feature_detected!("avx2") {
unsafe {
return verify_pattern_avx2(buffer, offset, pattern);
}
}
}
verify_pattern_scalar(buffer, offset, pattern)
}
}