diff options
Diffstat (limited to 'Eigen/src/Core/GenericPacketMath.h')
-rw-r--r-- | Eigen/src/Core/GenericPacketMath.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h index 6ab38994f..651e3f7b3 100644 --- a/Eigen/src/Core/GenericPacketMath.h +++ b/Eigen/src/Core/GenericPacketMath.h @@ -83,6 +83,7 @@ struct default_packet_traits HasPolygamma = 0, HasErf = 0, HasErfc = 0, + HasNdtri = 0, HasI0e = 0, HasI1e = 0, HasIGamma = 0, @@ -257,12 +258,32 @@ pldexp(const Packet &a, const Packet &exponent) { return std::ldexp(a,exponent); template<typename Packet> EIGEN_DEVICE_FUNC inline Packet pzero(const Packet& a) { return pxor(a,a); } +template<> EIGEN_DEVICE_FUNC inline float pzero<float>(const float& a) { + EIGEN_UNUSED_VARIABLE(a); + return 0.; +} + +template<> EIGEN_DEVICE_FUNC inline double pzero<double>(const double& a) { + EIGEN_UNUSED_VARIABLE(a); + return 0.; +} + /** \internal \returns bits of \a or \b according to the input bit mask \a mask */ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet pselect(const Packet& mask, const Packet& a, const Packet& b) { return por(pand(a,mask),pandnot(b,mask)); } +template<> EIGEN_DEVICE_FUNC inline float pselect<float>( + const float& mask, const float& a, const float&b) { + return mask == 0 ? b : a; +} + +template<> EIGEN_DEVICE_FUNC inline double pselect<double>( + const double& mask, const double& a, const double& b) { + return mask == 0 ? b : a; +} + /** \internal \returns a <= b as a bit mask */ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet pcmp_le(const Packet& a, const Packet& b) { return a<=b ? ptrue(a) : pzero(a); } |