#[rustfmt::skip]
macro_rules! _mm256_reduce2_ps_v3 {
($value:expr; $op1:ident $last1:ident, $op2:ident $last2:ident) => {#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castps256_ps128(ymm0);
let xmm1 = arch::_mm256_extractf128_ps(ymm0, 1);
let xmm_a = arch::$op1(xmm0, xmm1);
let xmm_b = arch::$op2(xmm0, xmm1);
(
_mm_reduce_ps_v2!(xmm_a; $op1 $last1),
_mm_reduce_ps_v2!(xmm_b; $op2 $last2),
)
}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce2_pd_v3 {
($value:expr; $op1:ident $last1:ident, $op2:ident $last2:ident) => {#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castpd256_pd128(ymm0);
let xmm1 = arch::_mm256_extractf128_pd(ymm0, 1);
let xmm_a = arch::$op1(xmm0, xmm1);
let xmm_b = arch::$op2(xmm0, xmm1);
(
_mm_reduce_pd_v1!(xmm_a; $op1 $last1),
_mm_reduce_pd_v1!(xmm_b; $op2 $last2),
)
}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce_ps_v3 {
($value:expr; $op:ident $last:ident) => {#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castps256_ps128(ymm0);
let xmm1 = arch::_mm256_extractf128_ps(ymm0, 1);
let xmm0 = arch::$op(xmm0, xmm1);
_mm_reduce_ps_v2!(xmm0; $op $last)
}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce_pd_v3 {
($value:expr; $op:ident $last:ident) => {#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castpd256_pd128(ymm0);
let xmm1 = arch::_mm256_extractf128_pd(ymm0, 1);
let xmm0 = arch::$op(xmm0, xmm1);
_mm_reduce_pd_v1!(xmm0; $op $last)
}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce_pd3_v3 {
($value:expr; $last:ident) => {#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castpd256_pd128(ymm0);
let xmm1 = arch::_mm256_castpd256_pd128(arch::_mm256_permute4x64_pd(ymm0, 0b00_00_00_01));
let xmm1 = arch::$last(xmm0, xmm1);
let xmm2 = arch::_mm256_castpd256_pd128(arch::_mm256_permute4x64_pd(ymm0, 0b00_00_00_10));
arch::_mm_cvtsd_f64(arch::$last(xmm1, xmm2))
}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce_epi32_v3 {
($value:expr; $op:ident $last:ident) => {{#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castsi256_si128(ymm0);
let xmm1 = arch::_mm256_extractf128_si256(ymm0, 1);
let xmm0 = arch::$op(xmm0, xmm1);
_mm_reduce_epi32_v1!(xmm0; $op $last)
}}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce_epi16_v3 {
($value:expr; $op128:ident) => {{#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castsi256_si128(ymm0);
let xmm1 = arch::_mm256_extracti128_si256(ymm0, 1);
let xmm0 = arch::$op128(xmm0, xmm1); _mm_reduce_epi16_v2!(xmm0; $op128)
}}};
}
#[rustfmt::skip]
macro_rules! _mm256_reduce_epi8_v3 {
($value:expr; $op128:ident) => {{#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castsi256_si128(ymm0);
let xmm1 = arch::_mm256_extracti128_si256(ymm0, 1);
let xmm0 = arch::$op128(xmm0, xmm1); _mm_reduce_epi8_v2!(xmm0; $op128)
}}};
}
macro_rules! _mm256_reduce_epi64_v3 {
($value:expr; $op:ident $last:ident) => {{#[allow(unused_unsafe)] unsafe {
let ymm0 = $value;
let xmm0 = arch::_mm256_castsi256_si128(ymm0);
let xmm1 = arch::_mm256_extractf128_si256(ymm0, 1);
let xmm0 = arch::$op(xmm0, xmm1);
_mm_reduce_epi64_v1!(xmm0; $last)
}}};
}