Skip to content

Commit 82e544c

Browse files
committed
progress
1 parent 1157558 commit 82e544c

File tree

3 files changed

+33
-11
lines changed

3 files changed

+33
-11
lines changed

examples/play.rs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,47 @@
1+
#![feature(target_feature)]
2+
13
extern crate stdsimd;
24

35
use std::env;
46
use stdsimd as s;
57

68
#[inline(never)]
7-
fn foobar(a: s::f64x2, b: s::f64x2) -> bool {
8-
s::_mm_ucomieq_sd(a, b)
9+
#[target_feature = "+sse4.2"]
10+
fn index(needle: &str, haystack: &str) -> usize {
11+
assert!(needle.len() <= 16 && haystack.len() <= 16);
12+
13+
let (needle_len, hay_len) = (needle.len(), haystack.len());
14+
15+
let mut needle = needle.to_string().into_bytes();
16+
needle.resize(16, 0);
17+
let vneedle = s::__m128i::from(s::u8x16::load(&needle, 0));
18+
19+
let mut haystack = haystack.to_string().into_bytes();
20+
haystack.resize(16, 0);
21+
let vhaystack = s::__m128i::from(s::u8x16::load(&haystack, 0));
22+
23+
s::_mm_cmpestri(
24+
vneedle, needle_len as i32, vhaystack, hay_len as i32,
25+
s::_SIDD_CMP_EQUAL_ORDERED) as usize
926
}
1027

1128
fn main() {
12-
let x0: f64 = env::args().nth(1).unwrap().parse().unwrap();
13-
let x1: f64 = env::args().nth(2).unwrap().parse().unwrap();
14-
let x2: f64 = env::args().nth(3).unwrap().parse().unwrap();
15-
let x3: f64 = env::args().nth(4).unwrap().parse().unwrap();
29+
// let x0: f64 = env::args().nth(1).unwrap().parse().unwrap();
30+
// let x1: f64 = env::args().nth(2).unwrap().parse().unwrap();
31+
// let x2: f64 = env::args().nth(3).unwrap().parse().unwrap();
32+
// let x3: f64 = env::args().nth(4).unwrap().parse().unwrap();
1633
// let y0: i32 = env::args().nth(5).unwrap().parse().unwrap();
1734
// let y1: i32 = env::args().nth(6).unwrap().parse().unwrap();
1835
// let y2: i32 = env::args().nth(7).unwrap().parse().unwrap();
1936
// let y3: i32 = env::args().nth(8).unwrap().parse().unwrap();
2037

21-
let a = s::f64x2::new(x0, x1);
22-
let b = s::f64x2::new(x2, x3);
38+
// let a = s::f64x2::new(x0, x1);
39+
// let b = s::f64x2::new(x2, x3);
2340
// let r = s::_mm_cmplt_sd(a, b);
24-
let r = foobar(a, b);
25-
println!("{:?}", r);
41+
// let r = foobar(a, b);
42+
43+
44+
let needle = env::args().nth(1).unwrap();
45+
let haystack = env::args().nth(2).unwrap();
46+
println!("{:?}", index(&needle, &haystack));
2647
}

src/x86/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// pub use self::sse::*;
22
pub use self::sse2::*;
33
pub use self::ssse3::*;
4+
pub use self::sse42::*;
45

56
#[allow(non_camel_case_types)]
67
pub type __m128i = ::v128::i8x16;

src/x86/sse42.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ mod tests {
319319
let vb = __m128i::from(u8x16::load(b, 0));
320320
let i = sse42::_mm_cmpestri(
321321
va, 3, vb, 6,
322-
sse42::_SIDD_CMP_EQUAL_ORDERED | sse42::_SIDD_MOST_SIGNIFICANT);
322+
sse42::_SIDD_CMP_EQUAL_ORDERED);
323323
assert_eq!(3, i);
324324
}
325325
}

0 commit comments

Comments
 (0)