simd_mask<T, Abi> stores a simd<U, Abi>, where U has the same length of T, but is an unsigned integer. Then all functionality of simd_mask<T, Abi> can be implemented in terms of simd<U, Abi>.
For reference, Vc seems to store an int as a bitset. This results into inefficient code:
- https://godbolt.org/g/e4uDPM storing int is slow.
- https://godbolt.org/g/hT7SYT storing simd<U, Abi> has zero cost.