mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
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:
parent
f711e4ef53
commit
2e2485ce05
4
sysdeps/generic/math-use-builtins-logb.h
Normal file
4
sysdeps/generic/math-use-builtins-logb.h
Normal 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
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user