From a0a47a09b0e204216072c1f77643de3f6f869732 Mon Sep 17 00:00:00 2001 From: Ganesh Ajjanagadde Date: Wed, 13 Jan 2016 19:09:25 -0500 Subject: [PATCH] lavu/libm: add isfinite fallback Reviewed-by: Ronald S. Bultje Signed-off-by: Ganesh Ajjanagadde --- configure | 1 + libavutil/libm.h | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/configure b/configure index 6d14d37fda..28ec5bf01e 100755 --- a/configure +++ b/configure @@ -1820,6 +1820,7 @@ MATH_FUNCS=" exp2f expf hypot + isfinite isinf isnan ldexpf diff --git a/libavutil/libm.h b/libavutil/libm.h index bc44dcab0f..a819962391 100644 --- a/libavutil/libm.h +++ b/libavutil/libm.h @@ -343,6 +343,25 @@ static av_always_inline av_const int avpriv_isnan(double x) : avpriv_isnan(x)) #endif /* HAVE_ISNAN */ +#if !HAVE_ISFINITE +static av_always_inline av_const int avpriv_isfinitef(float x) +{ + uint32_t v = av_float2int(x); + return (v & 0x7f800000) != 0x7f800000; +} + +static av_always_inline av_const int avpriv_isfinite(double x) +{ + uint64_t v = av_double2int(x); + return (v & 0x7ff0000000000000) != 0x7ff0000000000000; +} + +#define isfinite(x) \ + (sizeof(x) == sizeof(float) \ + ? avpriv_isfinitef(x) \ + : avpriv_isfinite(x)) +#endif /* HAVE_ISFINITE */ + #if !HAVE_HYPOT static inline av_const double hypot(double x, double y) {