11 #ifndef EIGEN_GENERIC_PACKET_MATH_H
12 #define EIGEN_GENERIC_PACKET_MATH_H
28 #ifndef EIGEN_DEBUG_ALIGNED_LOAD
29 #define EIGEN_DEBUG_ALIGNED_LOAD
32 #ifndef EIGEN_DEBUG_UNALIGNED_LOAD
33 #define EIGEN_DEBUG_UNALIGNED_LOAD
36 #ifndef EIGEN_DEBUG_ALIGNED_STORE
37 #define EIGEN_DEBUG_ALIGNED_STORE
40 #ifndef EIGEN_DEBUG_UNALIGNED_STORE
41 #define EIGEN_DEBUG_UNALIGNED_STORE
44 struct default_packet_traits
97 HasGammaSampleDerAlpha = 0,
108 template<
typename T>
struct packet_traits : default_packet_traits
131 template<
typename T>
struct packet_traits<const
T> : packet_traits<T> { };
133 template<
typename T>
struct unpacket_traits
141 vectorizable =
false,
142 masked_load_available=
false,
143 masked_store_available=
false
147 template<
typename T>
struct unpacket_traits<const
T> : unpacket_traits<T> { };
152 template <
typename Packet>
154 using Scalar =
typename unpacket_traits<Packet>::type;
155 enum { value = internal::is_same<Packet, Scalar>::value };
162 template <
typename SrcPacket,
typename TgtPacket,
163 bool Scalar = is_scalar<SrcPacket>::value && is_scalar<TgtPacket>::value>
164 struct is_degenerate_helper : is_same<SrcPacket, TgtPacket> {};
166 struct is_degenerate_helper<
int8_t,
uint8_t, true> : std::true_type {};
168 struct is_degenerate_helper<
int16_t,
uint16_t, true> : std::true_type {};
170 struct is_degenerate_helper<
int32_t,
uint32_t, true> : std::true_type {};
172 struct is_degenerate_helper<
int64_t,
uint64_t, true> : std::true_type {};
174 template <
typename SrcPacket,
typename TgtPacket>
175 struct is_degenerate_helper<SrcPacket, TgtPacket, false> {
176 using SrcScalar =
typename unpacket_traits<SrcPacket>::type;
178 using TgtScalar =
typename unpacket_traits<TgtPacket>::type;
180 static constexpr
bool value = is_degenerate_helper<SrcScalar, TgtScalar, true>::value && (SrcSize == TgtSize);
184 template <
typename SrcPacket,
typename TgtPacket>
185 struct is_degenerate {
186 static constexpr
bool value =
187 is_degenerate_helper<SrcPacket, TgtPacket>::value || is_degenerate_helper<TgtPacket, SrcPacket>::value;
190 template <
typename Packet>
192 using Scalar =
typename unpacket_traits<Packet>::type;
194 using DefaultPacket =
typename packet_traits<Scalar>::type;
196 static constexpr
bool value = Size < DefaultSize;
199 template <
typename Src,
typename Tgt>
200 struct type_casting_traits {
203 is_degenerate<Src, Tgt>::value && packet_traits<Src>::Vectorizable && packet_traits<Tgt>::Vectorizable,
212 template<
typename T,
int unique_
id = 0>
213 struct eigen_packet_wrapper
227 template <typename Target, typename Packet, bool IsSame = is_same<Target, Packet>::value>
228 struct preinterpret_generic;
230 template <
typename Target,
typename Packet>
231 struct preinterpret_generic<
Target, Packet, false> {
234 return numext::bit_cast<Target, Packet>(
a);
238 template <
typename Packet>
239 struct preinterpret_generic<Packet, Packet, true> {
245 template <
typename Target,
typename Packet>
247 return preinterpret_generic<Target, Packet>::run(
a);
250 template <typename SrcPacket, typename TgtPacket, bool Degenerate = is_degenerate<SrcPacket, TgtPacket>::value,
bool TgtIsHalf = is_half<TgtPacket>::value>
251 struct pcast_generic;
253 template <
typename SrcPacket,
typename TgtPacket>
254 struct pcast_generic<SrcPacket, TgtPacket, false, false> {
257 return cast_impl<SrcPacket, TgtPacket>::run(
a);
261 template <
typename Packet>
262 struct pcast_generic<Packet, Packet, true, false> {
267 template <
typename SrcPacket,
typename TgtPacket,
bool TgtIsHalf>
268 struct pcast_generic<SrcPacket, TgtPacket, true, TgtIsHalf> {
270 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TgtPacket run(
const SrcPacket&
a) {
return preinterpret<TgtPacket>(
a); }
276 template <
typename SrcPacket,
typename TgtPacket>
278 return pcast_generic<SrcPacket, TgtPacket>::run(
a);
280 template <
typename SrcPacket,
typename TgtPacket>
282 return pcast_generic<SrcPacket, TgtPacket>::run(
a,
b);
284 template <
typename SrcPacket,
typename TgtPacket>
286 const SrcPacket& d) {
287 return pcast_generic<SrcPacket, TgtPacket>::run(
a,
b,
c, d);
289 template <
typename SrcPacket,
typename TgtPacket>
291 const SrcPacket&
e,
const SrcPacket& f,
const SrcPacket& g,
292 const SrcPacket& h) {
293 return pcast_generic<SrcPacket, TgtPacket>::run(
a,
b,
c, d,
e, f, g, h);
296 template <
typename SrcPacket,
typename TgtPacket>
297 struct pcast_generic<SrcPacket, TgtPacket, false, true> {
300 using DefaultTgtPacket =
typename is_half<TgtPacket>::DefaultPacket;
302 return preinterpret<TgtPacket>(pcast<SrcPacket, DefaultTgtPacket>(
a));
308 padd(
const Packet&
a,
const Packet&
b) {
return a+
b; }
311 padd(
const bool&
a,
const bool&
b) {
return a ||
b; }
318 std::enable_if_t<unpacket_traits<Packet>::masked_fpops_available, Packet>
319 padd(
const Packet&
a,
const Packet&
b,
typename unpacket_traits<Packet>::mask_t umask);
324 psub(
const Packet&
a,
const Packet&
b) {
return a-
b; }
339 pmul(
const Packet&
a,
const Packet&
b) {
return a*
b; }
342 pmul(
const bool&
a,
const bool&
b) {
return a &&
b; }
346 pdiv(
const Packet&
a,
const Packet&
b) {
return a/
b; }
349 template<
typename Packet,
typename EnableIf =
void>
353 memset(
static_cast<void*
>(&
b), 0xff,
sizeof(Packet));
364 std::enable_if_t<is_scalar<T>::value && NumTraits<T>::RequireInitialization> > {
373 return ptrue_impl<Packet>::run(
a);
377 template<
typename Packet,
typename EnableIf =
void>
381 memset(
static_cast<void*
>(&
b), 0x00,
sizeof(Packet));
390 std::enable_if_t<is_scalar<T>::value>> {
399 return pzero_impl<Packet>::run(
a);
448 struct operator_bitwise_helper {
457 struct bytewise_bitwise_helper {
459 return binary(
a,
b, bit_and<unsigned char>());
462 return binary(
a,
b, bit_or<unsigned char>());
465 return binary(
a,
b, bit_xor<unsigned char>());
468 return unary(
a,bit_not<unsigned char>());
472 template<
typename Op>
474 const unsigned char* a_ptr =
reinterpret_cast<const unsigned char*
>(&
a);
476 unsigned char* c_ptr =
reinterpret_cast<unsigned char*
>(&
c);
477 for (
size_t i = 0;
i <
sizeof(
T); ++
i) {
478 *c_ptr++ = op(*a_ptr++);
483 template<
typename Op>
485 const unsigned char* a_ptr =
reinterpret_cast<const unsigned char*
>(&
a);
486 const unsigned char* b_ptr =
reinterpret_cast<const unsigned char*
>(&
b);
488 unsigned char* c_ptr =
reinterpret_cast<unsigned char*
>(&
c);
489 for (
size_t i = 0;
i <
sizeof(
T); ++
i) {
490 *c_ptr++ = op(*a_ptr++, *b_ptr++);
497 template<
typename T,
typename EnableIf =
void>
498 struct bitwise_helper :
public bytewise_bitwise_helper<T> {};
502 struct bitwise_helper<
T,
503 typename
std::enable_if_t<
504 is_scalar<T>::value && (NumTraits<T>::IsInteger || NumTraits<T>::RequireInitialization)>
505 > :
public operator_bitwise_helper<T> {};
510 return bitwise_helper<Packet>::bitwise_and(
a,
b);
515 por(
const Packet&
a,
const Packet&
b) {
516 return bitwise_helper<Packet>::bitwise_or(
a,
b);
522 return bitwise_helper<Packet>::bitwise_xor(
a,
b);
528 return bitwise_helper<Packet>::bitwise_not(
a);
542 template<
typename Packet,
typename EnableIf =
void>
543 struct pselect_impl {
544 static EIGEN_DEVICE_FUNC inline Packet run(
const Packet& mask,
const Packet&
a,
const Packet&
b) {
550 template<
typename Packet>
551 struct pselect_impl<Packet,
552 std::enable_if_t<is_scalar<Packet>::value> > {
553 static EIGEN_DEVICE_FUNC inline Packet run(
const Packet& mask,
const Packet&
a,
const Packet&
b) {
560 pselect(
const Packet& mask,
const Packet&
a,
const Packet&
b) {
561 return pselect_impl<Packet>::run(mask,
a,
b);
565 const bool& cond,
const bool&
a,
const bool&
b) {
571 template<
int NaNPropagation>
572 struct pminmax_impl {
573 template <
typename Packet,
typename Op>
583 template <
typename Packet,
typename Op>
598 template <
typename Packet,
typename Op>
609 #ifndef SYCL_DEVICE_ONLY
610 #define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func) Func
612 #define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func) \
613 [](const Type& a, const Type& b) { \
624 template <
int NaNPropagation,
typename Packet>
636 template <
int NaNPropagation,
typename Packet>
645 pabs(
const unsigned int&
a) {
return a; }
647 pabs(
const unsigned long&
a) {
return a; }
649 pabs(
const unsigned long long&
a) {
return a; }
683 template <
typename Packet>
687 Packet result =
static_cast<Packet
>(frexp(
a, &
exp));
688 exponent =
static_cast<Packet
>(
exp);
696 pldexp(
const Packet &
a,
const Packet &exponent) {
698 return static_cast<Packet
>(ldexp(
a,
static_cast<int>(exponent)));
707 pload(
const typename unpacket_traits<Packet>::type* from) {
return *from; }
717 eigen_assert(
n + offset <= packet_size &&
"number of elements plus offset will read past end of packet");
718 typedef typename unpacket_traits<Packet>::type Scalar;
721 elements[
i] = from[
i-offset];
723 return pload<Packet>(elements);
728 ploadu(
const typename unpacket_traits<Packet>::type* from) {
return *from; }
736 eigen_assert(
n + offset <= packet_size &&
"number of elements plus offset will read past end of packet");
737 typedef typename unpacket_traits<Packet>::type Scalar;
740 elements[
i] = from[
i-offset];
742 return pload<Packet>(elements);
750 std::enable_if_t<unpacket_traits<Packet>::masked_load_available, Packet>
751 ploadu(
const typename unpacket_traits<Packet>::type* from,
typename unpacket_traits<Packet>::mask_t umask);
755 pset1(
const typename unpacket_traits<Packet>::type&
a) {
return a; }
763 pload1(
const typename unpacket_traits<Packet>::type *
a) {
return pset1<Packet>(*
a); }
771 ploaddup(
const typename unpacket_traits<Packet>::type* from) {
return *from; }
780 ploadquad(
const typename unpacket_traits<Packet>::type* from)
781 {
return pload1<Packet>(from); }
793 inline void pbroadcast4(
const typename unpacket_traits<Packet>::type *
a,
794 Packet& a0, Packet& a1, Packet& a2, Packet& a3)
796 a0 = pload1<Packet>(
a+0);
797 a1 = pload1<Packet>(
a+1);
798 a2 = pload1<Packet>(
a+2);
799 a3 = pload1<Packet>(
a+3);
810 inline void pbroadcast2(
const typename unpacket_traits<Packet>::type *
a,
811 Packet& a0, Packet& a1)
813 a0 = pload1<Packet>(
a+0);
814 a1 = pload1<Packet>(
a+1);
819 plset(
const typename unpacket_traits<Packet>::type&
a) {
return a; }
825 typedef typename unpacket_traits<Packet>::type Scalar;
828 for(
size_t i = 0;
i <
n; ++
i) {
829 memset(elements+
i, ((
i & 1) == 0 ? 0xff : 0),
sizeof(Scalar));
831 return ploadu<Packet>(elements);
845 eigen_assert(
n + offset <= packet_size &&
"number of elements plus offset will write past end of packet");
847 pstore<Scalar>(elements, from);
849 to[
i] = elements[
i + offset];
861 eigen_assert(
n + offset <= packet_size &&
"number of elements plus offset will write past end of packet");
863 pstore<Scalar>(elements, from);
865 to[
i] = elements[
i + offset];
873 template<
typename Scalar,
typename Packet>
875 std::enable_if_t<unpacket_traits<Packet>::masked_store_available,
void>
876 pstoreu(Scalar* to,
const Packet& from,
typename unpacket_traits<Packet>::mask_t umask);
879 {
return ploadu<Packet>(from); }
886 elements[
i] = from[
i*stride];
888 return pload<Packet>(elements);
898 pstore<Scalar>(elements, from);
900 to[
i*stride] = elements[
i];
907 #if defined(EIGEN_HIP_DEVICE_COMPILE)
909 #elif defined(EIGEN_CUDA_ARCH)
910 #if defined(__LP64__) || EIGEN_OS_WIN64
912 asm(
" prefetch.L1 [ %1 ];" :
"=l"(addr) :
"l"(addr));
915 asm(
" prefetch.L1 [ %1 ];" :
"=r"(addr) :
"r"(addr));
917 #elif (!EIGEN_COMP_MSVC) && (EIGEN_COMP_GNUC || EIGEN_COMP_CLANG || EIGEN_COMP_ICC)
918 __builtin_prefetch(addr);
1000 typedef typename internal::unpacket_traits<Packet>::type Scalar;
1025 template<
typename Packet,
typename EnableIf =
void>
1035 return psign_impl<Packet>::run(
a);
1044 template<
typename Packet>
1053 template<
typename Packet>
1059 template <
typename Packet,
typename Op>
1062 typedef typename unpacket_traits<Packet>::type Scalar;
1065 pstoreu<Scalar>(elements,
a);
1066 for(
size_t k =
n / 2; k > 0; k /= 2) {
1067 for(
size_t i = 0;
i < k; ++
i) {
1068 elements[
i] = op(elements[
i], elements[
i + k]);
1075 template<
typename Packet>
1083 template <
typename Packet>
1086 typedef typename unpacket_traits<Packet>::type Scalar;
1091 template <
typename Packet>
1094 typedef typename unpacket_traits<Packet>::type Scalar;
1098 template <
int NaNPropagation,
typename Packet>
1101 typedef typename unpacket_traits<Packet>::type Scalar;
1106 template <
typename Packet>
1109 typedef typename unpacket_traits<Packet>::type Scalar;
1113 template <
int NaNPropagation,
typename Packet>
1116 typedef typename unpacket_traits<Packet>::type Scalar;
1120 #undef EIGEN_BINARY_OP_NAN_PROPAGATION
1140 typedef typename unpacket_traits<Packet>::type Scalar;
1150 template <
typename Packet>
1157 template <
typename Packet>
1164 template <
typename Packet>
1171 template <
typename Packet>
1179 template<
typename Packet>
1180 inline void pstore1(
typename unpacket_traits<Packet>::type* to,
const typename unpacket_traits<Packet>::type&
a)
1187 template<
typename Packet,
int Alignment>
1190 if(Alignment >= unpacket_traits<Packet>::alignment)
1191 return pload<Packet>(from);
1193 return ploadu<Packet>(from);
1198 template<
typename Packet,
int Alignment>
1201 if(Alignment >= unpacket_traits<Packet>::alignment)
1202 return pload_partial<Packet>(from,
n, offset);
1204 return ploadu_partial<Packet>(from,
n, offset);
1209 template<
typename Scalar,
typename Packet,
int Alignment>
1212 if(Alignment >= unpacket_traits<Packet>::alignment)
1220 template<
typename Scalar,
typename Packet,
int Alignment>
1223 if(Alignment >= unpacket_traits<Packet>::alignment)
1234 template<
typename Packet,
int LoadMode>
1237 return ploadt<Packet, LoadMode>(from);
1245 #if !defined(EIGEN_GPUCC)
1247 template<>
inline std::complex<float>
pmul(
const std::complex<float>&
a,
const std::complex<float>&
b)
1248 {
return std::complex<float>(
a.real()*
b.real() -
a.imag()*
b.imag(),
a.imag()*
b.real() +
a.real()*
b.imag()); }
1250 template<>
inline std::complex<double>
pmul(
const std::complex<double>&
a,
const std::complex<double>&
b)
1251 {
return std::complex<double>(
a.real()*
b.real() -
a.imag()*
b.imag(),
a.imag()*
b.real() +
a.real()*
b.imag()); }
1273 template <
size_t N>
struct Selector {
1279 return ifPacket.select[0] ? thenPacket : elsePacket;
1283 template <
typename Packet>
1285 using Scalar =
typename unpacket_traits<Packet>::type;
1286 return pdiv(pset1<Packet>(Scalar(1)),
a);
1292 return preciprocal<Packet>(
psqrt(
a));
1295 template <typename Packet, bool IsScalar = is_scalar<Packet>::value,
1297 struct psignbit_impl;
1298 template <
typename Packet,
bool IsInteger>
1299 struct psignbit_impl<Packet, true, IsInteger> {
1302 template <
typename Packet>
1303 struct psignbit_impl<Packet, false, false> {
1306 typedef typename unpacket_traits<Packet>::type Scalar;
1308 const Packet cst_pos_one = pset1<Packet>(Scalar(1));
1309 const Packet cst_neg_one = pset1<Packet>(Scalar(-1));
1313 template <
typename Packet>
1314 struct psignbit_impl<Packet, false, true> {
1319 template <
typename Packet>
1321 psignbit(
const Packet&
a) {
return psignbit_impl<Packet>::run(
a); }
1324 template <typename Packet, std::enable_if_t<is_scalar<Packet>::value,
int> = 0>
1330 template <typename Packet, std::enable_if_t<!is_scalar<Packet>::value,
int> = 0>
1332 typedef typename internal::unpacket_traits<Packet>::type Scalar;
1337 const Packet kSignMask = pset1<Packet>(-Scalar(0));
1338 const Packet kZero =
pzero(
x);
1339 const Packet kOne = pset1<Packet>(Scalar(1));
1340 const Packet kPi = pset1<Packet>(Scalar(
EIGEN_PI));
1342 const Packet x_has_signbit =
psignbit(
x);
1343 const Packet y_signmask =
pand(
y, kSignMask);
1344 const Packet x_signmask =
pand(
x, kSignMask);
1345 const Packet result_signmask =
pxor(y_signmask, x_signmask);
1346 const Packet shift =
por(
pand(x_has_signbit, kPi), y_signmask);
1349 const Packet x_and_y_are_zero =
pcmp_eq(
por(
x,
y), kZero);
1356 result =
padd(result, shift);
1361 template <typename Packet, std::enable_if_t<is_scalar<Packet>::value,
int> = 0>
1367 template <typename Packet, std::enable_if_t<!is_scalar<Packet>::value,
int> = 0>
1370 using RealPacket =
typename unpacket_traits<Packet>::as_real;
1373 RealPacket result =
patan2(aflip,
a.v);
const SignReturnType sign() const
const ArgReturnType arg() const
const Log1pReturnType log1p() const
const Expm1ReturnType expm1() const
Array< int, Dynamic, 1 > v
const ImagReturnType imag() const
RealReturnType real() const
Array< double, 1, 3 > e(1./3., 0.5, 2.)
#define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func)
IndexedView_or_Block operator()(const RowIndices &rowIndices, const ColIndices &colIndices)
#define EIGEN_ALWAYS_INLINE
#define EIGEN_USING_STD(FUNC)
#define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
#define EIGEN_DEVICE_FUNC
#define EIGEN_STATIC_ASSERT(X, MSG)
Eigen::Triplet< double > T
Packet pmin(const Packet &a, const Packet &b)
Packet pnmsub(const Packet &a, const Packet &b, const Packet &c)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexpm1(const Packet &a)
Packet padd(const Packet &a, const Packet &b)
Packet8f pzero(const Packet8f &)
void pstore(Scalar *to, const Packet &from)
EIGEN_ALWAYS_INLINE void pstoret_partial(Scalar *to, const Packet &from, const Index n, const Index offset=0)
Packet pload_partial(const typename unpacket_traits< Packet >::type *from, const Index n, const Index offset=0)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog10(const Packet &a)
Packet pgather_partial(const Scalar *from, Index stride, const Index n)
unpacket_traits< Packet >::type predux(const Packet &a)
Packet8h ptrue(const Packet8h &a)
Packet4f pcmp_lt_or_nan(const Packet4f &a, const Packet4f &b)
EIGEN_ALWAYS_INLINE Packet ploadt(const typename unpacket_traits< Packet >::type *from)
Packet ploadu(const typename unpacket_traits< Packet >::type *from)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog(const Packet &a)
Packet8h pandnot(const Packet8h &a, const Packet8h &b)
void pstore_partial(Scalar *to, const Packet &from, const Index n, const Index offset=0)
Packet4f pabs(const Packet4f &a)
Packet pmax(const Packet &a, const Packet &b)
void pbroadcast4(const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1, Packet &a2, Packet &a3)
Packet2cf pnegate(const Packet2cf &a)
TgtPacket pcast(const SrcPacket &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp(const Packet &a)
Packet1cd pcplxflip(const Packet1cd &x)
Packet4i plogical_shift_right(const Packet4i &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos(const Packet &a)
EIGEN_ALWAYS_INLINE Packet ploadt_ro(const typename unpacket_traits< Packet >::type *from)
EIGEN_ALWAYS_INLINE Packet ploadt_partial(const typename unpacket_traits< Packet >::type *from, const Index n, const Index offset=0)
Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
void pstoreu(Scalar *to, const Packet &from)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin(const Packet &a)
EIGEN_ALWAYS_INLINE Packet patan2(const Packet &y, const Packet &x)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos(const Packet &a)
Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
bfloat16 pfirst(const Packet8bf &a)
Packet psign(const Packet &a)
void pstoreu_partial(Scalar *to, const Packet &from, const Index n, const Index offset=0)
Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
bool pselect< bool >(const bool &cond, const bool &a, const bool &b)
Packet pmul(const Packet &a, const Packet &b)
void pscatter(Scalar *to, const Packet &from, Index stride, typename unpacket_traits< Packet >::mask_t umask)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptan(const Packet &a)
void ptranspose(PacketBlock< Packet2cf, 2 > &kernel)
Packet pmsub(const Packet &a, const Packet &b, const Packet &c)
Packet8h pfrexp(const Packet8h &a, Packet8h &exponent)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcosh(const Packet &a)
Packet pset1frombits(BitsType a)
void pscatter_partial(Scalar *to, const Packet &from, Index stride, const Index n)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pround(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh(const Packet &a)
void pbroadcast2(const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1)
Packet4f psqrt(const Packet4f &a)
Packet pnmadd(const Packet &a, const Packet &b, const Packet &c)
Packet4f print(const Packet4f &a)
Packet psub(const Packet &a, const Packet &b)
Packet ploadu_partial(const typename unpacket_traits< Packet >::type *from, const Index n, const Index offset=0)
void prefetch(const Scalar *addr)
Packet pgather(const Packet &src, const Scalar *from, Index stride, typename unpacket_traits< Packet >::mask_t umask)
unpacket_traits< Packet >::type predux_mul(const Packet &a)
EIGEN_ALWAYS_INLINE Packet pcarg(const Packet &a)
Packet parg(const Packet &a)
Packet8h pand(const Packet8h &a, const Packet8h &b)
Packet16h ploadquad(const Eigen::half *from)
Packet8h pldexp(const Packet8h &a, const Packet8h &exponent)
Packet pnot(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pceil(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog1p(const Packet &a)
Packet pabsdiff(const Packet &a, const Packet &b)
EIGEN_ALWAYS_INLINE void pstoret(Scalar *to, const Packet &from)
Packet8h pxor(const Packet8h &a, const Packet8h &b)
unpacket_traits< Packet >::type predux_helper(const Packet &a, Op op)
Packet ploaddup(const typename unpacket_traits< Packet >::type *from)
Packet pset1(const typename unpacket_traits< Packet >::type &a)
Packet8bf psignbit(const Packet8bf &a)
Packet pload1(const typename unpacket_traits< Packet >::type *a)
Packet pdiv(const Packet &a, const Packet &b)
Packet4i pblend(const Selector< 4 > &ifPacket, const Packet4i &thenPacket, const Packet4i &elsePacket)
Packet preciprocal(const Packet &a)
unpacket_traits< Packet >::type predux_max(const Packet &a)
Packet2cf pconj(const Packet2cf &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psinh(const Packet &a)
Packet paddsub(const Packet &a, const Packet &b)
Packet plset(const typename unpacket_traits< Packet >::type &a)
Packet4i plogical_shift_left(const Packet4i &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin(const Packet &a)
Packet2cf preverse(const Packet2cf &a)
Packet4i parithmetic_shift_right(const Packet4i &a)
Packet8h por(const Packet8h &a, const Packet8h &b)
Packet4i pcmp_lt(const Packet4i &a, const Packet4i &b)
Packet pload(const typename unpacket_traits< Packet >::type *from)
Target preinterpret(const Packet &a)
void pstore1(typename unpacket_traits< Packet >::type *to, const typename unpacket_traits< Packet >::type &a)
Packet8f pisnan(const Packet8f &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh(const Packet &a)
Packet4c predux_half_dowto4(const Packet8c &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patan(const Packet &a)
unpacket_traits< Packet >::type predux_min(const Packet &a)
bool predux_any(const Packet4f &x)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pfloor(const Packet &a)
Packet4f pcmp_le(const Packet4f &a, const Packet4f &b)
Packet4f prsqrt(const Packet4f &a)
Packet8f peven_mask(const Packet8f &)
Scalar round(const Scalar &x)
bool equal_strict(const X &x, const Y &y)
bool not_equal_strict(const X &x, const Y &y)
Scalar rint(const Scalar &x)
EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
EIGEN_ALWAYS_INLINE float sqrt(const float &x)
Scalar() floor(const Scalar &x)
EIGEN_ALWAYS_INLINE T atan2(const T &y, const T &x)
Scalar() ceil(const Scalar &x)
static constexpr EIGEN_ALWAYS_INLINE Scalar signbit(const Scalar &x)
EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_tanh_op< typename Derived::Scalar >, const Derived > tanh(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_rint_op< typename Derived::Scalar >, const Derived > rint(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_atan_op< typename Derived::Scalar >, const Derived > atan(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_log10_op< typename Derived::Scalar >, const Derived > log10(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_cosh_op< typename Derived::Scalar >, const Derived > cosh(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_tan_op< typename Derived::Scalar >, const Derived > tan(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_acos_op< typename Derived::Scalar >, const Derived > acos(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_atanh_op< typename Derived::Scalar >, const Derived > atanh(const Eigen::ArrayBase< Derived > &x)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_asin_op< typename Derived::Scalar >, const Derived > asin(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_arg_op< typename Derived::Scalar >, const Derived > arg(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_ceil_op< typename Derived::Scalar >, const Derived > ceil(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_conjugate_op< typename Derived::Scalar >, const Derived > conj(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_floor_op< typename Derived::Scalar >, const Derived > floor(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_cos_op< typename Derived::Scalar >, const Derived > cos(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_round_op< typename Derived::Scalar >, const Derived > round(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_exp_op< typename Derived::Scalar >, const Derived > exp(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sin_op< typename Derived::Scalar >, const Derived > sin(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_log_op< typename Derived::Scalar >, const Derived > log(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sinh_op< typename Derived::Scalar >, const Derived > sinh(const Eigen::ArrayBase< Derived > &x)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.