#[rustfmt::skip]
macro_rules! _mm_reduce2_ps_v2 {
($value:expr; $op1:ident $last1:ident, $op2:ident $last2:ident) => {#[allow(unused_unsafe)] unsafe {
let xmm0 = $value;
let xmm1 = arch::_mm_shuffle_ps(xmm0, xmm0, 0b11_10_11_10);
let xmm_a = arch::$op1(xmm0, xmm1);
let xmm_b = arch::$op2(xmm0, xmm1);
let xmm1 = arch::_mm_movehdup_ps(xmm_a);
let xmm2 = arch::_mm_movehdup_ps(xmm_b);
(
arch::_mm_cvtss_f32(arch::$last1(xmm_a, xmm1)),
arch::_mm_cvtss_f32(arch::$last2(xmm_b, xmm2)),
)
}};
}
#[rustfmt::skip]
macro_rules! _mm_reduce_epi16_v2 {
($value:expr; $op:ident) => {{#[allow(unused_unsafe)] unsafe {
let x = $value;
let x = arch::$op(x, arch::_mm_bsrli_si128(x, 8)); let x = arch::$op(x, arch::_mm_bsrli_si128(x, 4)); let x = arch::$op(x, arch::_mm_bsrli_si128(x, 2)); arch::_mm_extract_epi16::<0>(x) as i16
}}};
}
#[rustfmt::skip]
macro_rules! _mm_reduce_epi8_v2 {
($value:expr; $op:ident) => {{#[allow(unused_unsafe)] unsafe {
let x = $value;
let x = arch::$op(x, arch::_mm_bsrli_si128(x, 8)); let x = arch::$op(x, arch::_mm_bsrli_si128(x, 4)); let x = arch::$op(x, arch::_mm_bsrli_si128(x, 2)); let x = arch::$op(x, arch::_mm_bsrli_si128(x, 1)); arch::_mm_extract_epi8::<0>(x) as i8
}}};
}
#[rustfmt::skip]
macro_rules! _mm_reduce_ps_v2 {
($value:expr; $op:ident $last:ident) => {#[allow(unused_unsafe)] unsafe {
let xmm0 = $value;
let xmm1 = arch::_mm_shuffle_ps(xmm0, xmm0, 0b11_10_11_10);
let xmm0 = arch::$op(xmm0, xmm1);
let xmm1 = arch::_mm_movehdup_ps(xmm0);
arch::_mm_cvtss_f32(arch::$last(xmm0, xmm1))
}};
}