TR-mbed 1.0
Loading...
Searching...
No Matches
GenericPacketMath.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
5// Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
6//
7// This Source Code Form is subject to the terms of the Mozilla
8// Public License v. 2.0. If a copy of the MPL was not distributed
9// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
11#ifndef EIGEN_GENERIC_PACKET_MATH_H
12#define EIGEN_GENERIC_PACKET_MATH_H
13
14namespace Eigen {
15
16namespace internal {
17
26#ifndef EIGEN_DEBUG_ALIGNED_LOAD
27#define EIGEN_DEBUG_ALIGNED_LOAD
28#endif
29
30#ifndef EIGEN_DEBUG_UNALIGNED_LOAD
31#define EIGEN_DEBUG_UNALIGNED_LOAD
32#endif
33
34#ifndef EIGEN_DEBUG_ALIGNED_STORE
35#define EIGEN_DEBUG_ALIGNED_STORE
36#endif
37
38#ifndef EIGEN_DEBUG_UNALIGNED_STORE
39#define EIGEN_DEBUG_UNALIGNED_STORE
40#endif
41
43{
44 enum {
46
47 HasAdd = 1,
48 HasSub = 1,
50 HasMul = 1,
52 HasAbs = 1,
53 HasArg = 0,
56 HasMin = 1,
57 HasMax = 1,
61 // This flag is used to indicate whether packet comparison is supported.
62 // pcmp_eq, pcmp_lt and pcmp_le should be defined for it to be true.
63 HasCmp = 0,
64
65 HasDiv = 0,
68 HasExp = 0,
70 HasLog = 0,
73 HasPow = 0,
74
75 HasSin = 0,
76 HasCos = 0,
77 HasTan = 0,
88 HasErf = 0,
97
102 HasSign = 0
103 };
104};
105
106template<typename T> struct packet_traits : default_packet_traits
107{
108 typedef T type;
109 typedef T half;
110 enum {
112 size = 1,
114 HasHalfPacket = 0
115 };
116 enum {
126 HasSetLinear = 0
127 };
128};
129
130template<typename T> struct packet_traits<const T> : packet_traits<T> { };
131
132template<typename T> struct unpacket_traits
133{
134 typedef T type;
135 typedef T half;
136 enum
137 {
138 size = 1,
143 };
144};
145
146template<typename T> struct unpacket_traits<const T> : unpacket_traits<T> { };
147
148template <typename Src, typename Tgt> struct type_casting_traits {
149 enum {
152 TgtCoeffRatio = 1
153 };
154};
155
158template<typename T, int unique_id = 0>
160{
161 EIGEN_ALWAYS_INLINE operator T&() { return m_val; }
162 EIGEN_ALWAYS_INLINE operator const T&() const { return m_val; }
166 m_val = v;
167 return *this;
168 }
169
171};
172
173
177template<typename Packet>
184
186template <typename SrcPacket, typename TgtPacket>
187EIGEN_DEVICE_FUNC inline TgtPacket
189 return static_cast<TgtPacket>(a);
190}
191template <typename SrcPacket, typename TgtPacket>
192EIGEN_DEVICE_FUNC inline TgtPacket
193pcast(const SrcPacket& a, const SrcPacket& /*b*/) {
194 return static_cast<TgtPacket>(a);
195}
196template <typename SrcPacket, typename TgtPacket>
197EIGEN_DEVICE_FUNC inline TgtPacket
198pcast(const SrcPacket& a, const SrcPacket& /*b*/, const SrcPacket& /*c*/, const SrcPacket& /*d*/) {
199 return static_cast<TgtPacket>(a);
200}
201template <typename SrcPacket, typename TgtPacket>
202EIGEN_DEVICE_FUNC inline TgtPacket
203pcast(const SrcPacket& a, const SrcPacket& /*b*/, const SrcPacket& /*c*/, const SrcPacket& /*d*/,
204 const SrcPacket& /*e*/, const SrcPacket& /*f*/, const SrcPacket& /*g*/, const SrcPacket& /*h*/) {
205 return static_cast<TgtPacket>(a);
206}
207
209template <typename Target, typename Packet>
210EIGEN_DEVICE_FUNC inline Target
211preinterpret(const Packet& a); /* { return reinterpret_cast<const Target&>(a); } */
212
214template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
215padd(const Packet& a, const Packet& b) { return a+b; }
216// Avoid compiler warning for boolean algebra.
217template<> EIGEN_DEVICE_FUNC inline bool
218padd(const bool& a, const bool& b) { return a || b; }
219
221template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
222psub(const Packet& a, const Packet& b) { return a-b; }
223
225template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
226pnegate(const Packet& a) { return -a; }
227
228template<> EIGEN_DEVICE_FUNC inline bool
229pnegate(const bool& a) { return !a; }
230
232template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
233pconj(const Packet& a) { return numext::conj(a); }
234
236template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
237pmul(const Packet& a, const Packet& b) { return a*b; }
238// Avoid compiler warning for boolean algebra.
239template<> EIGEN_DEVICE_FUNC inline bool
240pmul(const bool& a, const bool& b) { return a && b; }
241
243template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
244pdiv(const Packet& a, const Packet& b) { return a/b; }
245
246// In the generic case, memset to all one bits.
247template<typename Packet, typename EnableIf = void>
249 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& /*a*/){
250 Packet b;
251 memset(static_cast<void*>(&b), 0xff, sizeof(Packet));
252 return b;
253 }
254};
255
256// For non-trivial scalars, set to Scalar(1) (i.e. a non-zero value).
257// Although this is technically not a valid bitmask, the scalar path for pselect
258// uses a comparison to zero, so this should still work in most cases. We don't
259// have another option, since the scalar type requires initialization.
260template<typename T>
261struct ptrue_impl<T,
262 typename internal::enable_if<is_scalar<T>::value && NumTraits<T>::RequireInitialization>::type > {
263 static EIGEN_DEVICE_FUNC inline T run(const T& /*a*/){
264 return T(1);
265 }
266};
267
269template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
270ptrue(const Packet& a) {
272}
273
274// In the general case, memset to zero.
275template<typename Packet, typename EnableIf = void>
277 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& /*a*/) {
278 Packet b;
279 memset(static_cast<void*>(&b), 0x00, sizeof(Packet));
280 return b;
281 }
282};
283
284// For scalars, explicitly set to Scalar(0), since the underlying representation
285// for zero may not consist of all-zero bits.
286template<typename T>
288 typename internal::enable_if<is_scalar<T>::value>::type> {
289 static EIGEN_DEVICE_FUNC inline T run(const T& /*a*/) {
290 return T(0);
291 }
292};
293
295template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
296pzero(const Packet& a) {
298}
299
301template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
302pcmp_le(const Packet& a, const Packet& b) { return a<=b ? ptrue(a) : pzero(a); }
303
305template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
306pcmp_lt(const Packet& a, const Packet& b) { return a<b ? ptrue(a) : pzero(a); }
307
309template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
310pcmp_eq(const Packet& a, const Packet& b) { return a==b ? ptrue(a) : pzero(a); }
311
313template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
314pcmp_lt_or_nan(const Packet& a, const Packet& b) { return a>=b ? pzero(a) : ptrue(a); }
315
316template<typename T>
317struct bit_and {
319 return a & b;
320 }
321};
322
323template<typename T>
324struct bit_or {
326 return a | b;
327 }
328};
329
330template<typename T>
331struct bit_xor {
333 return a ^ b;
334 }
335};
336
337template<typename T>
338struct bit_not {
342};
343
344// Use operators &, |, ^, ~.
345template<typename T>
347 EIGEN_DEVICE_FUNC static inline T bitwise_and(const T& a, const T& b) { return bit_and<T>()(a, b); }
348 EIGEN_DEVICE_FUNC static inline T bitwise_or(const T& a, const T& b) { return bit_or<T>()(a, b); }
349 EIGEN_DEVICE_FUNC static inline T bitwise_xor(const T& a, const T& b) { return bit_xor<T>()(a, b); }
350 EIGEN_DEVICE_FUNC static inline T bitwise_not(const T& a) { return bit_not<T>()(a); }
351};
352
353// Apply binary operations byte-by-byte
354template<typename T>
356 EIGEN_DEVICE_FUNC static inline T bitwise_and(const T& a, const T& b) {
357 return binary(a, b, bit_and<unsigned char>());
358 }
359 EIGEN_DEVICE_FUNC static inline T bitwise_or(const T& a, const T& b) {
360 return binary(a, b, bit_or<unsigned char>());
361 }
362 EIGEN_DEVICE_FUNC static inline T bitwise_xor(const T& a, const T& b) {
363 return binary(a, b, bit_xor<unsigned char>());
364 }
365 EIGEN_DEVICE_FUNC static inline T bitwise_not(const T& a) {
366 return unary(a,bit_not<unsigned char>());
367 }
368
369 private:
370 template<typename Op>
371 EIGEN_DEVICE_FUNC static inline T unary(const T& a, Op op) {
372 const unsigned char* a_ptr = reinterpret_cast<const unsigned char*>(&a);
373 T c;
374 unsigned char* c_ptr = reinterpret_cast<unsigned char*>(&c);
375 for (size_t i = 0; i < sizeof(T); ++i) {
376 *c_ptr++ = op(*a_ptr++);
377 }
378 return c;
379 }
380
381 template<typename Op>
382 EIGEN_DEVICE_FUNC static inline T binary(const T& a, const T& b, Op op) {
383 const unsigned char* a_ptr = reinterpret_cast<const unsigned char*>(&a);
384 const unsigned char* b_ptr = reinterpret_cast<const unsigned char*>(&b);
385 T c;
386 unsigned char* c_ptr = reinterpret_cast<unsigned char*>(&c);
387 for (size_t i = 0; i < sizeof(T); ++i) {
388 *c_ptr++ = op(*a_ptr++, *b_ptr++);
389 }
390 return c;
391 }
392};
393
394// In the general case, use byte-by-byte manipulation.
395template<typename T, typename EnableIf = void>
397
398// For integers or non-trivial scalars, use binary operators.
399template<typename T>
402 is_scalar<T>::value && (NumTraits<T>::IsInteger || NumTraits<T>::RequireInitialization)>::type
403 > : public operator_bitwise_helper<T> {};
404
406template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
407pand(const Packet& a, const Packet& b) {
409}
410
412template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
413por(const Packet& a, const Packet& b) {
415}
416
418template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
419pxor(const Packet& a, const Packet& b) {
421}
422
424template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
428
430template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
431pandnot(const Packet& a, const Packet& b) { return pand(a, pnot(b)); }
432
433// In the general case, use bitwise select.
434template<typename Packet, typename EnableIf = void>
436 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& mask, const Packet& a, const Packet& b) {
437 return por(pand(a,mask),pandnot(b,mask));
438 }
439};
440
441// For scalars, use ternary select.
442template<typename Packet>
444 typename internal::enable_if<is_scalar<Packet>::value>::type > {
445 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& mask, const Packet& a, const Packet& b) {
446 return numext::equal_strict(mask, Packet(0)) ? b : a;
447 }
448};
449
451template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
452pselect(const Packet& mask, const Packet& a, const Packet& b) {
453 return pselect_impl<Packet>::run(mask, a, b);
454}
455
456template<> EIGEN_DEVICE_FUNC inline bool pselect<bool>(
457 const bool& cond, const bool& a, const bool& b) {
458 return cond ? a : b;
459}
460
463template<int NaNPropagation>
465 template <typename Packet, typename Op>
466 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& a, const Packet& b, Op op) {
467 return op(a,b);
468 }
469};
470
473template<>
475 template <typename Packet, typename Op>
476 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& a, const Packet& b, Op op) {
479 return pselect(not_nan_mask_a,
480 pselect(not_nan_mask_b, op(a, b), b),
481 a);
482 }
483};
484
488template<>
490 template <typename Packet, typename Op>
491 static EIGEN_DEVICE_FUNC inline Packet run(const Packet& a, const Packet& b, Op op) {
494 return pselect(not_nan_mask_a,
495 pselect(not_nan_mask_b, op(a, b), a),
496 b);
497 }
498};
499
500
501#ifndef SYCL_DEVICE_ONLY
502#define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func) Func
503#else
504#define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func) \
505[](const Type& a, const Type& b) { \
506 return Func(a, b);}
507#endif
508
511template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
512pmin(const Packet& a, const Packet& b) { return numext::mini(a,b); }
513
516template <int NaNPropagation, typename Packet>
520
523template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
524pmax(const Packet& a, const Packet& b) { return numext::maxi(a, b); }
525
528template <int NaNPropagation, typename Packet>
532
534template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
535pabs(const Packet& a) { return numext::abs(a); }
536template<> EIGEN_DEVICE_FUNC inline unsigned int
537pabs(const unsigned int& a) { return a; }
538template<> EIGEN_DEVICE_FUNC inline unsigned long
539pabs(const unsigned long& a) { return a; }
540template<> EIGEN_DEVICE_FUNC inline unsigned long long
541pabs(const unsigned long long& a) { return a; }
542
544template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
545paddsub(const Packet& a, const Packet& b) {
546 return pselect(peven_mask(a), padd(a, b), psub(a, b));
547 }
548
550template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
551parg(const Packet& a) { using numext::arg; return arg(a); }
552
553
555template<int N> EIGEN_DEVICE_FUNC inline int
556parithmetic_shift_right(const int& a) { return a >> N; }
557template<int N> EIGEN_DEVICE_FUNC inline long int
558parithmetic_shift_right(const long int& a) { return a >> N; }
559
561template<int N> EIGEN_DEVICE_FUNC inline int
562plogical_shift_right(const int& a) { return static_cast<int>(static_cast<unsigned int>(a) >> N); }
563template<int N> EIGEN_DEVICE_FUNC inline long int
564plogical_shift_right(const long int& a) { return static_cast<long>(static_cast<unsigned long>(a) >> N); }
565
567template<int N> EIGEN_DEVICE_FUNC inline int
568plogical_shift_left(const int& a) { return a << N; }
569template<int N> EIGEN_DEVICE_FUNC inline long int
570plogical_shift_left(const long int& a) { return a << N; }
571
575template <typename Packet>
577 int exp;
579 Packet result = static_cast<Packet>(frexp(a, &exp));
580 exponent = static_cast<Packet>(exp);
581 return result;
582}
583
587template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
588pldexp(const Packet &a, const Packet &exponent) {
590 return static_cast<Packet>(ldexp(a, static_cast<int>(exponent)));
591}
592
594template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
595pabsdiff(const Packet& a, const Packet& b) { return pselect(pcmp_lt(a, b), psub(b, a), psub(a, b)); }
596
598template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
599pload(const typename unpacket_traits<Packet>::type* from) { return *from; }
600
602template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
603ploadu(const typename unpacket_traits<Packet>::type* from) { return *from; }
604
609template<typename Packet> EIGEN_DEVICE_FUNC inline
610typename enable_if<unpacket_traits<Packet>::masked_load_available, Packet>::type
612
614template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
615pset1(const typename unpacket_traits<Packet>::type& a) { return a; }
616
618template<typename Packet,typename BitsType> EIGEN_DEVICE_FUNC inline Packet
620
622template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
624
630template<typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet
631ploaddup(const typename unpacket_traits<Packet>::type* from) { return *from; }
632
639template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
642
652template<typename Packet> EIGEN_DEVICE_FUNC
653inline void pbroadcast4(const typename unpacket_traits<Packet>::type *a,
655{
656 a0 = pload1<Packet>(a+0);
657 a1 = pload1<Packet>(a+1);
658 a2 = pload1<Packet>(a+2);
659 a3 = pload1<Packet>(a+3);
660}
661
669template<typename Packet> EIGEN_DEVICE_FUNC
670inline void pbroadcast2(const typename unpacket_traits<Packet>::type *a,
671 Packet& a0, Packet& a1)
672{
673 a0 = pload1<Packet>(a+0);
674 a1 = pload1<Packet>(a+1);
675}
676
678template<typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet
679plset(const typename unpacket_traits<Packet>::type& a) { return a; }
680
683template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
684peven_mask(const Packet& /*a*/) {
685 typedef typename unpacket_traits<Packet>::type Scalar;
686 const size_t n = unpacket_traits<Packet>::size;
687 EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Scalar elements[n];
688 for(size_t i = 0; i < n; ++i) {
689 memset(elements+i, ((i & 1) == 0 ? 0xff : 0), sizeof(Scalar));
690 }
691 return ploadu<Packet>(elements);
692}
693
694
696template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstore(Scalar* to, const Packet& from)
697{ (*to) = from; }
698
700template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstoreu(Scalar* to, const Packet& from)
701{ (*to) = from; }
702
707template<typename Scalar, typename Packet>
709typename enable_if<unpacket_traits<Packet>::masked_store_available, void>::type
711
712 template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline Packet pgather(const Scalar* from, Index /*stride*/)
713 { return ploadu<Packet>(from); }
714
715 template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pscatter(Scalar* to, const Packet& from, Index /*stride*/)
716 { pstore(to, from); }
717
719template<typename Scalar> EIGEN_DEVICE_FUNC inline void prefetch(const Scalar* addr)
720{
721#if defined(EIGEN_HIP_DEVICE_COMPILE)
722 // do nothing
723#elif defined(EIGEN_CUDA_ARCH)
724#if defined(__LP64__) || EIGEN_OS_WIN64
725 // 64-bit pointer operand constraint for inlined asm
726 asm(" prefetch.L1 [ %1 ];" : "=l"(addr) : "l"(addr));
727#else
728 // 32-bit pointer operand constraint for inlined asm
729 asm(" prefetch.L1 [ %1 ];" : "=r"(addr) : "r"(addr));
730#endif
731#elif (!EIGEN_COMP_MSVC) && (EIGEN_COMP_GNUC || EIGEN_COMP_CLANG || EIGEN_COMP_ICC)
733#endif
734}
735
737template<typename Packet> EIGEN_DEVICE_FUNC inline Packet preverse(const Packet& a)
738{ return a; }
739
741template<typename Packet> EIGEN_DEVICE_FUNC inline Packet pcplxflip(const Packet& a)
742{
743 return Packet(numext::imag(a),numext::real(a));
744}
745
746/**************************
747* Special math functions
748***************************/
749
752Packet psin(const Packet& a) { EIGEN_USING_STD(sin); return sin(a); }
753
756Packet pcos(const Packet& a) { EIGEN_USING_STD(cos); return cos(a); }
757
760Packet ptan(const Packet& a) { EIGEN_USING_STD(tan); return tan(a); }
761
764Packet pasin(const Packet& a) { EIGEN_USING_STD(asin); return asin(a); }
765
769
773
776Packet psinh(const Packet& a) { EIGEN_USING_STD(sinh); return sinh(a); }
777
780Packet pcosh(const Packet& a) { EIGEN_USING_STD(cosh); return cosh(a); }
781
784Packet ptanh(const Packet& a) { EIGEN_USING_STD(tanh); return tanh(a); }
785
788Packet pexp(const Packet& a) { EIGEN_USING_STD(exp); return exp(a); }
789
792Packet pexpm1(const Packet& a) { return numext::expm1(a); }
793
796Packet plog(const Packet& a) { EIGEN_USING_STD(log); return log(a); }
797
800Packet plog1p(const Packet& a) { return numext::log1p(a); }
801
805
812
815Packet psqrt(const Packet& a) { return numext::sqrt(a); }
816
821 return pdiv(pset1<Packet>(Scalar(1)), psqrt(a));
822}
823
826Packet pround(const Packet& a) { using numext::round; return round(a); }
827
830Packet pfloor(const Packet& a) { using numext::floor; return floor(a); }
831
835Packet print(const Packet& a) { using numext::rint; return rint(a); }
836
839Packet pceil(const Packet& a) { using numext::ceil; return ceil(a); }
840
842template<typename Packet>
845{ return a; }
846
851template<typename Packet>
852EIGEN_DEVICE_FUNC inline typename conditional<(unpacket_traits<Packet>::size%8)==0,typename unpacket_traits<Packet>::half,Packet>::type
854{ return a; }
855
856// Slow generic implementation of Packet reduction.
857template <typename Packet, typename Op>
859predux_helper(const Packet& a, Op op) {
860 typedef typename unpacket_traits<Packet>::type Scalar;
861 const size_t n = unpacket_traits<Packet>::size;
862 EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Scalar elements[n];
864 for(size_t k = n / 2; k > 0; k /= 2) {
865 for(size_t i = 0; i < k; ++i) {
866 elements[i] = op(elements[i], elements[i + k]);
867 }
868 }
869 return elements[0];
870}
871
873template<typename Packet>
876{
877 return a;
878}
879
881template <typename Packet>
887
889template <typename Packet>
895
896template <int NaNPropagation, typename Packet>
902
904template <typename Packet>
910
911template <int NaNPropagation, typename Packet>
917
918#undef EIGEN_BINARY_OP_NAN_PROPAGATION
919
923// not needed yet
924// template<typename Packet> EIGEN_DEVICE_FUNC inline bool predux_all(const Packet& a)
925// { return bool(a); }
926
930template<typename Packet> EIGEN_DEVICE_FUNC inline bool predux_any(const Packet& a)
931{
932 // Dirty but generic implementation where "true" is assumed to be non 0 and all the sames.
933 // It is expected that "true" is either:
934 // - Scalar(1)
935 // - bits full of ones (NaN for floats),
936 // - or first bit equals to 1 (1 for ints, smallest denormal for floats).
937 // For all these cases, taking the sum is just fine, and this boils down to a no-op for scalars.
938 typedef typename unpacket_traits<Packet>::type Scalar;
940}
941
942/***************************************************************************
943* The following functions might not have to be overwritten for vectorized types
944***************************************************************************/
945
947// NOTE: this function must really be templated on the packet type (think about different packet types for the same scalar type)
948template<typename Packet>
950{
952}
953
955template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
957 const Packet& b,
958 const Packet& c)
959{ return padd(pmul(a, b),c); }
960
963template<typename Packet, int Alignment>
971
974template<typename Scalar, typename Packet, int Alignment>
976{
978 pstore(to, from);
979 else
980 pstoreu(to, from);
981}
982
988template<typename Packet, int LoadMode>
993
994/***************************************************************************
995* Fast complex products (GCC generates a function call which is very slow)
996***************************************************************************/
997
998// Eigen+CUDA does not support complexes.
999#if !defined(EIGEN_GPUCC)
1000
1001template<> inline std::complex<float> pmul(const std::complex<float>& a, const std::complex<float>& b)
1002{ return std::complex<float>(a.real()*b.real() - a.imag()*b.imag(), a.imag()*b.real() + a.real()*b.imag()); }
1003
1004template<> inline std::complex<double> pmul(const std::complex<double>& a, const std::complex<double>& b)
1005{ return std::complex<double>(a.real()*b.real() - a.imag()*b.imag(), a.imag()*b.real() + a.real()*b.imag()); }
1006
1007#endif
1008
1009
1010/***************************************************************************
1011 * PacketBlock, that is a collection of N packets where the number of words
1012 * in the packet is a multiple of N.
1013***************************************************************************/
1017
1018template<typename Packet> EIGEN_DEVICE_FUNC inline void
1020 // Nothing to do in the scalar case, i.e. a 1x1 matrix.
1021}
1022
1023/***************************************************************************
1024 * Selector, i.e. vector of N boolean values used to select (i.e. blend)
1025 * words from 2 packets.
1026***************************************************************************/
1027template <size_t N> struct Selector {
1028 bool select[N];
1029};
1030
1031template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
1035
1036} // end namespace internal
1037
1038} // end namespace Eigen
1039
1040#endif // EIGEN_GENERIC_PACKET_MATH_H
EIGEN_DEVICE_FUNC const TanReturnType tan() const
Definition ArrayCwiseUnaryOps.h:269
EIGEN_DEVICE_FUNC const Log10ReturnType log10() const
Definition ArrayCwiseUnaryOps.h:158
EIGEN_DEVICE_FUNC const FloorReturnType floor() const
Definition ArrayCwiseUnaryOps.h:481
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const ArgReturnType arg() const
Definition ArrayCwiseUnaryOps.h:66
EIGEN_DEVICE_FUNC const LogReturnType log() const
Definition ArrayCwiseUnaryOps.h:128
EIGEN_DEVICE_FUNC const AcosReturnType acos() const
Definition ArrayCwiseUnaryOps.h:297
EIGEN_DEVICE_FUNC const CeilReturnType ceil() const
Definition ArrayCwiseUnaryOps.h:495
EIGEN_DEVICE_FUNC const AtanReturnType atan() const
Definition ArrayCwiseUnaryOps.h:283
EIGEN_DEVICE_FUNC const RintReturnType rint() const
Definition ArrayCwiseUnaryOps.h:453
EIGEN_DEVICE_FUNC const RoundReturnType round() const
Definition ArrayCwiseUnaryOps.h:467
ArrayXXi a
Definition Array_initializer_list_23_cxx11.cpp:1
Array< int, Dynamic, 1 > v
Definition Array_initializer_list_vector_cxx11.cpp:1
int n
Definition BiCGSTAB_simple.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
#define EIGEN_LOG2E
Definition MathFunctions.h:17
#define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func)
Definition GenericPacketMath.h:502
#define EIGEN_ALWAYS_INLINE
Definition Macros.h:932
#define EIGEN_USING_STD(FUNC)
Definition Macros.h:1185
#define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Definition Macros.h:984
#define EIGEN_CONSTEXPR
Definition Macros.h:787
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
Eigen::Triplet< double > T
Definition Tutorial_sparse_example.cpp:6
Scalar Scalar * c
Definition benchVecAdd.cpp:17
Scalar * b
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
@ N
Definition constructor.cpp:23
@ PropagateNaN
Definition Constants.h:343
@ PropagateNumbers
Definition Constants.h:345
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexpm1(const Packet &a)
Definition GenericPacketMath.h:792
EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf &a)
Definition Complex.h:167
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_min(const Packet &a)
Definition GenericPacketMath.h:890
EIGEN_DEVICE_FUNC TgtPacket pcast(const SrcPacket &a)
Definition GenericPacketMath.h:188
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:215
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE packet_type ploadt(const Eigen::TensorSycl::internal::RangeAccess< cl::sycl::access::mode::read_write, typename unpacket_traits< packet_type >::type > &from)
Definition PacketMath.h:117
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_helper(const Packet &a, Op op)
Definition GenericPacketMath.h:859
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog10(const Packet &a)
Definition GenericPacketMath.h:804
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux(const Packet &a)
Definition GenericPacketMath.h:875
EIGEN_STRONG_INLINE Packet8f pzero(const Packet8f &)
Definition PacketMath.h:247
EIGEN_DEVICE_FUNC Packet parg(const Packet &a)
Definition GenericPacketMath.h:551
EIGEN_STRONG_INLINE Packet16h ploadquad(const Eigen::half *from)
Definition PacketMath.h:1420
EIGEN_DEVICE_FUNC void pbroadcast4(const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1, Packet &a2, Packet &a3)
Definition GenericPacketMath.h:653
EIGEN_STRONG_INLINE void ptranspose(PacketBlock< Packet2cf, 2 > &kernel)
Definition Complex.h:224
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2(const Packet &a)
Definition GenericPacketMath.h:808
EIGEN_DEVICE_FUNC Packet pset1frombits(BitsType a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog(const Packet &a)
Definition GenericPacketMath.h:796
EIGEN_STRONG_INLINE bool predux_any(const Packet4f &x)
Definition PacketMath.h:1765
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pstoret(Eigen::TensorSycl::internal::RangeAccess< cl::sycl::access::mode::read_write, typename unpacket_traits< packet_type >::type > to, const packet_type &from)
Definition PacketMath.h:657
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:244
EIGEN_DEVICE_FUNC Packet pgather(const Scalar *from, Index)
Definition GenericPacketMath.h:712
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp(const Packet &a)
Definition GenericPacketMath.h:788
EIGEN_STRONG_INLINE Packet4i plogical_shift_left(const Packet4i &a)
Definition PacketMath.h:1191
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos(const Packet &a)
Definition GenericPacketMath.h:756
EIGEN_DEVICE_FUNC void prefetch(const Scalar *addr)
Definition GenericPacketMath.h:719
EIGEN_STRONG_INLINE Packet4f print(const Packet4f &a)
Definition PacketMath.h:3115
EIGEN_DEVICE_FUNC Packet ploadu(const typename unpacket_traits< Packet >::type *from)
Definition GenericPacketMath.h:603
EIGEN_DEVICE_FUNC Packet pmax(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:524
EIGEN_STRONG_INLINE Packet4i pblend(const Selector< 4 > &ifPacket, const Packet4i &thenPacket, const Packet4i &elsePacket)
Definition PacketMath.h:2107
EIGEN_DEVICE_FUNC Packet pnot(const Packet &a)
Definition GenericPacketMath.h:425
EIGEN_STRONG_INLINE Packet4f pcmp_le(const Packet4f &a, const Packet4f &b)
Definition PacketMath.h:867
EIGEN_STRONG_INLINE Packet4i plogical_shift_right(const Packet4i &a)
Definition PacketMath.h:1189
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin(const Packet &a)
Definition GenericPacketMath.h:752
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos(const Packet &a)
Definition GenericPacketMath.h:768
EIGEN_DEVICE_FUNC Target preinterpret(const Packet &a)
EIGEN_DEVICE_FUNC bool pselect< bool >(const bool &cond, const bool &a, const bool &b)
Definition GenericPacketMath.h:456
EIGEN_STRONG_INLINE Packet8h por(const Packet8h &a, const Packet8h &b)
Definition PacketMath.h:1042
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf &a)
Definition Complex.h:184
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptan(const Packet &a)
Definition GenericPacketMath.h:760
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_mul(const Packet &a)
Definition GenericPacketMath.h:882
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition PacketMath.h:827
EIGEN_DEVICE_FUNC Packet pmul(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:237
EIGEN_STRONG_INLINE Packet8h ptrue(const Packet8h &a)
Definition PacketMath.h:978
EIGEN_DEVICE_FUNC Packet pmin(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:512
EIGEN_STRONG_INLINE Packet1cd pcplxflip(const Packet1cd &x)
Definition Complex.h:620
EIGEN_STRONG_INLINE Packet8h pandnot(const Packet8h &a, const Packet8h &b)
Definition PacketMath.h:1053
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcosh(const Packet &a)
Definition GenericPacketMath.h:780
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pround(const Packet &a)
Definition GenericPacketMath.h:826
EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf &a)
Definition Complex.h:166
EIGEN_STRONG_INLINE Packet4f pcmp_lt(const Packet4f &a, const Packet4f &b)
Definition PacketMath.h:868
EIGEN_STRONG_INLINE Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
Definition PacketMath.h:917
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh(const Packet &a)
Definition GenericPacketMath.h:784
EIGEN_STRONG_INLINE Packet4i parithmetic_shift_right(const Packet4i &a)
Definition PacketMath.h:1187
EIGEN_DEVICE_FUNC Packet paddsub(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:545
EIGEN_DEVICE_FUNC void pscatter(Scalar *to, const Packet &from, Index)
Definition GenericPacketMath.h:715
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE packet_type ploadt_ro(const Eigen::TensorSycl::internal::RangeAccess< cl::sycl::access::mode::read_write, T > &from)
Definition PacketMath.h:53
EIGEN_DEVICE_FUNC Packet pabsdiff(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:595
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_max(const Packet &a)
Definition GenericPacketMath.h:905
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pceil(const Packet &a)
Definition GenericPacketMath.h:839
EIGEN_STRONG_INLINE Packet4f pabs(const Packet4f &a)
Definition PacketMath.h:1176
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog1p(const Packet &a)
Definition GenericPacketMath.h:800
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet ploaddup(const typename unpacket_traits< Packet >::type *from)
Definition GenericPacketMath.h:631
EIGEN_STRONG_INLINE Packet8f peven_mask(const Packet8f &)
Definition PacketMath.h:252
EIGEN_STRONG_INLINE bfloat16 pfirst(const Packet8bf &a)
Definition PacketMath.h:1429
EIGEN_DEVICE_FUNC void pstore(Scalar *to, const Packet &from)
Definition GenericPacketMath.h:696
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4c predux_half_dowto4(const Packet8c &a)
Definition PacketMath.h:2478
EIGEN_STRONG_INLINE Packet4f psqrt(const Packet4f &a)
Definition PacketMath.h:723
EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Definition Complex.h:231
EIGEN_STRONG_INLINE Packet8h pldexp(const Packet8h &a, const Packet8h &exponent)
Definition MathFunctions.h:196
EIGEN_DEVICE_FUNC void pstoreu(Scalar *to, const Packet &from)
Definition GenericPacketMath.h:700
EIGEN_STRONG_INLINE Packet8h pand(const Packet8h &a, const Packet8h &b)
Definition PacketMath.h:1050
EIGEN_STRONG_INLINE Packet8h pxor(const Packet8h &a, const Packet8h &b)
Definition PacketMath.h:1047
EIGEN_DEVICE_FUNC void pbroadcast2(const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1)
Definition GenericPacketMath.h:670
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psinh(const Packet &a)
Definition GenericPacketMath.h:776
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin(const Packet &a)
Definition GenericPacketMath.h:764
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition GenericPacketMath.h:222
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet plset(const typename unpacket_traits< Packet >::type &a)
Definition GenericPacketMath.h:679
EIGEN_STRONG_INLINE Packet8h pfrexp(const Packet8h &a, Packet8h &exponent)
Definition MathFunctions.h:188
EIGEN_DEVICE_FUNC Packet pload1(const typename unpacket_traits< Packet >::type *a)
Definition GenericPacketMath.h:623
void pstore1(typename unpacket_traits< Packet >::type *to, const typename unpacket_traits< Packet >::type &a)
Definition GenericPacketMath.h:949
EIGEN_DEVICE_FUNC Packet pload(const typename unpacket_traits< Packet >::type *from)
Definition GenericPacketMath.h:599
EIGEN_STRONG_INLINE Packet4f prsqrt(const Packet4f &a)
Definition PacketMath.h:730
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patan(const Packet &a)
Definition GenericPacketMath.h:772
EIGEN_STRONG_INLINE Packet4f pcmp_lt_or_nan(const Packet4f &a, const Packet4f &b)
Definition PacketMath.h:870
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pfloor(const Packet &a)
Definition GenericPacketMath.h:830
EIGEN_DEVICE_FUNC Packet pset1(const typename unpacket_traits< Packet >::type &a)
Definition GenericPacketMath.h:615
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const X &x, const Y &y)
Definition Meta.h:787
EIGEN_DEVICE_FUNC T() floor(const T &x)
Definition MathFunctions.h:1400
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition MathFunctions.h:1091
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool not_equal_strict(const X &x, const Y &y)
Definition Meta.h:798
EIGEN_DEVICE_FUNC T() ceil(const T &x)
Definition MathFunctions.h:1420
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float sqrt(const float &x)
Definition MathFunctions.h:177
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition MathFunctions.h:1083
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE internal::enable_if< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typenameNumTraits< T >::Real >::type abs(const T &x)
Definition MathFunctions.h:1509
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
Definition BandTriangularSolver.h:13
Definition GenericPacketMath.h:1014
Packet packet[N]
Definition GenericPacketMath.h:1015
Definition GenericPacketMath.h:1027
bool select[N]
Definition GenericPacketMath.h:1028
Definition GenericPacketMath.h:317
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR EIGEN_ALWAYS_INLINE T operator()(const T &a, const T &b) const
Definition GenericPacketMath.h:318
Definition GenericPacketMath.h:338
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR EIGEN_ALWAYS_INLINE T operator()(const T &a) const
Definition GenericPacketMath.h:339
Definition GenericPacketMath.h:324
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR EIGEN_ALWAYS_INLINE T operator()(const T &a, const T &b) const
Definition GenericPacketMath.h:325
Definition GenericPacketMath.h:331
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR EIGEN_ALWAYS_INLINE T operator()(const T &a, const T &b) const
Definition GenericPacketMath.h:332
Definition GenericPacketMath.h:396
Definition GenericPacketMath.h:355
static EIGEN_DEVICE_FUNC T bitwise_xor(const T &a, const T &b)
Definition GenericPacketMath.h:362
static EIGEN_DEVICE_FUNC T bitwise_not(const T &a)
Definition GenericPacketMath.h:365
static EIGEN_DEVICE_FUNC T bitwise_and(const T &a, const T &b)
Definition GenericPacketMath.h:356
static EIGEN_DEVICE_FUNC T bitwise_or(const T &a, const T &b)
Definition GenericPacketMath.h:359
Definition GenericPacketMath.h:43
@ HasSign
Definition GenericPacketMath.h:102
@ HasZeta
Definition GenericPacketMath.h:86
@ HasASin
Definition GenericPacketMath.h:78
@ HasIGamma
Definition GenericPacketMath.h:92
@ HasSub
Definition GenericPacketMath.h:48
@ HasRsqrt
Definition GenericPacketMath.h:67
@ HasSin
Definition GenericPacketMath.h:75
@ HasBlend
Definition GenericPacketMath.h:60
@ HasLog10
Definition GenericPacketMath.h:72
@ HasTan
Definition GenericPacketMath.h:77
@ HasErfc
Definition GenericPacketMath.h:89
@ HasACos
Definition GenericPacketMath.h:79
@ HasAbsDiff
Definition GenericPacketMath.h:55
@ HasMin
Definition GenericPacketMath.h:56
@ HasArg
Definition GenericPacketMath.h:53
@ HasNdtri
Definition GenericPacketMath.h:90
@ HasCos
Definition GenericPacketMath.h:76
@ HasSinh
Definition GenericPacketMath.h:81
@ HasPolygamma
Definition GenericPacketMath.h:87
@ HasCmp
Definition GenericPacketMath.h:63
@ HasDiGamma
Definition GenericPacketMath.h:85
@ HasConj
Definition GenericPacketMath.h:58
@ HasSetLinear
Definition GenericPacketMath.h:59
@ HasShift
Definition GenericPacketMath.h:49
@ HasLog1p
Definition GenericPacketMath.h:71
@ HasMax
Definition GenericPacketMath.h:57
@ HasPow
Definition GenericPacketMath.h:73
@ HasIGammac
Definition GenericPacketMath.h:95
@ HasCeil
Definition GenericPacketMath.h:101
@ HasNegate
Definition GenericPacketMath.h:51
@ HasAdd
Definition GenericPacketMath.h:47
@ HasExp
Definition GenericPacketMath.h:68
@ HasRound
Definition GenericPacketMath.h:98
@ HasRint
Definition GenericPacketMath.h:99
@ HasBetaInc
Definition GenericPacketMath.h:96
@ HasSqrt
Definition GenericPacketMath.h:66
@ HasLGamma
Definition GenericPacketMath.h:84
@ HasErf
Definition GenericPacketMath.h:88
@ HasBessel
Definition GenericPacketMath.h:91
@ HasAbs
Definition GenericPacketMath.h:52
@ HasCosh
Definition GenericPacketMath.h:82
@ HasExpm1
Definition GenericPacketMath.h:69
@ HasLog
Definition GenericPacketMath.h:70
@ HasTanh
Definition GenericPacketMath.h:83
@ HasMul
Definition GenericPacketMath.h:50
@ HasAbs2
Definition GenericPacketMath.h:54
@ HasGammaSampleDerAlpha
Definition GenericPacketMath.h:94
@ HasIGammaDerA
Definition GenericPacketMath.h:93
@ HasATan
Definition GenericPacketMath.h:80
@ HasFloor
Definition GenericPacketMath.h:100
@ HasHalfPacket
Definition GenericPacketMath.h:45
@ HasDiv
Definition GenericPacketMath.h:65
Definition GenericPacketMath.h:160
EIGEN_ALWAYS_INLINE eigen_packet_wrapper & operator=(const T &v)
Definition GenericPacketMath.h:165
EIGEN_ALWAYS_INLINE eigen_packet_wrapper(const T &v)
Definition GenericPacketMath.h:164
EIGEN_ALWAYS_INLINE eigen_packet_wrapper()
Definition GenericPacketMath.h:163
T m_val
Definition GenericPacketMath.h:170
Definition Meta.h:273
Definition Meta.h:148
Definition GenericPacketMath.h:178
@ value
Definition GenericPacketMath.h:181
unpacket_traits< Packet >::type Scalar
Definition GenericPacketMath.h:179
Definition GenericPacketMath.h:346
static EIGEN_DEVICE_FUNC T bitwise_not(const T &a)
Definition GenericPacketMath.h:350
static EIGEN_DEVICE_FUNC T bitwise_xor(const T &a, const T &b)
Definition GenericPacketMath.h:349
static EIGEN_DEVICE_FUNC T bitwise_and(const T &a, const T &b)
Definition GenericPacketMath.h:347
static EIGEN_DEVICE_FUNC T bitwise_or(const T &a, const T &b)
Definition GenericPacketMath.h:348
Definition GenericPacketMath.h:107
@ HasSub
Definition GenericPacketMath.h:118
@ HasMax
Definition GenericPacketMath.h:124
@ HasNegate
Definition GenericPacketMath.h:120
@ HasMul
Definition GenericPacketMath.h:119
@ HasAdd
Definition GenericPacketMath.h:117
@ HasSetLinear
Definition GenericPacketMath.h:126
@ HasMin
Definition GenericPacketMath.h:123
@ HasConj
Definition GenericPacketMath.h:125
@ HasAbs2
Definition GenericPacketMath.h:122
@ HasAbs
Definition GenericPacketMath.h:121
T type
Definition GenericPacketMath.h:108
T half
Definition GenericPacketMath.h:109
@ HasHalfPacket
Definition GenericPacketMath.h:114
@ size
Definition GenericPacketMath.h:112
@ AlignedOnScalar
Definition GenericPacketMath.h:113
@ Vectorizable
Definition GenericPacketMath.h:111
static EIGEN_DEVICE_FUNC Packet run(const Packet &a, const Packet &b, Op op)
Definition GenericPacketMath.h:476
static EIGEN_DEVICE_FUNC Packet run(const Packet &a, const Packet &b, Op op)
Definition GenericPacketMath.h:491
Definition GenericPacketMath.h:464
static EIGEN_DEVICE_FUNC Packet run(const Packet &a, const Packet &b, Op op)
Definition GenericPacketMath.h:466
static EIGEN_DEVICE_FUNC Packet run(const Packet &mask, const Packet &a, const Packet &b)
Definition GenericPacketMath.h:445
Definition GenericPacketMath.h:435
static EIGEN_DEVICE_FUNC Packet run(const Packet &mask, const Packet &a, const Packet &b)
Definition GenericPacketMath.h:436
Definition GenericPacketMath.h:248
static EIGEN_DEVICE_FUNC Packet run(const Packet &)
Definition GenericPacketMath.h:249
static EIGEN_DEVICE_FUNC T run(const T &)
Definition GenericPacketMath.h:289
Definition GenericPacketMath.h:276
static EIGEN_DEVICE_FUNC Packet run(const Packet &)
Definition GenericPacketMath.h:277
Definition ForwardDeclarations.h:17
Definition GenericPacketMath.h:148
@ TgtCoeffRatio
Definition GenericPacketMath.h:152
@ VectorizedCast
Definition GenericPacketMath.h:150
@ SrcCoeffRatio
Definition GenericPacketMath.h:151
Definition GenericPacketMath.h:133
T type
Definition GenericPacketMath.h:134
T half
Definition GenericPacketMath.h:135
@ masked_load_available
Definition GenericPacketMath.h:141
@ size
Definition GenericPacketMath.h:138
@ masked_store_available
Definition GenericPacketMath.h:142
@ vectorizable
Definition GenericPacketMath.h:140
@ alignment
Definition GenericPacketMath.h:139
Definition PacketMath.h:47