From fa240f24774f84ab335d80e7d016cea33835e3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Oliveira?= Date: Fri, 3 Nov 2017 14:45:50 +0000 Subject: [PATCH] Add commented implementation of _mm_cvtepi8_epi64 --- library/stdarch/src/x86/sse41.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/library/stdarch/src/x86/sse41.rs b/library/stdarch/src/x86/sse41.rs index 8ef2afffe81f..6433cd35f4a1 100644 --- a/library/stdarch/src/x86/sse41.rs +++ b/library/stdarch/src/x86/sse41.rs @@ -4,7 +4,7 @@ use std::mem; #[cfg(test)] use stdsimd_test::assert_instr; -use simd_llvm::{simd_cast, simd_shuffle4, simd_shuffle8}; +use simd_llvm::{simd_cast, simd_shuffle2, simd_shuffle4, simd_shuffle8}; use v128::*; @@ -261,6 +261,7 @@ pub unsafe fn _mm_cmpeq_epi64(a: i64x2, b: i64x2) -> i64x2 { } /// Sign extend packed 8-bit integers in `a` to packed 16-bit integers +#[inline(always)] #[target_feature = "+sse4.1"] #[cfg_attr(test, assert_instr(pmovsxbw))] pub unsafe fn _mm_cvtepi8_epi16(a: i8x16) -> i16x8 { @@ -268,6 +269,7 @@ pub unsafe fn _mm_cvtepi8_epi16(a: i8x16) -> i16x8 { } /// Sign extend packed 8-bit integers in `a` to packed 32-bit integers +#[inline(always)] #[target_feature = "+sse4.1"] #[cfg_attr(test, assert_instr(pmovsxbd))] pub unsafe fn _mm_cvtepi8_epi32(a: i8x16) -> i32x4 { @@ -275,6 +277,16 @@ pub unsafe fn _mm_cvtepi8_epi32(a: i8x16) -> i32x4 { simd_shuffle4(cast, cast, [0, 1, 2, 3]) } +/// Sign extend packed 8-bit integers in the low 8 bytes of `a` to packed 64-bit integers +/* +#[inline(always)] +#[target_feature = "+sse4.1"] +#[cfg_attr(test, assert_instr(pmovsxbq))] +pub unsafe fn _mm_cvtepi8_epi64(a: i8x16) -> i64x2 { + simd_cast::<::v16::i8x2, _>(simd_shuffle2(a, a, [0, 1])) +} +*/ + /// Returns the dot product of two f64x2 vectors. /// /// `imm8[1:0]` is the broadcast mask, and `imm8[5:4]` is the condition mask. @@ -799,6 +811,20 @@ mod tests { assert_eq!(r, e); } + /* + #[simd_test = "sse4.1"] + unsafe fn _mm_cvtepi8_epi64() { + let a = i8x16::splat(10); + let r = sse41::_mm_cvtepi8_epi64(a); + let e = i64x2::splat(10); + assert_eq!(r, e); + let a = i8x16::splat(-10); + let r = sse41::_mm_cvtepi8_epi64(a); + let e = i64x2::splat(-10); + assert_eq!(r, e); + } + */ + #[simd_test = "sse4.1"] unsafe fn _mm_dp_pd() { let a = f64x2::new(2.0, 3.0);