Function core::arch::x86_64::_mm256_shuffle_epi8

1.27.0 · source ·
pub unsafe fn _mm256_shuffle_epi8(a: __m256i, b: __m256i) -> __m256i
Available on (x86 or x86-64) and target feature avx2 and x86-64 only.
Expand description

根据 b 的内容,打乱 a 中的字节。

对于 vectors 的 128 位低半部分和高半部分中,最后一个 b 的每个字节的 4 位用作 a 相应低 16 字节或高 16 字节的地址。 也就是说,两半分开打乱。

此外,如果 b 的一个字节的最高有效位被设置,相应的目标字节被设置为 0.

ab 描绘为 [u8; 32]_mm256_shuffle_epi8 在逻辑上等效于:

fn mm256_shuffle_epi8(a: [u8; 32], b: [u8; 32]) -> [u8; 32] {
    let mut r = [0; 32];
    for i in 0..16 {
        // 如果设置了 b 的最高有效位,则目标字节设置为 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