unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/5] use gcc builtins for sqrt and fma functions
@ 2020-05-30  2:00 Vineet Gupta via Libc-alpha
  2020-05-30  2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta via Libc-alpha
                   ` (4 more replies)
  0 siblings, 5 replies; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:00 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Hi,

This was suggested as part of ARC port review.

Build tested for following targets:

aarch64-linux-gnu arm-linux-gnueabi hppa-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64 powerpc-linux-gnu microblaze-linux-gnu nios2-linux-gnu hppa-linux-gnu

Thx,
-Vineet

Vineet Gupta (5):
  ARC/dl-runtime helper macros
  iee754: prvoide gcc builtins based generic sqrt functions
  iee754: prvoide gcc builtins based generic fma functions
  aarch/fpu: use generic sqrt, fma functions
  powerpc/fpu: use generic fma functions

 sysdeps/aarch64/fpu/e_sqrt.c                | 27 --------
 sysdeps/aarch64/fpu/e_sqrtf.c               | 27 --------
 sysdeps/aarch64/fpu/math-use-builtins.h     | 70 +++++++++++++++++++++
 sysdeps/aarch64/fpu/s_fma.c                 | 28 ---------
 sysdeps/aarch64/fpu/s_fmaf.c                | 28 ---------
 sysdeps/arc/dl-runtime.h                    | 42 +++++++++++++
 sysdeps/generic/math-use-builtins.h         |  7 +++
 sysdeps/ieee754/dbl-64/e_sqrt.c             |  6 ++
 sysdeps/ieee754/dbl-64/s_fma.c              |  6 ++
 sysdeps/ieee754/dbl-64/s_fmaf.c             |  6 ++
 sysdeps/ieee754/float128/float128_private.h |  2 +
 sysdeps/ieee754/flt-32/e_sqrtf.c            |  6 ++
 sysdeps/ieee754/ldbl-128/s_fmal.c           |  5 ++
 sysdeps/powerpc/fpu/math-use-builtins.h     | 70 +++++++++++++++++++++
 sysdeps/powerpc/fpu/s_fma.c                 | 27 --------
 sysdeps/powerpc/fpu/s_fmaf.c                | 27 --------
 16 files changed, 220 insertions(+), 164 deletions(-)
 delete mode 100644 sysdeps/aarch64/fpu/e_sqrt.c
 delete mode 100644 sysdeps/aarch64/fpu/e_sqrtf.c
 create mode 100644 sysdeps/aarch64/fpu/math-use-builtins.h
 delete mode 100644 sysdeps/aarch64/fpu/s_fma.c
 delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c
 create mode 100644 sysdeps/arc/dl-runtime.h
 create mode 100644 sysdeps/powerpc/fpu/math-use-builtins.h
 delete mode 100644 sysdeps/powerpc/fpu/s_fma.c
 delete mode 100644 sysdeps/powerpc/fpu/s_fmaf.c

-- 
2.20.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 1/5] ARC/dl-runtime helper macros
  2020-05-30  2:00 [PATCH 0/5] use gcc builtins for sqrt and fma functions Vineet Gupta via Libc-alpha
@ 2020-05-30  2:00 ` Vineet Gupta via Libc-alpha
  2020-05-30  2:17   ` Vineet Gupta via Libc-alpha
  2020-05-30  2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta via Libc-alpha
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:00 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

This is purely for review purposes to attest the interface defined
in prior patch
---
 sysdeps/arc/dl-runtime.h | 42 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 sysdeps/arc/dl-runtime.h

diff --git a/sysdeps/arc/dl-runtime.h b/sysdeps/arc/dl-runtime.h
new file mode 100644
index 000000000000..529d49f5d0a1
--- /dev/null
+++ b/sysdeps/arc/dl-runtime.h
@@ -0,0 +1,42 @@
+/* Helpers for On-demand PLT fixup for shared objects. ARC version.
+   Copyright (C) 2017-2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* PLT jump into resolver passes PC of PLTn, while _dl_fixup expects the
+   address of corresponding .rela.plt entry.
+
+    - @plt0: runtime pc of first plt entry (DT_PLTGOT)
+    - @pltn: runtime pc of plt entry being resolved
+    - @size: size of .plt.rela entry (unused).  */
+static inline uintptr_t
+reloc_index (uintptr_t plt0, uintptr_t pltn, size_t size)
+{
+  unsigned long int idx = (unsigned long)pltn - (unsigned long)plt0;
+
+  /* PLT trampoline is 16 bytes. */
+  idx /= 16;
+
+  /* Exclude PLT0 and PLT1.  */
+  return idx - 2;
+}
+
+static inline uintptr_t
+reloc_offset (uintptr_t plt0, uintptr_t pltn)
+{
+  size_t sz = sizeof (ElfW(Rela));
+  return reloc_index(plt0, pltn, sz) * sz;
+}
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-05-30  2:00 [PATCH 0/5] use gcc builtins for sqrt and fma functions Vineet Gupta via Libc-alpha
  2020-05-30  2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta via Libc-alpha
@ 2020-05-30  2:00 ` Vineet Gupta via Libc-alpha
  2020-06-01 14:13   ` Adhemerval Zanella via Libc-alpha
  2020-06-01 14:18   ` Florian Weimer
  2020-05-30  2:00 ` [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions Vineet Gupta via Libc-alpha
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:00 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

---
 sysdeps/generic/math-use-builtins.h | 3 +++
 sysdeps/ieee754/dbl-64/e_sqrt.c     | 6 ++++++
 sysdeps/ieee754/flt-32/e_sqrtf.c    | 6 ++++++
 3 files changed, 15 insertions(+)

diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h
index 8a39ef58bc95..fc724c824a17 100644
--- a/sysdeps/generic/math-use-builtins.h
+++ b/sysdeps/generic/math-use-builtins.h
@@ -60,4 +60,7 @@
 # define USE_COPYSIGNF128_BUILTIN 0
 #endif
 
+#define USE_SQRT_BUILTIN 0
+#define USE_SQRTF_BUILTIN 0
+
 #endif /* math-use-builtins.h */
diff --git a/sysdeps/ieee754/dbl-64/e_sqrt.c b/sysdeps/ieee754/dbl-64/e_sqrt.c
index d42a1a4eb6e9..518a8ae5cdaf 100644
--- a/sysdeps/ieee754/dbl-64/e_sqrt.c
+++ b/sysdeps/ieee754/dbl-64/e_sqrt.c
@@ -41,6 +41,7 @@
 #include <math_private.h>
 #include <fenv_private.h>
 #include <libm-alias-finite.h>
+#include <math-use-builtins.h>
 
 /*********************************************************************/
 /* An ultimate sqrt routine. Given an IEEE double machine number x   */
@@ -50,6 +51,10 @@
 double
 __ieee754_sqrt (double x)
 {
+#if USE_SQRT_BUILTIN
+  return __builtin_sqrt (x);
+#else
+  /* Use generic implementation.  */
   static const double
     rt0 = 9.99999999859990725855365213134618E-01,
     rt1 = 4.99999999495955425917856814202739E-01,
@@ -138,6 +143,7 @@ __ieee754_sqrt (double x)
 	return (x - x) / (x - x); /* sqrt(-ve)=sNaN */
       return 0x1p-256 * __ieee754_sqrt (x * 0x1p512);
     }
+#endif /* ! USE_SQRT_BUILTIN  */
 }
 #ifndef __ieee754_sqrt
 libm_alias_finite (__ieee754_sqrt, __sqrt)
diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c
index b339444301aa..68fc80e1e1ee 100644
--- a/sysdeps/ieee754/flt-32/e_sqrtf.c
+++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
@@ -16,12 +16,17 @@
 #include <math.h>
 #include <math_private.h>
 #include <libm-alias-finite.h>
+#include <math-use-builtins.h>
 
 static	const float	one	= 1.0, tiny=1.0e-30;
 
 float
 __ieee754_sqrtf(float x)
 {
+#if USE_SQRTF_BUILTIN
+	return __builtin_sqrtf (x);
+#else
+	/* Use generic implementation.  */
 	float z;
 	int32_t sign = (int)0x80000000;
 	int32_t ix,s,q,m,t,i;
@@ -83,6 +88,7 @@ __ieee754_sqrtf(float x)
 	ix += (m <<23);
 	SET_FLOAT_WORD(z,ix);
 	return z;
+#endif /* ! USE_SQRTF_BUILTIN  */
 }
 #ifndef __ieee754_sqrtf
 libm_alias_finite (__ieee754_sqrtf, __sqrtf)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions
  2020-05-30  2:00 [PATCH 0/5] use gcc builtins for sqrt and fma functions Vineet Gupta via Libc-alpha
  2020-05-30  2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta via Libc-alpha
  2020-05-30  2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta via Libc-alpha
@ 2020-05-30  2:00 ` Vineet Gupta via Libc-alpha
  2020-06-01 14:20   ` Adhemerval Zanella via Libc-alpha
  2020-06-01 16:13   ` Florian Weimer
  2020-05-30  2:00 ` [PATCH 4/5] aarch/fpu: use generic sqrt, " Vineet Gupta via Libc-alpha
  2020-05-30  2:00 ` [PATCH 5/5] powerpc/fpu: use generic " Vineet Gupta via Libc-alpha
  4 siblings, 2 replies; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:00 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

---
 sysdeps/generic/math-use-builtins.h         | 4 ++++
 sysdeps/ieee754/dbl-64/s_fma.c              | 6 ++++++
 sysdeps/ieee754/dbl-64/s_fmaf.c             | 6 ++++++
 sysdeps/ieee754/float128/float128_private.h | 2 ++
 sysdeps/ieee754/ldbl-128/s_fmal.c           | 5 +++++
 5 files changed, 23 insertions(+)

diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h
index fc724c824a17..9e96807a3370 100644
--- a/sysdeps/generic/math-use-builtins.h
+++ b/sysdeps/generic/math-use-builtins.h
@@ -63,4 +63,8 @@
 #define USE_SQRT_BUILTIN 0
 #define USE_SQRTF_BUILTIN 0
 
+#define USE_FMA_BUILTIN 0
+#define USE_FMAF_BUILTIN 0
+#define USE_FMAL_BUILTIN 0
+
 #endif /* math-use-builtins.h */
diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
index 876df6e78bdc..1e4b2da1511d 100644
--- a/sysdeps/ieee754/dbl-64/s_fma.c
+++ b/sysdeps/ieee754/dbl-64/s_fma.c
@@ -25,6 +25,7 @@
 #include <fenv_private.h>
 #include <libm-alias-double.h>
 #include <tininess.h>
+#include <math-use-builtins.h>
 
 /* This implementation uses rounding to odd to avoid problems with
    double rounding.  See a paper by Boldo and Melquiond:
@@ -33,6 +34,10 @@
 double
 __fma (double x, double y, double z)
 {
+#if USE_FMA_BUILTIN
+  return __builtin_fma (x);
+#else
+  /* Use generic implementation.  */
   union ieee754_double u, v, w;
   int adjust = 0;
   u.d = x;
@@ -292,6 +297,7 @@ __fma (double x, double y, double z)
       v.ieee.mantissa1 |= j;
       return v.d * 0x1p-108;
     }
+#endif /* ! USE_FMA_BUILTIN  */
 }
 #ifndef __fma
 libm_alias_double (__fma, fma)
diff --git a/sysdeps/ieee754/dbl-64/s_fmaf.c b/sysdeps/ieee754/dbl-64/s_fmaf.c
index 57329d0a87fe..f15b18262124 100644
--- a/sysdeps/ieee754/dbl-64/s_fmaf.c
+++ b/sysdeps/ieee754/dbl-64/s_fmaf.c
@@ -23,6 +23,7 @@
 #include <math-barriers.h>
 #include <fenv_private.h>
 #include <libm-alias-float.h>
+#include <math-use-builtins.h>
 
 /* This implementation relies on double being more than twice as
    precise as float and uses rounding to odd in order to avoid problems
@@ -33,6 +34,10 @@
 float
 __fmaf (float x, float y, float z)
 {
+#if USE_FMAF_BUILTIN
+  return __builtin_fmaf (x);
+#else
+  /* Use generic implementation.  */
   fenv_t env;
 
   /* Multiplication is always exact.  */
@@ -60,6 +65,7 @@ __fmaf (float x, float y, float z)
 
   /* And finally truncation with round to nearest.  */
   return (float) u.d;
+#endif /* ! USE_FMAF_BUILTIN  */
 }
 #ifndef __fmaf
 libm_alias_float (__fma, fma)
diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h
index f97463d9dc1b..a697a7c29038 100644
--- a/sysdeps/ieee754/float128/float128_private.h
+++ b/sysdeps/ieee754/float128/float128_private.h
@@ -154,6 +154,8 @@
 #define USE_ROUNDL_BUILTIN USE_ROUNDF128_BUILTIN
 #undef USE_COPYSIGNL_BUILTIN
 #define USE_COPYSIGNL_BUILTIN USE_COPYSIGNF128_BUILTIN
+#undef USE_FMAL_BUILTIN
+#define USE_FMAL_BUILTIN USE_FMA128_BUILTIN
 
 /* IEEE function renames.  */
 #define __ieee754_acoshl __ieee754_acoshf128
diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c b/sysdeps/ieee754/ldbl-128/s_fmal.c
index 7475015bcec6..1403734a5aeb 100644
--- a/sysdeps/ieee754/ldbl-128/s_fmal.c
+++ b/sysdeps/ieee754/ldbl-128/s_fmal.c
@@ -25,6 +25,7 @@
 #include <math_private.h>
 #include <libm-alias-ldouble.h>
 #include <tininess.h>
+#include <math-use-builtins.h>
 
 /* This implementation uses rounding to odd to avoid problems with
    double rounding.  See a paper by Boldo and Melquiond:
@@ -33,6 +34,9 @@
 _Float128
 __fmal (_Float128 x, _Float128 y, _Float128 z)
 {
+#if USE_FMAL_BUILTIN
+  return __builtin_fmal (x);
+#else
   union ieee854_long_double u, v, w;
   int adjust = 0;
   u.d = x;
@@ -296,5 +300,6 @@ __fmal (_Float128 x, _Float128 y, _Float128 z)
       v.ieee.mantissa3 |= j;
       return v.d * L(0x1p-228);
     }
+#endif /* ! USE_FMAL_BUILTIN  */
 }
 libm_alias_ldouble (__fma, fma)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 4/5] aarch/fpu: use generic sqrt, fma functions
  2020-05-30  2:00 [PATCH 0/5] use gcc builtins for sqrt and fma functions Vineet Gupta via Libc-alpha
                   ` (2 preceding siblings ...)
  2020-05-30  2:00 ` [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions Vineet Gupta via Libc-alpha
@ 2020-05-30  2:00 ` Vineet Gupta via Libc-alpha
  2020-06-01 16:38   ` Adhemerval Zanella via Libc-alpha
  2020-05-30  2:00 ` [PATCH 5/5] powerpc/fpu: use generic " Vineet Gupta via Libc-alpha
  4 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:00 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/aarch64/fpu/e_sqrt.c            | 27 ----------
 sysdeps/aarch64/fpu/e_sqrtf.c           | 27 ----------
 sysdeps/aarch64/fpu/math-use-builtins.h | 70 +++++++++++++++++++++++++
 sysdeps/aarch64/fpu/s_fma.c             | 28 ----------
 sysdeps/aarch64/fpu/s_fmaf.c            | 28 ----------
 5 files changed, 70 insertions(+), 110 deletions(-)
 delete mode 100644 sysdeps/aarch64/fpu/e_sqrt.c
 delete mode 100644 sysdeps/aarch64/fpu/e_sqrtf.c
 create mode 100644 sysdeps/aarch64/fpu/math-use-builtins.h
 delete mode 100644 sysdeps/aarch64/fpu/s_fma.c
 delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c

diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c
deleted file mode 100644
index abb67ef7b061..000000000000
--- a/sysdeps/aarch64/fpu/e_sqrt.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Square root of floating point number.
-   Copyright (C) 2015-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math_private.h>
-#include <libm-alias-finite.h>
-
-double
-__ieee754_sqrt (double d)
-{
-  return __builtin_sqrt (d);
-}
-libm_alias_finite (__ieee754_sqrt, __sqrt)
diff --git a/sysdeps/aarch64/fpu/e_sqrtf.c b/sysdeps/aarch64/fpu/e_sqrtf.c
deleted file mode 100644
index 13008a4f45d6..000000000000
--- a/sysdeps/aarch64/fpu/e_sqrtf.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Single-precision floating point square root.
-   Copyright (C) 2015-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math_private.h>
-#include <libm-alias-finite.h>
-
-float
-__ieee754_sqrtf (float s)
-{
-  return __builtin_sqrtf (s);
-}
-libm_alias_finite (__ieee754_sqrtf, __sqrtf)
diff --git a/sysdeps/aarch64/fpu/math-use-builtins.h b/sysdeps/aarch64/fpu/math-use-builtins.h
new file mode 100644
index 000000000000..52f0a0dad6dd
--- /dev/null
+++ b/sysdeps/aarch64/fpu/math-use-builtins.h
@@ -0,0 +1,70 @@
+/* Using math gcc builtins instead of generic implementation.  aarch64 version.
+   Copyright (C) 2019-2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef MATH_USE_BUILTINS_H
+#define MATH_USE_BUILTINS_H	1
+
+#include <features.h> /* For __GNUC_PREREQ.  */
+
+/* Define these macros to 1 to use __builtin_xyz instead of the
+   generic implementation.  */
+#define USE_NEARBYINT_BUILTIN 0
+#define USE_NEARBYINTF_BUILTIN 0
+#define USE_NEARBYINTL_BUILTIN 0
+#define USE_NEARBYINTF128_BUILTIN 0
+
+#define USE_RINT_BUILTIN 0
+#define USE_RINTF_BUILTIN 0
+#define USE_RINTL_BUILTIN 0
+#define USE_RINTF128_BUILTIN 0
+
+#define USE_FLOOR_BUILTIN 0
+#define USE_FLOORF_BUILTIN 0
+#define USE_FLOORL_BUILTIN 0
+#define USE_FLOORF128_BUILTIN 0
+
+#define USE_CEIL_BUILTIN 0
+#define USE_CEILF_BUILTIN 0
+#define USE_CEILL_BUILTIN 0
+#define USE_CEILF128_BUILTIN 0
+
+#define USE_TRUNC_BUILTIN 0
+#define USE_TRUNCF_BUILTIN 0
+#define USE_TRUNCL_BUILTIN 0
+#define USE_TRUNCF128_BUILTIN 0
+
+#define USE_ROUND_BUILTIN 0
+#define USE_ROUNDF_BUILTIN 0
+#define USE_ROUNDL_BUILTIN 0
+#define USE_ROUNDF128_BUILTIN 0
+
+#define USE_COPYSIGNL_BUILTIN 1
+#if __GNUC_PREREQ (7, 0)
+# define USE_COPYSIGNF128_BUILTIN 1
+#else
+# define USE_COPYSIGNF128_BUILTIN 0
+#endif
+
+#define USE_SQRT_BUILTIN 1
+#define USE_SQRTF_BUILTIN 1
+
+#define USE_FMA_BUILTIN 1
+#define USE_FMAF_BUILTIN 1
+#define USE_FMAL_BUILTIN 0
+
+#endif /* math-use-builtins.h */
diff --git a/sysdeps/aarch64/fpu/s_fma.c b/sysdeps/aarch64/fpu/s_fma.c
deleted file mode 100644
index 48bb40482dc9..000000000000
--- a/sysdeps/aarch64/fpu/s_fma.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
-
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <libm-alias-double.h>
-
-double
-__fma (double x, double y, double z)
-{
-  return __builtin_fma (x, y, z);
-}
-
-libm_alias_double (__fma, fma)
diff --git a/sysdeps/aarch64/fpu/s_fmaf.c b/sysdeps/aarch64/fpu/s_fmaf.c
deleted file mode 100644
index 544f32e27aec..000000000000
--- a/sysdeps/aarch64/fpu/s_fmaf.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 2011-2020 Free Software Foundation, Inc.
-
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <libm-alias-float.h>
-
-float
-__fmaf (float x, float y, float z)
-{
-  return __builtin_fmaf (x, y, z);
-}
-
-libm_alias_float (__fma, fma)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 5/5] powerpc/fpu: use generic fma functions
  2020-05-30  2:00 [PATCH 0/5] use gcc builtins for sqrt and fma functions Vineet Gupta via Libc-alpha
                   ` (3 preceding siblings ...)
  2020-05-30  2:00 ` [PATCH 4/5] aarch/fpu: use generic sqrt, " Vineet Gupta via Libc-alpha
@ 2020-05-30  2:00 ` Vineet Gupta via Libc-alpha
  2020-06-01 17:10   ` Adhemerval Zanella via Libc-alpha
  4 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:00 UTC (permalink / raw)
  To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

---
 sysdeps/powerpc/fpu/math-use-builtins.h | 70 +++++++++++++++++++++++++
 sysdeps/powerpc/fpu/s_fma.c             | 27 ----------
 sysdeps/powerpc/fpu/s_fmaf.c            | 27 ----------
 3 files changed, 70 insertions(+), 54 deletions(-)
 create mode 100644 sysdeps/powerpc/fpu/math-use-builtins.h
 delete mode 100644 sysdeps/powerpc/fpu/s_fma.c
 delete mode 100644 sysdeps/powerpc/fpu/s_fmaf.c

diff --git a/sysdeps/powerpc/fpu/math-use-builtins.h b/sysdeps/powerpc/fpu/math-use-builtins.h
new file mode 100644
index 000000000000..9bdde66cf1de
--- /dev/null
+++ b/sysdeps/powerpc/fpu/math-use-builtins.h
@@ -0,0 +1,70 @@
+/* Using math gcc builtins instead of generic implementation.  PowerPC version.
+   Copyright (C) 2019-2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef MATH_USE_BUILTINS_H
+#define MATH_USE_BUILTINS_H	1
+
+#include <features.h> /* For __GNUC_PREREQ.  */
+
+/* Define these macros to 1 to use __builtin_xyz instead of the
+   generic implementation.  */
+#define USE_NEARBYINT_BUILTIN 0
+#define USE_NEARBYINTF_BUILTIN 0
+#define USE_NEARBYINTL_BUILTIN 0
+#define USE_NEARBYINTF128_BUILTIN 0
+
+#define USE_RINT_BUILTIN 0
+#define USE_RINTF_BUILTIN 0
+#define USE_RINTL_BUILTIN 0
+#define USE_RINTF128_BUILTIN 0
+
+#define USE_FLOOR_BUILTIN 0
+#define USE_FLOORF_BUILTIN 0
+#define USE_FLOORL_BUILTIN 0
+#define USE_FLOORF128_BUILTIN 0
+
+#define USE_CEIL_BUILTIN 0
+#define USE_CEILF_BUILTIN 0
+#define USE_CEILL_BUILTIN 0
+#define USE_CEILF128_BUILTIN 0
+
+#define USE_TRUNC_BUILTIN 0
+#define USE_TRUNCF_BUILTIN 0
+#define USE_TRUNCL_BUILTIN 0
+#define USE_TRUNCF128_BUILTIN 0
+
+#define USE_ROUND_BUILTIN 0
+#define USE_ROUNDF_BUILTIN 0
+#define USE_ROUNDL_BUILTIN 0
+#define USE_ROUNDF128_BUILTIN 0
+
+#define USE_COPYSIGNL_BUILTIN 1
+#if __GNUC_PREREQ (7, 0)
+# define USE_COPYSIGNF128_BUILTIN 1
+#else
+# define USE_COPYSIGNF128_BUILTIN 0
+#endif
+
+#define USE_SQRT_BUILTIN 0
+#define USE_SQRTF_BUILTIN 0
+
+#define USE_FMA_BUILTIN 1
+#define USE_FMAF_BUILTIN 1
+#define USE_FMAL_BUILTIN 0
+
+#endif /* math-use-builtins.h */
diff --git a/sysdeps/powerpc/fpu/s_fma.c b/sysdeps/powerpc/fpu/s_fma.c
deleted file mode 100644
index 9ddd13253485..000000000000
--- a/sysdeps/powerpc/fpu/s_fma.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Compute x * y + z as ternary operation.  PowerPC version.
-   Copyright (C) 2019-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <libm-alias-double.h>
-
-double
-__fma (double x, double y, double z)
-{
-  return __builtin_fma (x, y, z);
-}
-libm_alias_double (__fma, fma)
diff --git a/sysdeps/powerpc/fpu/s_fmaf.c b/sysdeps/powerpc/fpu/s_fmaf.c
deleted file mode 100644
index d132c20125bb..000000000000
--- a/sysdeps/powerpc/fpu/s_fmaf.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Compute x * y + z as ternary operation.  PowerPC version.
-   Copyright (C) 2019-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <libm-alias-float.h>
-
-float
-__fmaf (float x, float y, float z)
-{
-  return __builtin_fmaf (x, y, z);
-}
-libm_alias_float (__fma, fma)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 1/5] ARC/dl-runtime helper macros
  2020-05-30  2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta via Libc-alpha
@ 2020-05-30  2:17   ` Vineet Gupta via Libc-alpha
  0 siblings, 0 replies; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-05-30  2:17 UTC (permalink / raw)
  To: libc-alpha@sourceware.org; +Cc: linux-snps-arc@lists.infradead.org

On 5/29/20 7:00 PM, Vineet Gupta wrote:
> This is purely for review purposes to attest the interface defined
> in prior patch
> ---
>  sysdeps/arc/dl-runtime.h | 42 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 42 insertions(+)
>  create mode 100644 sysdeps/arc/dl-runtime.h

Oops this was from a different series, please ignore. Don't post patches on friday
evening :-(

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-05-30  2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta via Libc-alpha
@ 2020-06-01 14:13   ` Adhemerval Zanella via Libc-alpha
  2020-06-01 14:42     ` Adhemerval Zanella via Libc-alpha
  2020-06-01 14:18   ` Florian Weimer
  1 sibling, 1 reply; 20+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-06-01 14:13 UTC (permalink / raw)
  To: Vineet Gupta, libc-alpha; +Cc: linux-snps-arc



On 29/05/2020 23:00, Vineet Gupta wrote:

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/generic/math-use-builtins.h | 3 +++
>  sysdeps/ieee754/dbl-64/e_sqrt.c     | 6 ++++++
>  sysdeps/ieee754/flt-32/e_sqrtf.c    | 6 ++++++
>  3 files changed, 15 insertions(+)
> 
> diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h
> index 8a39ef58bc95..fc724c824a17 100644
> --- a/sysdeps/generic/math-use-builtins.h
> +++ b/sysdeps/generic/math-use-builtins.h
> @@ -60,4 +60,7 @@
>  # define USE_COPYSIGNF128_BUILTIN 0
>  #endif
>  
> +#define USE_SQRT_BUILTIN 0
> +#define USE_SQRTF_BUILTIN 0
> +
>  #endif /* math-use-builtins.h */

Ok.

> diff --git a/sysdeps/ieee754/dbl-64/e_sqrt.c b/sysdeps/ieee754/dbl-64/e_sqrt.c
> index d42a1a4eb6e9..518a8ae5cdaf 100644
> --- a/sysdeps/ieee754/dbl-64/e_sqrt.c
> +++ b/sysdeps/ieee754/dbl-64/e_sqrt.c
> @@ -41,6 +41,7 @@
>  #include <math_private.h>
>  #include <fenv_private.h>
>  #include <libm-alias-finite.h>
> +#include <math-use-builtins.h>
>  
>  /*********************************************************************/
>  /* An ultimate sqrt routine. Given an IEEE double machine number x   */

Ok.

> @@ -50,6 +51,10 @@
>  double
>  __ieee754_sqrt (double x)
>  {
> +#if USE_SQRT_BUILTIN
> +  return __builtin_sqrt (x);
> +#else
> +  /* Use generic implementation.  */
>    static const double
>      rt0 = 9.99999999859990725855365213134618E-01,
>      rt1 = 4.99999999495955425917856814202739E-01,
> @@ -138,6 +143,7 @@ __ieee754_sqrt (double x)
>  	return (x - x) / (x - x); /* sqrt(-ve)=sNaN */
>        return 0x1p-256 * __ieee754_sqrt (x * 0x1p512);
>      }
> +#endif /* ! USE_SQRT_BUILTIN  */
>  }
>  #ifndef __ieee754_sqrt
>  libm_alias_finite (__ieee754_sqrt, __sqrt)

Ok.

> diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c
> index b339444301aa..68fc80e1e1ee 100644
> --- a/sysdeps/ieee754/flt-32/e_sqrtf.c
> +++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
> @@ -16,12 +16,17 @@
>  #include <math.h>
>  #include <math_private.h>
>  #include <libm-alias-finite.h>
> +#include <math-use-builtins.h>
>  
>  static	const float	one	= 1.0, tiny=1.0e-30;
>  
>  float
>  __ieee754_sqrtf(float x)
>  {
> +#if USE_SQRTF_BUILTIN
> +	return __builtin_sqrtf (x);
> +#else
> +	/* Use generic implementation.  */
>  	float z;
>  	int32_t sign = (int)0x80000000;
>  	int32_t ix,s,q,m,t,i;
> @@ -83,6 +88,7 @@ __ieee754_sqrtf(float x)
>  	ix += (m <<23);
>  	SET_FLOAT_WORD(z,ix);
>  	return z;
> +#endif /* ! USE_SQRTF_BUILTIN  */
>  }
>  #ifndef __ieee754_sqrtf
>  libm_alias_finite (__ieee754_sqrtf, __sqrtf)
> 

Ok.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-05-30  2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta via Libc-alpha
  2020-06-01 14:13   ` Adhemerval Zanella via Libc-alpha
@ 2020-06-01 14:18   ` Florian Weimer
  2020-06-01 18:12     ` Vineet Gupta via Libc-alpha
  1 sibling, 1 reply; 20+ messages in thread
From: Florian Weimer @ 2020-06-01 14:18 UTC (permalink / raw)
  To: Vineet Gupta via Libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

There's a typo in commit subject: “prvoide”.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions
  2020-05-30  2:00 ` [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions Vineet Gupta via Libc-alpha
@ 2020-06-01 14:20   ` Adhemerval Zanella via Libc-alpha
  2020-06-01 16:13   ` Florian Weimer
  1 sibling, 0 replies; 20+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-06-01 14:20 UTC (permalink / raw)
  To: Vineet Gupta, libc-alpha; +Cc: linux-snps-arc



On 29/05/2020 23:00, Vineet Gupta wrote:

Ok with the fixes below.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/generic/math-use-builtins.h         | 4 ++++
>  sysdeps/ieee754/dbl-64/s_fma.c              | 6 ++++++
>  sysdeps/ieee754/dbl-64/s_fmaf.c             | 6 ++++++
>  sysdeps/ieee754/float128/float128_private.h | 2 ++
>  sysdeps/ieee754/ldbl-128/s_fmal.c           | 5 +++++
>  5 files changed, 23 insertions(+)
> 
> diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h
> index fc724c824a17..9e96807a3370 100644
> --- a/sysdeps/generic/math-use-builtins.h
> +++ b/sysdeps/generic/math-use-builtins.h
> @@ -63,4 +63,8 @@
>  #define USE_SQRT_BUILTIN 0
>  #define USE_SQRTF_BUILTIN 0
>  
> +#define USE_FMA_BUILTIN 0
> +#define USE_FMAF_BUILTIN 0
> +#define USE_FMAL_BUILTIN 0
> +
>  #endif /* math-use-builtins.h */

For float128 support it should also contain a:

  #define USE_FMAF128_BUILTIN

> diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
> index 876df6e78bdc..1e4b2da1511d 100644
> --- a/sysdeps/ieee754/dbl-64/s_fma.c
> +++ b/sysdeps/ieee754/dbl-64/s_fma.c
> @@ -25,6 +25,7 @@
>  #include <fenv_private.h>
>  #include <libm-alias-double.h>
>  #include <tininess.h>
> +#include <math-use-builtins.h>
>  
>  /* This implementation uses rounding to odd to avoid problems with
>     double rounding.  See a paper by Boldo and Melquiond:
> @@ -33,6 +34,10 @@
>  double
>  __fma (double x, double y, double z)
>  {
> +#if USE_FMA_BUILTIN
> +  return __builtin_fma (x);

It should be:

  return __builtin_fma (x, y, z);

Same for float and long double variant.

> +#else
> +  /* Use generic implementation.  */
>    union ieee754_double u, v, w;
>    int adjust = 0;
>    u.d = x;
> @@ -292,6 +297,7 @@ __fma (double x, double y, double z)
>        v.ieee.mantissa1 |= j;
>        return v.d * 0x1p-108;
>      }
> +#endif /* ! USE_FMA_BUILTIN  */
>  }
>  #ifndef __fma
>  libm_alias_double (__fma, fma)> diff --git a/sysdeps/ieee754/dbl-64/s_fmaf.c b/sysdeps/ieee754/dbl-64/s_fmaf.c
> index 57329d0a87fe..f15b18262124 100644
> --- a/sysdeps/ieee754/dbl-64/s_fmaf.c
> +++ b/sysdeps/ieee754/dbl-64/s_fmaf.c
> @@ -23,6 +23,7 @@
>  #include <math-barriers.h>
>  #include <fenv_private.h>
>  #include <libm-alias-float.h>
> +#include <math-use-builtins.h>
>  
>  /* This implementation relies on double being more than twice as
>     precise as float and uses rounding to odd in order to avoid problems
> @@ -33,6 +34,10 @@
>  float
>  __fmaf (float x, float y, float z)
>  {
> +#if USE_FMAF_BUILTIN
> +  return __builtin_fmaf (x);
> +#else
> +  /* Use generic implementation.  */
>    fenv_t env;
>  
>    /* Multiplication is always exact.  */
> @@ -60,6 +65,7 @@ __fmaf (float x, float y, float z)
>  
>    /* And finally truncation with round to nearest.  */
>    return (float) u.d;
> +#endif /* ! USE_FMAF_BUILTIN  */
>  }
>  #ifndef __fmaf
>  libm_alias_float (__fma, fma)> diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h
> index f97463d9dc1b..a697a7c29038 100644
> --- a/sysdeps/ieee754/float128/float128_private.h
> +++ b/sysdeps/ieee754/float128/float128_private.h
> @@ -154,6 +154,8 @@
>  #define USE_ROUNDL_BUILTIN USE_ROUNDF128_BUILTIN
>  #undef USE_COPYSIGNL_BUILTIN
>  #define USE_COPYSIGNL_BUILTIN USE_COPYSIGNF128_BUILTIN
> +#undef USE_FMAL_BUILTIN
> +#define USE_FMAL_BUILTIN USE_FMA128_BUILTIN
>  
>  /* IEEE function renames.  */
>  #define __ieee754_acoshl __ieee754_acoshf128

Ok.

> diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c b/sysdeps/ieee754/ldbl-128/s_fmal.c
> index 7475015bcec6..1403734a5aeb 100644
> --- a/sysdeps/ieee754/ldbl-128/s_fmal.c
> +++ b/sysdeps/ieee754/ldbl-128/s_fmal.c
> @@ -25,6 +25,7 @@
>  #include <math_private.h>
>  #include <libm-alias-ldouble.h>
>  #include <tininess.h>
> +#include <math-use-builtins.h>
>  
>  /* This implementation uses rounding to odd to avoid problems with
>     double rounding.  See a paper by Boldo and Melquiond:
> @@ -33,6 +34,9 @@
>  _Float128
>  __fmal (_Float128 x, _Float128 y, _Float128 z)
>  {
> +#if USE_FMAL_BUILTIN
> +  return __builtin_fmal (x);
> +#else
>    union ieee854_long_double u, v, w;
>    int adjust = 0;
>    u.d = x;
> @@ -296,5 +300,6 @@ __fmal (_Float128 x, _Float128 y, _Float128 z)
>        v.ieee.mantissa3 |= j;
>        return v.d * L(0x1p-228);
>      }
> +#endif /* ! USE_FMAL_BUILTIN  */
>  }
>  libm_alias_ldouble (__fma, fma)
> 

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-06-01 14:13   ` Adhemerval Zanella via Libc-alpha
@ 2020-06-01 14:42     ` Adhemerval Zanella via Libc-alpha
  2020-06-01 18:12       ` Vineet Gupta via Libc-alpha
  0 siblings, 1 reply; 20+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-06-01 14:42 UTC (permalink / raw)
  To: Vineet Gupta, libc-alpha; +Cc: linux-snps-arc



On 01/06/2020 11:13, Adhemerval Zanella wrote:
> 
> 
> On 29/05/2020 23:00, Vineet Gupta wrote:
> 
> LGTM, thanks.
> 
> Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
> 
>> ---
>>  sysdeps/generic/math-use-builtins.h | 3 +++
>>  sysdeps/ieee754/dbl-64/e_sqrt.c     | 6 ++++++
>>  sysdeps/ieee754/flt-32/e_sqrtf.c    | 6 ++++++
>>  3 files changed, 15 insertions(+)
>>
>> diff --git a/sysdeps/generic/math-use-builtins.h b/sysdeps/generic/math-use-builtins.h
>> index 8a39ef58bc95..fc724c824a17 100644
>> --- a/sysdeps/generic/math-use-builtins.h
>> +++ b/sysdeps/generic/math-use-builtins.h
>> @@ -60,4 +60,7 @@
>>  # define USE_COPYSIGNF128_BUILTIN 0
>>  #endif
>>  
>> +#define USE_SQRT_BUILTIN 0
>> +#define USE_SQRTF_BUILTIN 0
>> +
>>  #endif /* math-use-builtins.h */
> 
> Ok.
> 
>> diff --git a/sysdeps/ieee754/dbl-64/e_sqrt.c b/sysdeps/ieee754/dbl-64/e_sqrt.c
>> index d42a1a4eb6e9..518a8ae5cdaf 100644
>> --- a/sysdeps/ieee754/dbl-64/e_sqrt.c
>> +++ b/sysdeps/ieee754/dbl-64/e_sqrt.c
>> @@ -41,6 +41,7 @@
>>  #include <math_private.h>
>>  #include <fenv_private.h>
>>  #include <libm-alias-finite.h>
>> +#include <math-use-builtins.h>
>>  
>>  /*********************************************************************/
>>  /* An ultimate sqrt routine. Given an IEEE double machine number x   */
> 
> Ok.
> 
>> @@ -50,6 +51,10 @@
>>  double
>>  __ieee754_sqrt (double x)
>>  {
>> +#if USE_SQRT_BUILTIN
>> +  return __builtin_sqrt (x);
>> +#else
>> +  /* Use generic implementation.  */
>>    static const double
>>      rt0 = 9.99999999859990725855365213134618E-01,
>>      rt1 = 4.99999999495955425917856814202739E-01,
>> @@ -138,6 +143,7 @@ __ieee754_sqrt (double x)
>>  	return (x - x) / (x - x); /* sqrt(-ve)=sNaN */
>>        return 0x1p-256 * __ieee754_sqrt (x * 0x1p512);
>>      }
>> +#endif /* ! USE_SQRT_BUILTIN  */
>>  }
>>  #ifndef __ieee754_sqrt
>>  libm_alias_finite (__ieee754_sqrt, __sqrt)
> 
> Ok.
> 
>> diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c
>> index b339444301aa..68fc80e1e1ee 100644
>> --- a/sysdeps/ieee754/flt-32/e_sqrtf.c
>> +++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
>> @@ -16,12 +16,17 @@
>>  #include <math.h>
>>  #include <math_private.h>
>>  #include <libm-alias-finite.h>
>> +#include <math-use-builtins.h>
>>  
>>  static	const float	one	= 1.0, tiny=1.0e-30;

You will need to move this definitions inside the !USE_SQRTF_BUILTIN
to avoid defined by not used warnings.  Current practice is to just
open code the constants and let compiler optimize the constant pool:

diff --git a/sysdeps/ieee754/flt-32/e_sqrtf.c b/sysdeps/ieee754/flt-32/e_sqrtf.c
index 68fc80e..d85a041 100644
--- a/sysdeps/ieee754/flt-32/e_sqrtf.c
+++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
@@ -18,8 +18,6 @@
 #include <libm-alias-finite.h>
 #include <math-use-builtins.h>
 
-static const float     one     = 1.0, tiny=1.0e-30;
-
 float
 __ieee754_sqrtf(float x)
 {
@@ -75,10 +73,10 @@ __ieee754_sqrtf(float x)
 
     /* use floating add to find out rounding direction */
        if(ix!=0) {
-           z = one-tiny; /* trigger inexact flag */
-           if (z>=one) {
-               z = one+tiny;
-               if (z>one)
+           z = 0x1p0 - 0x1.4484cp-100; /* trigger inexact flag */
+           if (z >= 0x1p0) {
+               z = 0x1p0 + 0x1.4484cp-100;
+               if (z > 0x1p0)
                    q += 2;
                else
                    q += (q&1);

>>  
>>  float
>>  __ieee754_sqrtf(float x)
>>  {
>> +#if USE_SQRTF_BUILTIN
>> +	return __builtin_sqrtf (x);
>> +#else
>> +	/* Use generic implementation.  */
>>  	float z;
>>  	int32_t sign = (int)0x80000000;
>>  	int32_t ix,s,q,m,t,i;
>> @@ -83,6 +88,7 @@ __ieee754_sqrtf(float x)
>>  	ix += (m <<23);
>>  	SET_FLOAT_WORD(z,ix);
>>  	return z;
>> +#endif /* ! USE_SQRTF_BUILTIN  */
>>  }
>>  #ifndef __ieee754_sqrtf
>>  libm_alias_finite (__ieee754_sqrtf, __sqrtf)
>>
> 
> Ok.
> 

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions
  2020-05-30  2:00 ` [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions Vineet Gupta via Libc-alpha
  2020-06-01 14:20   ` Adhemerval Zanella via Libc-alpha
@ 2020-06-01 16:13   ` Florian Weimer
  1 sibling, 0 replies; 20+ messages in thread
From: Florian Weimer @ 2020-06-01 16:13 UTC (permalink / raw)
  To: Vineet Gupta via Libc-alpha; +Cc: Vineet Gupta, linux-snps-arc

The commit subject contains a typo (“prvoide”).

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 4/5] aarch/fpu: use generic sqrt, fma functions
  2020-05-30  2:00 ` [PATCH 4/5] aarch/fpu: use generic sqrt, " Vineet Gupta via Libc-alpha
@ 2020-06-01 16:38   ` Adhemerval Zanella via Libc-alpha
  2020-06-01 21:44     ` Vineet Gupta via Libc-alpha
  0 siblings, 1 reply; 20+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-06-01 16:38 UTC (permalink / raw)
  To: Vineet Gupta, libc-alpha; +Cc: linux-snps-arc



On 29/05/2020 23:00, Vineet Gupta wrote:
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

LGTM, some comments below.

> ---
>  sysdeps/aarch64/fpu/e_sqrt.c            | 27 ----------
>  sysdeps/aarch64/fpu/e_sqrtf.c           | 27 ----------
>  sysdeps/aarch64/fpu/math-use-builtins.h | 70 +++++++++++++++++++++++++
>  sysdeps/aarch64/fpu/s_fma.c             | 28 ----------
>  sysdeps/aarch64/fpu/s_fmaf.c            | 28 ----------
>  5 files changed, 70 insertions(+), 110 deletions(-)
>  delete mode 100644 sysdeps/aarch64/fpu/e_sqrt.c
>  delete mode 100644 sysdeps/aarch64/fpu/e_sqrtf.c
>  create mode 100644 sysdeps/aarch64/fpu/math-use-builtins.h
>  delete mode 100644 sysdeps/aarch64/fpu/s_fma.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c
> 
> diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c
> deleted file mode 100644
> index abb67ef7b061..000000000000
> --- a/sysdeps/aarch64/fpu/e_sqrt.c
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/* Square root of floating point number.
> -   Copyright (C) 2015-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <math_private.h>
> -#include <libm-alias-finite.h>
> -
> -double
> -__ieee754_sqrt (double d)
> -{
> -  return __builtin_sqrt (d);
> -}
> -libm_alias_finite (__ieee754_sqrt, __sqrt)

Ok.

> diff --git a/sysdeps/aarch64/fpu/e_sqrtf.c b/sysdeps/aarch64/fpu/e_sqrtf.c
> deleted file mode 100644
> index 13008a4f45d6..000000000000
> --- a/sysdeps/aarch64/fpu/e_sqrtf.c
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/* Single-precision floating point square root.
> -   Copyright (C) 2015-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <math_private.h>
> -#include <libm-alias-finite.h>
> -
> -float
> -__ieee754_sqrtf (float s)
> -{
> -  return __builtin_sqrtf (s);
> -}
> -libm_alias_finite (__ieee754_sqrtf, __sqrtf)

Ok.

> diff --git a/sysdeps/aarch64/fpu/math-use-builtins.h b/sysdeps/aarch64/fpu/math-use-builtins.h
> new file mode 100644
> index 000000000000..52f0a0dad6dd
> --- /dev/null
> +++ b/sysdeps/aarch64/fpu/math-use-builtins.h
> @@ -0,0 +1,70 @@
> +/* Using math gcc builtins instead of generic implementation.  aarch64 version.
> +   Copyright (C) 2019-2020 Free Software Foundation, Inc.

I think it should be just 2020 here.

> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef MATH_USE_BUILTINS_H
> +#define MATH_USE_BUILTINS_H	1
> +
> +#include <features.h> /* For __GNUC_PREREQ.  */
> +
> +/* Define these macros to 1 to use __builtin_xyz instead of the
> +   generic implementation.  */
> +#define USE_NEARBYINT_BUILTIN 0
> +#define USE_NEARBYINTF_BUILTIN 0
> +#define USE_NEARBYINTL_BUILTIN 0
> +#define USE_NEARBYINTF128_BUILTIN 0

Since we are adding this new file for aarch64, we could also enable it fo
nearbyint{f} and remove sysdeps/aarch64/fpu/s_nearbyint{f}.c as well.

> +
> +#define USE_RINT_BUILTIN 0
> +#define USE_RINTF_BUILTIN 0
> +#define USE_RINTL_BUILTIN 0
> +#define USE_RINTF128_BUILTIN 0

Ditto.

> +
> +#define USE_FLOOR_BUILTIN 0
> +#define USE_FLOORF_BUILTIN 0
> +#define USE_FLOORL_BUILTIN 0
> +#define USE_FLOORF128_BUILTIN 0

Ditto.

> +
> +#define USE_CEIL_BUILTIN 0
> +#define USE_CEILF_BUILTIN 0
> +#define USE_CEILL_BUILTIN 0
> +#define USE_CEILF128_BUILTIN 0

Ditto.

> +
> +#define USE_TRUNC_BUILTIN 0
> +#define USE_TRUNCF_BUILTIN 0
> +#define USE_TRUNCL_BUILTIN 0
> +#define USE_TRUNCF128_BUILTIN 0

Ditto.

> +
> +#define USE_ROUND_BUILTIN 0
> +#define USE_ROUNDF_BUILTIN 0
> +#define USE_ROUNDL_BUILTIN 0
> +#define USE_ROUNDF128_BUILTIN 0

Ditto.

> +
> +#define USE_COPYSIGNL_BUILTIN 1
> +#if __GNUC_PREREQ (7, 0)
> +# define USE_COPYSIGNF128_BUILTIN 1
> +#else
> +# define USE_COPYSIGNF128_BUILTIN 0
> +#endif
> +

It should be described in commit message as well (although generated
instruction are essentially the same).

> +#define USE_SQRT_BUILTIN 1
> +#define USE_SQRTF_BUILTIN 1
> +
> +#define USE_FMA_BUILTIN 1
> +#define USE_FMAF_BUILTIN 1
> +#define USE_FMAL_BUILTIN 0
> +
> +#endif /* math-use-builtins.h */

Ok.

> diff --git a/sysdeps/aarch64/fpu/s_fma.c b/sysdeps/aarch64/fpu/s_fma.c
> deleted file mode 100644
> index 48bb40482dc9..000000000000
> --- a/sysdeps/aarch64/fpu/s_fma.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
> -
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <math.h>
> -#include <libm-alias-double.h>
> -
> -double
> -__fma (double x, double y, double z)
> -{
> -  return __builtin_fma (x, y, z);
> -}
> -
> -libm_alias_double (__fma, fma)

Ok.

> diff --git a/sysdeps/aarch64/fpu/s_fmaf.c b/sysdeps/aarch64/fpu/s_fmaf.c
> deleted file mode 100644
> index 544f32e27aec..000000000000
> --- a/sysdeps/aarch64/fpu/s_fmaf.c
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -/* Copyright (C) 2011-2020 Free Software Foundation, Inc.
> -
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public License as
> -   published by the Free Software Foundation; either version 2.1 of the
> -   License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <math.h>
> -#include <libm-alias-float.h>
> -
> -float
> -__fmaf (float x, float y, float z)
> -{
> -  return __builtin_fmaf (x, y, z);
> -}
> -
> -libm_alias_float (__fma, fma)
> 

Ok.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/5] powerpc/fpu: use generic fma functions
  2020-05-30  2:00 ` [PATCH 5/5] powerpc/fpu: use generic " Vineet Gupta via Libc-alpha
@ 2020-06-01 17:10   ` Adhemerval Zanella via Libc-alpha
  0 siblings, 0 replies; 20+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-06-01 17:10 UTC (permalink / raw)
  To: Vineet Gupta, libc-alpha; +Cc: linux-snps-arc



On 29/05/2020 23:00, Vineet Gupta wrote:

LGTM, thanks.

This new addition, along with the aarch64 one, makes me wonder if
it would be better to decompose the USE_* defined in multiple files
so the architecture adds only the required ones (instead of copy/paste
the whole file with the generic ones).

Also for powerpc, maybe a future cleanup would to move the logic
to select the builtin to math-use-builtins.h. Something like:

  #ifdef _ARCH_PWR5X
  #  define USE_FLOOR_BUILTIN 1
  #  define USE_FLOORF_BUILTIN 1
  #else
  #  define USE_FLOOR_BUILTIN 0
  #  define USE_FLOORF_BUILTIN 0
  #endif
  #define USE_FLOORL_BUILTIN 0
  #define USE_FLOORF128_BUILTIN 0

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/powerpc/fpu/math-use-builtins.h | 70 +++++++++++++++++++++++++
>  sysdeps/powerpc/fpu/s_fma.c             | 27 ----------
>  sysdeps/powerpc/fpu/s_fmaf.c            | 27 ----------
>  3 files changed, 70 insertions(+), 54 deletions(-)
>  create mode 100644 sysdeps/powerpc/fpu/math-use-builtins.h
>  delete mode 100644 sysdeps/powerpc/fpu/s_fma.c
>  delete mode 100644 sysdeps/powerpc/fpu/s_fmaf.c
> 
> diff --git a/sysdeps/powerpc/fpu/math-use-builtins.h b/sysdeps/powerpc/fpu/math-use-builtins.h
> new file mode 100644
> index 000000000000..9bdde66cf1de
> --- /dev/null
> +++ b/sysdeps/powerpc/fpu/math-use-builtins.h
> @@ -0,0 +1,70 @@
> +/* Using math gcc builtins instead of generic implementation.  PowerPC version.
> +   Copyright (C) 2019-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef MATH_USE_BUILTINS_H
> +#define MATH_USE_BUILTINS_H	1
> +
> +#include <features.h> /* For __GNUC_PREREQ.  */
> +
> +/* Define these macros to 1 to use __builtin_xyz instead of the
> +   generic implementation.  */
> +#define USE_NEARBYINT_BUILTIN 0
> +#define USE_NEARBYINTF_BUILTIN 0
> +#define USE_NEARBYINTL_BUILTIN 0
> +#define USE_NEARBYINTF128_BUILTIN 0
> +
> +#define USE_RINT_BUILTIN 0
> +#define USE_RINTF_BUILTIN 0
> +#define USE_RINTL_BUILTIN 0
> +#define USE_RINTF128_BUILTIN 0
> +
> +#define USE_FLOOR_BUILTIN 0
> +#define USE_FLOORF_BUILTIN 0
> +#define USE_FLOORL_BUILTIN 0
> +#define USE_FLOORF128_BUILTIN 0
> +
> +#define USE_CEIL_BUILTIN 0
> +#define USE_CEILF_BUILTIN 0
> +#define USE_CEILL_BUILTIN 0
> +#define USE_CEILF128_BUILTIN 0
> +
> +#define USE_TRUNC_BUILTIN 0
> +#define USE_TRUNCF_BUILTIN 0
> +#define USE_TRUNCL_BUILTIN 0
> +#define USE_TRUNCF128_BUILTIN 0
> +
> +#define USE_ROUND_BUILTIN 0
> +#define USE_ROUNDF_BUILTIN 0
> +#define USE_ROUNDL_BUILTIN 0
> +#define USE_ROUNDF128_BUILTIN 0
> +
> +#define USE_COPYSIGNL_BUILTIN 1
> +#if __GNUC_PREREQ (7, 0)
> +# define USE_COPYSIGNF128_BUILTIN 1
> +#else
> +# define USE_COPYSIGNF128_BUILTIN 0
> +#endif
> +
> +#define USE_SQRT_BUILTIN 0
> +#define USE_SQRTF_BUILTIN 0
> +
> +#define USE_FMA_BUILTIN 1
> +#define USE_FMAF_BUILTIN 1
> +#define USE_FMAL_BUILTIN 0
> +
> +#endif /* math-use-builtins.h */

Ok.

> diff --git a/sysdeps/powerpc/fpu/s_fma.c b/sysdeps/powerpc/fpu/s_fma.c
> deleted file mode 100644
> index 9ddd13253485..000000000000
> --- a/sysdeps/powerpc/fpu/s_fma.c
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/* Compute x * y + z as ternary operation.  PowerPC version.
> -   Copyright (C) 2019-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <sysdep.h>
> -#include <libm-alias-double.h>
> -
> -double
> -__fma (double x, double y, double z)
> -{
> -  return __builtin_fma (x, y, z);
> -}
> -libm_alias_double (__fma, fma)

Ok.

> diff --git a/sysdeps/powerpc/fpu/s_fmaf.c b/sysdeps/powerpc/fpu/s_fmaf.c
> deleted file mode 100644
> index d132c20125bb..000000000000
> --- a/sysdeps/powerpc/fpu/s_fmaf.c
> +++ /dev/null
> @@ -1,27 +0,0 @@
> -/* Compute x * y + z as ternary operation.  PowerPC version.
> -   Copyright (C) 2019-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   The GNU C Library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 2.1 of the License, or (at your option) any later version.
> -
> -   The GNU C Library is distributed in the hope that it will be useful,
> -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> -   Lesser General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public
> -   License along with the GNU C Library; if not, see
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#include <sysdep.h>
> -#include <libm-alias-float.h>
> -
> -float
> -__fmaf (float x, float y, float z)
> -{
> -  return __builtin_fmaf (x, y, z);
> -}
> -libm_alias_float (__fma, fma)
> 

Ok.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-06-01 14:42     ` Adhemerval Zanella via Libc-alpha
@ 2020-06-01 18:12       ` Vineet Gupta via Libc-alpha
  2020-06-01 18:32         ` Adhemerval Zanella via Libc-alpha
  0 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-06-01 18:12 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha@sourceware.org
  Cc: linux-snps-arc@lists.infradead.org

On 6/1/20 7:42 AM, Adhemerval Zanella via Libc-alpha wrote:
> You will need to move this definitions inside the !USE_SQRTF_BUILTIN
> to avoid defined by not used warnings.  Current practice is to just
> open code the constants and let compiler optimize the constant pool:

Won't it be better to keep the const variable and trust the compiler to subsume it
instead of open coding in multiple places. Makes it more readable ?

-Vineet

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-06-01 14:18   ` Florian Weimer
@ 2020-06-01 18:12     ` Vineet Gupta via Libc-alpha
  0 siblings, 0 replies; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-06-01 18:12 UTC (permalink / raw)
  To: Florian Weimer
  Cc: linux-snps-arc@lists.infradead.org, libc-alpha @ sourceware . org

On 6/1/20 7:18 AM, Florian Weimer wrote:
> There's a typo in commit subject: “prvoide”.

oops sorry, fixed now.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions
  2020-06-01 18:12       ` Vineet Gupta via Libc-alpha
@ 2020-06-01 18:32         ` Adhemerval Zanella via Libc-alpha
  0 siblings, 0 replies; 20+ messages in thread
From: Adhemerval Zanella via Libc-alpha @ 2020-06-01 18:32 UTC (permalink / raw)
  To: Vineet Gupta, libc-alpha@sourceware.org
  Cc: linux-snps-arc@lists.infradead.org



On 01/06/2020 15:12, Vineet Gupta wrote:
> On 6/1/20 7:42 AM, Adhemerval Zanella via Libc-alpha wrote:
>> You will need to move this definitions inside the !USE_SQRTF_BUILTIN
>> to avoid defined by not used warnings.  Current practice is to just
>> open code the constants and let compiler optimize the constant pool:
> 
> Won't it be better to keep the const variable and trust the compiler to subsume it
> instead of open coding in multiple places. Makes it more readable ?

I don't have a strong preference, it is just the recent math optimizations
use the constant directly in the hex format instead of trying to factoring
them out.

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 4/5] aarch/fpu: use generic sqrt, fma functions
  2020-06-01 16:38   ` Adhemerval Zanella via Libc-alpha
@ 2020-06-01 21:44     ` Vineet Gupta via Libc-alpha
  2020-06-01 22:08       ` Ramana Radhakrishnan via Libc-alpha
  2020-06-02 18:12       ` Joseph Myers
  0 siblings, 2 replies; 20+ messages in thread
From: Vineet Gupta via Libc-alpha @ 2020-06-01 21:44 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha@sourceware.org
  Cc: linux-snps-arc@lists.infradead.org

On 6/1/20 9:38 AM, Adhemerval Zanella via Libc-alpha wrote:
> 
> 
> On 29/05/2020 23:00, Vineet Gupta wrote:
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> 
> LGTM, some comments below.
> 
>> -#include <math_private.h>
>> -#include <libm-alias-finite.h>
>> -
>> -double
>> -__ieee754_sqrt (double d)
>> -{
>> -  return __builtin_sqrt (d);
>> -}
>> -libm_alias_finite (__ieee754_sqrt, __sqrt)
> 
> Ok.

How is one to test aarch64 port with hard-float. build-many-glibc doesn't have a
hf variant and hacking one didn't do the right thing either.

>> diff --git a/sysdeps/aarch64/fpu/math-use-builtins.h b/sysdeps/aarch64/fpu/math-use-builtins.h
>> new file mode 100644
>> index 000000000000..52f0a0dad6dd
>> --- /dev/null
>> +++ b/sysdeps/aarch64/fpu/math-use-builtins.h
>> @@ -0,0 +1,70 @@
>> +/* Using math gcc builtins instead of generic implementation.  aarch64 version.
>> +   Copyright (C) 2019-2020 Free Software Foundation, Inc.
> 
> I think it should be just 2020 here.

Fixed.

>> +
>> +/* Define these macros to 1 to use __builtin_xyz instead of the
>> +   generic implementation.  */
>> +#define USE_NEARBYINT_BUILTIN 0
>> +#define USE_NEARBYINTF_BUILTIN 0
>> +#define USE_NEARBYINTL_BUILTIN 0
>> +#define USE_NEARBYINTF128_BUILTIN 0
> 
> Since we are adding this new file for aarch64, we could also enable it fo
> nearbyint{f} and remove sysdeps/aarch64/fpu/s_nearbyint{f}.c as well.

OK, but only

+#define USE_NEARBYINT_BUILTIN 1
+#define USE_NEARBYINTF_BUILTIN 1

The other 2 are not defined currently. If they are, then I prefer they be enabled
as a separate commit for bisectability.


>> +#define USE_RINT_BUILTIN 0
>> +#define USE_RINTF_BUILTIN 0
>> +#define USE_RINTL_BUILTIN 0
>> +#define USE_RINTF128_BUILTIN 0
> 
> Ditto.

OK and again only RINT and RINTF.
Also I don't understand one thing. Both the generic and aarch64 code have this

float
__rintf (float x)
...
libm_alias_float (__rint, rint)

The alias arg 1 __rint seems to lack suffix 'f' ?


>> +
>> +#define USE_FLOOR_BUILTIN 0
>> +#define USE_FLOORF_BUILTIN 0

Again FLOOR, FLOORF only

>> +#define USE_FLOORL_BUILTIN 0
>> +#define USE_FLOORF128_BUILTIN 0
> 
> Ditto.

Ditto


>> +
>> +#define USE_CEIL_BUILTIN 0
>> +#define USE_CEILF_BUILTIN 0
>> +#define USE_CEILL_BUILTIN 0
>> +#define USE_CEILF128_BUILTIN 0
> 
> Ditto.

Ditto

> 
>> +
>> +#define USE_TRUNC_BUILTIN 0
>> +#define USE_TRUNCF_BUILTIN 0
>> +#define USE_TRUNCL_BUILTIN 0
>> +#define USE_TRUNCF128_BUILTIN 0
> 
> Ditto.

Ditto

>> +
>> +#define USE_ROUND_BUILTIN 0
>> +#define USE_ROUNDF_BUILTIN 0
>> +#define USE_ROUNDL_BUILTIN 0
>> +#define USE_ROUNDF128_BUILTIN 0
> 
> Ditto.

Ditto

>> +
>> +#define USE_COPYSIGNL_BUILTIN 1
>> +#if __GNUC_PREREQ (7, 0)
>> +# define USE_COPYSIGNF128_BUILTIN 1
>> +#else
>> +# define USE_COPYSIGNF128_BUILTIN 0
>> +#endif
>> +
> 
> It should be described in commit message as well (although generated
> instruction are essentially the same).

Well this one is even more special as it was already using the same code, except
that the math-use-builtins.h was generic vs. aarch64 specific one.

Thx
-Vineet

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 4/5] aarch/fpu: use generic sqrt, fma functions
  2020-06-01 21:44     ` Vineet Gupta via Libc-alpha
@ 2020-06-01 22:08       ` Ramana Radhakrishnan via Libc-alpha
  2020-06-02 18:12       ` Joseph Myers
  1 sibling, 0 replies; 20+ messages in thread
From: Ramana Radhakrishnan via Libc-alpha @ 2020-06-01 22:08 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: linux-snps-arc@lists.infradead.org, libc-alpha@sourceware.org

On Mon, Jun 1, 2020 at 10:45 PM Vineet Gupta via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>
> On 6/1/20 9:38 AM, Adhemerval Zanella via Libc-alpha wrote:
> >
> >
> > On 29/05/2020 23:00, Vineet Gupta wrote:
> >> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> >
> > LGTM, some comments below.
> >
> >> -#include <math_private.h>
> >> -#include <libm-alias-finite.h>
> >> -
> >> -double
> >> -__ieee754_sqrt (double d)
> >> -{
> >> -  return __builtin_sqrt (d);
> >> -}
> >> -libm_alias_finite (__ieee754_sqrt, __sqrt)
> >
> > Ok.
>
> How is one to test aarch64 port with hard-float. build-many-glibc doesn't have a
> hf variant and hacking one didn't do the right thing either.

AArch64 is hard-float by default : there is no soft-float variant.

regards
Ramana

>
> >> diff --git a/sysdeps/aarch64/fpu/math-use-builtins.h b/sysdeps/aarch64/fpu/math-use-builtins.h
> >> new file mode 100644
> >> index 000000000000..52f0a0dad6dd
> >> --- /dev/null
> >> +++ b/sysdeps/aarch64/fpu/math-use-builtins.h
> >> @@ -0,0 +1,70 @@
> >> +/* Using math gcc builtins instead of generic implementation.  aarch64 version.
> >> +   Copyright (C) 2019-2020 Free Software Foundation, Inc.
> >
> > I think it should be just 2020 here.
>
> Fixed.
>
> >> +
> >> +/* Define these macros to 1 to use __builtin_xyz instead of the
> >> +   generic implementation.  */
> >> +#define USE_NEARBYINT_BUILTIN 0
> >> +#define USE_NEARBYINTF_BUILTIN 0
> >> +#define USE_NEARBYINTL_BUILTIN 0
> >> +#define USE_NEARBYINTF128_BUILTIN 0
> >
> > Since we are adding this new file for aarch64, we could also enable it fo
> > nearbyint{f} and remove sysdeps/aarch64/fpu/s_nearbyint{f}.c as well.
>
> OK, but only
>
> +#define USE_NEARBYINT_BUILTIN 1
> +#define USE_NEARBYINTF_BUILTIN 1
>
> The other 2 are not defined currently. If they are, then I prefer they be enabled
> as a separate commit for bisectability.
>
>
> >> +#define USE_RINT_BUILTIN 0
> >> +#define USE_RINTF_BUILTIN 0
> >> +#define USE_RINTL_BUILTIN 0
> >> +#define USE_RINTF128_BUILTIN 0
> >
> > Ditto.
>
> OK and again only RINT and RINTF.
> Also I don't understand one thing. Both the generic and aarch64 code have this
>
> float
> __rintf (float x)
> ...
> libm_alias_float (__rint, rint)
>
> The alias arg 1 __rint seems to lack suffix 'f' ?
>
>
> >> +
> >> +#define USE_FLOOR_BUILTIN 0
> >> +#define USE_FLOORF_BUILTIN 0
>
> Again FLOOR, FLOORF only
>
> >> +#define USE_FLOORL_BUILTIN 0
> >> +#define USE_FLOORF128_BUILTIN 0
> >
> > Ditto.
>
> Ditto
>
>
> >> +
> >> +#define USE_CEIL_BUILTIN 0
> >> +#define USE_CEILF_BUILTIN 0
> >> +#define USE_CEILL_BUILTIN 0
> >> +#define USE_CEILF128_BUILTIN 0
> >
> > Ditto.
>
> Ditto
>
> >
> >> +
> >> +#define USE_TRUNC_BUILTIN 0
> >> +#define USE_TRUNCF_BUILTIN 0
> >> +#define USE_TRUNCL_BUILTIN 0
> >> +#define USE_TRUNCF128_BUILTIN 0
> >
> > Ditto.
>
> Ditto
>
> >> +
> >> +#define USE_ROUND_BUILTIN 0
> >> +#define USE_ROUNDF_BUILTIN 0
> >> +#define USE_ROUNDL_BUILTIN 0
> >> +#define USE_ROUNDF128_BUILTIN 0
> >
> > Ditto.
>
> Ditto
>
> >> +
> >> +#define USE_COPYSIGNL_BUILTIN 1
> >> +#if __GNUC_PREREQ (7, 0)
> >> +# define USE_COPYSIGNF128_BUILTIN 1
> >> +#else
> >> +# define USE_COPYSIGNF128_BUILTIN 0
> >> +#endif
> >> +
> >
> > It should be described in commit message as well (although generated
> > instruction are essentially the same).
>
> Well this one is even more special as it was already using the same code, except
> that the math-use-builtins.h was generic vs. aarch64 specific one.
>
> Thx
> -Vineet

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 4/5] aarch/fpu: use generic sqrt, fma functions
  2020-06-01 21:44     ` Vineet Gupta via Libc-alpha
  2020-06-01 22:08       ` Ramana Radhakrishnan via Libc-alpha
@ 2020-06-02 18:12       ` Joseph Myers
  1 sibling, 0 replies; 20+ messages in thread
From: Joseph Myers @ 2020-06-02 18:12 UTC (permalink / raw)
  To: Vineet Gupta
  Cc: linux-snps-arc@lists.infradead.org, libc-alpha@sourceware.org

On Mon, 1 Jun 2020, Vineet Gupta via Libc-alpha wrote:

> Also I don't understand one thing. Both the generic and aarch64 code have this
> 
> float
> __rintf (float x)
> ...
> libm_alias_float (__rint, rint)
> 
> The alias arg 1 __rint seems to lack suffix 'f' ?

Please see the comments in sysdeps/generic/libm-alias-float.h.  The 
arguments are *unsuffixed* names.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2020-06-02 18:12 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-30  2:00 [PATCH 0/5] use gcc builtins for sqrt and fma functions Vineet Gupta via Libc-alpha
2020-05-30  2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta via Libc-alpha
2020-05-30  2:17   ` Vineet Gupta via Libc-alpha
2020-05-30  2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta via Libc-alpha
2020-06-01 14:13   ` Adhemerval Zanella via Libc-alpha
2020-06-01 14:42     ` Adhemerval Zanella via Libc-alpha
2020-06-01 18:12       ` Vineet Gupta via Libc-alpha
2020-06-01 18:32         ` Adhemerval Zanella via Libc-alpha
2020-06-01 14:18   ` Florian Weimer
2020-06-01 18:12     ` Vineet Gupta via Libc-alpha
2020-05-30  2:00 ` [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions Vineet Gupta via Libc-alpha
2020-06-01 14:20   ` Adhemerval Zanella via Libc-alpha
2020-06-01 16:13   ` Florian Weimer
2020-05-30  2:00 ` [PATCH 4/5] aarch/fpu: use generic sqrt, " Vineet Gupta via Libc-alpha
2020-06-01 16:38   ` Adhemerval Zanella via Libc-alpha
2020-06-01 21:44     ` Vineet Gupta via Libc-alpha
2020-06-01 22:08       ` Ramana Radhakrishnan via Libc-alpha
2020-06-02 18:12       ` Joseph Myers
2020-05-30  2:00 ` [PATCH 5/5] powerpc/fpu: use generic " Vineet Gupta via Libc-alpha
2020-06-01 17:10   ` Adhemerval Zanella via Libc-alpha

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).