32#ifndef SIMD_VEC_MASK_IMPL_SANDBOX_H_
33#define SIMD_VEC_MASK_IMPL_SANDBOX_H_
52template <
typename T,
size_t SIMD_WIDTH>
57 Mask(
const uint64_t &) {}
58 operator uint64_t()
const {
return 0; }
67template <
typename T,
size_t SIMD_WIDTH>
68static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_all_ones(OutputType<T>,
72 return Mask<T, SIMD_WIDTH>();
75template <
typename T,
size_t SIMD_WIDTH>
76static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_ifelse(
77 const Mask<T, SIMD_WIDTH> &cond,
const Vec<T, SIMD_WIDTH> &trueVal,
78 const Vec<T, SIMD_WIDTH> &falseVal)
84 return Vec<T, SIMD_WIDTH>();
88template <
typename T,
size_t SIMD_WIDTH>
89static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_ifelsezero(
90 const Mask<T, SIMD_WIDTH> &cond,
const Vec<T, SIMD_WIDTH> &trueVal)
95 return Vec<T, SIMD_WIDTH>();
100template <
typename Tout,
typename Tin,
size_t SIMD_WIDTH>
101static SIMD_INLINE Mask<Tout, SIMD_WIDTH> reinterpret_mask(
102 const Mask<Tin, SIMD_WIDTH> &)
106 return Mask<Tout, SIMD_WIDTH>();
109template <
size_t SIMD_WIDTH>
110static SIMD_INLINE Vec<Int, SIMD_WIDTH> mask_cvts(
111 const Vec<Int, SIMD_WIDTH> &,
const Mask<Float, SIMD_WIDTH> &,
112 const Vec<Float, SIMD_WIDTH> &)
116 return Vec<Int, SIMD_WIDTH>();
119template <
size_t SIMD_WIDTH>
120static SIMD_INLINE Vec<Int, SIMD_WIDTH> maskz_cvts(
121 const Mask<Float, SIMD_WIDTH> &,
const Vec<Float, SIMD_WIDTH> &)
125 return Vec<Int, SIMD_WIDTH>();
128template <
size_t SIMD_WIDTH>
129static SIMD_INLINE Vec<Float, SIMD_WIDTH> mask_cvts(
130 const Vec<Float, SIMD_WIDTH> &,
const Mask<Int, SIMD_WIDTH> &,
131 const Vec<Int, SIMD_WIDTH> &)
135 return Vec<Float, SIMD_WIDTH>();
138template <
size_t SIMD_WIDTH>
139static SIMD_INLINE Vec<Float, SIMD_WIDTH> maskz_cvts(
140 const Mask<Int, SIMD_WIDTH> &,
const Vec<Int, SIMD_WIDTH> &)
144 return Vec<Float, SIMD_WIDTH>();
147template <
typename T,
size_t SIMD_WIDTH>
148static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_set1(
const Vec<T, SIMD_WIDTH> &,
149 const Mask<T, SIMD_WIDTH> &,
153 return Vec<T, SIMD_WIDTH>();
156template <
typename T,
size_t SIMD_WIDTH>
157static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_set1(
const Mask<T, SIMD_WIDTH> &,
161 return Vec<T, SIMD_WIDTH>();
164template <
typename T,
size_t SIMD_WIDTH>
165static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_load(
const Vec<T, SIMD_WIDTH> &,
166 const Mask<T, SIMD_WIDTH> &,
171 return Vec<T, SIMD_WIDTH>();
174template <
typename T,
size_t SIMD_WIDTH>
175static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_load(
const Mask<T, SIMD_WIDTH> &,
180 return Vec<T, SIMD_WIDTH>();
183template <
typename T,
size_t SIMD_WIDTH>
184static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_loadu(
const Vec<T, SIMD_WIDTH> &,
185 const Mask<T, SIMD_WIDTH> &,
190 return Vec<T, SIMD_WIDTH>();
193template <
typename T,
size_t SIMD_WIDTH>
194static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_loadu(
const Mask<T, SIMD_WIDTH> &,
199 return Vec<T, SIMD_WIDTH>();
202template <
typename T,
size_t SIMD_WIDTH>
203static SIMD_INLINE
void mask_store(T *
const p,
const Mask<T, SIMD_WIDTH> &,
204 const Vec<T, SIMD_WIDTH> &)
210template <
typename T,
size_t SIMD_WIDTH>
211static SIMD_INLINE
void mask_storeu(T *
const p,
const Mask<T, SIMD_WIDTH> &,
212 const Vec<T, SIMD_WIDTH> &)
218template <
typename T,
size_t SIMD_WIDTH>
219static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_add(
const Vec<T, SIMD_WIDTH> &,
220 const Mask<T, SIMD_WIDTH> &,
221 const Vec<T, SIMD_WIDTH> &,
222 const Vec<T, SIMD_WIDTH> &)
225 return Vec<T, SIMD_WIDTH>();
228template <
typename T,
size_t SIMD_WIDTH>
229static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_add(
const Mask<T, SIMD_WIDTH> &,
230 const Vec<T, SIMD_WIDTH> &,
231 const Vec<T, SIMD_WIDTH> &)
234 return Vec<T, SIMD_WIDTH>();
237template <
typename T,
size_t SIMD_WIDTH>
238static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_adds(
const Vec<T, SIMD_WIDTH> &,
239 const Mask<T, SIMD_WIDTH> &,
240 const Vec<T, SIMD_WIDTH> &,
241 const Vec<T, SIMD_WIDTH> &)
244 return Vec<T, SIMD_WIDTH>();
247template <
typename T,
size_t SIMD_WIDTH>
248static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_adds(
const Mask<T, SIMD_WIDTH> &,
249 const Vec<T, SIMD_WIDTH> &,
250 const Vec<T, SIMD_WIDTH> &)
253 return Vec<T, SIMD_WIDTH>();
256template <
typename T,
size_t SIMD_WIDTH>
257static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_sub(
const Vec<T, SIMD_WIDTH> &,
258 const Mask<T, SIMD_WIDTH> &,
259 const Vec<T, SIMD_WIDTH> &,
260 const Vec<T, SIMD_WIDTH> &)
263 return Vec<T, SIMD_WIDTH>();
266template <
typename T,
size_t SIMD_WIDTH>
267static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_sub(
const Mask<T, SIMD_WIDTH> &,
268 const Vec<T, SIMD_WIDTH> &,
269 const Vec<T, SIMD_WIDTH> &)
272 return Vec<T, SIMD_WIDTH>();
275template <
typename T,
size_t SIMD_WIDTH>
276static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_subs(
const Vec<T, SIMD_WIDTH> &,
277 const Mask<T, SIMD_WIDTH> &,
278 const Vec<T, SIMD_WIDTH> &,
279 const Vec<T, SIMD_WIDTH> &)
282 return Vec<T, SIMD_WIDTH>();
285template <
typename T,
size_t SIMD_WIDTH>
286static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_subs(
const Mask<T, SIMD_WIDTH> &,
287 const Vec<T, SIMD_WIDTH> &,
288 const Vec<T, SIMD_WIDTH> &)
291 return Vec<T, SIMD_WIDTH>();
294template <
typename T,
size_t SIMD_WIDTH>
295static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_mul(
const Vec<T, SIMD_WIDTH> &,
296 const Mask<T, SIMD_WIDTH> &,
297 const Vec<T, SIMD_WIDTH> &,
298 const Vec<T, SIMD_WIDTH> &)
301 return Vec<T, SIMD_WIDTH>();
304template <
typename T,
size_t SIMD_WIDTH>
305static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_mul(
const Mask<T, SIMD_WIDTH> &,
306 const Vec<T, SIMD_WIDTH> &,
307 const Vec<T, SIMD_WIDTH> &)
310 return Vec<T, SIMD_WIDTH>();
313template <
typename T,
size_t SIMD_WIDTH>
314static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_div(
const Vec<T, SIMD_WIDTH> &,
315 const Mask<T, SIMD_WIDTH> &,
316 const Vec<T, SIMD_WIDTH> &,
317 const Vec<T, SIMD_WIDTH> &)
320 return Vec<T, SIMD_WIDTH>();
323template <
typename T,
size_t SIMD_WIDTH>
324static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_div(
const Mask<T, SIMD_WIDTH> &,
325 const Vec<T, SIMD_WIDTH> &,
326 const Vec<T, SIMD_WIDTH> &)
329 return Vec<T, SIMD_WIDTH>();
332template <
typename T,
size_t SIMD_WIDTH>
333static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_ceil(
const Vec<T, SIMD_WIDTH> &,
334 const Mask<T, SIMD_WIDTH> &,
335 const Vec<T, SIMD_WIDTH> &)
338 return Vec<T, SIMD_WIDTH>();
341template <
typename T,
size_t SIMD_WIDTH>
342static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_ceil(
const Mask<T, SIMD_WIDTH> &,
343 const Vec<T, SIMD_WIDTH> &)
346 return Vec<T, SIMD_WIDTH>();
349template <
typename T,
size_t SIMD_WIDTH>
350static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_floor(
const Vec<T, SIMD_WIDTH> &,
351 const Mask<T, SIMD_WIDTH> &,
352 const Vec<T, SIMD_WIDTH> &)
355 return Vec<T, SIMD_WIDTH>();
358template <
typename T,
size_t SIMD_WIDTH>
359static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_floor(
const Mask<T, SIMD_WIDTH> &,
360 const Vec<T, SIMD_WIDTH> &)
363 return Vec<T, SIMD_WIDTH>();
366template <
typename T,
size_t SIMD_WIDTH>
367static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_round(
const Vec<T, SIMD_WIDTH> &,
368 const Mask<T, SIMD_WIDTH> &,
369 const Vec<T, SIMD_WIDTH> &)
372 return Vec<T, SIMD_WIDTH>();
375template <
typename T,
size_t SIMD_WIDTH>
376static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_round(
const Mask<T, SIMD_WIDTH> &,
377 const Vec<T, SIMD_WIDTH> &)
380 return Vec<T, SIMD_WIDTH>();
383template <
typename T,
size_t SIMD_WIDTH>
384static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_truncate(
const Vec<T, SIMD_WIDTH> &,
385 const Mask<T, SIMD_WIDTH> &,
386 const Vec<T, SIMD_WIDTH> &)
389 return Vec<T, SIMD_WIDTH>();
392template <
typename T,
size_t SIMD_WIDTH>
393static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_truncate(
394 const Mask<T, SIMD_WIDTH> &,
const Vec<T, SIMD_WIDTH> &)
397 return Vec<T, SIMD_WIDTH>();
400template <
typename T,
size_t SIMD_WIDTH>
401static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_rcp(
const Vec<T, SIMD_WIDTH> &,
402 const Mask<T, SIMD_WIDTH> &,
403 const Vec<T, SIMD_WIDTH> &)
406 return Vec<T, SIMD_WIDTH>();
409template <
typename T,
size_t SIMD_WIDTH>
410static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_rcp(
const Mask<T, SIMD_WIDTH> &,
411 const Vec<T, SIMD_WIDTH> &)
414 return Vec<T, SIMD_WIDTH>();
417template <
typename T,
size_t SIMD_WIDTH>
418static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_rsqrt(
const Vec<T, SIMD_WIDTH> &,
419 const Mask<T, SIMD_WIDTH> &,
420 const Vec<T, SIMD_WIDTH> &)
423 return Vec<T, SIMD_WIDTH>();
426template <
typename T,
size_t SIMD_WIDTH>
427static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_rsqrt(
const Mask<T, SIMD_WIDTH> &,
428 const Vec<T, SIMD_WIDTH> &)
431 return Vec<T, SIMD_WIDTH>();
434template <
typename T,
size_t SIMD_WIDTH>
435static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_sqrt(
const Vec<T, SIMD_WIDTH> &,
436 const Mask<T, SIMD_WIDTH> &,
437 const Vec<T, SIMD_WIDTH> &)
440 return Vec<T, SIMD_WIDTH>();
443template <
typename T,
size_t SIMD_WIDTH>
444static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_sqrt(
const Mask<T, SIMD_WIDTH> &,
445 const Vec<T, SIMD_WIDTH> &)
448 return Vec<T, SIMD_WIDTH>();
451template <
typename T,
size_t SIMD_WIDTH>
452static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_abs(
const Vec<T, SIMD_WIDTH> &,
453 const Mask<T, SIMD_WIDTH> &,
454 const Vec<T, SIMD_WIDTH> &)
457 return Vec<T, SIMD_WIDTH>();
460template <
typename T,
size_t SIMD_WIDTH>
461static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_abs(
const Mask<T, SIMD_WIDTH> &,
462 const Vec<T, SIMD_WIDTH> &)
465 return Vec<T, SIMD_WIDTH>();
468template <
typename T,
size_t SIMD_WIDTH>
469static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_and(
const Vec<T, SIMD_WIDTH> &,
470 const Mask<T, SIMD_WIDTH> &,
471 const Vec<T, SIMD_WIDTH> &,
472 const Vec<T, SIMD_WIDTH> &)
475 return Vec<T, SIMD_WIDTH>();
478template <
typename T,
size_t SIMD_WIDTH>
479static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_and(
const Mask<T, SIMD_WIDTH> &,
480 const Vec<T, SIMD_WIDTH> &,
481 const Vec<T, SIMD_WIDTH> &)
484 return Vec<T, SIMD_WIDTH>();
487template <
typename T,
size_t SIMD_WIDTH>
488static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_or(
const Vec<T, SIMD_WIDTH> &,
489 const Mask<T, SIMD_WIDTH> &,
490 const Vec<T, SIMD_WIDTH> &,
491 const Vec<T, SIMD_WIDTH> &)
494 return Vec<T, SIMD_WIDTH>();
497template <
typename T,
size_t SIMD_WIDTH>
498static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_or(
const Mask<T, SIMD_WIDTH> &,
499 const Vec<T, SIMD_WIDTH> &,
500 const Vec<T, SIMD_WIDTH> &)
503 return Vec<T, SIMD_WIDTH>();
506template <
typename T,
size_t SIMD_WIDTH>
507static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_andnot(
const Vec<T, SIMD_WIDTH> &,
508 const Mask<T, SIMD_WIDTH> &,
509 const Vec<T, SIMD_WIDTH> &,
510 const Vec<T, SIMD_WIDTH> &)
513 return Vec<T, SIMD_WIDTH>();
516template <
typename T,
size_t SIMD_WIDTH>
517static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_andnot(
const Mask<T, SIMD_WIDTH> &,
518 const Vec<T, SIMD_WIDTH> &,
519 const Vec<T, SIMD_WIDTH> &)
522 return Vec<T, SIMD_WIDTH>();
525template <
typename T,
size_t SIMD_WIDTH>
526static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_xor(
const Vec<T, SIMD_WIDTH> &,
527 const Mask<T, SIMD_WIDTH> &,
528 const Vec<T, SIMD_WIDTH> &,
529 const Vec<T, SIMD_WIDTH> &)
532 return Vec<T, SIMD_WIDTH>();
535template <
typename T,
size_t SIMD_WIDTH>
536static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_xor(
const Mask<T, SIMD_WIDTH> &,
537 const Vec<T, SIMD_WIDTH> &,
538 const Vec<T, SIMD_WIDTH> &)
541 return Vec<T, SIMD_WIDTH>();
544template <
typename T,
size_t SIMD_WIDTH>
545static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_not(
const Vec<T, SIMD_WIDTH> &,
546 const Mask<T, SIMD_WIDTH> &,
547 const Vec<T, SIMD_WIDTH> &)
550 return Vec<T, SIMD_WIDTH>();
553template <
typename T,
size_t SIMD_WIDTH>
554static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_not(
const Mask<T, SIMD_WIDTH> &,
555 const Vec<T, SIMD_WIDTH> &)
558 return Vec<T, SIMD_WIDTH>();
561template <
typename T,
size_t SIMD_WIDTH>
562static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_neg(
const Vec<T, SIMD_WIDTH> &,
563 const Mask<T, SIMD_WIDTH> &,
564 const Vec<T, SIMD_WIDTH> &)
567 return Vec<T, SIMD_WIDTH>();
570template <
typename T,
size_t SIMD_WIDTH>
571static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_neg(
const Mask<T, SIMD_WIDTH> &,
572 const Vec<T, SIMD_WIDTH> &)
575 return Vec<T, SIMD_WIDTH>();
578template <
typename T,
size_t SIMD_WIDTH>
579static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_min(
const Vec<T, SIMD_WIDTH> &,
580 const Mask<T, SIMD_WIDTH> &,
581 const Vec<T, SIMD_WIDTH> &,
582 const Vec<T, SIMD_WIDTH> &)
585 return Vec<T, SIMD_WIDTH>();
588template <
typename T,
size_t SIMD_WIDTH>
589static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_min(
const Mask<T, SIMD_WIDTH> &,
590 const Vec<T, SIMD_WIDTH> &,
591 const Vec<T, SIMD_WIDTH> &)
594 return Vec<T, SIMD_WIDTH>();
597template <
typename T,
size_t SIMD_WIDTH>
598static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_max(
const Vec<T, SIMD_WIDTH> &,
599 const Mask<T, SIMD_WIDTH> &,
600 const Vec<T, SIMD_WIDTH> &,
601 const Vec<T, SIMD_WIDTH> &)
604 return Vec<T, SIMD_WIDTH>();
607template <
typename T,
size_t SIMD_WIDTH>
608static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_max(
const Mask<T, SIMD_WIDTH> &,
609 const Vec<T, SIMD_WIDTH> &,
610 const Vec<T, SIMD_WIDTH> &)
613 return Vec<T, SIMD_WIDTH>();
616template <
typename T,
size_t SIMD_WIDTH>
617static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_div2r0(
const Vec<T, SIMD_WIDTH> &,
618 const Mask<T, SIMD_WIDTH> &,
619 const Vec<T, SIMD_WIDTH> &)
622 return Vec<T, SIMD_WIDTH>();
625template <
typename T,
size_t SIMD_WIDTH>
626static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_div2r0(
const Mask<T, SIMD_WIDTH> &,
627 const Vec<T, SIMD_WIDTH> &)
630 return Vec<T, SIMD_WIDTH>();
633template <
typename T,
size_t SIMD_WIDTH>
634static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_div2rd(
const Vec<T, SIMD_WIDTH> &,
635 const Mask<T, SIMD_WIDTH> &,
636 const Vec<T, SIMD_WIDTH> &)
639 return Vec<T, SIMD_WIDTH>();
642template <
typename T,
size_t SIMD_WIDTH>
643static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_div2rd(
const Mask<T, SIMD_WIDTH> &,
644 const Vec<T, SIMD_WIDTH> &)
647 return Vec<T, SIMD_WIDTH>();
650template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
651static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_srai(
const Vec<T, SIMD_WIDTH> &,
652 const Mask<T, SIMD_WIDTH> &,
653 const Vec<T, SIMD_WIDTH> &)
657 return Vec<T, SIMD_WIDTH>();
660template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
661static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_srai(
const Mask<T, SIMD_WIDTH> &,
662 const Vec<T, SIMD_WIDTH> &)
666 return Vec<T, SIMD_WIDTH>();
669template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
670static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_srli(
const Vec<T, SIMD_WIDTH> &,
671 const Mask<T, SIMD_WIDTH> &,
672 const Vec<T, SIMD_WIDTH> &)
676 return Vec<T, SIMD_WIDTH>();
679template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
680static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_srli(
const Mask<T, SIMD_WIDTH> &,
681 const Vec<T, SIMD_WIDTH> &)
685 return Vec<T, SIMD_WIDTH>();
688template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
689static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_slli(
const Vec<T, SIMD_WIDTH> &,
690 const Mask<T, SIMD_WIDTH> &,
691 const Vec<T, SIMD_WIDTH> &)
695 return Vec<T, SIMD_WIDTH>();
698template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
699static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_slli(
const Mask<T, SIMD_WIDTH> &,
700 const Vec<T, SIMD_WIDTH> &)
704 return Vec<T, SIMD_WIDTH>();
707template <
typename T,
size_t SIMD_WIDTH>
708static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_hadd(
const Vec<T, SIMD_WIDTH> &,
709 const Mask<T, SIMD_WIDTH> &,
710 const Vec<T, SIMD_WIDTH> &,
711 const Vec<T, SIMD_WIDTH> &)
714 return Vec<T, SIMD_WIDTH>();
717template <
typename T,
size_t SIMD_WIDTH>
718static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_hadd(
const Mask<T, SIMD_WIDTH> &,
719 const Vec<T, SIMD_WIDTH> &,
720 const Vec<T, SIMD_WIDTH> &)
723 return Vec<T, SIMD_WIDTH>();
726template <
typename T,
size_t SIMD_WIDTH>
727static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_hadds(
const Vec<T, SIMD_WIDTH> &,
728 const Mask<T, SIMD_WIDTH> &,
729 const Vec<T, SIMD_WIDTH> &,
730 const Vec<T, SIMD_WIDTH> &)
733 return Vec<T, SIMD_WIDTH>();
736template <
typename T,
size_t SIMD_WIDTH>
737static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_hadds(
const Mask<T, SIMD_WIDTH> &,
738 const Vec<T, SIMD_WIDTH> &,
739 const Vec<T, SIMD_WIDTH> &)
742 return Vec<T, SIMD_WIDTH>();
745template <
typename T,
size_t SIMD_WIDTH>
746static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_hsub(
const Vec<T, SIMD_WIDTH> &,
747 const Mask<T, SIMD_WIDTH> &,
748 const Vec<T, SIMD_WIDTH> &,
749 const Vec<T, SIMD_WIDTH> &)
752 return Vec<T, SIMD_WIDTH>();
755template <
typename T,
size_t SIMD_WIDTH>
756static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_hsub(
const Mask<T, SIMD_WIDTH> &,
757 const Vec<T, SIMD_WIDTH> &,
758 const Vec<T, SIMD_WIDTH> &)
761 return Vec<T, SIMD_WIDTH>();
764template <
typename T,
size_t SIMD_WIDTH>
765static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_hsubs(
const Vec<T, SIMD_WIDTH> &,
766 const Mask<T, SIMD_WIDTH> &,
767 const Vec<T, SIMD_WIDTH> &,
768 const Vec<T, SIMD_WIDTH> &)
771 return Vec<T, SIMD_WIDTH>();
774template <
typename T,
size_t SIMD_WIDTH>
775static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_hsubs(
const Mask<T, SIMD_WIDTH> &,
776 const Vec<T, SIMD_WIDTH> &,
777 const Vec<T, SIMD_WIDTH> &)
780 return Vec<T, SIMD_WIDTH>();
783template <
typename T,
size_t SIMD_WIDTH>
784static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmplt(
const Mask<T, SIMD_WIDTH> &,
785 const Vec<T, SIMD_WIDTH> &,
786 const Vec<T, SIMD_WIDTH> &)
789 return Mask<T, SIMD_WIDTH>();
792template <
typename T,
size_t SIMD_WIDTH>
793static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmple(
const Mask<T, SIMD_WIDTH> &,
794 const Vec<T, SIMD_WIDTH> &,
795 const Vec<T, SIMD_WIDTH> &)
798 return Mask<T, SIMD_WIDTH>();
801template <
typename T,
size_t SIMD_WIDTH>
802static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpeq(
const Mask<T, SIMD_WIDTH> &,
803 const Vec<T, SIMD_WIDTH> &,
804 const Vec<T, SIMD_WIDTH> &)
807 return Mask<T, SIMD_WIDTH>();
810template <
typename T,
size_t SIMD_WIDTH>
811static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpgt(
const Mask<T, SIMD_WIDTH> &,
812 const Vec<T, SIMD_WIDTH> &,
813 const Vec<T, SIMD_WIDTH> &)
816 return Mask<T, SIMD_WIDTH>();
819template <
typename T,
size_t SIMD_WIDTH>
820static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpge(
const Mask<T, SIMD_WIDTH> &,
821 const Vec<T, SIMD_WIDTH> &,
822 const Vec<T, SIMD_WIDTH> &)
825 return Mask<T, SIMD_WIDTH>();
828template <
typename T,
size_t SIMD_WIDTH>
829static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpneq(
const Mask<T, SIMD_WIDTH> &,
830 const Vec<T, SIMD_WIDTH> &,
831 const Vec<T, SIMD_WIDTH> &)
834 return Mask<T, SIMD_WIDTH>();
840template <
typename T,
size_t SIMD_WIDTH>
841static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmplt(
const Vec<T, SIMD_WIDTH> &,
842 const Vec<T, SIMD_WIDTH> &)
845 return Mask<T, SIMD_WIDTH>();
848template <
typename T,
size_t SIMD_WIDTH>
849static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmple(
const Vec<T, SIMD_WIDTH> &,
850 const Vec<T, SIMD_WIDTH> &)
853 return Mask<T, SIMD_WIDTH>();
856template <
typename T,
size_t SIMD_WIDTH>
857static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpeq(
const Vec<T, SIMD_WIDTH> &,
858 const Vec<T, SIMD_WIDTH> &)
861 return Mask<T, SIMD_WIDTH>();
864template <
typename T,
size_t SIMD_WIDTH>
865static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpgt(
const Vec<T, SIMD_WIDTH> &,
866 const Vec<T, SIMD_WIDTH> &)
869 return Mask<T, SIMD_WIDTH>();
872template <
typename T,
size_t SIMD_WIDTH>
873static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpge(
const Vec<T, SIMD_WIDTH> &,
874 const Vec<T, SIMD_WIDTH> &)
877 return Mask<T, SIMD_WIDTH>();
880template <
typename T,
size_t SIMD_WIDTH>
881static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_cmpneq(
const Vec<T, SIMD_WIDTH> &,
882 const Vec<T, SIMD_WIDTH> &)
885 return Mask<T, SIMD_WIDTH>();
888template <
typename T,
size_t SIMD_WIDTH>
889static SIMD_INLINE Vec<T, SIMD_WIDTH> mask_avg(
const Vec<T, SIMD_WIDTH> &,
890 const Mask<T, SIMD_WIDTH> &,
891 const Vec<T, SIMD_WIDTH> &,
892 const Vec<T, SIMD_WIDTH> &)
895 return Vec<T, SIMD_WIDTH>();
898template <
typename T,
size_t SIMD_WIDTH>
899static SIMD_INLINE Vec<T, SIMD_WIDTH> maskz_avg(
const Mask<T, SIMD_WIDTH> &,
900 const Vec<T, SIMD_WIDTH> &,
901 const Vec<T, SIMD_WIDTH> &)
904 return Vec<T, SIMD_WIDTH>();
907template <
typename T,
size_t SIMD_WIDTH>
908static SIMD_INLINE
bool mask_test_all_zeros(
const Mask<T, SIMD_WIDTH> &k,
909 const Vec<T, SIMD_WIDTH> &a)
917template <
typename T,
size_t SIMD_WIDTH>
918static SIMD_INLINE
bool mask_test_all_ones(
const Mask<T, SIMD_WIDTH> &k,
919 const Vec<T, SIMD_WIDTH> &a)
927template <
typename T,
size_t SIMD_WIDTH>
928static SIMD_INLINE Mask<T, SIMD_WIDTH> kadd(
const Mask<T, SIMD_WIDTH> &a,
929 const Mask<T, SIMD_WIDTH> &b)
934 return Mask<T, SIMD_WIDTH>();
937template <
typename T,
size_t SIMD_WIDTH>
938static SIMD_INLINE Mask<T, SIMD_WIDTH> kand(
const Mask<T, SIMD_WIDTH> &a,
939 const Mask<T, SIMD_WIDTH> &b)
944 return Mask<T, SIMD_WIDTH>();
947template <
typename T,
size_t SIMD_WIDTH>
948static SIMD_INLINE Mask<T, SIMD_WIDTH> kandn(
const Mask<T, SIMD_WIDTH> &a,
949 const Mask<T, SIMD_WIDTH> &b)
954 return Mask<T, SIMD_WIDTH>();
957template <
typename T,
size_t SIMD_WIDTH>
958static SIMD_INLINE Mask<T, SIMD_WIDTH> kor(
const Mask<T, SIMD_WIDTH> &a,
959 const Mask<T, SIMD_WIDTH> &b)
964 return Mask<T, SIMD_WIDTH>();
967template <
typename T,
size_t SIMD_WIDTH>
968static SIMD_INLINE Mask<T, SIMD_WIDTH> kxor(
const Mask<T, SIMD_WIDTH> &a,
969 const Mask<T, SIMD_WIDTH> &b)
974 return Mask<T, SIMD_WIDTH>();
977template <
typename T,
size_t SIMD_WIDTH>
978static SIMD_INLINE Mask<T, SIMD_WIDTH> kxnor(
const Mask<T, SIMD_WIDTH> &a,
979 const Mask<T, SIMD_WIDTH> &b)
984 return Mask<T, SIMD_WIDTH>();
987template <
typename T,
size_t SIMD_WIDTH>
988static SIMD_INLINE Mask<T, SIMD_WIDTH> knot(
const Mask<T, SIMD_WIDTH> &a)
992 return Mask<T, SIMD_WIDTH>();
995template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
996static SIMD_INLINE Mask<T, SIMD_WIDTH> kshiftri(
const Mask<T, SIMD_WIDTH> &a)
1001 return Mask<T, SIMD_WIDTH>();
1004template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
1005static SIMD_INLINE Mask<T, SIMD_WIDTH> kshiftli(
const Mask<T, SIMD_WIDTH> &a)
1010 return Mask<T, SIMD_WIDTH>();
1013template <
typename T,
size_t SIMD_WIDTH>
1014static SIMD_INLINE Mask<T, SIMD_WIDTH> kshiftri(
const Mask<T, SIMD_WIDTH> &a,
1015 const uint64_t count)
1019 return Mask<T, SIMD_WIDTH>();
1022template <
typename T,
size_t SIMD_WIDTH>
1023static SIMD_INLINE Mask<T, SIMD_WIDTH> kshiftli(
const Mask<T, SIMD_WIDTH> &a,
1024 const uint64_t count)
1028 return Mask<T, SIMD_WIDTH>();
1035template <
typename T,
size_t SIMD_WIDTH>
1036static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_set_true_low(
const size_t x,
1038 Integer<SIMD_WIDTH>)
1042 return Mask<T, SIMD_WIDTH>();
1045template <
typename T,
size_t SIMD_WIDTH>
1046static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_set_true_high(
const size_t x,
1048 Integer<SIMD_WIDTH>)
1052 return Mask<T, SIMD_WIDTH>();
1055template <
typename T,
size_t SIMD_WIDTH>
1056static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_set_false_low(
const size_t x,
1058 Integer<SIMD_WIDTH>)
1062 return Mask<T, SIMD_WIDTH>();
1065template <
typename T,
size_t SIMD_WIDTH>
1066static SIMD_INLINE Mask<T, SIMD_WIDTH> mask_set_false_high(
const size_t x,
1068 Integer<SIMD_WIDTH>)
1072 return Mask<T, SIMD_WIDTH>();
1077template <
typename T,
size_t SIMD_WIDTH>
1078static SIMD_INLINE
bool ktest_all_zeros(
const Mask<T, SIMD_WIDTH> &a)
1085template <
typename T,
size_t SIMD_WIDTH>
1086static SIMD_INLINE
bool ktest_all_ones(
const Mask<T, SIMD_WIDTH> &a)
1095template <
typename T,
size_t SIMD_WIDTH>
1096static SIMD_INLINE
bool kcmpeq(
const Mask<T, SIMD_WIDTH> &a,
1097 const Mask<T, SIMD_WIDTH> &b)
Mask(const Vec< T, SIMD_WIDTH > &x)
Constructs a Mask from a Vec.
Namespace for T-SIMD.
Definition time_measurement.H:161
static constexpr const char * name()
Returns the name of the type (e.g. "Int" for Int)
Definition types.H:259