Richard Sandiford <richard.sandif...@arm.com> writes:
>   template <size_t _Bits, size_t _Width>
>     struct _SveMaskWrapper
>     {
>       ...
>
>       _GLIBCXX_SIMD_INTRINSIC constexpr value_type
>       operator[](size_t __i) const
>       {
>         return _BuiltinSveMaskType::__sve_mask_active_count(
>                 _BuiltinSveVectorType::__sve_active_mask(),
>                 svand_z(_BuiltinSveVectorType::__sve_active_mask(),
>                         svcmpeq(_BuiltinSveVectorType::__sve_active_mask(),
>                                 _BuiltinSveMaskType::__index0123,
>                                 typename 
> _BuiltinSveMaskType::__sve_mask_uint_type(__i)),
>                         _M_data));
>       }
>
> A simpler way to do this might be to use svdup_u<width>_z (_M_data, 1, 0)
> and then svorrv on the result.

Sorry for the nonsense comment.  I was thinking of a different operation.
But GCC knows how to index a fixed-length data vector, so it might be
worth using:

  svdup_u<width>_z (_M_data, 1)[__i]

Thanks,
Richard

Reply via email to