about summary refs log tree commit diff
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2015-08-10 17:46:02 -0700
committerHuon Wilson <dbau.pp+github@gmail.com>2015-08-17 14:41:39 -0700
commit627784b186e49648f63af0dc24cd912a7b53d56d (patch)
treef459a5a8e5c0520565fee3609ee07073e24033fd
parentf6275b760c8638985cef7c6ee0a694a1b0eff661 (diff)
downloadrust-627784b186e49648f63af0dc24cd912a7b53d56d.tar.gz
rust-627784b186e49648f63af0dc24cd912a7b53d56d.zip
Add most SSE4.1 intrinsics.
-rw-r--r--src/librustc_platform_intrinsics/x86.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/librustc_platform_intrinsics/x86.rs b/src/librustc_platform_intrinsics/x86.rs
index 2085342d11d..32a8674460d 100644
--- a/src/librustc_platform_intrinsics/x86.rs
+++ b/src/librustc_platform_intrinsics/x86.rs
@@ -79,6 +79,21 @@ pub fn find<'tcx>(_tcx: &ty::ctxt<'tcx>, name: &str) -> Option<Intrinsic> {
         "sign_epi16" => p!("ssse3.psign.w.128", (i16x8, i16x8) -> i16x8),
         "sign_epi32" => p!("ssse3.psign.d.128", (i32x4, i32x4) -> i32x4),
         "sign_epi8" => p!("ssse3.psign.b.128", (i8x16, i8x16) -> i8x16),
+
+        "max_epi32" => p!("sse41.pmaxsd", (i32x4, i32x4) -> i32x4),
+        "max_epi8" => p!("sse41.pmaxsb", (i8x16, i8x16) -> i8x16),
+        "max_epu16" => p!("sse41.pmaxuw", (i16x8, i16x8) -> i16x8),
+        "max_epu32" => p!("sse41.pmaxud", (i32x4, i32x4) -> i32x4),
+        "min_epi32" => p!("sse41.pminsd", (i32x4, i32x4) -> i32x4),
+        "min_epi8" => p!("sse41.pminsb", (i8x16, i8x16) -> i8x16),
+        "min_epu16" => p!("sse41.pminuw", (i16x8, i16x8) -> i16x8),
+        "min_epu32" => p!("sse41.pminud", (i32x4, i32x4) -> i32x4),
+        "minpos_epu16" => p!("sse41.phminposuw", (i16x8) -> i16x8),
+        "mul_epi32" => p!("sse41.muldq", (i32x4, i32x4) -> i64x2),
+        "packus_epi32" => p!("sse41.packusdw", (i32x4, i32x4) -> i16x8),
+        "testc_si128" => p!("sse41.ptestc", (i64x2, i64x2) -> i32),
+        "testnzc_si128" => p!("sse41.ptestnzc", (i64x2, i64x2) -> i32),
+        "testz_si128" => p!("sse41.ptestz", (i64x2, i64x2) -> i32),
         _ => return None
     })
 }