10 #ifndef EIGEN_ASSIGNMENT_FUNCTORS_H
11 #define EIGEN_ASSIGNMENT_FUNCTORS_H
21 template<
typename DstScalar,
typename SrcScalar>
struct assign_op {
24 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a = b; }
26 template<
int Alignment,
typename Packet>
27 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const
28 { internal::pstoret<DstScalar,Packet,Alignment>(a,b); }
32 template<
typename DstScalar>
struct assign_op<DstScalar,void> {};
34 template<
typename DstScalar,
typename SrcScalar>
49 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a += b; }
51 template<
int Alignment,
typename Packet>
52 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const
53 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::padd(internal::ploadt<Packet,Alignment>(a),b)); }
55 template<
typename DstScalar,
typename SrcScalar>
70 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a -= b; }
72 template<
int Alignment,
typename Packet>
73 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const
74 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::psub(internal::ploadt<Packet,Alignment>(a),b)); }
76 template<
typename DstScalar,
typename SrcScalar>
88 template<
typename DstScalar,
typename SrcScalar=DstScalar>
92 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a *= b; }
94 template<
int Alignment,
typename Packet>
95 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const
96 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pmul(internal::ploadt<Packet,Alignment>(a),b)); }
98 template<
typename DstScalar,
typename SrcScalar>
110 template<
typename DstScalar,
typename SrcScalar=DstScalar>
struct div_assign_op {
113 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(DstScalar& a,
const SrcScalar& b)
const { a /= b; }
115 template<
int Alignment,
typename Packet>
116 EIGEN_STRONG_INLINE
void assignPacket(DstScalar* a,
const Packet& b)
const
117 { internal::pstoret<DstScalar,Packet,Alignment>(a,internal::pdiv(internal::ploadt<Packet,Alignment>(a),b)); }
119 template<
typename DstScalar,
typename SrcScalar>
145 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
void assignCoeff(Scalar& a,
const Scalar& b)
const
149 Scalar t=b;
const_cast<Scalar&
>(b)=a; a=t;
152 swap(a,
const_cast<Scalar&
>(b));
156 template<
typename Scalar>
161 #if defined(EIGEN_VECTORIZE_AVX) && EIGEN_COMP_CLANG && (EIGEN_COMP_CLANG<800 || defined(__apple_build_version__))
177 #endif // EIGEN_ASSIGNMENT_FUNCTORS_H