|
1 | 1 | #![feature(target_feature)]
|
2 | 2 |
|
3 |
| -extern crate stdsimd; |
4 |
| - |
5 |
| -use std::env; |
6 |
| -use stdsimd::simd as s; |
7 |
| -use stdsimd::vendor; |
8 |
| - |
9 |
| -#[inline(never)] |
10 |
| -#[target_feature = "+sse4.2"] |
11 |
| -fn index(needle: &str, haystack: &str) -> usize { |
12 |
| - assert!(needle.len() <= 16 && haystack.len() <= 16); |
13 |
| - |
14 |
| - let (needle_len, hay_len) = (needle.len(), haystack.len()); |
15 |
| - |
16 |
| - let mut needle = needle.to_string().into_bytes(); |
17 |
| - needle.resize(16, 0); |
18 |
| - let vneedle = vendor::__m128i::from(s::u8x16::load(&needle, 0)); |
19 |
| - |
20 |
| - let mut haystack = haystack.to_string().into_bytes(); |
21 |
| - haystack.resize(16, 0); |
22 |
| - let vhaystack = vendor::__m128i::from(s::u8x16::load(&haystack, 0)); |
23 |
| - |
24 |
| - vendor::_mm_cmpestri( |
25 |
| - vneedle, needle_len as i32, vhaystack, hay_len as i32, |
26 |
| - vendor::_SIDD_CMP_EQUAL_ORDERED) as usize |
| 3 | +#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| 4 | +mod example { |
| 5 | + |
| 6 | + extern crate stdsimd; |
| 7 | + |
| 8 | + use std::env; |
| 9 | + use self::stdsimd::simd as s; |
| 10 | + use self::stdsimd::vendor; |
| 11 | + |
| 12 | + #[inline(never)] |
| 13 | + #[target_feature = "+sse4.2"] |
| 14 | + fn index(needle: &str, haystack: &str) -> usize { |
| 15 | + assert!(needle.len() <= 16 && haystack.len() <= 16); |
| 16 | + |
| 17 | + let (needle_len, hay_len) = (needle.len(), haystack.len()); |
| 18 | + |
| 19 | + let mut needle = needle.to_string().into_bytes(); |
| 20 | + needle.resize(16, 0); |
| 21 | + let vneedle = vendor::__m128i::from(s::u8x16::load(&needle, 0)); |
| 22 | + |
| 23 | + let mut haystack = haystack.to_string().into_bytes(); |
| 24 | + haystack.resize(16, 0); |
| 25 | + let vhaystack = vendor::__m128i::from(s::u8x16::load(&haystack, 0)); |
| 26 | + |
| 27 | + vendor::_mm_cmpestri( |
| 28 | + vneedle, needle_len as i32, vhaystack, hay_len as i32, |
| 29 | + vendor::_SIDD_CMP_EQUAL_ORDERED) as usize |
| 30 | + } |
| 31 | + |
| 32 | + pub fn main() { |
| 33 | + // let x0: f64 = env::args().nth(1).unwrap().parse().unwrap(); |
| 34 | + // let x1: f64 = env::args().nth(2).unwrap().parse().unwrap(); |
| 35 | + // let x2: f64 = env::args().nth(3).unwrap().parse().unwrap(); |
| 36 | + // let x3: f64 = env::args().nth(4).unwrap().parse().unwrap(); |
| 37 | + // let y0: i32 = env::args().nth(5).unwrap().parse().unwrap(); |
| 38 | + // let y1: i32 = env::args().nth(6).unwrap().parse().unwrap(); |
| 39 | + // let y2: i32 = env::args().nth(7).unwrap().parse().unwrap(); |
| 40 | + // let y3: i32 = env::args().nth(8).unwrap().parse().unwrap(); |
| 41 | + |
| 42 | + // let a = s::f64x2::new(x0, x1); |
| 43 | + // let b = s::f64x2::new(x2, x3); |
| 44 | + // let r = s::_mm_cmplt_sd(a, b); |
| 45 | + // let r = foobar(a, b); |
| 46 | + |
| 47 | + |
| 48 | + let needle = env::args().nth(1).unwrap(); |
| 49 | + let haystack = env::args().nth(2).unwrap(); |
| 50 | + println!("{:?}", index(&needle, &haystack)); |
| 51 | + } |
27 | 52 | }
|
28 | 53 |
|
29 | 54 | fn main() {
|
30 |
| - // let x0: f64 = env::args().nth(1).unwrap().parse().unwrap(); |
31 |
| - // let x1: f64 = env::args().nth(2).unwrap().parse().unwrap(); |
32 |
| - // let x2: f64 = env::args().nth(3).unwrap().parse().unwrap(); |
33 |
| - // let x3: f64 = env::args().nth(4).unwrap().parse().unwrap(); |
34 |
| - // let y0: i32 = env::args().nth(5).unwrap().parse().unwrap(); |
35 |
| - // let y1: i32 = env::args().nth(6).unwrap().parse().unwrap(); |
36 |
| - // let y2: i32 = env::args().nth(7).unwrap().parse().unwrap(); |
37 |
| - // let y3: i32 = env::args().nth(8).unwrap().parse().unwrap(); |
38 |
| - |
39 |
| - // let a = s::f64x2::new(x0, x1); |
40 |
| - // let b = s::f64x2::new(x2, x3); |
41 |
| - // let r = s::_mm_cmplt_sd(a, b); |
42 |
| - // let r = foobar(a, b); |
43 |
| - |
44 |
| - |
45 |
| - let needle = env::args().nth(1).unwrap(); |
46 |
| - let haystack = env::args().nth(2).unwrap(); |
47 |
| - println!("{:?}", index(&needle, &haystack)); |
| 55 | + #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] |
| 56 | + example::main(); |
48 | 57 | }
|
0 commit comments