]> git.proxmox.com Git - rustc.git/blob - vendor/memchr/src/memmem/prefilter/x86/sse.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / vendor / memchr / src / memmem / prefilter / x86 / sse.rs
1 use core::arch::x86_64::__m128i;
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 SSE2 accelerated candidate finder for single-substring search.
12 ///
13 /// # Safety
14 ///
15 /// Callers must ensure that the sse2 CPU feature is enabled in the current
16 /// environment. This feature should be enabled in all x86_64 targets.
17 #[target_feature(enable = "sse2")]
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::<__m128i>(
25 prestate,
26 ninfo,
27 haystack,
28 needle,
29 super::super::simple_memchr_fallback,
30 )
31 }
32
33 #[cfg(all(test, feature = "std"))]
34 mod tests {
35 #[test]
36 #[cfg(not(miri))]
37 fn prefilter_permutations() {
38 use crate::memmem::prefilter::tests::PrefilterTest;
39 // SAFETY: super::find is safe to call for all inputs on x86.
40 unsafe { PrefilterTest::run_all_tests(super::find) };
41 }
42 }