From c61170e87dccdd093c1471a7e287dd269635a461 Mon Sep 17 00:00:00 2001 From: Benoit Steiner Date: Wed, 27 Apr 2016 14:22:20 -0700 Subject: [PATCH] fpclassify isn't portable enough. In particular, the return values of the function are not available on all the platforms Eigen supportes: remove it from Eigen. --- Eigen/src/Core/MathFunctions.h | 9 --------- Eigen/src/Core/arch/CUDA/Half.h | 21 --------------------- 2 files changed, 30 deletions(-) diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index 2bdf7dde7..5771abf7d 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -937,15 +937,6 @@ template EIGEN_DEVICE_FUNC bool (isnan) (const T &x) { return inte template EIGEN_DEVICE_FUNC bool (isinf) (const T &x) { return internal::isinf_impl(x); } template EIGEN_DEVICE_FUNC bool (isfinite)(const T &x) { return internal::isfinite_impl(x); } -template EIGEN_DEVICE_FUNC int (fpclassify)(const T& x){ - #ifdef __CUDA_ARCH__ - return (::fpclassify)(x); - #else - using std::fpclassify; - return fpclassify(x); - #endif -} - template EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(round, Scalar) round(const Scalar& x) diff --git a/Eigen/src/Core/arch/CUDA/Half.h b/Eigen/src/Core/arch/CUDA/Half.h index 37e714411..6387f2870 100644 --- a/Eigen/src/Core/arch/CUDA/Half.h +++ b/Eigen/src/Core/arch/CUDA/Half.h @@ -407,27 +407,6 @@ static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isnan)(const Eigen::half& a) static EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool (isfinite)(const Eigen::half& a) { return !(Eigen::numext::isinf)(a) && !(Eigen::numext::isnan)(a); } -template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC int (fpclassify)(const Eigen::half& a) { - const int exponent = a.x & 0x7c00; - const int mantissa = a.x & 0x03ff; - if (exponent == 0) { - if (mantissa == 0) { - // Positive or negative zero. - return FP_ZERO; - } else { - return FP_SUBNORMAL; - } - } else if (exponent == 0x7c00) { - // Maximum possible exponent signifies either NaN or +/- inf. - if (mantissa == 0) { - return FP_INFINITE; - } else { - return FP_NAN; - } - } else { - return FP_NORMAL; - } -} template<> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Eigen::half abs(const Eigen::half& a) { Eigen::half result;