From dd83a647441d4f6137095bf7a37f75840cd051db Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Wed, 9 Nov 2022 01:18:11 +0800 Subject: [PATCH 2/5] math: Allow using compiler builtins for {l,ll}rint{,f} --- sysdeps/generic/math-use-builtins-lrint.h | 4 ++++ sysdeps/generic/math-use-builtins.h | 1 + sysdeps/ieee754/dbl-64/s_llrint.c | 7 +++++++ sysdeps/ieee754/dbl-64/s_lrint.c | 7 +++++++ sysdeps/ieee754/flt-32/s_llrintf.c | 7 +++++++ sysdeps/ieee754/flt-32/s_lrintf.c | 7 +++++++ 6 files changed, 33 insertions(+) create mode 100644 sysdeps/generic/math-use-builtins-lrint.h diff --git a/sysdeps/generic/math-use-builtins-lrint.h b/sysdeps/generic/math-use-builtins-lrint.h new file mode 100644 index 0000000000..3159ba977a --- /dev/null +++ b/sysdeps/generic/math-use-builtins-lrint.h @@ -0,0 +1,4 @@ +#define USE_LRINT_BUILTIN 0 +#define USE_LRINTF_BUILTIN 0 +#define USE_LLRINT_BUILTIN 0 +#define USE_LLRINTF_BUILTIN 0 diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h index 6bd424d900..3acec1d538 100644 --- a/sysdeps/generic/math-use-builtins.h +++ b/sysdeps/generic/math-use-builtins.h @@ -37,5 +37,6 @@ #include #include #include +#include #endif /* MATH_USE_BUILTINS_H */ diff --git a/sysdeps/ieee754/dbl-64/s_llrint.c b/sysdeps/ieee754/dbl-64/s_llrint.c index dc8d9948df..1c041e3b26 100644 --- a/sysdeps/ieee754/dbl-64/s_llrint.c +++ b/sysdeps/ieee754/dbl-64/s_llrint.c @@ -25,17 +25,23 @@ #include #include #include +#include +#if !USE_LLRINT_BUILTIN static const double two52[2] = { 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ }; +#endif long long int __llrint (double x) { +#if USE_LLRINT_BUILTIN + return __builtin_llrint (x); +#else int32_t j0; uint32_t i1, i0; long long int result; @@ -95,6 +101,7 @@ __llrint (double x) } return sx ? -result : result; +#endif } libm_alias_double (__llrint, llrint) diff --git a/sysdeps/ieee754/dbl-64/s_lrint.c b/sysdeps/ieee754/dbl-64/s_lrint.c index d4272916cd..fdb2d86f3f 100644 --- a/sysdeps/ieee754/dbl-64/s_lrint.c +++ b/sysdeps/ieee754/dbl-64/s_lrint.c @@ -25,17 +25,23 @@ #include #include #include +#include +#if !USE_LRINT_BUILTIN static const double two52[2] = { 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ }; +#endif long int __lrint (double x) { +#if USE_LRINT_BUILTIN + return __builtin_lrint (x); +#else int32_t j0; uint32_t i0, i1; double w; @@ -119,6 +125,7 @@ __lrint (double x) } return sx ? -result : result; +#endif } libm_alias_double (__lrint, lrint) diff --git a/sysdeps/ieee754/flt-32/s_llrintf.c b/sysdeps/ieee754/flt-32/s_llrintf.c index 226b8261d3..12654848b8 100644 --- a/sysdeps/ieee754/flt-32/s_llrintf.c +++ b/sysdeps/ieee754/flt-32/s_llrintf.c @@ -25,17 +25,23 @@ #include #include #include +#include +#if !USE_LLRINTF_BUILTIN static const float two23[2] = { 8.3886080000e+06, /* 0x4B000000 */ -8.3886080000e+06, /* 0xCB000000 */ }; +#endif long long int __llrintf (float x) { +#if USE_LLRINTF_BUILTIN + return __builtin_llrintf (x); +#else int32_t j0; uint32_t i0; float w; @@ -82,6 +88,7 @@ __llrintf (float x) } return sx ? -result : result; +#endif } libm_alias_float (__llrint, llrint) diff --git a/sysdeps/ieee754/flt-32/s_lrintf.c b/sysdeps/ieee754/flt-32/s_lrintf.c index 7438b272b2..7b0ff994bd 100644 --- a/sysdeps/ieee754/flt-32/s_lrintf.c +++ b/sysdeps/ieee754/flt-32/s_lrintf.c @@ -25,17 +25,23 @@ #include #include #include +#include +#if !USE_LRINTF_BUILTIN static const float two23[2] = { 8.3886080000e+06, /* 0x4B000000 */ -8.3886080000e+06, /* 0xCB000000 */ }; +#endif long int __lrintf (float x) { +#if USE_LRINTF_BUILTIN + return __builtin_lrintf (x); +#else int32_t j0; uint32_t i0; float w; @@ -82,6 +88,7 @@ __lrintf (float x) } return sx ? -result : result; +#endif } libm_alias_float (__lrint, lrint) -- 2.37.0