diff options
author | Rasmus Munk Larsen <rmlarsen@google.com> | 2019-09-19 12:48:30 -0700 |
---|---|---|
committer | Rasmus Munk Larsen <rmlarsen@google.com> | 2019-09-19 12:48:30 -0700 |
commit | 6de5ed08d88239080b9381f60f75e5abea731d75 (patch) | |
tree | af9fcc1e95e23d7faece933d8c7a16a9778147a7 /Eigen/src/Core/arch/SSE | |
parent | e02d42963750531490a69fc87926b60f32180456 (diff) |
Add generic PacketMath implementation of the Error Function (erf).
Diffstat (limited to 'Eigen/src/Core/arch/SSE')
-rw-r--r-- | Eigen/src/Core/arch/SSE/MathFunctions.h | 7 | ||||
-rwxr-xr-x | Eigen/src/Core/arch/SSE/PacketMath.h | 29 |
2 files changed, 22 insertions, 14 deletions
diff --git a/Eigen/src/Core/arch/SSE/MathFunctions.h b/Eigen/src/Core/arch/SSE/MathFunctions.h index b21bb93bf..a991b1a39 100644 --- a/Eigen/src/Core/arch/SSE/MathFunctions.h +++ b/Eigen/src/Core/arch/SSE/MathFunctions.h @@ -147,6 +147,13 @@ ptanh<Packet4f>(const Packet4f& x) { return internal::generic_fast_tanh_float(x); } +// Error function. +template <> +EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f +perf<Packet4f>(const Packet4f& a) { + return internal::generic_fast_erf_float(a); +} + } // end namespace internal namespace numext { diff --git a/Eigen/src/Core/arch/SSE/PacketMath.h b/Eigen/src/Core/arch/SSE/PacketMath.h index b48d70afd..4a772d078 100755 --- a/Eigen/src/Core/arch/SSE/PacketMath.h +++ b/Eigen/src/Core/arch/SSE/PacketMath.h @@ -96,28 +96,29 @@ template<> struct is_arithmetic<__m128d> { enum { value = true }; }; // Use the packet_traits defined in AVX/PacketMath.h instead if we're going // to leverage AVX instructions. #ifndef EIGEN_VECTORIZE_AVX -template<> struct packet_traits<float> : default_packet_traits -{ +template <> +struct packet_traits<float> : default_packet_traits { typedef Packet4f type; typedef Packet4f half; enum { Vectorizable = 1, AlignedOnScalar = 1, - size=4, + size = 4, HasHalfPacket = 0, - HasDiv = 1, - HasSin = EIGEN_FAST_MATH, - HasCos = EIGEN_FAST_MATH, - HasLog = 1, - HasLog1p = 1, - HasExpm1 = 1, + HasDiv = 1, + HasSin = EIGEN_FAST_MATH, + HasCos = EIGEN_FAST_MATH, + HasLog = 1, + HasLog1p = 1, + HasExpm1 = 1, HasNdtri = 1, - HasExp = 1, - HasBessel = 1, + HasExp = 1, + HasBessel = 1, HasSqrt = 1, HasRsqrt = 1, - HasTanh = EIGEN_FAST_MATH, + HasTanh = EIGEN_FAST_MATH, + HasErf = EIGEN_FAST_MATH, HasBlend = 1, HasFloor = 1 @@ -128,8 +129,8 @@ template<> struct packet_traits<float> : default_packet_traits #endif }; }; -template<> struct packet_traits<double> : default_packet_traits -{ +template <> +struct packet_traits<double> : default_packet_traits { typedef Packet2d type; typedef Packet2d half; enum { |