about summary refs log tree commit diff
path: root/sysdeps/ieee754/ldbl-128
diff options
context:
space:
mode:
authorStefan Liebler <stli@linux.ibm.com>2019-12-11 15:09:18 +0100
committerStefan Liebler <stli@linux.ibm.com>2019-12-11 15:12:15 +0100
commitae3577f607b50bf3ce9b0877e43ad2508c9da61b (patch)
treeb284b10fc26c0454a71be353759f3d2f892b06e0 /sysdeps/ieee754/ldbl-128
parent36e9acbd5cb2c330c0d53195db4a0ee31f2c3097 (diff)
downloadglibc-ae3577f607b50bf3ce9b0877e43ad2508c9da61b.tar.gz
glibc-ae3577f607b50bf3ce9b0877e43ad2508c9da61b.tar.xz
glibc-ae3577f607b50bf3ce9b0877e43ad2508c9da61b.zip
Use GCC builtins for nearbyint functions if desired.
This patch is using the corresponding GCC builtin for nearbyintf, nearbyint,
nearbintl and nearbyintf128 if the USE_FUNCTION_BUILTIN macros are defined to one
in math-use-builtins.h.

This is the case for s390 if build with at least --march=z196 --mzarch.
Otherwise the generic implementation is used.  The code of the generic
implementation is not changed.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps/ieee754/ldbl-128')
-rw-r--r--sysdeps/ieee754/ldbl-128/s_nearbyintl.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
index f044cb4334..a4ad8e82e5 100644
--- a/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
+++ b/sysdeps/ieee754/ldbl-128/s_nearbyintl.c
@@ -28,15 +28,19 @@
 #include <math-barriers.h>
 #include <math_private.h>
 #include <libm-alias-ldouble.h>
-
-static const _Float128
-TWO112[2]={
-  L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */
- L(-5.19229685853482762853049632922009600E+33)  /* 0xC06F000000000000, 0 */
-};
+#include <math-use-builtins.h>
 
 _Float128 __nearbyintl(_Float128 x)
 {
+#if USE_NEARBYINTL_BUILTIN
+  return __builtin_nearbyintl (x);
+#else
+  /* Use generic implementation.  */
+  static const _Float128
+    TWO112[2] = {
+		 L(5.19229685853482762853049632922009600E+33), /* 0x406F000000000000, 0 */
+		 L(-5.19229685853482762853049632922009600E+33)  /* 0xC06F000000000000, 0 */
+  };
 	fenv_t env;
 	int64_t i0,j0,sx;
 	uint64_t i1 __attribute__ ((unused));
@@ -65,5 +69,6 @@ _Float128 __nearbyintl(_Float128 x)
 	math_force_eval (t);
 	fesetenv (&env);
 	return t;
+#endif /* ! USE_NEARBYINTL_BUILTIN  */
 }
 libm_alias_ldouble (__nearbyint, nearbyint)