[FFmpeg-devel] [PATCH] lavu/libm: change macros to functions

Ganesh Ajjanagadde gajjanagadde at gmail.com
Thu Dec 24 19:32:56 CET 2015


In the standard library, these are functions. We should match it; there
is no reason for these to be macros.

While at it, add some trivial comments for readability and correct an
incorrect (at standard double precision) M_LN2 constant used in the exp2
fallback.

Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
---
 libavutil/libm.h | 108 ++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 67 insertions(+), 41 deletions(-)

diff --git a/libavutil/libm.h b/libavutil/libm.h
index 6f9ac1b..ac05613 100644
--- a/libavutil/libm.h
+++ b/libavutil/libm.h
@@ -36,33 +36,39 @@
 #endif /* HAVE_MIPSFPU && HAVE_INLINE_ASM*/
 
 #if !HAVE_ATANF
-#undef atanf
-#define atanf(x) ((float)atan(x))
-#endif
+static av_always_inline float atanf(float x)
+{
+    return atan(x);
+}
+#endif /* HAVE_ATANF */
 
 #if !HAVE_ATAN2F
-#undef atan2f
-#define atan2f(y, x) ((float)atan2(y, x))
-#endif
+static av_always_inline float atan2f(float y, float x)
+{
+    return atan2(y, x);
+}
+#endif /* HAVE_ATAN2F */
 
 #if !HAVE_POWF
-#undef powf
-#define powf(x, y) ((float)pow(x, y))
-#endif
+static av_always_inline float powf(float x, float y)
+{
+    return pow(x, y);
+}
+#endif /* HAVE_POWF */
 
 #if !HAVE_CBRT
 static av_always_inline double cbrt(double x)
 {
     return x < 0 ? -pow(-x, 1.0 / 3.0) : pow(x, 1.0 / 3.0);
 }
-#endif
+#endif /* HAVE_CBRT */
 
 #if !HAVE_CBRTF
 static av_always_inline float cbrtf(float x)
 {
     return x < 0 ? -powf(-x, 1.0 / 3.0) : powf(x, 1.0 / 3.0);
 }
-#endif
+#endif /* HAVE_CBRTF */
 
 #if !HAVE_COPYSIGN
 static av_always_inline double copysign(double x, double y)
@@ -71,12 +77,13 @@ static av_always_inline double copysign(double x, double y)
     uint64_t vy = av_double2int(y);
     return av_int2double((vx & UINT64_C(0x7fffffffffffffff)) | (vy & UINT64_C(0x8000000000000000)));
 }
-#endif
+#endif /* HAVE_COPYSIGN */
 
 #if !HAVE_COSF
-#undef cosf
-#define cosf(x) ((float)cos(x))
-#endif
+static av_always_inline float cosf(float x) {
+    return cos(x);
+}
+#endif /* HAVE_COSF */
 
 #if !HAVE_ERF
 static inline double ff_eval_poly(const double *coeff, int size, double x) {
@@ -279,18 +286,24 @@ static inline double erf(double z)
 #endif
 
 #if !HAVE_EXPF
-#undef expf
-#define expf(x) ((float)exp(x))
-#endif
+static av_always_inline float expf(float x)
+{
+    return exp(x);
+}
+#endif /* HAVE_EXPF */
 
 #if !HAVE_EXP2
-#undef exp2
-#define exp2(x) exp((x) * 0.693147180559945)
+static av_always_inline double exp2(double x)
+{
+    return exp(x * M_LN2);
+}
 #endif /* HAVE_EXP2 */
 
 #if !HAVE_EXP2F
-#undef exp2f
-#define exp2f(x) ((float)exp2(x))
+static av_always_inline float exp2f(float x)
+{
+    return exp2(x);
+}
 #endif /* HAVE_EXP2F */
 
 /* Somewhat inaccurate fallbacks, relative error ~ 1e-13 concentrated on very
@@ -362,7 +375,6 @@ static av_always_inline av_const int avpriv_isnan(double x)
 #endif /* HAVE_ISNAN */
 
 #if !HAVE_HYPOT
-#undef hypot
 static inline av_const double hypot(double x, double y)
 {
     double ret, temp;
@@ -385,39 +397,53 @@ static inline av_const double hypot(double x, double y)
 #endif /* HAVE_HYPOT */
 
 #if !HAVE_LDEXPF
-#undef ldexpf
-#define ldexpf(x, exp) ((float)ldexp(x, exp))
-#endif
+static av_always_inline float ldexpf(float x, int exp)
+{
+    return ldexp(x, exp);
+}
+#endif /* HAVE_LDEXPF */
 
 #if !HAVE_LLRINT
-#undef llrint
-#define llrint(x) ((long long)rint(x))
+static av_always_inline long long llrint(double x)
+{
+    return rint(x);
+}
 #endif /* HAVE_LLRINT */
 
 #if !HAVE_LLRINTF
-#undef llrintf
-#define llrintf(x) ((long long)rint(x))
-#endif /* HAVE_LLRINT */
+static av_always_inline long long llrintf(float x)
+{
+    return rint(x);
+}
+#endif /* HAVE_LLRINTF */
 
 #if !HAVE_LOG2
-#undef log2
-#define log2(x) (log(x) * 1.44269504088896340736)
+static av_always_inline double log2(double x)
+{
+    return log(x * 1.44269504088896340736);
+}
 #endif /* HAVE_LOG2 */
 
 #if !HAVE_LOG2F
-#undef log2f
-#define log2f(x) ((float)log2(x))
+static av_always_inline float log2f(float x)
+{
+    return log2(x);
+}
 #endif /* HAVE_LOG2F */
 
 #if !HAVE_LOG10F
-#undef log10f
-#define log10f(x) ((float)log10(x))
-#endif
+static av_always_inline float log10f(float x)
+{
+    return log10(x);
+}
+#endif /* HAVE_LOG10F */
 
 #if !HAVE_SINF
-#undef sinf
-#define sinf(x) ((float)sin(x))
-#endif
+static av_always_inline float sinf(float x)
+{
+    return sin(x);
+}
+#endif /* HAVE_SINF */
 
 #if !HAVE_RINT
 static inline double rint(double x)
-- 
2.6.4



More information about the ffmpeg-devel mailing list