#![cfg(target_feature = "sse4.2")]
use super::*;
#[must_use]
#[inline(always)]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn cmp_gt_mask_i64_m128i(a: m128i, b: m128i) -> m128i {
m128i(unsafe { _mm_cmpgt_epi64(a.0, b.0) })
}
#[must_use]
#[inline(always)]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn crc32_u8(crc: u32, v: u8) -> u32 {
unsafe { _mm_crc32_u8(crc, v) }
}
#[must_use]
#[inline(always)]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn crc32_u16(crc: u32, v: u16) -> u32 {
unsafe { _mm_crc32_u16(crc, v) }
}
#[must_use]
#[inline(always)]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn crc32_u32(crc: u32, v: u32) -> u32 {
unsafe { _mm_crc32_u32(crc, v) }
}
#[must_use]
#[inline(always)]
#[cfg(target_arch = "x86_64")]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn crc32_u64(crc: u64, v: u64) -> u64 {
unsafe { _mm_crc32_u64(crc, v) }
}
pub const STR_CMP_U8: i32 = _SIDD_UBYTE_OPS;
pub const STR_CMP_U16: i32 = _SIDD_UWORD_OPS;
pub const STR_CMP_I8: i32 = _SIDD_SBYTE_OPS;
pub const STR_CMP_I16: i32 = _SIDD_SWORD_OPS;
pub const STR_CMP_EQ_ANY: i32 = _SIDD_CMP_EQUAL_ANY;
pub const STR_CMP_RANGES: i32 = _SIDD_CMP_RANGES;
pub const STR_CMP_EQ_EACH: i32 = _SIDD_CMP_EQUAL_EACH;
pub const STR_CMP_EQ_ORDERED: i32 = _SIDD_CMP_EQUAL_ORDERED;
pub const STR_CMP_FIRST_MATCH: i32 = _SIDD_LEAST_SIGNIFICANT;
pub const STR_CMP_LAST_MATCH: i32 = _SIDD_MOST_SIGNIFICANT;
pub const STR_CMP_BIT_MASK: i32 = _SIDD_BIT_MASK;
pub const STR_CMP_UNIT_MASK: i32 = _SIDD_UNIT_MASK;
#[must_use]
#[inline(always)]
#[cfg(target_arch = "x86_64")]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn search_implicit_str_for_index<const IMM: i32>(
needle: m128i, haystack: m128i,
) -> i32 {
unsafe { _mm_cmpistri(needle.0, haystack.0, IMM) }
}
#[must_use]
#[inline(always)]
#[cfg(target_arch = "x86_64")]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn search_explicit_str_for_index<const IMM: i32>(
needle: m128i, needle_len: i32, haystack: m128i, haystack_len: i32,
) -> i32 {
unsafe { _mm_cmpestri(needle.0, needle_len, haystack.0, haystack_len, IMM) }
}
#[must_use]
#[inline(always)]
#[cfg(target_arch = "x86_64")]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn search_implicit_str_for_mask<const IMM: i32>(
needle: m128i, haystack: m128i,
) -> m128i {
m128i(unsafe { _mm_cmpistrm(needle.0, haystack.0, IMM) })
}
#[must_use]
#[inline(always)]
#[cfg(target_arch = "x86_64")]
#[cfg_attr(docsrs, doc(cfg(target_feature = "sse4.2")))]
pub fn search_explicit_str_for_mask<const IMM: i32>(
needle: m128i, needle_len: i32, haystack: m128i, haystack_len: i32,
) -> m128i {
m128i(unsafe {
_mm_cmpestrm(needle.0, needle_len, haystack.0, haystack_len, IMM)
})
}