Use GCC builtins for logb functions if desired.

This patch is using the corresponding GCC builtin for logbf, logb,
logbl and logbf128 if the USE_FUNCTION_BUILTIN macros are defined to one
in math-use-builtins-function.h.

Co-Authored-By: Xi Ruoyao <xry111@xry111.site>
This commit is contained in:
Xiaolin Tang 2022-11-23 11:45:00 +08:00 committed by caiyinyu
parent f711e4ef53
commit 2e2485ce05
6 changed files with 23 additions and 0 deletions

View File

@ -0,0 +1,4 @@
#define USE_LOGB_BUILTIN 0
#define USE_LOGBF_BUILTIN 0
#define USE_LOGBL_BUILTIN 0
#define USE_LOGBF128_BUILTIN 0

View File

@ -39,5 +39,6 @@
#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 */

View File

@ -21,10 +21,14 @@
#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);
@ -42,6 +46,7 @@ __logb (double 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)

View File

@ -165,6 +165,8 @@
#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

View File

@ -16,10 +16,14 @@
#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);
@ -37,5 +41,6 @@ __logbf (float 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)

View File

@ -25,10 +25,15 @@ static char rcsid[] = "$NetBSD: $";
#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);
@ -49,6 +54,7 @@ __logbl (_Float128 x)
ex -= ma - 16;
}
return (_Float128) (ex - 16383);
#endif /* ! USE_LOGBL_BUILTIN */
}
libm_alias_ldouble (__logb, logb)