31#ifndef SIMD_VEC_BASE_IMPL_SANDBOX_H_
32#define SIMD_VEC_BASE_IMPL_SANDBOX_H_
52template <
typename T,
size_t SIMD_WIDTH>
57 static constexpr size_t elements = SIMD_WIDTH /
sizeof(T);
59 static constexpr size_t bytes = SIMD_WIDTH;
72template <
typename Tdst,
typename Tsrc,
size_t SIMD_WIDTH>
73static SIMD_INLINE Vec<Tdst, SIMD_WIDTH> reinterpret(
74 const Vec<Tsrc, SIMD_WIDTH> &, OutputType<Tdst>)
76 printf(
"reinterpret<%s,%s,%zu>(V)\n", TypeInfo<Tdst>::name(),
77 TypeInfo<Tsrc>::name(), SIMD_WIDTH);
78 return Vec<Tdst, SIMD_WIDTH>();
85template <
typename T,
size_t SIMD_WIDTH>
86static SIMD_INLINE Vec<T, SIMD_WIDTH> setzero(OutputType<T>,
89 printf(
"setzero<%s,%zu>()\n", TypeInfo<T>::name(), SIMD_WIDTH);
90 return Vec<T, SIMD_WIDTH>();
93template <
typename T,
size_t SIMD_WIDTH>
94static SIMD_INLINE Vec<T, SIMD_WIDTH> set1(T, Integer<SIMD_WIDTH>)
96 printf(
"set1<%s,%zu>()\n", TypeInfo<T>::name(), SIMD_WIDTH);
97 return Vec<T, SIMD_WIDTH>();
101template <
size_t SIMD_WIDTH,
typename T>
102static SIMD_INLINE Vec<T, SIMD_WIDTH> load(
const T *
const p,
105 printf(
"load<%zu,%s>(%p)\n", SIMD_WIDTH, TypeInfo<T>::name(), (
void *) p);
106 return Vec<T, SIMD_WIDTH>();
110template <
size_t SIMD_WIDTH,
typename T>
111static SIMD_INLINE Vec<T, SIMD_WIDTH> loadu(
const T *
const p,
114 printf(
"loadu<%zu,%s>(%p)\n", SIMD_WIDTH, TypeInfo<T>::name(), (
void *) p);
115 return Vec<T, SIMD_WIDTH>();
118template <
typename T,
size_t SIMD_WIDTH>
119static SIMD_INLINE
void store(T *
const p,
const Vec<T, SIMD_WIDTH> &)
121 printf(
"store<%s,%zu>(%p,V)\n", TypeInfo<T>::name(), SIMD_WIDTH, (
void *) p);
124template <
typename T,
size_t SIMD_WIDTH>
125static SIMD_INLINE
void storeu(T *
const p,
const Vec<T, SIMD_WIDTH> &)
127 printf(
"storeu<%s,%zu>(%p,V)\n", TypeInfo<T>::name(), SIMD_WIDTH, (
void *) p);
130template <
typename T,
size_t SIMD_WIDTH>
131static SIMD_INLINE
void stream_store(T *
const p,
const Vec<T, SIMD_WIDTH> &)
133 printf(
"stream_store<%s,%zu>(%p,V)\n", TypeInfo<T>::name(), SIMD_WIDTH,
137static SIMD_INLINE
void lfence()
142static SIMD_INLINE
void sfence()
147static SIMD_INLINE
void mfence()
152template <
size_t INDEX,
typename T,
size_t SIMD_WIDTH>
153static SIMD_INLINE T extract(
const Vec<T, SIMD_WIDTH> &)
155 printf(
"extract<%zu,%s,%zu>(V)\n", INDEX, TypeInfo<T>::name(), SIMD_WIDTH);
159template <
typename T,
size_t SIMD_WIDTH>
160static SIMD_INLINE Vec<T, SIMD_WIDTH> add(
const Vec<T, SIMD_WIDTH> &,
161 const Vec<T, SIMD_WIDTH> &)
163 printf(
"add<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
164 return Vec<T, SIMD_WIDTH>();
167template <
typename T,
size_t SIMD_WIDTH>
168static SIMD_INLINE Vec<T, SIMD_WIDTH> adds(
const Vec<T, SIMD_WIDTH> &,
169 const Vec<T, SIMD_WIDTH> &)
171 printf(
"adds<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
172 return Vec<T, SIMD_WIDTH>();
175template <
typename T,
size_t SIMD_WIDTH>
176static SIMD_INLINE Vec<T, SIMD_WIDTH> sub(
const Vec<T, SIMD_WIDTH> &,
177 const Vec<T, SIMD_WIDTH> &)
179 printf(
"sub<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
180 return Vec<T, SIMD_WIDTH>();
183template <
typename T,
size_t SIMD_WIDTH>
184static SIMD_INLINE Vec<T, SIMD_WIDTH> subs(
const Vec<T, SIMD_WIDTH> &,
185 const Vec<T, SIMD_WIDTH> &)
187 printf(
"subs<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
188 return Vec<T, SIMD_WIDTH>();
191template <
typename T,
size_t SIMD_WIDTH>
192static SIMD_INLINE Vec<T, SIMD_WIDTH> neg(
const Vec<T, SIMD_WIDTH> &)
194 printf(
"neg<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
195 return Vec<T, SIMD_WIDTH>();
198template <
typename T,
size_t SIMD_WIDTH>
199static SIMD_INLINE Vec<T, SIMD_WIDTH> mul(
const Vec<T, SIMD_WIDTH> &,
200 const Vec<T, SIMD_WIDTH> &)
202 printf(
"mul<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
203 return Vec<T, SIMD_WIDTH>();
206template <
typename T,
size_t SIMD_WIDTH>
207static SIMD_INLINE Vec<T, SIMD_WIDTH> div(
const Vec<T, SIMD_WIDTH> &,
208 const Vec<T, SIMD_WIDTH> &)
210 printf(
"div<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
211 return Vec<T, SIMD_WIDTH>();
214template <
typename T,
size_t SIMD_WIDTH>
215static SIMD_INLINE Vec<T, SIMD_WIDTH> ceil(
const Vec<T, SIMD_WIDTH> &)
217 printf(
"ceil<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
218 return Vec<T, SIMD_WIDTH>();
221template <
typename T,
size_t SIMD_WIDTH>
222static SIMD_INLINE Vec<T, SIMD_WIDTH> floor(
const Vec<T, SIMD_WIDTH> &)
224 printf(
"floor<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
225 return Vec<T, SIMD_WIDTH>();
228template <
typename T,
size_t SIMD_WIDTH>
229static SIMD_INLINE Vec<T, SIMD_WIDTH> round(
const Vec<T, SIMD_WIDTH> &)
231 printf(
"round<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
232 return Vec<T, SIMD_WIDTH>();
235template <
typename T,
size_t SIMD_WIDTH>
236static SIMD_INLINE Vec<T, SIMD_WIDTH> truncate(
const Vec<T, SIMD_WIDTH> &)
238 printf(
"truncate<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
239 return Vec<T, SIMD_WIDTH>();
242template <
typename T,
size_t SIMD_WIDTH>
243static SIMD_INLINE Vec<T, SIMD_WIDTH> rcp(
const Vec<T, SIMD_WIDTH> &)
245 printf(
"rcp<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
246 return Vec<T, SIMD_WIDTH>();
249template <
typename T,
size_t SIMD_WIDTH>
250static SIMD_INLINE Vec<T, SIMD_WIDTH> rsqrt(
const Vec<T, SIMD_WIDTH> &)
252 printf(
"rsqrt<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
253 return Vec<T, SIMD_WIDTH>();
256template <
typename T,
size_t SIMD_WIDTH>
257static SIMD_INLINE Vec<T, SIMD_WIDTH> sqrt(
const Vec<T, SIMD_WIDTH> &)
259 printf(
"sqrt<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
260 return Vec<T, SIMD_WIDTH>();
263template <
typename T,
size_t SIMD_WIDTH>
264static SIMD_INLINE Vec<T, SIMD_WIDTH> min(
const Vec<T, SIMD_WIDTH> &,
265 const Vec<T, SIMD_WIDTH> &)
267 printf(
"min<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
268 return Vec<T, SIMD_WIDTH>();
271template <
typename T,
size_t SIMD_WIDTH>
272static SIMD_INLINE Vec<T, SIMD_WIDTH> max(
const Vec<T, SIMD_WIDTH> &,
273 const Vec<T, SIMD_WIDTH> &)
275 printf(
"max<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
276 return Vec<T, SIMD_WIDTH>();
279template <
typename T,
size_t SIMD_WIDTH>
280static SIMD_INLINE Vec<T, SIMD_WIDTH> abs(
const Vec<T, SIMD_WIDTH> &)
282 printf(
"abs<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
283 return Vec<T, SIMD_WIDTH>();
289template <
size_t PART,
size_t BYTES,
typename T,
size_t SIMD_WIDTH>
290static SIMD_INLINE Vec<T, SIMD_WIDTH> unpack(
const Vec<T, SIMD_WIDTH> &,
291 const Vec<T, SIMD_WIDTH> &,
292 Part<PART>, Bytes<BYTES>)
294 printf(
"unpack<PART=%zu,BYTES=%zu,%s,%zu>(V,V)\n", PART, BYTES,
295 TypeInfo<T>::name(), SIMD_WIDTH);
296 return Vec<T, SIMD_WIDTH>();
300template <
size_t PART,
size_t BYTES,
typename T,
size_t SIMD_WIDTH>
301static SIMD_INLINE Vec<T, SIMD_WIDTH> unpack16(
const Vec<T, SIMD_WIDTH> &,
302 const Vec<T, SIMD_WIDTH> &,
303 Part<PART>, Bytes<BYTES>)
305 printf(
"unpack16<PART=%zu,BYTES=%zu,%s,%zu>(V,V)\n", PART, BYTES,
306 TypeInfo<T>::name(), SIMD_WIDTH);
307 return Vec<T, SIMD_WIDTH>();
311template <
size_t LANE_INDEX,
typename T,
size_t SIMD_WIDTH>
312static SIMD_INLINE Vec<T, 16> extractLane(
const Vec<T, SIMD_WIDTH> &)
314 printf(
"extractLane<IMM=%zu,%s,%zu>(V)\n", LANE_INDEX, TypeInfo<T>::name(),
320template <
size_t NUM_ELEMS,
typename T,
size_t SIMD_WIDTH>
321static SIMD_INLINE
void zip(
const Vec<T, SIMD_WIDTH>,
const Vec<T, SIMD_WIDTH>,
322 Vec<T, SIMD_WIDTH> &, Vec<T, SIMD_WIDTH> &)
324 printf(
"zip<NUM_ELEMS=%zu,%s,%zu>(V,V,V&,V&)\n", NUM_ELEMS,
325 TypeInfo<T>::name(), SIMD_WIDTH);
329template <
size_t NUM_ELEMS,
typename T,
size_t SIMD_WIDTH>
330static SIMD_INLINE
void zip16(
const Vec<T, SIMD_WIDTH>,
331 const Vec<T, SIMD_WIDTH>, Vec<T, SIMD_WIDTH> &,
332 Vec<T, SIMD_WIDTH> &)
334 printf(
"zip16<NUM_ELEMS=%zu,%s,%zu>(V,V,V&,V&)\n", NUM_ELEMS,
335 TypeInfo<T>::name(), SIMD_WIDTH);
339template <
size_t BYTES,
typename T,
size_t SIMD_WIDTH>
340static SIMD_INLINE
void unzip(
const Vec<T, SIMD_WIDTH>,
341 const Vec<T, SIMD_WIDTH>, Vec<T, SIMD_WIDTH> &,
342 Vec<T, SIMD_WIDTH> &, Bytes<BYTES>)
344 printf(
"unzip<BYTES=%zu,%s,%zu>(V,V,V&,V&)\n", BYTES, TypeInfo<T>::name(),
349template <
typename Tout,
typename Tin,
size_t SIMD_WIDTH>
350static SIMD_INLINE Vec<Tout, SIMD_WIDTH> packs(
const Vec<Tin, SIMD_WIDTH> &,
351 const Vec<Tin, SIMD_WIDTH> &,
354 printf(
"packs<%s,%s,%zu>(V,V)\n", TypeInfo<Tout>::name(),
355 TypeInfo<Tin>::name(), SIMD_WIDTH);
356 return Vec<Tout, SIMD_WIDTH>();
362template <
typename Tout,
typename Tin,
size_t SIMD_WIDTH>
363static SIMD_INLINE
void extend(
364 const Vec<Tin, SIMD_WIDTH> &,
365 Vec<Tout, SIMD_WIDTH>[
sizeof(Tout) /
sizeof(Tin)])
367 printf(
"extend<%s,%s,%zu>>(V,V*)\n", TypeInfo<Tout>::name(),
368 TypeInfo<Tin>::name(), SIMD_WIDTH);
371template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
372static SIMD_INLINE Vec<T, SIMD_WIDTH> srai(
const Vec<T, SIMD_WIDTH> &)
374 printf(
"srai<%zu,%s,%zu>(V)\n", COUNT, TypeInfo<T>::name(), SIMD_WIDTH);
375 return Vec<T, SIMD_WIDTH>();
378template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
379static SIMD_INLINE Vec<T, SIMD_WIDTH> srli(
const Vec<T, SIMD_WIDTH> &)
381 printf(
"srli<%zu,%s,%zu>(V)\n", COUNT, TypeInfo<T>::name(), SIMD_WIDTH);
382 return Vec<T, SIMD_WIDTH>();
385template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
386static SIMD_INLINE Vec<T, SIMD_WIDTH> slli(
const Vec<T, SIMD_WIDTH> &)
388 printf(
"slli<%zu,%s,%zu>(V)\n", COUNT, TypeInfo<T>::name(), SIMD_WIDTH);
389 return Vec<T, SIMD_WIDTH>();
394template <
typename T,
size_t SIMD_WIDTH>
395static SIMD_INLINE Vec<T, SIMD_WIDTH> sra(
const Vec<T, SIMD_WIDTH> &,
398 printf(
"sra<%s,%zu>(V, U8)\n", TypeInfo<T>::name(), SIMD_WIDTH);
399 return Vec<T, SIMD_WIDTH>();
402template <
typename T,
size_t SIMD_WIDTH>
403static SIMD_INLINE Vec<T, SIMD_WIDTH> srl(
const Vec<T, SIMD_WIDTH> &,
406 printf(
"srl<%s,%zu>(V, U8)\n", TypeInfo<T>::name(), SIMD_WIDTH);
407 return Vec<T, SIMD_WIDTH>();
410template <
typename T,
size_t SIMD_WIDTH>
411static SIMD_INLINE Vec<T, SIMD_WIDTH> sll(
const Vec<T, SIMD_WIDTH> &,
414 printf(
"sll<%s,%zu>(V, U8)\n", TypeInfo<T>::name(), SIMD_WIDTH);
415 return Vec<T, SIMD_WIDTH>();
420template <
typename Tout,
typename Tin,
size_t SIMD_WIDTH>
421static SIMD_INLINE Vec<Tout, SIMD_WIDTH> cvts(
const Vec<Tin, SIMD_WIDTH> &,
424 printf(
"cvts<%s,%s,%zu>(V)\n", TypeInfo<Tout>::name(), TypeInfo<Tin>::name(),
426 return Vec<Tout, SIMD_WIDTH>();
430template <
typename T,
size_t SIMD_WIDTH>
431static SIMD_INLINE Vec<T, SIMD_WIDTH> hadd(
const Vec<T, SIMD_WIDTH> &,
432 const Vec<T, SIMD_WIDTH> &)
434 printf(
"hadd<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
435 return Vec<T, SIMD_WIDTH>();
439template <
typename T,
size_t SIMD_WIDTH>
440static SIMD_INLINE Vec<T, SIMD_WIDTH> hadds(
const Vec<T, SIMD_WIDTH> &,
441 const Vec<T, SIMD_WIDTH> &)
443 printf(
"hadds<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
444 return Vec<T, SIMD_WIDTH>();
448template <
typename T,
size_t SIMD_WIDTH>
449static SIMD_INLINE Vec<T, SIMD_WIDTH> hsub(
const Vec<T, SIMD_WIDTH> &,
450 const Vec<T, SIMD_WIDTH> &)
452 printf(
"hsub<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
453 return Vec<T, SIMD_WIDTH>();
457template <
typename T,
size_t SIMD_WIDTH>
458static SIMD_INLINE Vec<T, SIMD_WIDTH> hsubs(
const Vec<T, SIMD_WIDTH> &,
459 const Vec<T, SIMD_WIDTH> &)
461 printf(
"hsubs<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
462 return Vec<T, SIMD_WIDTH>();
466template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
467static SIMD_INLINE Vec<T, SIMD_WIDTH> srle(
const Vec<T, SIMD_WIDTH> &)
469 printf(
"srle<%zu,%s,%zu>(V)\n", COUNT, TypeInfo<T>::name(), SIMD_WIDTH);
470 return Vec<T, SIMD_WIDTH>();
474template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
475static SIMD_INLINE Vec<T, SIMD_WIDTH> slle(
const Vec<T, SIMD_WIDTH> &)
477 printf(
"slle<%zu,%s,%zu>(V)\n", COUNT, TypeInfo<T>::name(), SIMD_WIDTH);
478 return Vec<T, SIMD_WIDTH>();
482template <
size_t COUNT,
typename T,
size_t SIMD_WIDTH>
483static SIMD_INLINE Vec<T, SIMD_WIDTH> alignre(
const Vec<T, SIMD_WIDTH> &,
484 const Vec<T, SIMD_WIDTH> &)
486 printf(
"alignre<%zu,%s,%zu>(V,V)\n", COUNT, TypeInfo<T>::name(), SIMD_WIDTH);
487 return Vec<T, SIMD_WIDTH>();
491template <
size_t N,
typename T,
size_t SIMD_WIDTH>
492static SIMD_INLINE
void swizzle(Vec<T, SIMD_WIDTH>[N], Integer<N>)
494 printf(
"swizzle<%zu,%s,%zu>(V,V*)\n", N, TypeInfo<T>::name(), SIMD_WIDTH);
498template <
typename T,
size_t SIMD_WIDTH>
499static SIMD_INLINE Vec<T, SIMD_WIDTH> ifelse(
const Vec<T, SIMD_WIDTH> &,
500 const Vec<T, SIMD_WIDTH> &,
501 const Vec<T, SIMD_WIDTH> &)
503 printf(
"ifelse<%s,%zu>(V,V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
504 return Vec<T, SIMD_WIDTH>();
508template <
typename T,
size_t SIMD_WIDTH>
509static SIMD_INLINE Vec<T, SIMD_WIDTH> cmplt(
const Vec<T, SIMD_WIDTH> &,
510 const Vec<T, SIMD_WIDTH> &)
512 printf(
"cmplt<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
513 return Vec<T, SIMD_WIDTH>();
517template <
typename T,
size_t SIMD_WIDTH>
518static SIMD_INLINE Vec<T, SIMD_WIDTH> cmple(
const Vec<T, SIMD_WIDTH> &,
519 const Vec<T, SIMD_WIDTH> &)
521 printf(
"cmple<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
522 return Vec<T, SIMD_WIDTH>();
526template <
typename T,
size_t SIMD_WIDTH>
527static SIMD_INLINE Vec<T, SIMD_WIDTH> cmpeq(
const Vec<T, SIMD_WIDTH> &,
528 const Vec<T, SIMD_WIDTH> &)
530 printf(
"cmpeq<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
531 return Vec<T, SIMD_WIDTH>();
535template <
typename T,
size_t SIMD_WIDTH>
536static SIMD_INLINE Vec<T, SIMD_WIDTH> cmpge(
const Vec<T, SIMD_WIDTH> &,
537 const Vec<T, SIMD_WIDTH> &)
539 printf(
"cmpge<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
540 return Vec<T, SIMD_WIDTH>();
544template <
typename T,
size_t SIMD_WIDTH>
545static SIMD_INLINE Vec<T, SIMD_WIDTH> cmpgt(
const Vec<T, SIMD_WIDTH> &,
546 const Vec<T, SIMD_WIDTH> &)
548 printf(
"cmpgt<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
549 return Vec<T, SIMD_WIDTH>();
553template <
typename T,
size_t SIMD_WIDTH>
554static SIMD_INLINE Vec<T, SIMD_WIDTH> cmpneq(
const Vec<T, SIMD_WIDTH> &,
555 const Vec<T, SIMD_WIDTH> &)
557 printf(
"cmpneq<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
558 return Vec<T, SIMD_WIDTH>();
562template <
typename T,
size_t SIMD_WIDTH>
563static SIMD_INLINE Vec<T, SIMD_WIDTH> bit_and(
const Vec<T, SIMD_WIDTH> &,
564 const Vec<T, SIMD_WIDTH> &)
566 printf(
"and<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
567 return Vec<T, SIMD_WIDTH>();
571template <
typename T,
size_t SIMD_WIDTH>
572static SIMD_INLINE Vec<T, SIMD_WIDTH> bit_or(
const Vec<T, SIMD_WIDTH> &,
573 const Vec<T, SIMD_WIDTH> &)
575 printf(
"or<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
576 return Vec<T, SIMD_WIDTH>();
580template <
typename T,
size_t SIMD_WIDTH>
581static SIMD_INLINE Vec<T, SIMD_WIDTH> bit_andnot(
const Vec<T, SIMD_WIDTH> &,
582 const Vec<T, SIMD_WIDTH> &)
584 printf(
"bit_andnot<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
585 return Vec<T, SIMD_WIDTH>();
589template <
typename T,
size_t SIMD_WIDTH>
590static SIMD_INLINE Vec<T, SIMD_WIDTH> bit_xor(
const Vec<T, SIMD_WIDTH> &,
591 const Vec<T, SIMD_WIDTH> &)
593 printf(
"xor<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
594 return Vec<T, SIMD_WIDTH>();
598template <
typename T,
size_t SIMD_WIDTH>
599static SIMD_INLINE Vec<T, SIMD_WIDTH> bit_not(
const Vec<T, SIMD_WIDTH> &)
601 printf(
"not<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
602 return Vec<T, SIMD_WIDTH>();
605template <
typename T,
size_t SIMD_WIDTH>
606static SIMD_INLINE Vec<T, SIMD_WIDTH> avg(
const Vec<T, SIMD_WIDTH> &,
607 const Vec<T, SIMD_WIDTH> &)
609 printf(
"avg<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
610 return Vec<T, SIMD_WIDTH>();
614template <
typename T,
size_t SIMD_WIDTH>
615static SIMD_INLINE
bool test_all_zeros(
const Vec<T, SIMD_WIDTH> &)
617 printf(
"test_all_zeros<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
622template <
typename T,
size_t SIMD_WIDTH>
623static SIMD_INLINE
bool test_all_ones(
const Vec<T, SIMD_WIDTH> &)
625 printf(
"test_all_ones<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
631template <
typename T,
size_t SIMD_WIDTH>
632static SIMD_INLINE Vec<T, SIMD_WIDTH> sign(
const Vec<T, SIMD_WIDTH> &,
633 const Vec<T, SIMD_WIDTH> &)
635 printf(
"sign<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
636 return Vec<T, SIMD_WIDTH>();
641template <
typename T,
size_t SIMD_WIDTH>
642static SIMD_INLINE Vec<T, SIMD_WIDTH> absDiff(
const Vec<T, SIMD_WIDTH> &,
643 const Vec<T, SIMD_WIDTH> &)
645 printf(
"absDiff<%s,%zu>(V,V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
646 return Vec<T, SIMD_WIDTH>();
650template <
typename T,
size_t SIMD_WIDTH>
651static Vec<T, SIMD_WIDTH> reverse(
const Vec<T, SIMD_WIDTH> &)
653 printf(
"reverse<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
654 return Vec<T, SIMD_WIDTH>();
658template <
typename T,
size_t SIMD_WIDTH>
659static SIMD_INLINE uint64_t msb2int(
const Vec<T, SIMD_WIDTH> &)
661 printf(
"msb2int<%s,%zu>(V)\n", TypeInfo<T>::name(), SIMD_WIDTH);
666template <
typename T,
size_t SIMD_WIDTH>
667static SIMD_INLINE Vec<T, SIMD_WIDTH> int2msb(
const uint64_t, OutputType<T>,
670 printf(
"int2msb<%s,%zu>(U64)\n", TypeInfo<T>::name(), SIMD_WIDTH);
671 return Vec<T, SIMD_WIDTH>();
675template <
typename T,
size_t SIMD_WIDTH>
676static SIMD_INLINE Vec<T, SIMD_WIDTH> int2bits(
const uint64_t, OutputType<T>,
679 printf(
"int2bits<%s,%zu>(U64)\n", TypeInfo<T>::name(), SIMD_WIDTH);
680 return Vec<T, SIMD_WIDTH>();
685template <
typename T,
size_t SIMD_WIDTH>
686static SIMD_INLINE Vec<T, SIMD_WIDTH> iota(OutputType<T>, Integer<SIMD_WIDTH>)
688 printf(
"iota<%s,%zu>()\n", TypeInfo<T>::name(), SIMD_WIDTH);
689 return Vec<T, SIMD_WIDTH>();
aligned_allocator< Vec< T, SIMD_WIDTH >, SIMD_WIDTH > allocator
Allocator to be used with std::vector.
Definition vec.H:103
static constexpr size_t elems
Number of elements in the vector. Alias for elements.
Definition vec.H:85
static constexpr size_t bytes
Number of bytes in the vector.
Definition vec.H:90
static constexpr size_t elements
Number of elements in the vector.
Definition vec.H:80
Namespace for T-SIMD.
Definition time_measurement.H:161