--- /dev/null
+#define USE_LOGB_BUILTIN 0
+#define USE_LOGBF_BUILTIN 0
+#define USE_LOGBL_BUILTIN 0
+#define USE_LOGBF128_BUILTIN 0
#include <math-use-builtins-fabs.h>
#include <math-use-builtins-lrint.h>
#include <math-use-builtins-llrint.h>
+#include <math-use-builtins-logb.h>
#endif /* MATH_USE_BUILTINS_H */
#include <math_private.h>
#include <libm-alias-double.h>
#include <fix-int-fp-convert-zero.h>
+#include <math-use-builtins.h>
double
__logb (double x)
{
+#if USE_LOGB_BUILTIN
+ return __builtin_logb (x);
+#else
int64_t ix, ex;
EXTRACT_WORDS64 (ix, x);
if (FIX_INT_FP_CONVERT_ZERO && ex == 1023)
return 0.0;
return (double) (ex - 1023);
+#endif /* !USE_LOGB_BUILTIN */
}
#ifndef __logb
libm_alias_double (__logb, logb)
#define USE_LRINTL_BUILTIN USE_LRINTF128_BUILTIN
#undef USE_LLRINTL_BUILTIN
#define USE_LLRINTL_BUILTIN USE_LLRINTF128_BUILTIN
+#undef USE_LOGBL_BUILTIN
+#define USE_LOGBL_BUILTIN USE_LOGBF128_BUILTIN
/* IEEE function renames. */
#define __ieee754_acoshl __ieee754_acoshf128
#include <math_private.h>
#include <libm-alias-float.h>
#include <fix-int-fp-convert-zero.h>
+#include <math-use-builtins.h>
float
__logbf (float x)
{
+#if USE_LOGBF_BUILTIN
+ return __builtin_logbf (x);
+#else
int32_t ix, rix;
GET_FLOAT_WORD (ix, x);
if (FIX_INT_FP_CONVERT_ZERO && rix == 127)
return 0.0f;
return (float) (rix - 127);
+#endif /* ! USE_LOGBF_BUILTIN */
}
libm_alias_float (__logb, logb)
#include <math.h>
#include <math_private.h>
#include <libm-alias-ldouble.h>
+#include <math-use-builtins.h>
_Float128
__logbl (_Float128 x)
{
+#if USE_LOGBL_BUILTIN
+ return __builtin_logbl (x);
+#else
+ /* Use generic implementation. */
int64_t lx, hx, ex;
GET_LDOUBLE_WORDS64 (hx, lx, x);
ex -= ma - 16;
}
return (_Float128) (ex - 16383);
+#endif /* ! USE_LOGBL_BUILTIN */
}
libm_alias_ldouble (__logb, logb)