+#ifdef __clang__
+template <size_t _Np, typename _Tp, typename _Kp>
+ _GLIBCXX_SIMD_INTRINSIC constexpr auto
+ __movm(_Kp __k) noexcept
+ {
+ static_assert(is_unsigned_v<_Kp>);
+ if constexpr (sizeof(_Tp) == 1 && __have_avx512bw)
+ {
+ if constexpr (_Np <= 16 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2b128(__k);
+ else if constexpr (_Np <= 32 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2b256(__k);
+ else
+ return __builtin_ia32_cvtmask2b512(__k);
+ }
+ else if constexpr (sizeof(_Tp) == 2 && __have_avx512bw)
+ {
+ if constexpr (_Np <= 8 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2w128(__k);
+ else if constexpr (_Np <= 16 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2w256(__k);
+ else
+ return __builtin_ia32_cvtmask2w512(__k);
+ }
+ else if constexpr (sizeof(_Tp) == 4 && __have_avx512dq)
+ {
+ if constexpr (_Np <= 4 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2d128(__k);
+ else if constexpr (_Np <= 8 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2d256(__k);
+ else
+ return __builtin_ia32_cvtmask2d512(__k);
+ }
+ else if constexpr (sizeof(_Tp) == 8 && __have_avx512dq)
+ {
+ if constexpr (_Np <= 2 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2q128(__k);
+ else if constexpr (_Np <= 4 && __have_avx512vl)
+ return __builtin_ia32_cvtmask2q256(__k);
+ else
+ return __builtin_ia32_cvtmask2q512(__k);
+ }
+ else
+ __assert_unreachable<_Tp>();
+ }
+#endif // __clang__
+