thermite 0.2.0-beta.0

High-performance, generic, ISA-portable SIMD library with a policy-configurable transcendental math library
Documentation
use super::*;

#[inline(always)]
pub unsafe fn _mm256_cmpgt_epu8x_v3(a: __m256i, b: __m256i) -> __m256i {
    let mask = _mm256_set1_epi8(i8::MIN); // 0x80
    _mm256_cmpgt_epi8(_mm256_xor_si256(a, mask), _mm256_xor_si256(b, mask))
}

#[inline(always)]
pub unsafe fn _mm256_cmpgt_epu16x_v3(a: __m256i, b: __m256i) -> __m256i {
    let mask = _mm256_set1_epi16(i16::MIN); // 0x8000
    _mm256_cmpgt_epi16(_mm256_xor_si256(a, mask), _mm256_xor_si256(b, mask))
}

#[inline(always)]
pub unsafe fn _mm256_cmpgt_epu32x_v3(a: __m256i, b: __m256i) -> __m256i {
    let mask = _mm256_set1_epu32x(1u32 << 31);
    _mm256_cmpgt_epi32(_mm256_xor_si256(a, mask), _mm256_xor_si256(b, mask))
}

#[inline(always)]
pub unsafe fn _mm256_cmpgt_epu64x_v3(a: __m256i, b: __m256i) -> __m256i {
    let mask = _mm256_set1_epu64x(1u64 << 63);
    _mm256_cmpgt_epi64(_mm256_xor_si256(a, mask), _mm256_xor_si256(b, mask))
}

#[inline(always)]
pub unsafe fn _mm256_cmpge_epu32x_v3(lhs: __m256i, rhs: __m256i) -> __m256i {
    _mm256_cmpeq_epi32(_mm256_max_epu32(lhs, rhs), lhs)
}

#[inline(always)]
pub unsafe fn _mm256_cmple_epu32x_v3(lhs: __m256i, rhs: __m256i) -> __m256i {
    _mm256_cmpge_epu32x_v3(rhs, lhs)
}

// #[inline(always)]
// pub unsafe fn _mm256_cmpgt_epu32x(lhs: __m256i, rhs: __m256i) -> __m256i {
//     _mm256_xor_si256(_mm256_cmple_epu32x(lhs, rhs), _mm256_set1_epi32(-1))
// }

#[inline(always)]
pub unsafe fn _mm256_cmplt_epu32x_v3(lhs: __m256i, rhs: __m256i) -> __m256i {
    _mm256_cmpgt_epu32x_v3(rhs, lhs)
}

#[inline(always)]
pub unsafe fn _mm256_min_epi64x_v3(a: __m256i, b: __m256i) -> __m256i {
    _mm256_blendv_epi8(a, b, _mm256_cmpgt_epi64(a, b))
}

#[inline(always)]
pub unsafe fn _mm256_max_epi64x_v3(a: __m256i, b: __m256i) -> __m256i {
    _mm256_blendv_epi8(b, a, _mm256_cmpgt_epi64(a, b))
}

#[inline(always)]
pub unsafe fn _mm256_max_epu64x_v3(a: __m256i, b: __m256i) -> __m256i {
    _mm256_blendv_epi8(b, a, _mm256_cmpgt_epu64x_v3(a, b))
}

#[inline(always)]
pub unsafe fn _mm256_min_epu64x_v3(a: __m256i, b: __m256i) -> __m256i {
    _mm256_blendv_epi8(a, b, _mm256_cmpgt_epu64x_v3(a, b))
}