about summary refs log tree commit diff
path: root/example/std_example.rs
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2019-07-29 12:50:20 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2019-07-29 12:50:20 +0200
commit63646b1956375836fac8610d04da5d2e8ce04559 (patch)
tree9962612a556edac13a4c55f2ee70bde7ecabbf3e /example/std_example.rs
parent48a6b581b557f1120e3cb59f2ce51b1b0384275a (diff)
downloadrust-63646b1956375836fac8610d04da5d2e8ce04559.tar.gz
rust-63646b1956375836fac8610d04da5d2e8ce04559.zip
Implement llvm.x86.avx2.pmovmskb llvm intrinsic
Diffstat (limited to 'example/std_example.rs')
-rw-r--r--example/std_example.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/example/std_example.rs b/example/std_example.rs
index 9da701d4469..e3b3edd86af 100644
--- a/example/std_example.rs
+++ b/example/std_example.rs
@@ -65,6 +65,8 @@ unsafe fn test_simd() {
     assert_eq!(std::mem::transmute::<_, [u16; 8]>(cmp_lt), [0, 0, 0, 0, 0, 0, 0, 0]);
 
     test_mm_slli_si128();
+    test_mm_movemask_epi8();
+    test_mm256_movemask_epi8();
 }
 
 #[target_feature(enable = "sse2")]
@@ -109,6 +111,31 @@ unsafe fn test_mm_slli_si128() {
     assert_eq_m128i(r, _mm_set1_epi8(0));
 }
 
+#[target_feature(enable = "sse2")]
+unsafe fn test_mm_movemask_epi8() {
+    use std::arch::x86_64::*;
+
+    #[rustfmt::skip]
+    let a = _mm_setr_epi8(
+        0b1000_0000u8 as i8, 0b0, 0b1000_0000u8 as i8, 0b01,
+        0b0101, 0b1111_0000u8 as i8, 0, 0,
+        0, 0, 0b1111_0000u8 as i8, 0b0101,
+        0b01, 0b1000_0000u8 as i8, 0b0, 0b1000_0000u8 as i8,
+    );
+    let r = _mm_movemask_epi8(a);
+    assert_eq!(r, 0b10100100_00100101);
+}
+
+#[target_feature(enable = "avx2")]
+unsafe fn test_mm256_movemask_epi8() {
+    use std::arch::x86_64::*;
+
+    let a = _mm256_set1_epi8(-1);
+    let r = _mm256_movemask_epi8(a);
+    let e = -1;
+    assert_eq!(r, e);
+}
+
 fn assert_eq_m128i(x: std::arch::x86_64::__m128i, y: std::arch::x86_64::__m128i) {
     unsafe {
         assert_eq!(std::mem::transmute::<_, [u8; 16]>(x), std::mem::transmute::<_, [u8; 16]>(x));