]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Add builtin support for (l)lround(f)
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Wed, 15 Oct 2025 16:39:54 +0000 (16:39 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Fri, 17 Oct 2025 17:03:54 +0000 (17:03 +0000)
Add builtin support for (l)lround(f) via the math-use-builtins
header mechanism.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
sysdeps/generic/math-use-builtins-llround.h [new file with mode: 0644]
sysdeps/generic/math-use-builtins-lround.h [new file with mode: 0644]
sysdeps/generic/math-use-builtins.h
sysdeps/ieee754/dbl-64/s_llround.c
sysdeps/ieee754/dbl-64/s_lround.c
sysdeps/ieee754/flt-32/s_llroundf.c
sysdeps/ieee754/flt-32/s_lroundf.c

diff --git a/sysdeps/generic/math-use-builtins-llround.h b/sysdeps/generic/math-use-builtins-llround.h
new file mode 100644 (file)
index 0000000..aa0f8c7
--- /dev/null
@@ -0,0 +1,4 @@
+#define USE_LLROUND_BUILTIN 0
+#define USE_LLROUNDF_BUILTIN 0
+#define USE_LLROUNDL_BUILTIN 0
+#define USE_LLROUNDF128_BUILTIN 0
diff --git a/sysdeps/generic/math-use-builtins-lround.h b/sysdeps/generic/math-use-builtins-lround.h
new file mode 100644 (file)
index 0000000..b93c86e
--- /dev/null
@@ -0,0 +1,4 @@
+#define USE_LROUND_BUILTIN 0
+#define USE_LROUNDF_BUILTIN 0
+#define USE_LROUNDL_BUILTIN 0
+#define USE_LROUNDF128_BUILTIN 0
index b373bde4395aa3904ecb1e3d8acfebfac7d86b16..e069b161b187c74739fac31051bdfab4c2d411d5 100644 (file)
@@ -41,5 +41,7 @@
 #include <math-use-builtins-llrint.h>
 #include <math-use-builtins-logb.h>
 #include <math-use-builtins-ffs.h>
+#include <math-use-builtins-lround.h>
+#include <math-use-builtins-llround.h>
 
 #endif /* MATH_USE_BUILTINS_H  */
index 0a07722c2380e061f6b473aa7b8bed72035ca1f1..e86d3dcb677f6498f939fe654fbf6776610491f2 100644 (file)
 #include <math_private.h>
 #include <libm-alias-double.h>
 #include <fix-fp-int-convert-overflow.h>
+#include <math-use-builtins.h>
 
 long long int
 __llround (double x)
 {
+#if USE_LLROUND_BUILTIN
+  return __builtin_llround (x);
+#else
   int32_t j0;
   int64_t i0;
   long long int result;
@@ -71,6 +75,7 @@ __llround (double x)
     }
 
   return sign * result;
+#endif /* ! USE_LLROUND_BUILTIN  */
 }
 
 libm_alias_double (__llround, llround)
index ba98b35b7cb674fed1e5adc1ccd7bff3bb589265..e92fa5ceedd89dc224d8a8826f8ea5ce68d808c6 100644 (file)
@@ -23,6 +23,7 @@
 #include <math_private.h>
 #include <libm-alias-double.h>
 #include <fix-fp-int-convert-overflow.h>
+#include <math-use-builtins.h>
 
 /* For LP64, lround is an alias for llround.  */
 #ifndef _LP64
@@ -30,6 +31,9 @@
 long int
 __lround (double x)
 {
+#if USE_LROUND_BUILTIN
+  return __builtin_lround (x);
+#else
   int32_t j0;
   int64_t i0;
   long int result;
@@ -90,6 +94,7 @@ __lround (double x)
     }
 
   return sign * result;
+#endif /* ! USE_LROUND_BUILTIN  */
 }
 
 libm_alias_double (__lround, lround)
index e19b3072fccde8836096d337b38cd11b5704181c..bb92acbc4952ba0004b27524573aa70cf8ea05a5 100644 (file)
 #include <math_private.h>
 #include <libm-alias-float.h>
 #include <fix-fp-int-convert-overflow.h>
-
+#include <math-use-builtins.h>
 
 long long int
 __llroundf (float x)
 {
+#if USE_LLROUNDF_BUILTIN
+  return __builtin_llroundf (x);
+#else
   int32_t j0;
   uint32_t i;
   long long int result;
@@ -68,6 +71,7 @@ __llroundf (float x)
     }
 
   return sign * result;
+#endif /* ! USE_LLROUNDF_BUILTIN  */
 }
 
 libm_alias_float (__llround, llround)
index 117e98d6c9cf36bff6fbfe6af165699b06461b73..f31c53136a6ad1257e64e4fe2068d7e3f147a45e 100644 (file)
 #include <math_private.h>
 #include <libm-alias-float.h>
 #include <fix-fp-int-convert-overflow.h>
-
+#include <math-use-builtins.h>
 
 long int
 __lroundf (float x)
 {
+#if USE_LROUNDF_BUILTIN
+  return __builtin_lroundf (x);
+#else
   int32_t j0;
   uint32_t i;
   long int result;
@@ -68,6 +71,7 @@ __lroundf (float x)
     }
 
   return sign * result;
+#endif /* ! USE_LROUNDF_BUILTIN  */
 }
 
 libm_alias_float (__lround, lround)