pub const unsafe fn simd_bitmask<T, U>(x: T) -> U
core_intrinsics)
Truncates an integer vector to a bitmask.
T must be an integer vector.
U must be either the smallest unsigned integer with at least as many bits as the length of T, or the smallest array of u8 with at least as many bits as the length of T.
Each element is truncated to a single bit and packed into the result.
No matter whether the output is an array or an unsigned integer, it is treated as a single contiguous list of bits. The bitmask is always packed on the least-significant side of the output, and padded with 0s in the most-significant bits. The order of the bits depends on endianness:
For example, [!0, 0, !0, !0] packs to
0b1101u8 or [0b1101] on little endian, and0b1011u8 or [0b1011] on big endian.To consider a larger example, [!0, 0, 0, 0, 0, 0, 0, 0, !0, !0, 0, 0, 0, 0, !0, 0] packs to
0b0100001100000001u16 or [0b00000001, 0b01000011] on little endian, and0b1000000011000010u16 or [0b10000000, 0b11000010] on big endian.And finally, a non-power-of-2 example with multiple bytes: [!0, !0, 0, !0, 0, 0, !0, 0, !0, 0] packs to
0b0101001011u16 or [0b01001011, 0b01] on little endian, and0b1101001010u16 or [0b11, 0b01001010] on big endian.x must contain only 0 and !0.
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/intrinsics/simd/fn.simd_bitmask.html