use super::*;
#[inline(always)]
pub unsafe fn _mm_deinterleave3_ps(a: __m128, b: __m128, c: __m128) -> (__m128, __m128, __m128) {
let t0 = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(2, 3, 1, 2) }>(b, c); let t1 = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(1, 2, 0, 1) }>(a, b);
let x = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(0, 3, 0, 2) }>(a, t0);
let y = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(0, 2, 1, 3) }>(t1, t0);
let z = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(1, 3, 0, 3) }>(t1, c);
(x, y, z)
}
#[inline(always)]
pub unsafe fn _mm_interleave3_ps(x: __m128, y: __m128, z: __m128) -> (__m128, __m128, __m128) {
let xy = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(0, 2, 0, 2) }>(x, y); let yz = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(1, 3, 1, 3) }>(y, z); let zx = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(0, 2, 1, 3) }>(z, x);
let a = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(0, 2, 0, 2) }>(xy, zx); let b = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(0, 2, 1, 3) }>(yz, xy); let c = _mm_shuffle_ps::<{ MM_SHUFFLE_R!(1, 3, 1, 3) }>(zx, yz);
(a, b, c)
}
#[inline(always)]
pub unsafe fn _mm_deinterleave3_pd(a: __m128d, b: __m128d, c: __m128d) -> (__m128d, __m128d, __m128d) {
let x = _mm_shuffle_pd::<{ MM_SHUFFLE_R!(0, 1) }>(a, b);
let y = _mm_shuffle_pd::<{ MM_SHUFFLE_R!(1, 0) }>(a, c);
let z = _mm_shuffle_pd::<{ MM_SHUFFLE_R!(0, 1) }>(b, c);
(x, y, z)
}
#[inline(always)]
pub unsafe fn _mm_interleave3_pd(x: __m128d, y: __m128d, z: __m128d) -> (__m128d, __m128d, __m128d) {
let a = _mm_shuffle_pd::<{ MM_SHUFFLE_R!(0, 0) }>(x, y); let b = _mm_shuffle_pd::<{ MM_SHUFFLE_R!(0, 1) }>(z, x); let c = _mm_shuffle_pd::<{ MM_SHUFFLE_R!(1, 1) }>(y, z);
(a, b, c)
}
#[inline(always)]
pub unsafe fn _mm_deinterleave3_epi32(a: __m128i, b: __m128i, c: __m128i) -> (__m128i, __m128i, __m128i) {
let (x, y, z) = _mm_deinterleave3_ps(_mm_castsi128_ps(a), _mm_castsi128_ps(b), _mm_castsi128_ps(c));
(_mm_castps_si128(x), _mm_castps_si128(y), _mm_castps_si128(z))
}
#[inline(always)]
pub unsafe fn _mm_interleave3_epi32(x: __m128i, y: __m128i, z: __m128i) -> (__m128i, __m128i, __m128i) {
let (a, b, c) = _mm_interleave3_ps(_mm_castsi128_ps(x), _mm_castsi128_ps(y), _mm_castsi128_ps(z));
(_mm_castps_si128(a), _mm_castps_si128(b), _mm_castps_si128(c))
}
#[inline(always)]
pub unsafe fn _mm_deinterleave3_epi64(a: __m128i, b: __m128i, c: __m128i) -> (__m128i, __m128i, __m128i) {
let (x, y, z) = _mm_deinterleave3_pd(_mm_castsi128_pd(a), _mm_castsi128_pd(b), _mm_castsi128_pd(c));
(_mm_castpd_si128(x), _mm_castpd_si128(y), _mm_castpd_si128(z))
}
#[inline(always)]
pub unsafe fn _mm_interleave3_epi64(x: __m128i, y: __m128i, z: __m128i) -> (__m128i, __m128i, __m128i) {
let (a, b, c) = _mm_interleave3_pd(_mm_castsi128_pd(x), _mm_castsi128_pd(y), _mm_castsi128_pd(z));
(_mm_castpd_si128(a), _mm_castpd_si128(b), _mm_castpd_si128(c))
}