Function kvarn::prelude::utils::prelude::compact_str::core::intrinsics::simd::simd_bitmask
source · pub unsafe extern "rust-intrinsic" fn simd_bitmask<T, U>(x: T) -> U
core_intrinsics
)Expand description
Truncate 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 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:
- On little endian, the least significant bit corresponds to the first vector element.
- On big endian, the least significant bit corresponds to the last vector element.
For example, [!0, 0, !0, !0]
packs to 0b1101
on little endian and 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 [0b00000001, 0b01000011]
or 0b0100001100000001
on little endian, and [0b10000000, 0b11000010]
or 0b1000000011000010
on big endian.
§Safety
x
must contain only 0
and !0
.