]> git.proxmox.com Git - rustc.git/blob - vendor/memchr/src/memmem/prefilter/x86/avx.rs
New upstream version 1.54.0+dfsg1
[rustc.git] / vendor / memchr / src / memmem / prefilter / x86 / avx.rs
1 use core::arch::x86_64::__m256i;
2
3 use crate::memmem::{
4 prefilter::{PrefilterFnTy, PrefilterState},
5 NeedleInfo,
6 };
7
8 // Check that the functions below satisfy the Prefilter function type.
9 const _: PrefilterFnTy = find;
10
11 /// An AVX2 accelerated candidate finder for single-substring search.
12 ///
13 /// # Safety
14 ///
15 /// Callers must ensure that the avx2 CPU feature is enabled in the current
16 /// environment.
17 #[target_feature(enable = "avx2")]
18 pub(crate) unsafe fn find(
19 prestate: &mut PrefilterState,
20 ninfo: &NeedleInfo,
21 haystack: &[u8],
22 needle: &[u8],
23 ) -> Option<usize> {
24 super::super::genericsimd::find::<__m256i>(
25 prestate,
26 ninfo,
27 haystack,
28 needle,
29 super::sse::find,
30 )
31 }
32
33 #[cfg(test)]
34 mod tests {
35 #[test]
36 #[cfg(not(miri))]
37 fn prefilter_permutations() {
38 use crate::memmem::prefilter::tests::PrefilterTest;
39 if !is_x86_feature_detected!("avx2") {
40 return;
41 }
42 // SAFETY: The safety of super::find only requires that the current
43 // CPU support AVX2, which we checked above.
44 unsafe { PrefilterTest::run_all_tests(super::find) };
45 }
46 }