core::arch::x86_64::_mm256_shuffle_epi8 - Rust
Description: API documentation for the Rust `_mm256_shuffle_epi8` fn in crate `core`.
Keywords: rust, rustlang, rust-lang, _mm256_shuffle_epi8

# 1.27.0[−][src]Function core::arch::x86_64::_mm256_shuffle_epi8

    pub unsafe fn _mm256_shuffle_epi8(a: __m256i, b: __m256i) -> __m256i

This is supported on x86-64 and target feature `avx2` only.

Shuffles bytes from `a` according to the content of `b`.

The last 4 bits of each byte of `b` are used as addresses into the 32 bytes of `a`.

In addition, if the highest significant bit of a byte of `b` is set, the respective destination byte is set to 0.

The low and high halves of the vectors are shuffled separately.

Picturing `a` and `b` as `[u8; 32]`, `_mm256_shuffle_epi8` is logically equivalent to:

    fn mm256_shuffle_epi8(a: [u8; 32], b: [u8; 32]) -> [u8; 32] {
        let mut r = [0; 32];
        for i in 0..16 {
            // if the most significant bit of b is set,
            // then the destination byte is set to 0.
            if b[i] & 0x80 == 0u8 {
                r[i] = a[(b[i] % 16) as usize];
            }
            if b[i + 16] & 0x80 == 0u8 {
                r[i + 16] = a[(b[i + 16] % 16 + 16) as usize];
            }
        }
        r
    }Run

Intel's documentation