aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Array/Functors.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2009-03-27 14:41:46 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2009-03-27 14:41:46 +0000
commit49fc1e3e84d036c43ffbac0128588d47c5a11f36 (patch)
tree5e6875bd6edd311e55934a646a20cc5bb301d665 /Eigen/src/Array/Functors.h
parent3499f6eccd5fc56f13608a3ccf900aa70f6b1697 (diff)
add vectorization of sqrt for float
Diffstat (limited to 'Eigen/src/Array/Functors.h')
-rw-r--r--Eigen/src/Array/Functors.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/Eigen/src/Array/Functors.h b/Eigen/src/Array/Functors.h
index 9759ebf2a..f5607ba90 100644
--- a/Eigen/src/Array/Functors.h
+++ b/Eigen/src/Array/Functors.h
@@ -58,10 +58,16 @@ struct ei_functor_traits<ei_scalar_add_op<Scalar> >
*/
template<typename Scalar> struct ei_scalar_sqrt_op EIGEN_EMPTY_STRUCT {
inline const Scalar operator() (const Scalar& a) const { return ei_sqrt(a); }
+ typedef typename ei_packet_traits<Scalar>::type Packet;
+ inline Packet packetOp(const Packet& a) const { return ei_psqrt(a); }
};
template<typename Scalar>
struct ei_functor_traits<ei_scalar_sqrt_op<Scalar> >
-{ enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false }; };
+{ enum {
+ Cost = 5 * NumTraits<Scalar>::MulCost,
+ PacketAccess = ei_packet_traits<Scalar>::HasSqrt
+ };
+};
/** \internal
*