3#include "native/isa_import.h"
4#include "native/x86/avx512cd.h"
10#if NATIVE_HOST_X86 || defined(NATIVE_DOXYGEN)
24 template<isa<x86> Arch>
25 requires(Arch.has(x86_feature::avx512f) &&
26 Arch.has(x86_feature::avx512cd) &&
27 Arch.has(x86_feature::avx512vl))
31 return detail::x86_avx512cd_constant::evaluate<true>(
35 detail::x86_avx512cd::vpconflictd<Arch>(value.to_native()));
40 template<isa<x86> Arch>
41 requires(Arch.has(x86_feature::avx512f) &&
42 Arch.has(x86_feature::avx512cd) &&
43 Arch.has(x86_feature::avx512vl))
50 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
53 detail::x86_avx512cd::mask_vpconflictd<Arch>(
54 source.to_native(),
mask.to_bitset(), value.to_native()));
59 template<isa<x86> Arch>
60 requires(Arch.has(x86_feature::avx512f) &&
61 Arch.has(x86_feature::avx512cd) &&
62 Arch.has(x86_feature::avx512vl))
68 return detail::x86_avx512cd_constant::evaluate<true>(
72 detail::x86_avx512cd::maskz_vpconflictd<Arch>(
73 mask.to_bitset(), value.to_native()));
78 template<isa<x86> Arch>
79 requires(Arch.has(x86_feature::avx512f) &&
80 Arch.has(x86_feature::avx512cd) &&
81 Arch.has(x86_feature::avx512vl))
85 return detail::x86_avx512cd_constant::evaluate<false>(
89 detail::x86_avx512cd::vplzcntd<Arch>(value.to_native()));
94 template<isa<x86> Arch>
95 requires(Arch.has(x86_feature::avx512f) &&
96 Arch.has(x86_feature::avx512cd) &&
97 Arch.has(x86_feature::avx512vl))
104 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
107 detail::x86_avx512cd::mask_vplzcntd<Arch>(
108 source.to_native(),
mask.to_bitset(), value.to_native()));
113 template<isa<x86> Arch>
114 requires(Arch.has(x86_feature::avx512f) &&
115 Arch.has(x86_feature::avx512cd) &&
116 Arch.has(x86_feature::avx512vl))
122 return detail::x86_avx512cd_constant::evaluate<false>(
126 detail::x86_avx512cd::maskz_vplzcntd<Arch>(
127 mask.to_bitset(), value.to_native()));
132 template<isa<x86> Arch>
133 requires(Arch.has(x86_feature::avx512f) &&
134 Arch.has(x86_feature::avx512cd) &&
135 Arch.has(x86_feature::avx512vl))
139 return detail::x86_avx512cd_constant::evaluate<true>(
143 detail::x86_avx512cd::vpconflictq<Arch>(value.to_native()));
148 template<isa<x86> Arch>
149 requires(Arch.has(x86_feature::avx512f) &&
150 Arch.has(x86_feature::avx512cd) &&
151 Arch.has(x86_feature::avx512vl))
158 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
161 detail::x86_avx512cd::mask_vpconflictq<Arch>(
162 source.to_native(),
mask.to_bitset(), value.to_native()));
167 template<isa<x86> Arch>
168 requires(Arch.has(x86_feature::avx512f) &&
169 Arch.has(x86_feature::avx512cd) &&
170 Arch.has(x86_feature::avx512vl))
176 return detail::x86_avx512cd_constant::evaluate<true>(
180 detail::x86_avx512cd::maskz_vpconflictq<Arch>(
181 mask.to_bitset(), value.to_native()));
186 template<isa<x86> Arch>
187 requires(Arch.has(x86_feature::avx512f) &&
188 Arch.has(x86_feature::avx512cd) &&
189 Arch.has(x86_feature::avx512vl))
193 return detail::x86_avx512cd_constant::evaluate<false>(
197 detail::x86_avx512cd::vplzcntq<Arch>(value.to_native()));
202 template<isa<x86> Arch>
203 requires(Arch.has(x86_feature::avx512f) &&
204 Arch.has(x86_feature::avx512cd) &&
205 Arch.has(x86_feature::avx512vl))
212 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
215 detail::x86_avx512cd::mask_vplzcntq<Arch>(
216 source.to_native(),
mask.to_bitset(), value.to_native()));
221 template<isa<x86> Arch>
222 requires(Arch.has(x86_feature::avx512f) &&
223 Arch.has(x86_feature::avx512cd) &&
224 Arch.has(x86_feature::avx512vl))
230 return detail::x86_avx512cd_constant::evaluate<false>(
234 detail::x86_avx512cd::maskz_vplzcntq<Arch>(
235 mask.to_bitset(), value.to_native()));
240 template<isa<x86> Arch>
241 requires(Arch.has(x86_feature::avx512f) &&
242 Arch.has(x86_feature::avx512cd) &&
243 Arch.has(x86_feature::avx512vl))
247 return detail::x86_avx512cd_constant::evaluate<true>(
251 detail::x86_avx512cd::vpconflictd<Arch>(value.to_native()));
256 template<isa<x86> Arch>
257 requires(Arch.has(x86_feature::avx512f) &&
258 Arch.has(x86_feature::avx512cd) &&
259 Arch.has(x86_feature::avx512vl))
266 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
269 detail::x86_avx512cd::mask_vpconflictd<Arch>(
270 source.to_native(),
mask.to_bitset(), value.to_native()));
275 template<isa<x86> Arch>
276 requires(Arch.has(x86_feature::avx512f) &&
277 Arch.has(x86_feature::avx512cd) &&
278 Arch.has(x86_feature::avx512vl))
284 return detail::x86_avx512cd_constant::evaluate<true>(
288 detail::x86_avx512cd::maskz_vpconflictd<Arch>(
289 mask.to_bitset(), value.to_native()));
294 template<isa<x86> Arch>
295 requires(Arch.has(x86_feature::avx512f) &&
296 Arch.has(x86_feature::avx512cd) &&
297 Arch.has(x86_feature::avx512vl))
301 return detail::x86_avx512cd_constant::evaluate<false>(
305 detail::x86_avx512cd::vplzcntd<Arch>(value.to_native()));
310 template<isa<x86> Arch>
311 requires(Arch.has(x86_feature::avx512f) &&
312 Arch.has(x86_feature::avx512cd) &&
313 Arch.has(x86_feature::avx512vl))
320 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
323 detail::x86_avx512cd::mask_vplzcntd<Arch>(
324 source.to_native(),
mask.to_bitset(), value.to_native()));
329 template<isa<x86> Arch>
330 requires(Arch.has(x86_feature::avx512f) &&
331 Arch.has(x86_feature::avx512cd) &&
332 Arch.has(x86_feature::avx512vl))
338 return detail::x86_avx512cd_constant::evaluate<false>(
342 detail::x86_avx512cd::maskz_vplzcntd<Arch>(
343 mask.to_bitset(), value.to_native()));
348 template<isa<x86> Arch>
349 requires(Arch.has(x86_feature::avx512f) &&
350 Arch.has(x86_feature::avx512cd) &&
351 Arch.has(x86_feature::avx512vl))
355 return detail::x86_avx512cd_constant::evaluate<true>(
359 detail::x86_avx512cd::vpconflictq<Arch>(value.to_native()));
364 template<isa<x86> Arch>
365 requires(Arch.has(x86_feature::avx512f) &&
366 Arch.has(x86_feature::avx512cd) &&
367 Arch.has(x86_feature::avx512vl))
374 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
377 detail::x86_avx512cd::mask_vpconflictq<Arch>(
378 source.to_native(),
mask.to_bitset(), value.to_native()));
383 template<isa<x86> Arch>
384 requires(Arch.has(x86_feature::avx512f) &&
385 Arch.has(x86_feature::avx512cd) &&
386 Arch.has(x86_feature::avx512vl))
392 return detail::x86_avx512cd_constant::evaluate<true>(
396 detail::x86_avx512cd::maskz_vpconflictq<Arch>(
397 mask.to_bitset(), value.to_native()));
402 template<isa<x86> Arch>
403 requires(Arch.has(x86_feature::avx512f) &&
404 Arch.has(x86_feature::avx512cd) &&
405 Arch.has(x86_feature::avx512vl))
409 return detail::x86_avx512cd_constant::evaluate<false>(
413 detail::x86_avx512cd::vplzcntq<Arch>(value.to_native()));
418 template<isa<x86> Arch>
419 requires(Arch.has(x86_feature::avx512f) &&
420 Arch.has(x86_feature::avx512cd) &&
421 Arch.has(x86_feature::avx512vl))
428 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
431 detail::x86_avx512cd::mask_vplzcntq<Arch>(
432 source.to_native(),
mask.to_bitset(), value.to_native()));
437 template<isa<x86> Arch>
438 requires(Arch.has(x86_feature::avx512f) &&
439 Arch.has(x86_feature::avx512cd) &&
440 Arch.has(x86_feature::avx512vl))
446 return detail::x86_avx512cd_constant::evaluate<false>(
450 detail::x86_avx512cd::maskz_vplzcntq<Arch>(
451 mask.to_bitset(), value.to_native()));
456 template<isa<x86> Arch>
457 requires(Arch.has(x86_feature::avx512f) &&
458 Arch.has(x86_feature::avx512cd))
463 return detail::x86_avx512cd_constant::evaluate<true>(
467 detail::x86_avx512cd::vpconflictd<Arch>(value.to_native()));
472 template<isa<x86> Arch>
473 requires(Arch.has(x86_feature::avx512f) &&
474 Arch.has(x86_feature::avx512cd))
481 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
484 detail::x86_avx512cd::mask_vpconflictd<Arch>(
485 source.to_native(),
mask.to_bitset(), value.to_native()));
490 template<isa<x86> Arch>
491 requires(Arch.has(x86_feature::avx512f) &&
492 Arch.has(x86_feature::avx512cd))
498 return detail::x86_avx512cd_constant::evaluate<true>(
502 detail::x86_avx512cd::maskz_vpconflictd<Arch>(
503 mask.to_bitset(), value.to_native()));
508 template<isa<x86> Arch>
509 requires(Arch.has(x86_feature::avx512f) &&
510 Arch.has(x86_feature::avx512cd))
514 return detail::x86_avx512cd_constant::evaluate<false>(
518 detail::x86_avx512cd::vplzcntd<Arch>(value.to_native()));
523 template<isa<x86> Arch>
524 requires(Arch.has(x86_feature::avx512f) &&
525 Arch.has(x86_feature::avx512cd))
532 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
535 detail::x86_avx512cd::mask_vplzcntd<Arch>(
536 source.to_native(),
mask.to_bitset(), value.to_native()));
541 template<isa<x86> Arch>
542 requires(Arch.has(x86_feature::avx512f) &&
543 Arch.has(x86_feature::avx512cd))
549 return detail::x86_avx512cd_constant::evaluate<false>(
553 detail::x86_avx512cd::maskz_vplzcntd<Arch>(
554 mask.to_bitset(), value.to_native()));
559 template<isa<x86> Arch>
560 requires(Arch.has(x86_feature::avx512f) &&
561 Arch.has(x86_feature::avx512cd))
565 return detail::x86_avx512cd_constant::evaluate<true>(
569 detail::x86_avx512cd::vpconflictq<Arch>(value.to_native()));
574 template<isa<x86> Arch>
575 requires(Arch.has(x86_feature::avx512f) &&
576 Arch.has(x86_feature::avx512cd))
583 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
586 detail::x86_avx512cd::mask_vpconflictq<Arch>(
587 source.to_native(),
mask.to_bitset(), value.to_native()));
592 template<isa<x86> Arch>
593 requires(Arch.has(x86_feature::avx512f) &&
594 Arch.has(x86_feature::avx512cd))
600 return detail::x86_avx512cd_constant::evaluate<true>(
604 detail::x86_avx512cd::maskz_vpconflictq<Arch>(
605 mask.to_bitset(), value.to_native()));
610 template<isa<x86> Arch>
611 requires(Arch.has(x86_feature::avx512f) &&
612 Arch.has(x86_feature::avx512cd))
616 return detail::x86_avx512cd_constant::evaluate<false>(
620 detail::x86_avx512cd::vplzcntq<Arch>(value.to_native()));
625 template<isa<x86> Arch>
626 requires(Arch.has(x86_feature::avx512f) &&
627 Arch.has(x86_feature::avx512cd))
634 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
637 detail::x86_avx512cd::mask_vplzcntq<Arch>(
638 source.to_native(),
mask.to_bitset(), value.to_native()));
643 template<isa<x86> Arch>
644 requires(Arch.has(x86_feature::avx512f) &&
645 Arch.has(x86_feature::avx512cd))
651 return detail::x86_avx512cd_constant::evaluate<false>(
655 detail::x86_avx512cd::maskz_vplzcntq<Arch>(
656 mask.to_bitset(), value.to_native()));
661 template<isa<x86> Arch>
662 requires(!(Arch.has(x86_feature::avx512f) &&
663 Arch.has(x86_feature::avx512cd) &&
664 Arch.has(x86_feature::avx512vl)) &&
665 requires { sizeof(simd<std::uint32_t, 4, Arch>); })
668 return detail::x86_avx512cd_constant::evaluate<true>(
673 template<isa<x86> Arch>
674 requires(!(Arch.has(x86_feature::avx512f) &&
675 Arch.has(x86_feature::avx512cd) &&
676 Arch.has(x86_feature::avx512vl)) &&
677 requires { sizeof(simd<std::uint32_t, 4, Arch>); })
682 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
686 template<isa<x86> Arch>
687 requires(!(Arch.has(x86_feature::avx512f) &&
688 Arch.has(x86_feature::avx512cd) &&
689 Arch.has(x86_feature::avx512vl)) &&
690 requires { sizeof(simd<std::uint32_t, 4, Arch>); })
694 return detail::x86_avx512cd_constant::evaluate<true>(
699 template<isa<x86> Arch>
700 requires(!(Arch.has(x86_feature::avx512f) &&
701 Arch.has(x86_feature::avx512cd) &&
702 Arch.has(x86_feature::avx512vl)) &&
703 requires { sizeof(simd<std::uint32_t, 4, Arch>); })
706 return detail::x86_avx512cd_constant::evaluate<false>(
711 template<isa<x86> Arch>
712 requires(!(Arch.has(x86_feature::avx512f) &&
713 Arch.has(x86_feature::avx512cd) &&
714 Arch.has(x86_feature::avx512vl)) &&
715 requires { sizeof(simd<std::uint32_t, 4, Arch>); })
720 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
724 template<isa<x86> Arch>
725 requires(!(Arch.has(x86_feature::avx512f) &&
726 Arch.has(x86_feature::avx512cd) &&
727 Arch.has(x86_feature::avx512vl)) &&
728 requires { sizeof(simd<std::uint32_t, 4, Arch>); })
732 return detail::x86_avx512cd_constant::evaluate<false>(
737 template<isa<x86> Arch>
738 requires(!(Arch.has(x86_feature::avx512f) &&
739 Arch.has(x86_feature::avx512cd) &&
740 Arch.has(x86_feature::avx512vl)) &&
741 requires { sizeof(simd<std::uint64_t, 2, Arch>); })
744 return detail::x86_avx512cd_constant::evaluate<true>(
749 template<isa<x86> Arch>
750 requires(!(Arch.has(x86_feature::avx512f) &&
751 Arch.has(x86_feature::avx512cd) &&
752 Arch.has(x86_feature::avx512vl)) &&
753 requires { sizeof(simd<std::uint64_t, 2, Arch>); })
758 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
762 template<isa<x86> Arch>
763 requires(!(Arch.has(x86_feature::avx512f) &&
764 Arch.has(x86_feature::avx512cd) &&
765 Arch.has(x86_feature::avx512vl)) &&
766 requires { sizeof(simd<std::uint64_t, 2, Arch>); })
770 return detail::x86_avx512cd_constant::evaluate<true>(
775 template<isa<x86> Arch>
776 requires(!(Arch.has(x86_feature::avx512f) &&
777 Arch.has(x86_feature::avx512cd) &&
778 Arch.has(x86_feature::avx512vl)) &&
779 requires { sizeof(simd<std::uint64_t, 2, Arch>); })
782 return detail::x86_avx512cd_constant::evaluate<false>(
787 template<isa<x86> Arch>
788 requires(!(Arch.has(x86_feature::avx512f) &&
789 Arch.has(x86_feature::avx512cd) &&
790 Arch.has(x86_feature::avx512vl)) &&
791 requires { sizeof(simd<std::uint64_t, 2, Arch>); })
796 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
800 template<isa<x86> Arch>
801 requires(!(Arch.has(x86_feature::avx512f) &&
802 Arch.has(x86_feature::avx512cd) &&
803 Arch.has(x86_feature::avx512vl)) &&
804 requires { sizeof(simd<std::uint64_t, 2, Arch>); })
808 return detail::x86_avx512cd_constant::evaluate<false>(
813 template<isa<x86> Arch>
814 requires(!(Arch.has(x86_feature::avx512f) &&
815 Arch.has(x86_feature::avx512cd) &&
816 Arch.has(x86_feature::avx512vl)) &&
817 requires { sizeof(simd<std::uint32_t, 8, Arch>); })
820 return detail::x86_avx512cd_constant::evaluate<true>(
825 template<isa<x86> Arch>
826 requires(!(Arch.has(x86_feature::avx512f) &&
827 Arch.has(x86_feature::avx512cd) &&
828 Arch.has(x86_feature::avx512vl)) &&
829 requires { sizeof(simd<std::uint32_t, 8, Arch>); })
834 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
838 template<isa<x86> Arch>
839 requires(!(Arch.has(x86_feature::avx512f) &&
840 Arch.has(x86_feature::avx512cd) &&
841 Arch.has(x86_feature::avx512vl)) &&
842 requires { sizeof(simd<std::uint32_t, 8, Arch>); })
846 return detail::x86_avx512cd_constant::evaluate<true>(
851 template<isa<x86> Arch>
852 requires(!(Arch.has(x86_feature::avx512f) &&
853 Arch.has(x86_feature::avx512cd) &&
854 Arch.has(x86_feature::avx512vl)) &&
855 requires { sizeof(simd<std::uint32_t, 8, Arch>); })
858 return detail::x86_avx512cd_constant::evaluate<false>(
863 template<isa<x86> Arch>
864 requires(!(Arch.has(x86_feature::avx512f) &&
865 Arch.has(x86_feature::avx512cd) &&
866 Arch.has(x86_feature::avx512vl)) &&
867 requires { sizeof(simd<std::uint32_t, 8, Arch>); })
872 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
876 template<isa<x86> Arch>
877 requires(!(Arch.has(x86_feature::avx512f) &&
878 Arch.has(x86_feature::avx512cd) &&
879 Arch.has(x86_feature::avx512vl)) &&
880 requires { sizeof(simd<std::uint32_t, 8, Arch>); })
884 return detail::x86_avx512cd_constant::evaluate<false>(
889 template<isa<x86> Arch>
890 requires(!(Arch.has(x86_feature::avx512f) &&
891 Arch.has(x86_feature::avx512cd) &&
892 Arch.has(x86_feature::avx512vl)) &&
893 requires { sizeof(simd<std::uint64_t, 4, Arch>); })
896 return detail::x86_avx512cd_constant::evaluate<true>(
901 template<isa<x86> Arch>
902 requires(!(Arch.has(x86_feature::avx512f) &&
903 Arch.has(x86_feature::avx512cd) &&
904 Arch.has(x86_feature::avx512vl)) &&
905 requires { sizeof(simd<std::uint64_t, 4, Arch>); })
910 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
914 template<isa<x86> Arch>
915 requires(!(Arch.has(x86_feature::avx512f) &&
916 Arch.has(x86_feature::avx512cd) &&
917 Arch.has(x86_feature::avx512vl)) &&
918 requires { sizeof(simd<std::uint64_t, 4, Arch>); })
922 return detail::x86_avx512cd_constant::evaluate<true>(
927 template<isa<x86> Arch>
928 requires(!(Arch.has(x86_feature::avx512f) &&
929 Arch.has(x86_feature::avx512cd) &&
930 Arch.has(x86_feature::avx512vl)) &&
931 requires { sizeof(simd<std::uint64_t, 4, Arch>); })
934 return detail::x86_avx512cd_constant::evaluate<false>(
939 template<isa<x86> Arch>
940 requires(!(Arch.has(x86_feature::avx512f) &&
941 Arch.has(x86_feature::avx512cd) &&
942 Arch.has(x86_feature::avx512vl)) &&
943 requires { sizeof(simd<std::uint64_t, 4, Arch>); })
948 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
952 template<isa<x86> Arch>
953 requires(!(Arch.has(x86_feature::avx512f) &&
954 Arch.has(x86_feature::avx512cd) &&
955 Arch.has(x86_feature::avx512vl)) &&
956 requires { sizeof(simd<std::uint64_t, 4, Arch>); })
960 return detail::x86_avx512cd_constant::evaluate<false>(
965 template<isa<x86> Arch>
966 requires(!(Arch.has(x86_feature::avx512f) &&
967 Arch.has(x86_feature::avx512cd)) &&
968 requires { sizeof(simd<std::uint32_t, 16, Arch>); })
971 return detail::x86_avx512cd_constant::evaluate<true>(
976 template<isa<x86> Arch>
977 requires(!(Arch.has(x86_feature::avx512f) &&
978 Arch.has(x86_feature::avx512cd)) &&
979 requires { sizeof(simd<std::uint32_t, 16, Arch>); })
984 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
988 template<isa<x86> Arch>
989 requires(!(Arch.has(x86_feature::avx512f) &&
990 Arch.has(x86_feature::avx512cd)) &&
991 requires { sizeof(simd<std::uint32_t, 16, Arch>); })
995 return detail::x86_avx512cd_constant::evaluate<true>(
1000 template<isa<x86> Arch>
1001 requires(!(Arch.has(x86_feature::avx512f) &&
1002 Arch.has(x86_feature::avx512cd)) &&
1003 requires { sizeof(simd<std::uint32_t, 16, Arch>); })
1006 return detail::x86_avx512cd_constant::evaluate<false>(
1011 template<isa<x86> Arch>
1012 requires(!(Arch.has(x86_feature::avx512f) &&
1013 Arch.has(x86_feature::avx512cd)) &&
1014 requires { sizeof(simd<std::uint32_t, 16, Arch>); })
1019 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
1023 template<isa<x86> Arch>
1024 requires(!(Arch.has(x86_feature::avx512f) &&
1025 Arch.has(x86_feature::avx512cd)) &&
1026 requires { sizeof(simd<std::uint32_t, 16, Arch>); })
1030 return detail::x86_avx512cd_constant::evaluate<false>(
1035 template<isa<x86> Arch>
1036 requires(!(Arch.has(x86_feature::avx512f) &&
1037 Arch.has(x86_feature::avx512cd)) &&
1038 requires { sizeof(simd<std::uint64_t, 8, Arch>); })
1041 return detail::x86_avx512cd_constant::evaluate<true>(
1046 template<isa<x86> Arch>
1047 requires(!(Arch.has(x86_feature::avx512f) &&
1048 Arch.has(x86_feature::avx512cd)) &&
1049 requires { sizeof(simd<std::uint64_t, 8, Arch>); })
1054 return detail::x86_avx512cd_constant::evaluate<true>(value, source,
mask.to_bitset());
1058 template<isa<x86> Arch>
1059 requires(!(Arch.has(x86_feature::avx512f) &&
1060 Arch.has(x86_feature::avx512cd)) &&
1061 requires { sizeof(simd<std::uint64_t, 8, Arch>); })
1065 return detail::x86_avx512cd_constant::evaluate<true>(
1070 template<isa<x86> Arch>
1071 requires(!(Arch.has(x86_feature::avx512f) &&
1072 Arch.has(x86_feature::avx512cd)) &&
1073 requires { sizeof(simd<std::uint64_t, 8, Arch>); })
1076 return detail::x86_avx512cd_constant::evaluate<false>(
1081 template<isa<x86> Arch>
1082 requires(!(Arch.has(x86_feature::avx512f) &&
1083 Arch.has(x86_feature::avx512cd)) &&
1084 requires { sizeof(simd<std::uint64_t, 8, Arch>); })
1089 return detail::x86_avx512cd_constant::evaluate<false>(value, source,
mask.to_bitset());
1093 template<isa<x86> Arch>
1094 requires(!(Arch.has(x86_feature::avx512f) &&
1095 Arch.has(x86_feature::avx512cd)) &&
1096 requires { sizeof(simd<std::uint64_t, 8, Arch>); })
1100 return detail::x86_avx512cd_constant::evaluate<false>(
1105 template<isa<x86> Arch,
class... Args>
1109 template<isa<x86> Arch,
class... Args>
1113 template<isa<x86> Arch,
class... Args>
1117 template<isa<x86> Arch,
class... Args>
1121 template<isa<x86> Arch,
class... Args>
1125 template<isa<x86> Arch,
class... Args>
1129 template<isa<x86> Arch,
class... Args>
1133 template<isa<x86> Arch,
class... Args>
1137 template<isa<x86> Arch,
class... Args>
1141 template<isa<x86> Arch,
class... Args>
1145 template<isa<x86> Arch,
class... Args>
1149 template<isa<x86> Arch,
class... Args>
#define native_inline
inline [[always_inline]]
#define native_nodiscard
C++17 [[nodiscard]].
#define native_const
[[const]] is not const
#define native_target(x)
this indicates a required feature set for the current multiversioned function.
typename mask_traits< std::remove_cvref_t< T > >::type mask
constexpr simd< std::uint64_t, 2, Arch > maskz_vpconflictq(predicate< 2, Arch > mask, simd< std::uint64_t, 2, Arch > value) noexcept
Inactive destination lanes become zero; every input lane still participates.
constexpr simd< std::uint32_t, 4, Arch > mask_vpconflictd(simd< std::uint32_t, 4, Arch > source, predicate< 4, Arch > mask, simd< std::uint32_t, 4, Arch > value) noexcept
Inactive destination lanes retain source; every input lane still participates.
constexpr simd< std::uint32_t, 4, Arch > maskz_vpconflictd(predicate< 4, Arch > mask, simd< std::uint32_t, 4, Arch > value) noexcept
Inactive destination lanes become zero; every input lane still participates.
constexpr simd< std::uint32_t, 4, Arch > vpconflictd(simd< std::uint32_t, 4, Arch > value) noexcept
For each 32-bit lane, set bit j when earlier source lane j is equal.
constexpr simd< std::uint64_t, 2, Arch > vpconflictq(simd< std::uint64_t, 2, Arch > value) noexcept
For each 64-bit lane, set bit j when earlier source lane j is equal.
constexpr simd< std::uint64_t, 2, Arch > mask_vplzcntq(simd< std::uint64_t, 2, Arch > source, predicate< 2, Arch > mask, simd< std::uint64_t, 2, Arch > value) noexcept
Inactive destination lanes retain source; zero input yields the lane width.
constexpr simd< std::uint32_t, 4, Arch > vplzcntd(simd< std::uint32_t, 4, Arch > value) noexcept
Count leading zeros in each 32-bit lane; zero yields 32.
constexpr simd< std::uint64_t, 2, Arch > mask_vpconflictq(simd< std::uint64_t, 2, Arch > source, predicate< 2, Arch > mask, simd< std::uint64_t, 2, Arch > value) noexcept
Inactive destination lanes retain source; every input lane still participates.
constexpr simd< std::uint64_t, 2, Arch > vplzcntq(simd< std::uint64_t, 2, Arch > value) noexcept
Count leading zeros in each 64-bit lane; zero yields 64.
constexpr simd< std::uint32_t, 4, Arch > maskz_vplzcntd(predicate< 4, Arch > mask, simd< std::uint32_t, 4, Arch > value) noexcept
Inactive destination lanes become zero; zero input yields the lane width.
constexpr simd< std::uint64_t, 2, Arch > maskz_vplzcntq(predicate< 2, Arch > mask, simd< std::uint64_t, 2, Arch > value) noexcept
Inactive destination lanes become zero; zero input yields the lane width.
constexpr simd< std::uint32_t, 4, Arch > mask_vplzcntd(simd< std::uint32_t, 4, Arch > source, predicate< 4, Arch > mask, simd< std::uint32_t, 4, Arch > value) noexcept
Inactive destination lanes retain source; zero input yields the lane width.
Architecture-tagged vectors, register packs and supporting value types. Native arithmetic follows its...
Standard-library adaptations documented here for SIMD value types.
Omitted architecture arguments use the native.simd provider's baseline.