#
core/stdarch/crates/core_arch/src/x86_64/
sse42.rs

    1//! `x86_64`'s Streaming SIMD Extensions 4.2 (SSE4.2)
    2
    3#[cfg(test)]
    4use stdarch_test::assert_instr;
    5
    6#[allow(improper_ctypes)]
    7unsafe extern "C" {
    8    #[link_name = "llvm.x86.sse42.crc32.64.64"]
    9    fn crc32_64_64(crc: u64, v: u64) -> u64;
    10}
    11
    12/// Starting with the initial value in `crc`, return the accumulated
    13/// CRC32-C value for unsigned 64-bit integer `v`.
    14///
    15/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u64)
    16#[inline]
    17#[target_feature(enable = "sse4.2")]
    18#[cfg_attr(test, assert_instr(crc32))]
    19#[stable(feature = "simd_x86", since = "1.27.0")]
    20pub fn _mm_crc32_u64(crc: u64, v: u64) -> u64 {
    21    unsafe { crc32_64_64(crc, v) }
    22}
    23
    24#[cfg(test)]
    25mod tests {
    26    use crate::core_arch::arch::x86_64::*;
    27
    28    use stdarch_test::simd_test;
    29
    30    #[simd_test(enable = "sse4.2")]
    31    unsafe fn test_mm_crc32_u64() {
    32        let crc = 0x7819dccd3e824;
    33        let v = 0x2a22b845fed;
    34        let i = _mm_crc32_u64(crc, v);
    35        assert_eq!(i, 0xbb6cdc6c);
    36    }
    37}