mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-15 20:45:45 +03:00
Make sse2 functions const
This commit is contained in:
@@ -76,7 +76,8 @@ pub fn _mm_mfence() {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_add_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_add_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_add(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -87,7 +88,8 @@ pub fn _mm_add_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_add_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_add_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_add(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -98,7 +100,8 @@ pub fn _mm_add_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_add_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_add_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_add(a.as_i32x4(), b.as_i32x4())) }
|
||||
}
|
||||
|
||||
@@ -109,7 +112,8 @@ pub fn _mm_add_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_add_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_add_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_add(a.as_i64x2(), b.as_i64x2())) }
|
||||
}
|
||||
|
||||
@@ -120,7 +124,8 @@ pub fn _mm_add_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddsb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_adds_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_adds_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_add(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -131,7 +136,8 @@ pub fn _mm_adds_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddsw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_adds_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_adds_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_add(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -142,7 +148,8 @@ pub fn _mm_adds_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddusb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_adds_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_adds_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_add(a.as_u8x16(), b.as_u8x16())) }
|
||||
}
|
||||
|
||||
@@ -153,7 +160,8 @@ pub fn _mm_adds_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(paddusw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_adds_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_adds_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_add(a.as_u16x8(), b.as_u16x8())) }
|
||||
}
|
||||
|
||||
@@ -164,7 +172,8 @@ pub fn _mm_adds_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pavgb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_avg_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_avg_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let a = simd_cast::<_, u16x16>(a.as_u8x16());
|
||||
let b = simd_cast::<_, u16x16>(b.as_u8x16());
|
||||
@@ -180,7 +189,8 @@ pub fn _mm_avg_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pavgw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_avg_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_avg_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let a = simd_cast::<_, u32x8>(a.as_u16x8());
|
||||
let b = simd_cast::<_, u32x8>(b.as_u16x8());
|
||||
@@ -200,7 +210,8 @@ pub fn _mm_avg_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmaddwd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_madd_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_madd_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let r: i32x8 = simd_mul(simd_cast(a.as_i16x8()), simd_cast(b.as_i16x8()));
|
||||
let even: i32x4 = simd_shuffle!(r, r, [0, 2, 4, 6]);
|
||||
@@ -217,7 +228,8 @@ pub fn _mm_madd_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmaxsw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_max_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_max_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_imax(a.as_i16x8(), b.as_i16x8()).as_m128i() }
|
||||
}
|
||||
|
||||
@@ -229,7 +241,8 @@ pub fn _mm_max_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmaxub))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_max_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_max_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_imax(a.as_u8x16(), b.as_u8x16()).as_m128i() }
|
||||
}
|
||||
|
||||
@@ -241,7 +254,8 @@ pub fn _mm_max_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pminsw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_min_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_min_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_imin(a.as_i16x8(), b.as_i16x8()).as_m128i() }
|
||||
}
|
||||
|
||||
@@ -253,7 +267,8 @@ pub fn _mm_min_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pminub))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_min_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_min_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_imin(a.as_u8x16(), b.as_u8x16()).as_m128i() }
|
||||
}
|
||||
|
||||
@@ -267,7 +282,8 @@ pub fn _mm_min_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmulhw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_mulhi_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_mulhi_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let a = simd_cast::<_, i32x8>(a.as_i16x8());
|
||||
let b = simd_cast::<_, i32x8>(b.as_i16x8());
|
||||
@@ -286,7 +302,8 @@ pub fn _mm_mulhi_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmulhuw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_mulhi_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_mulhi_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let a = simd_cast::<_, u32x8>(a.as_u16x8());
|
||||
let b = simd_cast::<_, u32x8>(b.as_u16x8());
|
||||
@@ -305,7 +322,8 @@ pub fn _mm_mulhi_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmullw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_mullo_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_mullo_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_mul(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -319,11 +337,12 @@ pub fn _mm_mullo_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmuludq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_mul_epu32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_mul_epu32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let a = a.as_u64x2();
|
||||
let b = b.as_u64x2();
|
||||
let mask = u64x2::splat(u32::MAX.into());
|
||||
let mask = u64x2::splat(u32::MAX as u64);
|
||||
transmute(simd_mul(simd_and(a, mask), simd_and(b, mask)))
|
||||
}
|
||||
}
|
||||
@@ -351,7 +370,8 @@ pub fn _mm_sad_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_sub_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_sub_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_sub(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -362,7 +382,8 @@ pub fn _mm_sub_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_sub_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_sub_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_sub(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -373,7 +394,8 @@ pub fn _mm_sub_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_sub_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_sub_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_sub(a.as_i32x4(), b.as_i32x4())) }
|
||||
}
|
||||
|
||||
@@ -384,7 +406,8 @@ pub fn _mm_sub_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_sub_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_sub_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_sub(a.as_i64x2(), b.as_i64x2())) }
|
||||
}
|
||||
|
||||
@@ -396,7 +419,8 @@ pub fn _mm_sub_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubsb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_subs_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_subs_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_sub(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -408,7 +432,8 @@ pub fn _mm_subs_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubsw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_subs_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_subs_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_sub(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -420,7 +445,8 @@ pub fn _mm_subs_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubusb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_subs_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_subs_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_sub(a.as_u8x16(), b.as_u8x16())) }
|
||||
}
|
||||
|
||||
@@ -432,7 +458,8 @@ pub fn _mm_subs_epu8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(psubusw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_subs_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_subs_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute(simd_saturating_sub(a.as_u16x8(), b.as_u16x8())) }
|
||||
}
|
||||
|
||||
@@ -444,7 +471,8 @@ pub fn _mm_subs_epu16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(pslldq, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_slli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_slli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe { _mm_slli_si128_impl::<IMM8>(a) }
|
||||
}
|
||||
@@ -453,7 +481,8 @@ pub fn _mm_slli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
/// `_mm_slli_si128` intrinsic into a compile-time constant.
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
unsafe fn _mm_slli_si128_impl<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
const unsafe fn _mm_slli_si128_impl<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
const fn mask(shift: i32, i: u32) -> u32 {
|
||||
let shift = shift as u32 & 0xff;
|
||||
if shift > 15 { i } else { 16 - shift + i }
|
||||
@@ -490,7 +519,8 @@ const fn mask(shift: i32, i: u32) -> u32 {
|
||||
#[cfg_attr(test, assert_instr(pslldq, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_bslli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_bslli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
_mm_slli_si128_impl::<IMM8>(a)
|
||||
@@ -505,7 +535,8 @@ pub fn _mm_bslli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psrldq, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_bsrli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_bsrli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
_mm_srli_si128_impl::<IMM8>(a)
|
||||
@@ -520,7 +551,8 @@ pub fn _mm_bsrli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psllw, IMM8 = 7))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_slli_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_slli_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
if IMM8 >= 16 {
|
||||
@@ -551,7 +583,8 @@ pub fn _mm_sll_epi16(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(pslld, IMM8 = 7))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_slli_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_slli_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
if IMM8 >= 32 {
|
||||
@@ -582,7 +615,8 @@ pub fn _mm_sll_epi32(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psllq, IMM8 = 7))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_slli_epi64<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_slli_epi64<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
if IMM8 >= 64 {
|
||||
@@ -614,7 +648,8 @@ pub fn _mm_sll_epi64(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psraw, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_srai_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_srai_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe { transmute(simd_shr(a.as_i16x8(), i16x8::splat(IMM8.min(15) as i16))) }
|
||||
}
|
||||
@@ -640,7 +675,8 @@ pub fn _mm_sra_epi16(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psrad, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_srai_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_srai_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe { transmute(simd_shr(a.as_i32x4(), i32x4::splat(IMM8.min(31)))) }
|
||||
}
|
||||
@@ -665,7 +701,8 @@ pub fn _mm_sra_epi32(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psrldq, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_srli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_srli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe { _mm_srli_si128_impl::<IMM8>(a) }
|
||||
}
|
||||
@@ -674,7 +711,8 @@ pub fn _mm_srli_si128<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
/// `_mm_srli_si128` intrinsic into a compile-time constant.
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
unsafe fn _mm_srli_si128_impl<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
const unsafe fn _mm_srli_si128_impl<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
const fn mask(shift: i32, i: u32) -> u32 {
|
||||
if (shift as u32) > 15 {
|
||||
i + 16
|
||||
@@ -716,7 +754,8 @@ const fn mask(shift: i32, i: u32) -> u32 {
|
||||
#[cfg_attr(test, assert_instr(psrlw, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_srli_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_srli_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
if IMM8 >= 16 {
|
||||
@@ -748,7 +787,8 @@ pub fn _mm_srl_epi16(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psrld, IMM8 = 8))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_srli_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_srli_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
if IMM8 >= 32 {
|
||||
@@ -780,7 +820,8 @@ pub fn _mm_srl_epi32(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(psrlq, IMM8 = 1))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_srli_epi64<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_srli_epi64<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
if IMM8 >= 64 {
|
||||
@@ -811,7 +852,8 @@ pub fn _mm_srl_epi64(a: __m128i, count: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(andps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_and_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_and_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_and(a, b) }
|
||||
}
|
||||
|
||||
@@ -823,7 +865,8 @@ pub fn _mm_and_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(andnps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_andnot_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_andnot_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_and(simd_xor(_mm_set1_epi8(-1), a), b) }
|
||||
}
|
||||
|
||||
@@ -835,7 +878,8 @@ pub fn _mm_andnot_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(orps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_or_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_or_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_or(a, b) }
|
||||
}
|
||||
|
||||
@@ -847,7 +891,8 @@ pub fn _mm_or_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(xorps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_xor_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_xor_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { simd_xor(a, b) }
|
||||
}
|
||||
|
||||
@@ -858,7 +903,8 @@ pub fn _mm_xor_si128(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpeqb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmpeq_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmpeq_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i8x16, _>(simd_eq(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -869,7 +915,8 @@ pub fn _mm_cmpeq_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpeqw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmpeq_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmpeq_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i16x8, _>(simd_eq(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -880,7 +927,8 @@ pub fn _mm_cmpeq_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpeqd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmpeq_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmpeq_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i32x4, _>(simd_eq(a.as_i32x4(), b.as_i32x4())) }
|
||||
}
|
||||
|
||||
@@ -891,7 +939,8 @@ pub fn _mm_cmpeq_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpgtb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmpgt_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmpgt_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i8x16, _>(simd_gt(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -902,7 +951,8 @@ pub fn _mm_cmpgt_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpgtw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmpgt_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmpgt_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i16x8, _>(simd_gt(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -913,7 +963,8 @@ pub fn _mm_cmpgt_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpgtd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmpgt_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmpgt_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i32x4, _>(simd_gt(a.as_i32x4(), b.as_i32x4())) }
|
||||
}
|
||||
|
||||
@@ -924,7 +975,8 @@ pub fn _mm_cmpgt_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpgtb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmplt_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmplt_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i8x16, _>(simd_lt(a.as_i8x16(), b.as_i8x16())) }
|
||||
}
|
||||
|
||||
@@ -935,7 +987,8 @@ pub fn _mm_cmplt_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpgtw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmplt_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmplt_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i16x8, _>(simd_lt(a.as_i16x8(), b.as_i16x8())) }
|
||||
}
|
||||
|
||||
@@ -946,7 +999,8 @@ pub fn _mm_cmplt_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pcmpgtd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cmplt_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cmplt_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i32x4, _>(simd_lt(a.as_i32x4(), b.as_i32x4())) }
|
||||
}
|
||||
|
||||
@@ -958,7 +1012,8 @@ pub fn _mm_cmplt_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtdq2pd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtepi32_pd(a: __m128i) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtepi32_pd(a: __m128i) -> __m128d {
|
||||
unsafe {
|
||||
let a = a.as_i32x4();
|
||||
simd_cast::<i32x2, __m128d>(simd_shuffle!(a, a, [0, 1]))
|
||||
@@ -973,7 +1028,8 @@ pub fn _mm_cvtepi32_pd(a: __m128i) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtsi2sd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi32_sd(a: __m128d, b: i32) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi32_sd(a: __m128d, b: i32) -> __m128d {
|
||||
unsafe { simd_insert!(a, 0, b as f64) }
|
||||
}
|
||||
|
||||
@@ -985,7 +1041,8 @@ pub fn _mm_cvtsi32_sd(a: __m128d, b: i32) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtdq2ps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtepi32_ps(a: __m128i) -> __m128 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtepi32_ps(a: __m128i) -> __m128 {
|
||||
unsafe { transmute(simd_cast::<_, f32x4>(a.as_i32x4())) }
|
||||
}
|
||||
|
||||
@@ -1008,7 +1065,8 @@ pub fn _mm_cvtps_epi32(a: __m128) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi32_si128(a: i32) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi32_si128(a: i32) -> __m128i {
|
||||
unsafe { transmute(i32x4::new(a, 0, 0, 0)) }
|
||||
}
|
||||
|
||||
@@ -1018,7 +1076,8 @@ pub fn _mm_cvtsi32_si128(a: i32) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi128_si32(a: __m128i) -> i32 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi128_si32(a: __m128i) -> i32 {
|
||||
unsafe { simd_extract!(a.as_i32x4(), 0) }
|
||||
}
|
||||
|
||||
@@ -1030,7 +1089,8 @@ pub fn _mm_cvtsi128_si32(a: __m128i) -> i32 {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_epi64x(e1: i64, e0: i64) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_epi64x(e1: i64, e0: i64) -> __m128i {
|
||||
unsafe { transmute(i64x2::new(e0, e1)) }
|
||||
}
|
||||
|
||||
@@ -1041,7 +1101,8 @@ pub fn _mm_set_epi64x(e1: i64, e0: i64) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_epi32(e3: i32, e2: i32, e1: i32, e0: i32) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_epi32(e3: i32, e2: i32, e1: i32, e0: i32) -> __m128i {
|
||||
unsafe { transmute(i32x4::new(e0, e1, e2, e3)) }
|
||||
}
|
||||
|
||||
@@ -1052,7 +1113,8 @@ pub fn _mm_set_epi32(e3: i32, e2: i32, e1: i32, e0: i32) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_epi16(
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_epi16(
|
||||
e7: i16,
|
||||
e6: i16,
|
||||
e5: i16,
|
||||
@@ -1072,7 +1134,8 @@ pub fn _mm_set_epi16(
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_epi8(
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_epi8(
|
||||
e15: i8,
|
||||
e14: i8,
|
||||
e13: i8,
|
||||
@@ -1105,7 +1168,8 @@ pub fn _mm_set_epi8(
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set1_epi64x(a: i64) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set1_epi64x(a: i64) -> __m128i {
|
||||
_mm_set_epi64x(a, a)
|
||||
}
|
||||
|
||||
@@ -1116,7 +1180,8 @@ pub fn _mm_set1_epi64x(a: i64) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set1_epi32(a: i32) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set1_epi32(a: i32) -> __m128i {
|
||||
_mm_set_epi32(a, a, a, a)
|
||||
}
|
||||
|
||||
@@ -1127,7 +1192,8 @@ pub fn _mm_set1_epi32(a: i32) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set1_epi16(a: i16) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set1_epi16(a: i16) -> __m128i {
|
||||
_mm_set_epi16(a, a, a, a, a, a, a, a)
|
||||
}
|
||||
|
||||
@@ -1138,7 +1204,8 @@ pub fn _mm_set1_epi16(a: i16) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set1_epi8(a: i8) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set1_epi8(a: i8) -> __m128i {
|
||||
_mm_set_epi8(a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a)
|
||||
}
|
||||
|
||||
@@ -1149,7 +1216,8 @@ pub fn _mm_set1_epi8(a: i8) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_setr_epi32(e3: i32, e2: i32, e1: i32, e0: i32) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_setr_epi32(e3: i32, e2: i32, e1: i32, e0: i32) -> __m128i {
|
||||
_mm_set_epi32(e0, e1, e2, e3)
|
||||
}
|
||||
|
||||
@@ -1160,7 +1228,8 @@ pub fn _mm_setr_epi32(e3: i32, e2: i32, e1: i32, e0: i32) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_setr_epi16(
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_setr_epi16(
|
||||
e7: i16,
|
||||
e6: i16,
|
||||
e5: i16,
|
||||
@@ -1180,7 +1249,8 @@ pub fn _mm_setr_epi16(
|
||||
#[target_feature(enable = "sse2")]
|
||||
// no particular instruction to test
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_setr_epi8(
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_setr_epi8(
|
||||
e15: i8,
|
||||
e14: i8,
|
||||
e13: i8,
|
||||
@@ -1211,7 +1281,8 @@ pub fn _mm_setr_epi8(
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(xorps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_setzero_si128() -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_setzero_si128() -> __m128i {
|
||||
const { unsafe { mem::zeroed() } }
|
||||
}
|
||||
|
||||
@@ -1221,7 +1292,8 @@ pub fn _mm_setzero_si128() -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_loadl_epi64(mem_addr: *const __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadl_epi64(mem_addr: *const __m128i) -> __m128i {
|
||||
_mm_set_epi64x(0, ptr::read_unaligned(mem_addr as *const i64))
|
||||
}
|
||||
|
||||
@@ -1237,7 +1309,8 @@ pub unsafe fn _mm_loadl_epi64(mem_addr: *const __m128i) -> __m128i {
|
||||
assert_instr(movaps)
|
||||
)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_load_si128(mem_addr: *const __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_load_si128(mem_addr: *const __m128i) -> __m128i {
|
||||
*mem_addr
|
||||
}
|
||||
|
||||
@@ -1250,7 +1323,8 @@ pub unsafe fn _mm_load_si128(mem_addr: *const __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movups))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_loadu_si128(mem_addr: *const __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadu_si128(mem_addr: *const __m128i) -> __m128i {
|
||||
let mut dst: __m128i = _mm_undefined_si128();
|
||||
ptr::copy_nonoverlapping(
|
||||
mem_addr as *const u8,
|
||||
@@ -1299,7 +1373,8 @@ pub unsafe fn _mm_maskmoveu_si128(a: __m128i, mask: __m128i, mem_addr: *mut i8)
|
||||
assert_instr(movaps)
|
||||
)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_store_si128(mem_addr: *mut __m128i, a: __m128i) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_store_si128(mem_addr: *mut __m128i, a: __m128i) {
|
||||
*mem_addr = a;
|
||||
}
|
||||
|
||||
@@ -1312,7 +1387,8 @@ pub unsafe fn _mm_store_si128(mem_addr: *mut __m128i, a: __m128i) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movups))] // FIXME movdqu expected
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_storeu_si128(mem_addr: *mut __m128i, a: __m128i) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storeu_si128(mem_addr: *mut __m128i, a: __m128i) {
|
||||
mem_addr.write_unaligned(a);
|
||||
}
|
||||
|
||||
@@ -1324,7 +1400,8 @@ pub unsafe fn _mm_storeu_si128(mem_addr: *mut __m128i, a: __m128i) {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_storel_epi64(mem_addr: *mut __m128i, a: __m128i) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storel_epi64(mem_addr: *mut __m128i, a: __m128i) {
|
||||
ptr::copy_nonoverlapping(ptr::addr_of!(a) as *const u8, mem_addr as *mut u8, 8);
|
||||
}
|
||||
|
||||
@@ -1393,7 +1470,8 @@ pub unsafe fn _mm_stream_si32(mem_addr: *mut i32, a: i32) {
|
||||
// FIXME movd on msvc, movd on i686
|
||||
#[cfg_attr(all(test, target_arch = "x86_64"), assert_instr(movq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_move_epi64(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_move_epi64(a: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let r: i64x2 = simd_shuffle!(a.as_i64x2(), i64x2::ZERO, [0, 2]);
|
||||
transmute(r)
|
||||
@@ -1444,7 +1522,8 @@ pub fn _mm_packus_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(pextrw, IMM8 = 7))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_extract_epi16<const IMM8: i32>(a: __m128i) -> i32 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_extract_epi16<const IMM8: i32>(a: __m128i) -> i32 {
|
||||
static_assert_uimm_bits!(IMM8, 3);
|
||||
unsafe { simd_extract!(a.as_u16x8(), IMM8 as u32, u16) as i32 }
|
||||
}
|
||||
@@ -1457,7 +1536,8 @@ pub fn _mm_extract_epi16<const IMM8: i32>(a: __m128i) -> i32 {
|
||||
#[cfg_attr(test, assert_instr(pinsrw, IMM8 = 7))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_insert_epi16<const IMM8: i32>(a: __m128i, i: i32) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_insert_epi16<const IMM8: i32>(a: __m128i, i: i32) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 3);
|
||||
unsafe { transmute(simd_insert!(a.as_i16x8(), IMM8 as u32, i as i16)) }
|
||||
}
|
||||
@@ -1469,7 +1549,8 @@ pub fn _mm_insert_epi16<const IMM8: i32>(a: __m128i, i: i32) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(pmovmskb))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_movemask_epi8(a: __m128i) -> i32 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_movemask_epi8(a: __m128i) -> i32 {
|
||||
unsafe {
|
||||
let z = i8x16::ZERO;
|
||||
let m: i8x16 = simd_lt(a.as_i8x16(), z);
|
||||
@@ -1485,7 +1566,8 @@ pub fn _mm_movemask_epi8(a: __m128i) -> i32 {
|
||||
#[cfg_attr(test, assert_instr(pshufd, IMM8 = 9))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_shuffle_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_shuffle_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
let a = a.as_i32x4();
|
||||
@@ -1515,7 +1597,8 @@ pub fn _mm_shuffle_epi32<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(pshufhw, IMM8 = 9))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_shufflehi_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_shufflehi_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
let a = a.as_i16x8();
|
||||
@@ -1549,7 +1632,8 @@ pub fn _mm_shufflehi_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(pshuflw, IMM8 = 9))]
|
||||
#[rustc_legacy_const_generics(1)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_shufflelo_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_shufflelo_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
static_assert_uimm_bits!(IMM8, 8);
|
||||
unsafe {
|
||||
let a = a.as_i16x8();
|
||||
@@ -1578,7 +1662,8 @@ pub fn _mm_shufflelo_epi16<const IMM8: i32>(a: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(punpckhbw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpackhi_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpackhi_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
transmute::<i8x16, _>(simd_shuffle!(
|
||||
a.as_i8x16(),
|
||||
@@ -1595,7 +1680,8 @@ pub fn _mm_unpackhi_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(punpckhwd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpackhi_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpackhi_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let x = simd_shuffle!(a.as_i16x8(), b.as_i16x8(), [4, 12, 5, 13, 6, 14, 7, 15]);
|
||||
transmute::<i16x8, _>(x)
|
||||
@@ -1609,7 +1695,8 @@ pub fn _mm_unpackhi_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(unpckhps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpackhi_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpackhi_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i32x4, _>(simd_shuffle!(a.as_i32x4(), b.as_i32x4(), [2, 6, 3, 7])) }
|
||||
}
|
||||
|
||||
@@ -1620,7 +1707,8 @@ pub fn _mm_unpackhi_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(unpckhpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpackhi_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpackhi_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i64x2, _>(simd_shuffle!(a.as_i64x2(), b.as_i64x2(), [1, 3])) }
|
||||
}
|
||||
|
||||
@@ -1631,7 +1719,8 @@ pub fn _mm_unpackhi_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(punpcklbw))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpacklo_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpacklo_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
transmute::<i8x16, _>(simd_shuffle!(
|
||||
a.as_i8x16(),
|
||||
@@ -1648,7 +1737,8 @@ pub fn _mm_unpacklo_epi8(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(punpcklwd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpacklo_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpacklo_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe {
|
||||
let x = simd_shuffle!(a.as_i16x8(), b.as_i16x8(), [0, 8, 1, 9, 2, 10, 3, 11]);
|
||||
transmute::<i16x8, _>(x)
|
||||
@@ -1662,7 +1752,8 @@ pub fn _mm_unpacklo_epi16(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(unpcklps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpacklo_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpacklo_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i32x4, _>(simd_shuffle!(a.as_i32x4(), b.as_i32x4(), [0, 4, 1, 5])) }
|
||||
}
|
||||
|
||||
@@ -1673,7 +1764,8 @@ pub fn _mm_unpacklo_epi32(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movlhps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpacklo_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpacklo_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
unsafe { transmute::<i64x2, _>(simd_shuffle!(a.as_i64x2(), b.as_i64x2(), [0, 2])) }
|
||||
}
|
||||
|
||||
@@ -1685,7 +1777,8 @@ pub fn _mm_unpacklo_epi64(a: __m128i, b: __m128i) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(addsd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_add_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_add_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_insert!(a, 0, _mm_cvtsd_f64(a) + _mm_cvtsd_f64(b)) }
|
||||
}
|
||||
|
||||
@@ -1697,7 +1790,8 @@ pub fn _mm_add_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(addpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_add_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_add_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_add(a, b) }
|
||||
}
|
||||
|
||||
@@ -1709,7 +1803,8 @@ pub fn _mm_add_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(divsd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_div_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_div_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_insert!(a, 0, _mm_cvtsd_f64(a) / _mm_cvtsd_f64(b)) }
|
||||
}
|
||||
|
||||
@@ -1721,7 +1816,8 @@ pub fn _mm_div_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(divpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_div_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_div_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_div(a, b) }
|
||||
}
|
||||
|
||||
@@ -1781,7 +1877,8 @@ pub fn _mm_min_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(mulsd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_mul_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_mul_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_insert!(a, 0, _mm_cvtsd_f64(a) * _mm_cvtsd_f64(b)) }
|
||||
}
|
||||
|
||||
@@ -1793,7 +1890,8 @@ pub fn _mm_mul_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(mulpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_mul_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_mul_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_mul(a, b) }
|
||||
}
|
||||
|
||||
@@ -1828,7 +1926,8 @@ pub fn _mm_sqrt_pd(a: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(subsd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_sub_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_sub_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_insert!(a, 0, _mm_cvtsd_f64(a) - _mm_cvtsd_f64(b)) }
|
||||
}
|
||||
|
||||
@@ -1840,7 +1939,8 @@ pub fn _mm_sub_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(subpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_sub_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_sub_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_sub(a, b) }
|
||||
}
|
||||
|
||||
@@ -1852,7 +1952,8 @@ pub fn _mm_sub_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(andps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_and_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_and_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe {
|
||||
let a: __m128i = transmute(a);
|
||||
let b: __m128i = transmute(b);
|
||||
@@ -1867,7 +1968,8 @@ pub fn _mm_and_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(andnps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_andnot_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_andnot_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe {
|
||||
let a: __m128i = transmute(a);
|
||||
let b: __m128i = transmute(b);
|
||||
@@ -1882,7 +1984,8 @@ pub fn _mm_andnot_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(orps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_or_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_or_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe {
|
||||
let a: __m128i = transmute(a);
|
||||
let b: __m128i = transmute(b);
|
||||
@@ -1897,7 +2000,8 @@ pub fn _mm_or_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(xorps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_xor_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_xor_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe {
|
||||
let a: __m128i = transmute(a);
|
||||
let b: __m128i = transmute(b);
|
||||
@@ -2325,7 +2429,8 @@ pub fn _mm_ucomineq_sd(a: __m128d, b: __m128d) -> i32 {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtpd2ps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtpd_ps(a: __m128d) -> __m128 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtpd_ps(a: __m128d) -> __m128 {
|
||||
unsafe {
|
||||
let r = simd_cast::<_, f32x2>(a.as_f64x2());
|
||||
let zero = f32x2::ZERO;
|
||||
@@ -2342,7 +2447,8 @@ pub fn _mm_cvtpd_ps(a: __m128d) -> __m128 {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtps2pd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtps_pd(a: __m128) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtps_pd(a: __m128) -> __m128d {
|
||||
unsafe {
|
||||
let a = a.as_f32x4();
|
||||
transmute(simd_cast::<f32x2, f64x2>(simd_shuffle!(a, a, [0, 1])))
|
||||
@@ -2393,7 +2499,8 @@ pub fn _mm_cvtsd_ss(a: __m128, b: __m128d) -> __m128 {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsd_f64(a: __m128d) -> f64 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsd_f64(a: __m128d) -> f64 {
|
||||
unsafe { simd_extract!(a, 0) }
|
||||
}
|
||||
|
||||
@@ -2407,7 +2514,8 @@ pub fn _mm_cvtsd_f64(a: __m128d) -> f64 {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtss2sd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtss_sd(a: __m128d, b: __m128) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtss_sd(a: __m128d, b: __m128) -> __m128d {
|
||||
unsafe {
|
||||
let elt: f32 = simd_extract!(b, 0);
|
||||
simd_insert!(a, 0, elt as f64)
|
||||
@@ -2457,7 +2565,8 @@ pub fn _mm_cvttps_epi32(a: __m128) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_sd(a: f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_sd(a: f64) -> __m128d {
|
||||
_mm_set_pd(0.0, a)
|
||||
}
|
||||
|
||||
@@ -2468,7 +2577,8 @@ pub fn _mm_set_sd(a: f64) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set1_pd(a: f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set1_pd(a: f64) -> __m128d {
|
||||
_mm_set_pd(a, a)
|
||||
}
|
||||
|
||||
@@ -2479,7 +2589,8 @@ pub fn _mm_set1_pd(a: f64) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_pd1(a: f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_pd1(a: f64) -> __m128d {
|
||||
_mm_set_pd(a, a)
|
||||
}
|
||||
|
||||
@@ -2490,7 +2601,8 @@ pub fn _mm_set_pd1(a: f64) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_set_pd(a: f64, b: f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_set_pd(a: f64, b: f64) -> __m128d {
|
||||
__m128d([b, a])
|
||||
}
|
||||
|
||||
@@ -2501,7 +2613,8 @@ pub fn _mm_set_pd(a: f64, b: f64) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_setr_pd(a: f64, b: f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_setr_pd(a: f64, b: f64) -> __m128d {
|
||||
_mm_set_pd(b, a)
|
||||
}
|
||||
|
||||
@@ -2513,7 +2626,8 @@ pub fn _mm_setr_pd(a: f64, b: f64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(xorp))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_setzero_pd() -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_setzero_pd() -> __m128d {
|
||||
const { unsafe { mem::zeroed() } }
|
||||
}
|
||||
|
||||
@@ -2527,12 +2641,13 @@ pub fn _mm_setzero_pd() -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movmskpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_movemask_pd(a: __m128d) -> i32 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_movemask_pd(a: __m128d) -> i32 {
|
||||
// Propagate the highest bit to the rest, because simd_bitmask
|
||||
// requires all-1 or all-0.
|
||||
unsafe {
|
||||
let mask: i64x2 = simd_lt(transmute(a), i64x2::ZERO);
|
||||
simd_bitmask::<i64x2, u8>(mask).into()
|
||||
simd_bitmask::<i64x2, u8>(mask) as i32
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2550,7 +2665,8 @@ pub fn _mm_movemask_pd(a: __m128d) -> i32 {
|
||||
)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub unsafe fn _mm_load_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_load_pd(mem_addr: *const f64) -> __m128d {
|
||||
*(mem_addr as *const __m128d)
|
||||
}
|
||||
|
||||
@@ -2562,7 +2678,8 @@ pub unsafe fn _mm_load_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movsd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_load_sd(mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_load_sd(mem_addr: *const f64) -> __m128d {
|
||||
_mm_setr_pd(*mem_addr, 0.)
|
||||
}
|
||||
|
||||
@@ -2575,7 +2692,8 @@ pub unsafe fn _mm_load_sd(mem_addr: *const f64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movhps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_loadh_pd(a: __m128d, mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadh_pd(a: __m128d, mem_addr: *const f64) -> __m128d {
|
||||
_mm_setr_pd(simd_extract!(a, 0), *mem_addr)
|
||||
}
|
||||
|
||||
@@ -2588,7 +2706,8 @@ pub unsafe fn _mm_loadh_pd(a: __m128d, mem_addr: *const f64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movlps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_loadl_pd(a: __m128d, mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadl_pd(a: __m128d, mem_addr: *const f64) -> __m128d {
|
||||
_mm_setr_pd(*mem_addr, simd_extract!(a, 1))
|
||||
}
|
||||
|
||||
@@ -2630,7 +2749,8 @@ pub unsafe fn _mm_stream_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movlps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_store_sd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_store_sd(mem_addr: *mut f64, a: __m128d) {
|
||||
*mem_addr = simd_extract!(a, 0)
|
||||
}
|
||||
|
||||
@@ -2647,7 +2767,8 @@ pub unsafe fn _mm_store_sd(mem_addr: *mut f64, a: __m128d) {
|
||||
)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub unsafe fn _mm_store_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_store_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
*(mem_addr as *mut __m128d) = a;
|
||||
}
|
||||
|
||||
@@ -2660,7 +2781,8 @@ pub unsafe fn _mm_store_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movups))] // FIXME movupd expected
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_storeu_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storeu_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
mem_addr.cast::<__m128d>().write_unaligned(a);
|
||||
}
|
||||
|
||||
@@ -2672,7 +2794,8 @@ pub unsafe fn _mm_storeu_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86_updates", since = "1.82.0")]
|
||||
pub unsafe fn _mm_storeu_si16(mem_addr: *mut u8, a: __m128i) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storeu_si16(mem_addr: *mut u8, a: __m128i) {
|
||||
ptr::write_unaligned(mem_addr as *mut i16, simd_extract(a.as_i16x8(), 0))
|
||||
}
|
||||
|
||||
@@ -2684,7 +2807,8 @@ pub unsafe fn _mm_storeu_si16(mem_addr: *mut u8, a: __m128i) {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86_updates", since = "1.82.0")]
|
||||
pub unsafe fn _mm_storeu_si32(mem_addr: *mut u8, a: __m128i) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storeu_si32(mem_addr: *mut u8, a: __m128i) {
|
||||
ptr::write_unaligned(mem_addr as *mut i32, simd_extract(a.as_i32x4(), 0))
|
||||
}
|
||||
|
||||
@@ -2696,7 +2820,8 @@ pub unsafe fn _mm_storeu_si32(mem_addr: *mut u8, a: __m128i) {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86_updates", since = "1.82.0")]
|
||||
pub unsafe fn _mm_storeu_si64(mem_addr: *mut u8, a: __m128i) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storeu_si64(mem_addr: *mut u8, a: __m128i) {
|
||||
ptr::write_unaligned(mem_addr as *mut i64, simd_extract(a.as_i64x2(), 0))
|
||||
}
|
||||
|
||||
@@ -2709,7 +2834,8 @@ pub unsafe fn _mm_storeu_si64(mem_addr: *mut u8, a: __m128i) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub unsafe fn _mm_store1_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_store1_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
let b: __m128d = simd_shuffle!(a, a, [0, 0]);
|
||||
*(mem_addr as *mut __m128d) = b;
|
||||
}
|
||||
@@ -2723,7 +2849,8 @@ pub unsafe fn _mm_store1_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub unsafe fn _mm_store_pd1(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_store_pd1(mem_addr: *mut f64, a: __m128d) {
|
||||
let b: __m128d = simd_shuffle!(a, a, [0, 0]);
|
||||
*(mem_addr as *mut __m128d) = b;
|
||||
}
|
||||
@@ -2738,7 +2865,8 @@ pub unsafe fn _mm_store_pd1(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
#[allow(clippy::cast_ptr_alignment)]
|
||||
pub unsafe fn _mm_storer_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storer_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
let b: __m128d = simd_shuffle!(a, a, [1, 0]);
|
||||
*(mem_addr as *mut __m128d) = b;
|
||||
}
|
||||
@@ -2751,7 +2879,8 @@ pub unsafe fn _mm_storer_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movhps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_storeh_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storeh_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
*mem_addr = simd_extract!(a, 1);
|
||||
}
|
||||
|
||||
@@ -2763,7 +2892,8 @@ pub unsafe fn _mm_storeh_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movlps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_storel_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_storel_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
*mem_addr = simd_extract!(a, 0);
|
||||
}
|
||||
|
||||
@@ -2775,7 +2905,8 @@ pub unsafe fn _mm_storel_pd(mem_addr: *mut f64, a: __m128d) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// #[cfg_attr(test, assert_instr(movapd))] // FIXME LLVM uses different codegen
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_load1_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_load1_pd(mem_addr: *const f64) -> __m128d {
|
||||
let d = *mem_addr;
|
||||
_mm_setr_pd(d, d)
|
||||
}
|
||||
@@ -2788,7 +2919,8 @@ pub unsafe fn _mm_load1_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
// #[cfg_attr(test, assert_instr(movapd))] // FIXME same as _mm_load1_pd
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_load_pd1(mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_load_pd1(mem_addr: *const f64) -> __m128d {
|
||||
_mm_load1_pd(mem_addr)
|
||||
}
|
||||
|
||||
@@ -2804,7 +2936,8 @@ pub unsafe fn _mm_load_pd1(mem_addr: *const f64) -> __m128d {
|
||||
assert_instr(movaps)
|
||||
)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_loadr_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadr_pd(mem_addr: *const f64) -> __m128d {
|
||||
let a = _mm_load_pd(mem_addr);
|
||||
simd_shuffle!(a, a, [1, 0])
|
||||
}
|
||||
@@ -2818,7 +2951,8 @@ pub unsafe fn _mm_loadr_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movups))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub unsafe fn _mm_loadu_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadu_pd(mem_addr: *const f64) -> __m128d {
|
||||
let mut dst = _mm_undefined_pd();
|
||||
ptr::copy_nonoverlapping(
|
||||
mem_addr as *const u8,
|
||||
@@ -2836,7 +2970,8 @@ pub unsafe fn _mm_loadu_pd(mem_addr: *const f64) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86_updates", since = "1.82.0")]
|
||||
pub unsafe fn _mm_loadu_si16(mem_addr: *const u8) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadu_si16(mem_addr: *const u8) -> __m128i {
|
||||
transmute(i16x8::new(
|
||||
ptr::read_unaligned(mem_addr as *const i16),
|
||||
0,
|
||||
@@ -2857,7 +2992,8 @@ pub unsafe fn _mm_loadu_si16(mem_addr: *const u8) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86_updates", since = "1.82.0")]
|
||||
pub unsafe fn _mm_loadu_si32(mem_addr: *const u8) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadu_si32(mem_addr: *const u8) -> __m128i {
|
||||
transmute(i32x4::new(
|
||||
ptr::read_unaligned(mem_addr as *const i32),
|
||||
0,
|
||||
@@ -2874,7 +3010,8 @@ pub unsafe fn _mm_loadu_si32(mem_addr: *const u8) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86_mm_loadu_si64", since = "1.46.0")]
|
||||
pub unsafe fn _mm_loadu_si64(mem_addr: *const u8) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const unsafe fn _mm_loadu_si64(mem_addr: *const u8) -> __m128i {
|
||||
transmute(i64x2::new(ptr::read_unaligned(mem_addr as *const i64), 0))
|
||||
}
|
||||
|
||||
@@ -2888,7 +3025,8 @@ pub unsafe fn _mm_loadu_si64(mem_addr: *const u8) -> __m128i {
|
||||
#[cfg_attr(test, assert_instr(shufps, MASK = 2))]
|
||||
#[rustc_legacy_const_generics(2)]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_shuffle_pd<const MASK: i32>(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_shuffle_pd<const MASK: i32>(a: __m128d, b: __m128d) -> __m128d {
|
||||
static_assert_uimm_bits!(MASK, 8);
|
||||
unsafe { simd_shuffle!(a, b, [MASK as u32 & 0b1, ((MASK as u32 >> 1) & 0b1) + 2]) }
|
||||
}
|
||||
@@ -2902,7 +3040,8 @@ pub fn _mm_shuffle_pd<const MASK: i32>(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movsd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_move_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_move_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { _mm_setr_pd(simd_extract!(b, 0), simd_extract!(a, 1)) }
|
||||
}
|
||||
|
||||
@@ -2913,7 +3052,8 @@ pub fn _mm_move_sd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_castpd_ps(a: __m128d) -> __m128 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_castpd_ps(a: __m128d) -> __m128 {
|
||||
unsafe { transmute(a) }
|
||||
}
|
||||
|
||||
@@ -2924,7 +3064,8 @@ pub fn _mm_castpd_ps(a: __m128d) -> __m128 {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_castpd_si128(a: __m128d) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_castpd_si128(a: __m128d) -> __m128i {
|
||||
unsafe { transmute(a) }
|
||||
}
|
||||
|
||||
@@ -2935,7 +3076,8 @@ pub fn _mm_castpd_si128(a: __m128d) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_castps_pd(a: __m128) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_castps_pd(a: __m128) -> __m128d {
|
||||
unsafe { transmute(a) }
|
||||
}
|
||||
|
||||
@@ -2946,7 +3088,8 @@ pub fn _mm_castps_pd(a: __m128) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_castps_si128(a: __m128) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_castps_si128(a: __m128) -> __m128i {
|
||||
unsafe { transmute(a) }
|
||||
}
|
||||
|
||||
@@ -2957,7 +3100,8 @@ pub fn _mm_castps_si128(a: __m128) -> __m128i {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_castsi128_pd(a: __m128i) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_castsi128_pd(a: __m128i) -> __m128d {
|
||||
unsafe { transmute(a) }
|
||||
}
|
||||
|
||||
@@ -2968,7 +3112,8 @@ pub fn _mm_castsi128_pd(a: __m128i) -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_castsi128_ps(a: __m128i) -> __m128 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_castsi128_ps(a: __m128i) -> __m128 {
|
||||
unsafe { transmute(a) }
|
||||
}
|
||||
|
||||
@@ -2981,7 +3126,8 @@ pub fn _mm_castsi128_ps(a: __m128i) -> __m128 {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_undefined_pd() -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_undefined_pd() -> __m128d {
|
||||
const { unsafe { mem::zeroed() } }
|
||||
}
|
||||
|
||||
@@ -2994,7 +3140,8 @@ pub fn _mm_undefined_pd() -> __m128d {
|
||||
#[inline]
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_undefined_si128() -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_undefined_si128() -> __m128i {
|
||||
const { unsafe { mem::zeroed() } }
|
||||
}
|
||||
|
||||
@@ -3009,7 +3156,8 @@ pub fn _mm_undefined_si128() -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(unpckhpd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpackhi_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpackhi_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_shuffle!(a, b, [1, 3]) }
|
||||
}
|
||||
|
||||
@@ -3024,7 +3172,8 @@ pub fn _mm_unpackhi_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movlhps))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_unpacklo_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_unpacklo_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
unsafe { simd_shuffle!(a, b, [0, 2]) }
|
||||
}
|
||||
|
||||
@@ -3118,6 +3267,7 @@ pub fn _mm_unpacklo_pd(a: __m128d, b: __m128d) -> __m128d {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::core_arch::assert_eq_const as assert_eq;
|
||||
use crate::{
|
||||
core_arch::{simd::*, x86::*},
|
||||
hint::black_box,
|
||||
@@ -3157,7 +3307,7 @@ unsafe fn test_mm_mfence() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_add_epi8() {
|
||||
const unsafe fn test_mm_add_epi8() {
|
||||
let a = _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
#[rustfmt::skip]
|
||||
let b = _mm_setr_epi8(
|
||||
@@ -3180,7 +3330,7 @@ unsafe fn test_mm_add_epi8_overflow() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_add_epi16() {
|
||||
const unsafe fn test_mm_add_epi16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let b = _mm_setr_epi16(8, 9, 10, 11, 12, 13, 14, 15);
|
||||
let r = _mm_add_epi16(a, b);
|
||||
@@ -3189,7 +3339,7 @@ unsafe fn test_mm_add_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_add_epi32() {
|
||||
const unsafe fn test_mm_add_epi32() {
|
||||
let a = _mm_setr_epi32(0, 1, 2, 3);
|
||||
let b = _mm_setr_epi32(4, 5, 6, 7);
|
||||
let r = _mm_add_epi32(a, b);
|
||||
@@ -3198,7 +3348,7 @@ unsafe fn test_mm_add_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_add_epi64() {
|
||||
const unsafe fn test_mm_add_epi64() {
|
||||
let a = _mm_setr_epi64x(0, 1);
|
||||
let b = _mm_setr_epi64x(2, 3);
|
||||
let r = _mm_add_epi64(a, b);
|
||||
@@ -3207,7 +3357,7 @@ unsafe fn test_mm_add_epi64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_adds_epi8() {
|
||||
const unsafe fn test_mm_adds_epi8() {
|
||||
let a = _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
#[rustfmt::skip]
|
||||
let b = _mm_setr_epi8(
|
||||
@@ -3238,7 +3388,7 @@ unsafe fn test_mm_adds_epi8_saturate_negative() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_adds_epi16() {
|
||||
const unsafe fn test_mm_adds_epi16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let b = _mm_setr_epi16(8, 9, 10, 11, 12, 13, 14, 15);
|
||||
let r = _mm_adds_epi16(a, b);
|
||||
@@ -3263,7 +3413,7 @@ unsafe fn test_mm_adds_epi16_saturate_negative() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_adds_epu8() {
|
||||
const unsafe fn test_mm_adds_epu8() {
|
||||
let a = _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
#[rustfmt::skip]
|
||||
let b = _mm_setr_epi8(
|
||||
@@ -3286,7 +3436,7 @@ unsafe fn test_mm_adds_epu8_saturate() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_adds_epu16() {
|
||||
const unsafe fn test_mm_adds_epu16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let b = _mm_setr_epi16(8, 9, 10, 11, 12, 13, 14, 15);
|
||||
let r = _mm_adds_epu16(a, b);
|
||||
@@ -3303,21 +3453,21 @@ unsafe fn test_mm_adds_epu16_saturate() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_avg_epu8() {
|
||||
const unsafe fn test_mm_avg_epu8() {
|
||||
let (a, b) = (_mm_set1_epi8(3), _mm_set1_epi8(9));
|
||||
let r = _mm_avg_epu8(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi8(6));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_avg_epu16() {
|
||||
const unsafe fn test_mm_avg_epu16() {
|
||||
let (a, b) = (_mm_set1_epi16(3), _mm_set1_epi16(9));
|
||||
let r = _mm_avg_epu16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(6));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_madd_epi16() {
|
||||
const unsafe fn test_mm_madd_epi16() {
|
||||
let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
|
||||
let b = _mm_setr_epi16(9, 10, 11, 12, 13, 14, 15, 16);
|
||||
let r = _mm_madd_epi16(a, b);
|
||||
@@ -3352,7 +3502,7 @@ unsafe fn test_mm_madd_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_max_epi16() {
|
||||
const unsafe fn test_mm_max_epi16() {
|
||||
let a = _mm_set1_epi16(1);
|
||||
let b = _mm_set1_epi16(-1);
|
||||
let r = _mm_max_epi16(a, b);
|
||||
@@ -3360,7 +3510,7 @@ unsafe fn test_mm_max_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_max_epu8() {
|
||||
const unsafe fn test_mm_max_epu8() {
|
||||
let a = _mm_set1_epi8(1);
|
||||
let b = _mm_set1_epi8(!0);
|
||||
let r = _mm_max_epu8(a, b);
|
||||
@@ -3368,7 +3518,7 @@ unsafe fn test_mm_max_epu8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_min_epi16() {
|
||||
const unsafe fn test_mm_min_epi16() {
|
||||
let a = _mm_set1_epi16(1);
|
||||
let b = _mm_set1_epi16(-1);
|
||||
let r = _mm_min_epi16(a, b);
|
||||
@@ -3376,7 +3526,7 @@ unsafe fn test_mm_min_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_min_epu8() {
|
||||
const unsafe fn test_mm_min_epu8() {
|
||||
let a = _mm_set1_epi8(1);
|
||||
let b = _mm_set1_epi8(!0);
|
||||
let r = _mm_min_epu8(a, b);
|
||||
@@ -3384,28 +3534,28 @@ unsafe fn test_mm_min_epu8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_mulhi_epi16() {
|
||||
const unsafe fn test_mm_mulhi_epi16() {
|
||||
let (a, b) = (_mm_set1_epi16(1000), _mm_set1_epi16(-1001));
|
||||
let r = _mm_mulhi_epi16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(-16));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_mulhi_epu16() {
|
||||
const unsafe fn test_mm_mulhi_epu16() {
|
||||
let (a, b) = (_mm_set1_epi16(1000), _mm_set1_epi16(1001));
|
||||
let r = _mm_mulhi_epu16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(15));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_mullo_epi16() {
|
||||
const unsafe fn test_mm_mullo_epi16() {
|
||||
let (a, b) = (_mm_set1_epi16(1000), _mm_set1_epi16(-1001));
|
||||
let r = _mm_mullo_epi16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(-17960));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_mul_epu32() {
|
||||
const unsafe fn test_mm_mul_epu32() {
|
||||
let a = _mm_setr_epi64x(1_000_000_000, 1 << 34);
|
||||
let b = _mm_setr_epi64x(1_000_000_000, 1 << 35);
|
||||
let r = _mm_mul_epu32(a, b);
|
||||
@@ -3429,35 +3579,35 @@ unsafe fn test_mm_sad_epu8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_sub_epi8() {
|
||||
const unsafe fn test_mm_sub_epi8() {
|
||||
let (a, b) = (_mm_set1_epi8(5), _mm_set1_epi8(6));
|
||||
let r = _mm_sub_epi8(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi8(-1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_sub_epi16() {
|
||||
const unsafe fn test_mm_sub_epi16() {
|
||||
let (a, b) = (_mm_set1_epi16(5), _mm_set1_epi16(6));
|
||||
let r = _mm_sub_epi16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(-1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_sub_epi32() {
|
||||
const unsafe fn test_mm_sub_epi32() {
|
||||
let (a, b) = (_mm_set1_epi32(5), _mm_set1_epi32(6));
|
||||
let r = _mm_sub_epi32(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi32(-1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_sub_epi64() {
|
||||
const unsafe fn test_mm_sub_epi64() {
|
||||
let (a, b) = (_mm_set1_epi64x(5), _mm_set1_epi64x(6));
|
||||
let r = _mm_sub_epi64(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi64x(-1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_subs_epi8() {
|
||||
const unsafe fn test_mm_subs_epi8() {
|
||||
let (a, b) = (_mm_set1_epi8(5), _mm_set1_epi8(2));
|
||||
let r = _mm_subs_epi8(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi8(3));
|
||||
@@ -3480,7 +3630,7 @@ unsafe fn test_mm_subs_epi8_saturate_negative() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_subs_epi16() {
|
||||
const unsafe fn test_mm_subs_epi16() {
|
||||
let (a, b) = (_mm_set1_epi16(5), _mm_set1_epi16(2));
|
||||
let r = _mm_subs_epi16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(3));
|
||||
@@ -3503,7 +3653,7 @@ unsafe fn test_mm_subs_epi16_saturate_negative() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_subs_epu8() {
|
||||
const unsafe fn test_mm_subs_epu8() {
|
||||
let (a, b) = (_mm_set1_epi8(5), _mm_set1_epi8(2));
|
||||
let r = _mm_subs_epu8(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi8(3));
|
||||
@@ -3518,7 +3668,7 @@ unsafe fn test_mm_subs_epu8_saturate() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_subs_epu16() {
|
||||
const unsafe fn test_mm_subs_epu16() {
|
||||
let (a, b) = (_mm_set1_epi16(5), _mm_set1_epi16(2));
|
||||
let r = _mm_subs_epu16(a, b);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(3));
|
||||
@@ -3533,7 +3683,7 @@ unsafe fn test_mm_subs_epu16_saturate() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_slli_si128() {
|
||||
const unsafe fn test_mm_slli_si128() {
|
||||
#[rustfmt::skip]
|
||||
let a = _mm_setr_epi8(
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
||||
@@ -3559,7 +3709,7 @@ unsafe fn test_mm_slli_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_slli_epi16() {
|
||||
const unsafe fn test_mm_slli_epi16() {
|
||||
let a = _mm_setr_epi16(0xCC, -0xCC, 0xDD, -0xDD, 0xEE, -0xEE, 0xFF, -0xFF);
|
||||
let r = _mm_slli_epi16::<4>(a);
|
||||
assert_eq_m128i(
|
||||
@@ -3587,7 +3737,7 @@ unsafe fn test_mm_sll_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_slli_epi32() {
|
||||
const unsafe fn test_mm_slli_epi32() {
|
||||
let a = _mm_setr_epi32(0xEEEE, -0xEEEE, 0xFFFF, -0xFFFF);
|
||||
let r = _mm_slli_epi32::<4>(a);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(0xEEEE0, -0xEEEE0, 0xFFFF0, -0xFFFF0));
|
||||
@@ -3609,7 +3759,7 @@ unsafe fn test_mm_sll_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_slli_epi64() {
|
||||
const unsafe fn test_mm_slli_epi64() {
|
||||
let a = _mm_set_epi64x(0xFFFFFFFF, -0xFFFFFFFF);
|
||||
let r = _mm_slli_epi64::<4>(a);
|
||||
assert_eq_m128i(r, _mm_set_epi64x(0xFFFFFFFF0, -0xFFFFFFFF0));
|
||||
@@ -3631,7 +3781,7 @@ unsafe fn test_mm_sll_epi64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_srai_epi16() {
|
||||
const unsafe fn test_mm_srai_epi16() {
|
||||
let a = _mm_setr_epi16(0xCC, -0xCC, 0xDD, -0xDD, 0xEE, -0xEE, 0xFF, -0xFF);
|
||||
let r = _mm_srai_epi16::<4>(a);
|
||||
assert_eq_m128i(
|
||||
@@ -3659,7 +3809,7 @@ unsafe fn test_mm_sra_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_srai_epi32() {
|
||||
const unsafe fn test_mm_srai_epi32() {
|
||||
let a = _mm_setr_epi32(0xEEEE, -0xEEEE, 0xFFFF, -0xFFFF);
|
||||
let r = _mm_srai_epi32::<4>(a);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(0xEEE, -0xEEF, 0xFFF, -0x1000));
|
||||
@@ -3681,7 +3831,7 @@ unsafe fn test_mm_sra_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_srli_si128() {
|
||||
const unsafe fn test_mm_srli_si128() {
|
||||
#[rustfmt::skip]
|
||||
let a = _mm_setr_epi8(
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
||||
@@ -3710,7 +3860,7 @@ unsafe fn test_mm_srli_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_srli_epi16() {
|
||||
const unsafe fn test_mm_srli_epi16() {
|
||||
let a = _mm_setr_epi16(0xCC, -0xCC, 0xDD, -0xDD, 0xEE, -0xEE, 0xFF, -0xFF);
|
||||
let r = _mm_srli_epi16::<4>(a);
|
||||
assert_eq_m128i(
|
||||
@@ -3738,7 +3888,7 @@ unsafe fn test_mm_srl_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_srli_epi32() {
|
||||
const unsafe fn test_mm_srli_epi32() {
|
||||
let a = _mm_setr_epi32(0xEEEE, -0xEEEE, 0xFFFF, -0xFFFF);
|
||||
let r = _mm_srli_epi32::<4>(a);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(0xEEE, 0xFFFF111, 0xFFF, 0xFFFF000));
|
||||
@@ -3760,7 +3910,7 @@ unsafe fn test_mm_srl_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_srli_epi64() {
|
||||
const unsafe fn test_mm_srli_epi64() {
|
||||
let a = _mm_set_epi64x(0xFFFFFFFF, -0xFFFFFFFF);
|
||||
let r = _mm_srli_epi64::<4>(a);
|
||||
assert_eq_m128i(r, _mm_set_epi64x(0xFFFFFFF, 0xFFFFFFFF0000000));
|
||||
@@ -3782,7 +3932,7 @@ unsafe fn test_mm_srl_epi64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_and_si128() {
|
||||
const unsafe fn test_mm_and_si128() {
|
||||
let a = _mm_set1_epi8(5);
|
||||
let b = _mm_set1_epi8(3);
|
||||
let r = _mm_and_si128(a, b);
|
||||
@@ -3790,7 +3940,7 @@ unsafe fn test_mm_and_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_andnot_si128() {
|
||||
const unsafe fn test_mm_andnot_si128() {
|
||||
let a = _mm_set1_epi8(5);
|
||||
let b = _mm_set1_epi8(3);
|
||||
let r = _mm_andnot_si128(a, b);
|
||||
@@ -3798,7 +3948,7 @@ unsafe fn test_mm_andnot_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_or_si128() {
|
||||
const unsafe fn test_mm_or_si128() {
|
||||
let a = _mm_set1_epi8(5);
|
||||
let b = _mm_set1_epi8(3);
|
||||
let r = _mm_or_si128(a, b);
|
||||
@@ -3806,7 +3956,7 @@ unsafe fn test_mm_or_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_xor_si128() {
|
||||
const unsafe fn test_mm_xor_si128() {
|
||||
let a = _mm_set1_epi8(5);
|
||||
let b = _mm_set1_epi8(3);
|
||||
let r = _mm_xor_si128(a, b);
|
||||
@@ -3814,7 +3964,7 @@ unsafe fn test_mm_xor_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmpeq_epi8() {
|
||||
const unsafe fn test_mm_cmpeq_epi8() {
|
||||
let a = _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
|
||||
let b = _mm_setr_epi8(15, 14, 2, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
|
||||
let r = _mm_cmpeq_epi8(a, b);
|
||||
@@ -3828,7 +3978,7 @@ unsafe fn test_mm_cmpeq_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmpeq_epi16() {
|
||||
const unsafe fn test_mm_cmpeq_epi16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let b = _mm_setr_epi16(7, 6, 2, 4, 3, 2, 1, 0);
|
||||
let r = _mm_cmpeq_epi16(a, b);
|
||||
@@ -3836,7 +3986,7 @@ unsafe fn test_mm_cmpeq_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmpeq_epi32() {
|
||||
const unsafe fn test_mm_cmpeq_epi32() {
|
||||
let a = _mm_setr_epi32(0, 1, 2, 3);
|
||||
let b = _mm_setr_epi32(3, 2, 2, 0);
|
||||
let r = _mm_cmpeq_epi32(a, b);
|
||||
@@ -3844,7 +3994,7 @@ unsafe fn test_mm_cmpeq_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmpgt_epi8() {
|
||||
const unsafe fn test_mm_cmpgt_epi8() {
|
||||
let a = _mm_set_epi8(5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
let b = _mm_set1_epi8(0);
|
||||
let r = _mm_cmpgt_epi8(a, b);
|
||||
@@ -3853,7 +4003,7 @@ unsafe fn test_mm_cmpgt_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmpgt_epi16() {
|
||||
const unsafe fn test_mm_cmpgt_epi16() {
|
||||
let a = _mm_set_epi16(5, 0, 0, 0, 0, 0, 0, 0);
|
||||
let b = _mm_set1_epi16(0);
|
||||
let r = _mm_cmpgt_epi16(a, b);
|
||||
@@ -3862,7 +4012,7 @@ unsafe fn test_mm_cmpgt_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmpgt_epi32() {
|
||||
const unsafe fn test_mm_cmpgt_epi32() {
|
||||
let a = _mm_set_epi32(5, 0, 0, 0);
|
||||
let b = _mm_set1_epi32(0);
|
||||
let r = _mm_cmpgt_epi32(a, b);
|
||||
@@ -3870,7 +4020,7 @@ unsafe fn test_mm_cmpgt_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmplt_epi8() {
|
||||
const unsafe fn test_mm_cmplt_epi8() {
|
||||
let a = _mm_set1_epi8(0);
|
||||
let b = _mm_set_epi8(5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
let r = _mm_cmplt_epi8(a, b);
|
||||
@@ -3879,7 +4029,7 @@ unsafe fn test_mm_cmplt_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmplt_epi16() {
|
||||
const unsafe fn test_mm_cmplt_epi16() {
|
||||
let a = _mm_set1_epi16(0);
|
||||
let b = _mm_set_epi16(5, 0, 0, 0, 0, 0, 0, 0);
|
||||
let r = _mm_cmplt_epi16(a, b);
|
||||
@@ -3888,7 +4038,7 @@ unsafe fn test_mm_cmplt_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cmplt_epi32() {
|
||||
const unsafe fn test_mm_cmplt_epi32() {
|
||||
let a = _mm_set1_epi32(0);
|
||||
let b = _mm_set_epi32(5, 0, 0, 0);
|
||||
let r = _mm_cmplt_epi32(a, b);
|
||||
@@ -3896,21 +4046,21 @@ unsafe fn test_mm_cmplt_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtepi32_pd() {
|
||||
const unsafe fn test_mm_cvtepi32_pd() {
|
||||
let a = _mm_set_epi32(35, 25, 15, 5);
|
||||
let r = _mm_cvtepi32_pd(a);
|
||||
assert_eq_m128d(r, _mm_setr_pd(5.0, 15.0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsi32_sd() {
|
||||
const unsafe fn test_mm_cvtsi32_sd() {
|
||||
let a = _mm_set1_pd(3.5);
|
||||
let r = _mm_cvtsi32_sd(a, 5);
|
||||
assert_eq_m128d(r, _mm_setr_pd(5.0, 3.5));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtepi32_ps() {
|
||||
const unsafe fn test_mm_cvtepi32_ps() {
|
||||
let a = _mm_setr_epi32(1, 2, 3, 4);
|
||||
let r = _mm_cvtepi32_ps(a);
|
||||
assert_eq_m128(r, _mm_setr_ps(1.0, 2.0, 3.0, 4.0));
|
||||
@@ -3924,37 +4074,37 @@ unsafe fn test_mm_cvtps_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsi32_si128() {
|
||||
const unsafe fn test_mm_cvtsi32_si128() {
|
||||
let r = _mm_cvtsi32_si128(5);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(5, 0, 0, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsi128_si32() {
|
||||
const unsafe fn test_mm_cvtsi128_si32() {
|
||||
let r = _mm_cvtsi128_si32(_mm_setr_epi32(5, 0, 0, 0));
|
||||
assert_eq!(r, 5);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_epi64x() {
|
||||
const unsafe fn test_mm_set_epi64x() {
|
||||
let r = _mm_set_epi64x(0, 1);
|
||||
assert_eq_m128i(r, _mm_setr_epi64x(1, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_epi32() {
|
||||
const unsafe fn test_mm_set_epi32() {
|
||||
let r = _mm_set_epi32(0, 1, 2, 3);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(3, 2, 1, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_epi16() {
|
||||
const unsafe fn test_mm_set_epi16() {
|
||||
let r = _mm_set_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
assert_eq_m128i(r, _mm_setr_epi16(7, 6, 5, 4, 3, 2, 1, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_epi8() {
|
||||
const unsafe fn test_mm_set_epi8() {
|
||||
#[rustfmt::skip]
|
||||
let r = _mm_set_epi8(
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||
@@ -3968,43 +4118,43 @@ unsafe fn test_mm_set_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set1_epi64x() {
|
||||
const unsafe fn test_mm_set1_epi64x() {
|
||||
let r = _mm_set1_epi64x(1);
|
||||
assert_eq_m128i(r, _mm_set1_epi64x(1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set1_epi32() {
|
||||
const unsafe fn test_mm_set1_epi32() {
|
||||
let r = _mm_set1_epi32(1);
|
||||
assert_eq_m128i(r, _mm_set1_epi32(1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set1_epi16() {
|
||||
const unsafe fn test_mm_set1_epi16() {
|
||||
let r = _mm_set1_epi16(1);
|
||||
assert_eq_m128i(r, _mm_set1_epi16(1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set1_epi8() {
|
||||
const unsafe fn test_mm_set1_epi8() {
|
||||
let r = _mm_set1_epi8(1);
|
||||
assert_eq_m128i(r, _mm_set1_epi8(1));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_setr_epi32() {
|
||||
const unsafe fn test_mm_setr_epi32() {
|
||||
let r = _mm_setr_epi32(0, 1, 2, 3);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(0, 1, 2, 3));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_setr_epi16() {
|
||||
const unsafe fn test_mm_setr_epi16() {
|
||||
let r = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
assert_eq_m128i(r, _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_setr_epi8() {
|
||||
const unsafe fn test_mm_setr_epi8() {
|
||||
#[rustfmt::skip]
|
||||
let r = _mm_setr_epi8(
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||
@@ -4018,27 +4168,27 @@ unsafe fn test_mm_setr_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_setzero_si128() {
|
||||
const unsafe fn test_mm_setzero_si128() {
|
||||
let r = _mm_setzero_si128();
|
||||
assert_eq_m128i(r, _mm_set1_epi64x(0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadl_epi64() {
|
||||
const unsafe fn test_mm_loadl_epi64() {
|
||||
let a = _mm_setr_epi64x(6, 5);
|
||||
let r = _mm_loadl_epi64(ptr::addr_of!(a));
|
||||
assert_eq_m128i(r, _mm_setr_epi64x(6, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_load_si128() {
|
||||
const unsafe fn test_mm_load_si128() {
|
||||
let a = _mm_set_epi64x(5, 6);
|
||||
let r = _mm_load_si128(ptr::addr_of!(a) as *const _);
|
||||
assert_eq_m128i(a, r);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadu_si128() {
|
||||
const unsafe fn test_mm_loadu_si128() {
|
||||
let a = _mm_set_epi64x(5, 6);
|
||||
let r = _mm_loadu_si128(ptr::addr_of!(a) as *const _);
|
||||
assert_eq_m128i(a, r);
|
||||
@@ -4063,7 +4213,7 @@ unsafe fn test_mm_maskmoveu_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_store_si128() {
|
||||
const unsafe fn test_mm_store_si128() {
|
||||
let a = _mm_set1_epi8(9);
|
||||
let mut r = _mm_set1_epi8(0);
|
||||
_mm_store_si128(&mut r, a);
|
||||
@@ -4071,7 +4221,7 @@ unsafe fn test_mm_store_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storeu_si128() {
|
||||
const unsafe fn test_mm_storeu_si128() {
|
||||
let a = _mm_set1_epi8(9);
|
||||
let mut r = _mm_set1_epi8(0);
|
||||
_mm_storeu_si128(&mut r, a);
|
||||
@@ -4079,7 +4229,7 @@ unsafe fn test_mm_storeu_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storel_epi64() {
|
||||
const unsafe fn test_mm_storel_epi64() {
|
||||
let a = _mm_setr_epi64x(2, 9);
|
||||
let mut r = _mm_set1_epi8(0);
|
||||
_mm_storel_epi64(&mut r, a);
|
||||
@@ -4111,7 +4261,7 @@ unsafe fn test_mm_stream_si32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_move_epi64() {
|
||||
const unsafe fn test_mm_move_epi64() {
|
||||
let a = _mm_setr_epi64x(5, 6);
|
||||
let r = _mm_move_epi64(a);
|
||||
assert_eq_m128i(r, _mm_setr_epi64x(5, 0));
|
||||
@@ -4154,7 +4304,7 @@ unsafe fn test_mm_packus_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_extract_epi16() {
|
||||
const unsafe fn test_mm_extract_epi16() {
|
||||
let a = _mm_setr_epi16(-1, 1, 2, 3, 4, 5, 6, 7);
|
||||
let r1 = _mm_extract_epi16::<0>(a);
|
||||
let r2 = _mm_extract_epi16::<3>(a);
|
||||
@@ -4163,7 +4313,7 @@ unsafe fn test_mm_extract_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_insert_epi16() {
|
||||
const unsafe fn test_mm_insert_epi16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let r = _mm_insert_epi16::<0>(a, 9);
|
||||
let e = _mm_setr_epi16(9, 1, 2, 3, 4, 5, 6, 7);
|
||||
@@ -4171,7 +4321,7 @@ unsafe fn test_mm_insert_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_movemask_epi8() {
|
||||
const unsafe fn test_mm_movemask_epi8() {
|
||||
#[rustfmt::skip]
|
||||
let a = _mm_setr_epi8(
|
||||
0b1000_0000u8 as i8, 0b0, 0b1000_0000u8 as i8, 0b01,
|
||||
@@ -4184,7 +4334,7 @@ unsafe fn test_mm_movemask_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_shuffle_epi32() {
|
||||
const unsafe fn test_mm_shuffle_epi32() {
|
||||
let a = _mm_setr_epi32(5, 10, 15, 20);
|
||||
let r = _mm_shuffle_epi32::<0b00_01_01_11>(a);
|
||||
let e = _mm_setr_epi32(20, 10, 10, 5);
|
||||
@@ -4192,7 +4342,7 @@ unsafe fn test_mm_shuffle_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_shufflehi_epi16() {
|
||||
const unsafe fn test_mm_shufflehi_epi16() {
|
||||
let a = _mm_setr_epi16(1, 2, 3, 4, 5, 10, 15, 20);
|
||||
let r = _mm_shufflehi_epi16::<0b00_01_01_11>(a);
|
||||
let e = _mm_setr_epi16(1, 2, 3, 4, 20, 10, 10, 5);
|
||||
@@ -4200,7 +4350,7 @@ unsafe fn test_mm_shufflehi_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_shufflelo_epi16() {
|
||||
const unsafe fn test_mm_shufflelo_epi16() {
|
||||
let a = _mm_setr_epi16(5, 10, 15, 20, 1, 2, 3, 4);
|
||||
let r = _mm_shufflelo_epi16::<0b00_01_01_11>(a);
|
||||
let e = _mm_setr_epi16(20, 10, 10, 5, 1, 2, 3, 4);
|
||||
@@ -4208,7 +4358,7 @@ unsafe fn test_mm_shufflelo_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpackhi_epi8() {
|
||||
const unsafe fn test_mm_unpackhi_epi8() {
|
||||
#[rustfmt::skip]
|
||||
let a = _mm_setr_epi8(
|
||||
0, 1, 2, 3, 4, 5, 6, 7,
|
||||
@@ -4227,7 +4377,7 @@ unsafe fn test_mm_unpackhi_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpackhi_epi16() {
|
||||
const unsafe fn test_mm_unpackhi_epi16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let b = _mm_setr_epi16(8, 9, 10, 11, 12, 13, 14, 15);
|
||||
let r = _mm_unpackhi_epi16(a, b);
|
||||
@@ -4236,7 +4386,7 @@ unsafe fn test_mm_unpackhi_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpackhi_epi32() {
|
||||
const unsafe fn test_mm_unpackhi_epi32() {
|
||||
let a = _mm_setr_epi32(0, 1, 2, 3);
|
||||
let b = _mm_setr_epi32(4, 5, 6, 7);
|
||||
let r = _mm_unpackhi_epi32(a, b);
|
||||
@@ -4245,7 +4395,7 @@ unsafe fn test_mm_unpackhi_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpackhi_epi64() {
|
||||
const unsafe fn test_mm_unpackhi_epi64() {
|
||||
let a = _mm_setr_epi64x(0, 1);
|
||||
let b = _mm_setr_epi64x(2, 3);
|
||||
let r = _mm_unpackhi_epi64(a, b);
|
||||
@@ -4254,7 +4404,7 @@ unsafe fn test_mm_unpackhi_epi64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpacklo_epi8() {
|
||||
const unsafe fn test_mm_unpacklo_epi8() {
|
||||
#[rustfmt::skip]
|
||||
let a = _mm_setr_epi8(
|
||||
0, 1, 2, 3, 4, 5, 6, 7,
|
||||
@@ -4274,7 +4424,7 @@ unsafe fn test_mm_unpacklo_epi8() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpacklo_epi16() {
|
||||
const unsafe fn test_mm_unpacklo_epi16() {
|
||||
let a = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7);
|
||||
let b = _mm_setr_epi16(8, 9, 10, 11, 12, 13, 14, 15);
|
||||
let r = _mm_unpacklo_epi16(a, b);
|
||||
@@ -4283,7 +4433,7 @@ unsafe fn test_mm_unpacklo_epi16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpacklo_epi32() {
|
||||
const unsafe fn test_mm_unpacklo_epi32() {
|
||||
let a = _mm_setr_epi32(0, 1, 2, 3);
|
||||
let b = _mm_setr_epi32(4, 5, 6, 7);
|
||||
let r = _mm_unpacklo_epi32(a, b);
|
||||
@@ -4292,7 +4442,7 @@ unsafe fn test_mm_unpacklo_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpacklo_epi64() {
|
||||
const unsafe fn test_mm_unpacklo_epi64() {
|
||||
let a = _mm_setr_epi64x(0, 1);
|
||||
let b = _mm_setr_epi64x(2, 3);
|
||||
let r = _mm_unpacklo_epi64(a, b);
|
||||
@@ -4301,7 +4451,7 @@ unsafe fn test_mm_unpacklo_epi64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_add_sd() {
|
||||
const unsafe fn test_mm_add_sd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_add_sd(a, b);
|
||||
@@ -4309,7 +4459,7 @@ unsafe fn test_mm_add_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_add_pd() {
|
||||
const unsafe fn test_mm_add_pd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_add_pd(a, b);
|
||||
@@ -4317,7 +4467,7 @@ unsafe fn test_mm_add_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_div_sd() {
|
||||
const unsafe fn test_mm_div_sd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_div_sd(a, b);
|
||||
@@ -4325,7 +4475,7 @@ unsafe fn test_mm_div_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_div_pd() {
|
||||
const unsafe fn test_mm_div_pd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_div_pd(a, b);
|
||||
@@ -4387,7 +4537,7 @@ unsafe fn test_mm_min_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_mul_sd() {
|
||||
const unsafe fn test_mm_mul_sd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_mul_sd(a, b);
|
||||
@@ -4395,7 +4545,7 @@ unsafe fn test_mm_mul_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_mul_pd() {
|
||||
const unsafe fn test_mm_mul_pd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_mul_pd(a, b);
|
||||
@@ -4417,7 +4567,7 @@ unsafe fn test_mm_sqrt_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_sub_sd() {
|
||||
const unsafe fn test_mm_sub_sd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_sub_sd(a, b);
|
||||
@@ -4425,7 +4575,7 @@ unsafe fn test_mm_sub_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_sub_pd() {
|
||||
const unsafe fn test_mm_sub_pd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(5.0, 10.0);
|
||||
let r = _mm_sub_pd(a, b);
|
||||
@@ -4433,7 +4583,7 @@ unsafe fn test_mm_sub_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_and_pd() {
|
||||
const unsafe fn test_mm_and_pd() {
|
||||
let a = transmute(u64x2::splat(5));
|
||||
let b = transmute(u64x2::splat(3));
|
||||
let r = _mm_and_pd(a, b);
|
||||
@@ -4442,7 +4592,7 @@ unsafe fn test_mm_and_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_andnot_pd() {
|
||||
const unsafe fn test_mm_andnot_pd() {
|
||||
let a = transmute(u64x2::splat(5));
|
||||
let b = transmute(u64x2::splat(3));
|
||||
let r = _mm_andnot_pd(a, b);
|
||||
@@ -4451,7 +4601,7 @@ unsafe fn test_mm_andnot_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_or_pd() {
|
||||
const unsafe fn test_mm_or_pd() {
|
||||
let a = transmute(u64x2::splat(5));
|
||||
let b = transmute(u64x2::splat(3));
|
||||
let r = _mm_or_pd(a, b);
|
||||
@@ -4460,7 +4610,7 @@ unsafe fn test_mm_or_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_xor_pd() {
|
||||
const unsafe fn test_mm_xor_pd() {
|
||||
let a = transmute(u64x2::splat(5));
|
||||
let b = transmute(u64x2::splat(3));
|
||||
let r = _mm_xor_pd(a, b);
|
||||
@@ -4739,7 +4889,7 @@ unsafe fn test_mm_ucomineq_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_movemask_pd() {
|
||||
const unsafe fn test_mm_movemask_pd() {
|
||||
let r = _mm_movemask_pd(_mm_setr_pd(-1.0, 5.0));
|
||||
assert_eq!(r, 0b01);
|
||||
|
||||
@@ -4753,7 +4903,7 @@ struct Memory {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_load_pd() {
|
||||
const unsafe fn test_mm_load_pd() {
|
||||
let mem = Memory {
|
||||
data: [1.0f64, 2.0, 3.0, 4.0],
|
||||
};
|
||||
@@ -4765,7 +4915,7 @@ unsafe fn test_mm_load_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_load_sd() {
|
||||
const unsafe fn test_mm_load_sd() {
|
||||
let a = 1.;
|
||||
let expected = _mm_setr_pd(a, 0.);
|
||||
let r = _mm_load_sd(&a);
|
||||
@@ -4773,7 +4923,7 @@ unsafe fn test_mm_load_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadh_pd() {
|
||||
const unsafe fn test_mm_loadh_pd() {
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
let b = 3.;
|
||||
let expected = _mm_setr_pd(_mm_cvtsd_f64(a), 3.);
|
||||
@@ -4782,7 +4932,7 @@ unsafe fn test_mm_loadh_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadl_pd() {
|
||||
const unsafe fn test_mm_loadl_pd() {
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
let b = 3.;
|
||||
let expected = _mm_setr_pd(3., get_m128d(a, 1));
|
||||
@@ -4810,7 +4960,7 @@ struct Memory {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_store_sd() {
|
||||
const unsafe fn test_mm_store_sd() {
|
||||
let mut dest = 0.;
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
_mm_store_sd(&mut dest, a);
|
||||
@@ -4818,7 +4968,7 @@ unsafe fn test_mm_store_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_store_pd() {
|
||||
const unsafe fn test_mm_store_pd() {
|
||||
let mut mem = Memory { data: [0.0f64; 4] };
|
||||
let vals = &mut mem.data;
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
@@ -4830,31 +4980,21 @@ unsafe fn test_mm_store_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storeu_pd() {
|
||||
const unsafe fn test_mm_storeu_pd() {
|
||||
// guaranteed to be aligned to 16 bytes
|
||||
let mut mem = Memory { data: [0.0f64; 4] };
|
||||
let vals = &mut mem.data;
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
|
||||
let mut ofs = 0;
|
||||
let mut p = vals.as_mut_ptr();
|
||||
|
||||
// Make sure p is **not** aligned to 16-byte boundary
|
||||
if (p as usize) & 0xf == 0 {
|
||||
ofs = 1;
|
||||
p = p.add(1);
|
||||
}
|
||||
|
||||
// so p is *not* aligned to 16 bytes
|
||||
let p = vals.as_mut_ptr().offset(1);
|
||||
_mm_storeu_pd(p, *black_box(&a));
|
||||
|
||||
if ofs > 0 {
|
||||
assert_eq!(vals[ofs - 1], 0.0);
|
||||
}
|
||||
assert_eq!(vals[ofs + 0], 1.0);
|
||||
assert_eq!(vals[ofs + 1], 2.0);
|
||||
assert_eq!(*vals, [0.0, 1.0, 2.0, 0.0]);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storeu_si16() {
|
||||
const unsafe fn test_mm_storeu_si16() {
|
||||
let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
|
||||
let mut r = _mm_setr_epi16(9, 10, 11, 12, 13, 14, 15, 16);
|
||||
_mm_storeu_si16(ptr::addr_of_mut!(r).cast(), a);
|
||||
@@ -4863,7 +5003,7 @@ unsafe fn test_mm_storeu_si16() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storeu_si32() {
|
||||
const unsafe fn test_mm_storeu_si32() {
|
||||
let a = _mm_setr_epi32(1, 2, 3, 4);
|
||||
let mut r = _mm_setr_epi32(5, 6, 7, 8);
|
||||
_mm_storeu_si32(ptr::addr_of_mut!(r).cast(), a);
|
||||
@@ -4872,7 +5012,7 @@ unsafe fn test_mm_storeu_si32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storeu_si64() {
|
||||
const unsafe fn test_mm_storeu_si64() {
|
||||
let a = _mm_setr_epi64x(1, 2);
|
||||
let mut r = _mm_setr_epi64x(3, 4);
|
||||
_mm_storeu_si64(ptr::addr_of_mut!(r).cast(), a);
|
||||
@@ -4881,7 +5021,7 @@ unsafe fn test_mm_storeu_si64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_store1_pd() {
|
||||
const unsafe fn test_mm_store1_pd() {
|
||||
let mut mem = Memory { data: [0.0f64; 4] };
|
||||
let vals = &mut mem.data;
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
@@ -4893,7 +5033,7 @@ unsafe fn test_mm_store1_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_store_pd1() {
|
||||
const unsafe fn test_mm_store_pd1() {
|
||||
let mut mem = Memory { data: [0.0f64; 4] };
|
||||
let vals = &mut mem.data;
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
@@ -4905,7 +5045,7 @@ unsafe fn test_mm_store_pd1() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storer_pd() {
|
||||
const unsafe fn test_mm_storer_pd() {
|
||||
let mut mem = Memory { data: [0.0f64; 4] };
|
||||
let vals = &mut mem.data;
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
@@ -4917,7 +5057,7 @@ unsafe fn test_mm_storer_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storeh_pd() {
|
||||
const unsafe fn test_mm_storeh_pd() {
|
||||
let mut dest = 0.;
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
_mm_storeh_pd(&mut dest, a);
|
||||
@@ -4925,7 +5065,7 @@ unsafe fn test_mm_storeh_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_storel_pd() {
|
||||
const unsafe fn test_mm_storel_pd() {
|
||||
let mut dest = 0.;
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
_mm_storel_pd(&mut dest, a);
|
||||
@@ -4933,7 +5073,7 @@ unsafe fn test_mm_storel_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadr_pd() {
|
||||
const unsafe fn test_mm_loadr_pd() {
|
||||
let mut mem = Memory {
|
||||
data: [1.0f64, 2.0, 3.0, 4.0],
|
||||
};
|
||||
@@ -4945,48 +5085,44 @@ unsafe fn test_mm_loadr_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadu_pd() {
|
||||
const unsafe fn test_mm_loadu_pd() {
|
||||
// guaranteed to be aligned to 16 bytes
|
||||
let mut mem = Memory {
|
||||
data: [1.0f64, 2.0, 3.0, 4.0],
|
||||
};
|
||||
let vals = &mut mem.data;
|
||||
let mut d = vals.as_ptr();
|
||||
|
||||
// make sure d is not aligned to 16-byte boundary
|
||||
let mut offset = 0;
|
||||
if (d as usize) & 0xf == 0 {
|
||||
offset = 1;
|
||||
d = d.add(offset);
|
||||
}
|
||||
// so this will *not* be aligned to 16 bytes
|
||||
let d = vals.as_ptr().offset(1);
|
||||
|
||||
let r = _mm_loadu_pd(d);
|
||||
let e = _mm_add_pd(_mm_setr_pd(1.0, 2.0), _mm_set1_pd(offset as f64));
|
||||
let e = _mm_setr_pd(2.0, 3.0);
|
||||
assert_eq_m128d(r, e);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadu_si16() {
|
||||
const unsafe fn test_mm_loadu_si16() {
|
||||
let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
|
||||
let r = _mm_loadu_si16(ptr::addr_of!(a) as *const _);
|
||||
assert_eq_m128i(r, _mm_setr_epi16(1, 0, 0, 0, 0, 0, 0, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadu_si32() {
|
||||
const unsafe fn test_mm_loadu_si32() {
|
||||
let a = _mm_setr_epi32(1, 2, 3, 4);
|
||||
let r = _mm_loadu_si32(ptr::addr_of!(a) as *const _);
|
||||
assert_eq_m128i(r, _mm_setr_epi32(1, 0, 0, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_loadu_si64() {
|
||||
const unsafe fn test_mm_loadu_si64() {
|
||||
let a = _mm_setr_epi64x(5, 6);
|
||||
let r = _mm_loadu_si64(ptr::addr_of!(a) as *const _);
|
||||
assert_eq_m128i(r, _mm_setr_epi64x(5, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtpd_ps() {
|
||||
const unsafe fn test_mm_cvtpd_ps() {
|
||||
let r = _mm_cvtpd_ps(_mm_setr_pd(-1.0, 5.0));
|
||||
assert_eq_m128(r, _mm_setr_ps(-1.0, 5.0, 0.0, 0.0));
|
||||
|
||||
@@ -5001,7 +5137,7 @@ unsafe fn test_mm_cvtpd_ps() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtps_pd() {
|
||||
const unsafe fn test_mm_cvtps_pd() {
|
||||
let r = _mm_cvtps_pd(_mm_setr_ps(-1.0, 2.0, -3.0, 5.0));
|
||||
assert_eq_m128d(r, _mm_setr_pd(-1.0, 2.0));
|
||||
|
||||
@@ -5070,13 +5206,13 @@ unsafe fn test_mm_cvtsd_ss() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsd_f64() {
|
||||
const unsafe fn test_mm_cvtsd_f64() {
|
||||
let r = _mm_cvtsd_f64(_mm_setr_pd(-1.1, 2.2));
|
||||
assert_eq!(r, -1.1);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtss_sd() {
|
||||
const unsafe fn test_mm_cvtss_sd() {
|
||||
let a = _mm_setr_pd(-1.1, 2.2);
|
||||
let b = _mm_setr_ps(1.0, 2.0, 3.0, 4.0);
|
||||
|
||||
@@ -5124,57 +5260,57 @@ unsafe fn test_mm_cvttps_epi32() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_sd() {
|
||||
const unsafe fn test_mm_set_sd() {
|
||||
let r = _mm_set_sd(-1.0_f64);
|
||||
assert_eq_m128d(r, _mm_setr_pd(-1.0_f64, 0_f64));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set1_pd() {
|
||||
const unsafe fn test_mm_set1_pd() {
|
||||
let r = _mm_set1_pd(-1.0_f64);
|
||||
assert_eq_m128d(r, _mm_setr_pd(-1.0_f64, -1.0_f64));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_pd1() {
|
||||
const unsafe fn test_mm_set_pd1() {
|
||||
let r = _mm_set_pd1(-2.0_f64);
|
||||
assert_eq_m128d(r, _mm_setr_pd(-2.0_f64, -2.0_f64));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_set_pd() {
|
||||
const unsafe fn test_mm_set_pd() {
|
||||
let r = _mm_set_pd(1.0_f64, 5.0_f64);
|
||||
assert_eq_m128d(r, _mm_setr_pd(5.0_f64, 1.0_f64));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_setr_pd() {
|
||||
const unsafe fn test_mm_setr_pd() {
|
||||
let r = _mm_setr_pd(1.0_f64, -5.0_f64);
|
||||
assert_eq_m128d(r, _mm_setr_pd(1.0_f64, -5.0_f64));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_setzero_pd() {
|
||||
const unsafe fn test_mm_setzero_pd() {
|
||||
let r = _mm_setzero_pd();
|
||||
assert_eq_m128d(r, _mm_setr_pd(0_f64, 0_f64));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_load1_pd() {
|
||||
const unsafe fn test_mm_load1_pd() {
|
||||
let d = -5.0;
|
||||
let r = _mm_load1_pd(&d);
|
||||
assert_eq_m128d(r, _mm_setr_pd(d, d));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_load_pd1() {
|
||||
const unsafe fn test_mm_load_pd1() {
|
||||
let d = -5.0;
|
||||
let r = _mm_load_pd1(&d);
|
||||
assert_eq_m128d(r, _mm_setr_pd(d, d));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpackhi_pd() {
|
||||
const unsafe fn test_mm_unpackhi_pd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(3.0, 4.0);
|
||||
let r = _mm_unpackhi_pd(a, b);
|
||||
@@ -5182,7 +5318,7 @@ unsafe fn test_mm_unpackhi_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_unpacklo_pd() {
|
||||
const unsafe fn test_mm_unpacklo_pd() {
|
||||
let a = _mm_setr_pd(1.0, 2.0);
|
||||
let b = _mm_setr_pd(3.0, 4.0);
|
||||
let r = _mm_unpacklo_pd(a, b);
|
||||
@@ -5190,7 +5326,7 @@ unsafe fn test_mm_unpacklo_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_shuffle_pd() {
|
||||
const unsafe fn test_mm_shuffle_pd() {
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
let b = _mm_setr_pd(3., 4.);
|
||||
let expected = _mm_setr_pd(1., 3.);
|
||||
@@ -5199,7 +5335,7 @@ unsafe fn test_mm_shuffle_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_move_sd() {
|
||||
const unsafe fn test_mm_move_sd() {
|
||||
let a = _mm_setr_pd(1., 2.);
|
||||
let b = _mm_setr_pd(3., 4.);
|
||||
let expected = _mm_setr_pd(3., 2.);
|
||||
@@ -5208,7 +5344,7 @@ unsafe fn test_mm_move_sd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_castpd_ps() {
|
||||
const unsafe fn test_mm_castpd_ps() {
|
||||
let a = _mm_set1_pd(0.);
|
||||
let expected = _mm_set1_ps(0.);
|
||||
let r = _mm_castpd_ps(a);
|
||||
@@ -5216,7 +5352,7 @@ unsafe fn test_mm_castpd_ps() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_castpd_si128() {
|
||||
const unsafe fn test_mm_castpd_si128() {
|
||||
let a = _mm_set1_pd(0.);
|
||||
let expected = _mm_set1_epi64x(0);
|
||||
let r = _mm_castpd_si128(a);
|
||||
@@ -5224,7 +5360,7 @@ unsafe fn test_mm_castpd_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_castps_pd() {
|
||||
const unsafe fn test_mm_castps_pd() {
|
||||
let a = _mm_set1_ps(0.);
|
||||
let expected = _mm_set1_pd(0.);
|
||||
let r = _mm_castps_pd(a);
|
||||
@@ -5232,7 +5368,7 @@ unsafe fn test_mm_castps_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_castps_si128() {
|
||||
const unsafe fn test_mm_castps_si128() {
|
||||
let a = _mm_set1_ps(0.);
|
||||
let expected = _mm_set1_epi32(0);
|
||||
let r = _mm_castps_si128(a);
|
||||
@@ -5240,7 +5376,7 @@ unsafe fn test_mm_castps_si128() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_castsi128_pd() {
|
||||
const unsafe fn test_mm_castsi128_pd() {
|
||||
let a = _mm_set1_epi64x(0);
|
||||
let expected = _mm_set1_pd(0.);
|
||||
let r = _mm_castsi128_pd(a);
|
||||
@@ -5248,7 +5384,7 @@ unsafe fn test_mm_castsi128_pd() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_castsi128_ps() {
|
||||
const unsafe fn test_mm_castsi128_ps() {
|
||||
let a = _mm_set1_epi32(0);
|
||||
let expected = _mm_set1_ps(0.);
|
||||
let r = _mm_castsi128_ps(a);
|
||||
|
||||
@@ -95,7 +95,8 @@ pub unsafe fn _mm_stream_si64(mem_addr: *mut i64, a: i64) {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi64_si128(a: i64) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi64_si128(a: i64) -> __m128i {
|
||||
_mm_set_epi64x(0, a)
|
||||
}
|
||||
|
||||
@@ -107,7 +108,8 @@ pub fn _mm_cvtsi64_si128(a: i64) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi64x_si128(a: i64) -> __m128i {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi64x_si128(a: i64) -> __m128i {
|
||||
_mm_cvtsi64_si128(a)
|
||||
}
|
||||
|
||||
@@ -118,7 +120,8 @@ pub fn _mm_cvtsi64x_si128(a: i64) -> __m128i {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi128_si64(a: __m128i) -> i64 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi128_si64(a: __m128i) -> i64 {
|
||||
unsafe { simd_extract!(a.as_i64x2(), 0) }
|
||||
}
|
||||
|
||||
@@ -129,7 +132,8 @@ pub fn _mm_cvtsi128_si64(a: __m128i) -> i64 {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(movq))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi128_si64x(a: __m128i) -> i64 {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi128_si64x(a: __m128i) -> i64 {
|
||||
_mm_cvtsi128_si64(a)
|
||||
}
|
||||
|
||||
@@ -141,7 +145,8 @@ pub fn _mm_cvtsi128_si64x(a: __m128i) -> i64 {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtsi2sd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi64_sd(a: __m128d, b: i64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi64_sd(a: __m128d, b: i64) -> __m128d {
|
||||
unsafe { simd_insert!(a, 0, b as f64) }
|
||||
}
|
||||
|
||||
@@ -153,13 +158,15 @@ pub fn _mm_cvtsi64_sd(a: __m128d, b: i64) -> __m128d {
|
||||
#[target_feature(enable = "sse2")]
|
||||
#[cfg_attr(test, assert_instr(cvtsi2sd))]
|
||||
#[stable(feature = "simd_x86", since = "1.27.0")]
|
||||
pub fn _mm_cvtsi64x_sd(a: __m128d, b: i64) -> __m128d {
|
||||
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
|
||||
pub const fn _mm_cvtsi64x_sd(a: __m128d, b: i64) -> __m128d {
|
||||
_mm_cvtsi64_sd(a, b)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::core_arch::arch::x86_64::*;
|
||||
use crate::core_arch::assert_eq_const as assert_eq;
|
||||
use std::boxed;
|
||||
use std::ptr;
|
||||
use stdarch_test::simd_test;
|
||||
@@ -206,19 +213,19 @@ unsafe fn test_mm_stream_si64() {
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsi64_si128() {
|
||||
const unsafe fn test_mm_cvtsi64_si128() {
|
||||
let r = _mm_cvtsi64_si128(5);
|
||||
assert_eq_m128i(r, _mm_setr_epi64x(5, 0));
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsi128_si64() {
|
||||
const unsafe fn test_mm_cvtsi128_si64() {
|
||||
let r = _mm_cvtsi128_si64(_mm_setr_epi64x(5, 0));
|
||||
assert_eq!(r, 5);
|
||||
}
|
||||
|
||||
#[simd_test(enable = "sse2")]
|
||||
unsafe fn test_mm_cvtsi64_sd() {
|
||||
const unsafe fn test_mm_cvtsi64_sd() {
|
||||
let a = _mm_set1_pd(3.5);
|
||||
let r = _mm_cvtsi64_sd(a, 5);
|
||||
assert_eq_m128d(r, _mm_setr_pd(5.0, 3.5));
|
||||
|
||||
Reference in New Issue
Block a user