moirai-utils 0.7.0

Utility functions and data structures for Moirai concurrency library
Documentation
use super::arch;

#[inline]
pub(super) fn native_vector_available() -> bool {
    #[cfg(target_arch = "x86_64")]
    {
        if arch::has_avx2_support() {
            return true;
        }
    }

    #[cfg(target_arch = "aarch64")]
    {
        if arch::has_neon_support() {
            return true;
        }
    }

    false
}

#[inline]
pub(super) fn uses_native_vector_path(len: usize) -> bool {
    #[cfg(target_arch = "x86_64")]
    {
        if arch::has_avx2_support() && len >= arch::LANES {
            return true;
        }
    }

    #[cfg(target_arch = "aarch64")]
    {
        if arch::has_neon_support() && len >= arch::LANES {
            return true;
        }
    }

    false
}

#[inline]
pub(super) fn native_wide_vector_available() -> bool {
    #[cfg(target_arch = "x86_64")]
    {
        if arch::has_avx2_support() {
            return true;
        }
    }

    false
}

#[inline]
pub(super) fn uses_native_wide_vector_path(len: usize) -> bool {
    #[cfg(target_arch = "x86_64")]
    {
        if arch::has_avx2_support() && len >= arch::LANES {
            return true;
        }
    }

    let _ = len;
    false
}

#[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
#[inline]
pub(super) fn native_vector_chunk_len(len: usize) -> Option<usize> {
    native_vector_available()
        .then_some((len / arch::LANES) * arch::LANES)
        .filter(|chunk_len| *chunk_len != 0)
}