Re: [PATCH v2 1/4] iee754: provide gcc builtins based generic sqrt functions

2020-06-02 Thread Vineet Gupta
On 6/2/20 5:51 AM, Stefan Liebler via Libc-alpha wrote:
> On 6/2/20 2:35 AM, Vineet Gupta via Libc-alpha wrote:
>> Reviewed-by: Adhemerval Zanella  
>> ---
>>  sysdeps/generic/math-use-builtins.h |  3 +++
>>  sysdeps/ieee754/dbl-64/e_sqrt.c |  6 ++
>>  sysdeps/ieee754/flt-32/e_sqrtf.c| 16 ++--
>>  3 files changed, 19 insertions(+), 6 deletions(-)
>>
>> 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 */
> Please also update the current architecture specific math-use-builtins.h
> file: sysdeps/s390/fpu/math-use-builtins.h

Fixed. I should have added s390 to my list of arches to test.

Thx for taking a look.

-Vineet


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2 2/4] iee754: provide gcc builtins based generic fma functions

2020-06-02 Thread Vineet Gupta
On 6/2/20 5:51 AM, Stefan Liebler via Libc-alpha wrote:
>  #endif /* math-use-builtins.h */
> Please also update the current architecture specific math-use-builtins.h
> file: sysdeps/s390/fpu/math-use-builtins.h
> Otherwise it will break build on s390x.

Done.

>> diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
>> index 876df6e78bdc..9dc5b132b9ee 100644
>> --- a/sysdeps/ieee754/dbl-64/s_fma.c
>> +++ b/sysdeps/ieee754/dbl-64/s_fma.c
>> @@ -25,6 +25,7 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>>
>>  /* 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, y, z);
>
> Architectures which have support for ldbl-128 will use the file
> sysdeps/ieee754/ldbl-128/s_fma.c instead of
> sysdeps/ieee754/dbl-64/s_fma.c. Should this file also be adjusted in
> order to use the builtin if USE_FMA_BUILTIN is set to one?

Right.

I used commit f82996f815 "Use GCC builtins for round functions if desired" as
starting point for my change. And seems it was not an ideal reference :-) as 
round
has far fewer instances than fma. Indeed fma is present in ldbl-128 and dbl-64 
so
needs updating in both.

But just to be sure s390 is currently not using the newly introduced builtins so
I'll keep them as follows.

#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
#define USE_FMAF128_BUILTIN 0

-Vineet
___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2 1/4] iee754: provide gcc builtins based generic sqrt functions

2020-06-02 Thread Adhemerval Zanella



On 01/06/2020 21:35, Vineet Gupta wrote:
> Reviewed-by: Adhemerval Zanella  

LGTM with the small nit below and the s390 fix pointed by Stefan.

Reviewed-by: Adhemerval Zanella 

> ---
>  sysdeps/generic/math-use-builtins.h |  3 +++
>  sysdeps/ieee754/dbl-64/e_sqrt.c |  6 ++
>  sysdeps/ieee754/flt-32/e_sqrtf.c| 16 ++--
>  3 files changed, 19 insertions(+), 6 deletions(-)
> 
> 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 
>  #include 
>  #include 
> +#include 
>  
>  /*/
>  /* 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.859990725855365213134618E-01,
>  rt1 = 4.495955425917856814202739E-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..d85a04162983 100644
> --- a/sysdeps/ieee754/flt-32/e_sqrtf.c
> +++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
> @@ -16,12 +16,15 @@
>  #include 
>  #include 
>  #include 
> -
> -static   const float one = 1.0, tiny=1.0e-30;
> +#include 
>  
>  float
>  __ieee754_sqrtf(float x)
>  {
> +#if USE_SQRTF_BUILTIN
> + return __builtin_sqrtf (x);
> +#else
> + /* Use generic implementation.  */
>   float z;
>   int32_t sign = (int)0x8000;
>   int32_t ix,s,q,m,t,i;
> @@ -70,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 */

Period and double space before '*/'.

> + if (z >= 0x1p0) {
> + z = 0x1p0 + 0x1.4484cp-100;
> + if (z > 0x1p0)
>   q += 2;
>   else
>   q += (q&1);
> @@ -83,6 +86,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.

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2 2/4] iee754: provide gcc builtins based generic fma functions

2020-06-02 Thread Adhemerval Zanella



On 01/06/2020 21:35, Vineet Gupta wrote:
> ---
>  sysdeps/generic/math-use-builtins.h | 5 +
>  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, 24 insertions(+)


LGTM with s390 fix pointed by Stefan.

Reviewed-by: Adhemerval Zanella 

> 
> diff --git a/sysdeps/generic/math-use-builtins.h 
> b/sysdeps/generic/math-use-builtins.h
> index fc724c824a17..cf25ed8a2138 100644
> --- a/sysdeps/generic/math-use-builtins.h
> +++ b/sysdeps/generic/math-use-builtins.h
> @@ -63,4 +63,9 @@
>  #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
> +#define USE_FMAF128_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..9dc5b132b9ee 100644
> --- a/sysdeps/ieee754/dbl-64/s_fma.c
> +++ b/sysdeps/ieee754/dbl-64/s_fma.c
> @@ -25,6 +25,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  /* 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, y, z);
> +#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..93b8660d5242 100644
> --- a/sysdeps/ieee754/dbl-64/s_fmaf.c
> +++ b/sysdeps/ieee754/dbl-64/s_fmaf.c
> @@ -23,6 +23,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  /* 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, y, z);
> +#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..ab6fc9f3c9cf 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_FMAF128_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..a610499e47c7 100644
> --- a/sysdeps/ieee754/ldbl-128/s_fmal.c
> +++ b/sysdeps/ieee754/ldbl-128/s_fmal.c
> @@ -25,6 +25,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  /* 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, y, z);
> +#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)
> 

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2 3/4] aarch/fpu: use generic builtins based math functions

2020-06-02 Thread Adhemerval Zanella



On 01/06/2020 21:35, Vineet Gupta wrote:
> introduce sysdep header math-use-builtins.h to replace aarch64
> impementations with corresponding generic ones

s/impementations/implementations and missing ':'.

> 
>  - newly inroduced generic sqrt{,f}, fma{,f}
>  - existing floor{,f}, nearbyint{,f}, rint{,f}, round{,f}, trunc{,f}
>  - Note that generic copysign was already enabled (via generic
>math-use-builtins.h) now thru sysdep header
> 
> This is supposed to be a non functional change
> Passes build-many for aarch64-linux-gnu

LGTM (just double check if the objects generated by the removed 
implementations did not changed).

Reviewed-by: Adhemerval Zanella 

> ---
>  sysdeps/aarch64/fpu/e_sqrt.c| 27 --
>  sysdeps/aarch64/fpu/e_sqrtf.c   | 27 --
>  sysdeps/aarch64/fpu/math-use-builtins.h | 71 +
>  sysdeps/aarch64/fpu/s_floor.c   | 29 --
>  sysdeps/aarch64/fpu/s_floorf.c  | 29 --
>  sysdeps/aarch64/fpu/s_fma.c | 28 --
>  sysdeps/aarch64/fpu/s_fmaf.c| 28 --
>  sysdeps/aarch64/fpu/s_nearbyint.c   | 28 --
>  sysdeps/aarch64/fpu/s_nearbyintf.c  | 28 --
>  sysdeps/aarch64/fpu/s_rint.c| 29 --
>  sysdeps/aarch64/fpu/s_rintf.c   | 29 --
>  sysdeps/aarch64/fpu/s_round.c   | 29 --
>  sysdeps/aarch64/fpu/s_roundf.c  | 29 --
>  sysdeps/aarch64/fpu/s_trunc.c   | 29 --
>  sysdeps/aarch64/fpu/s_truncf.c  | 29 --
>  15 files changed, 71 insertions(+), 398 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_floor.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_floorf.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_fma.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_nearbyint.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_nearbyintf.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_rint.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_rintf.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_round.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_roundf.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_trunc.c
>  delete mode 100644 sysdeps/aarch64/fpu/s_truncf.c
> 
> diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c
> deleted file mode 100644
> index abb67ef7b061..
> --- 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
> -   .  */
> -
> -#include 
> -#include 
> -
> -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..
> --- 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
> -   .  */
> -
> -#include 
> -#include 
> -
> -float
> -__ieee754_sqrtf (float s)
> -{
> -  return __builtin_sqrtf (s);
> -}
> -libm_alias_finite (__ieee754_sqrtf, __sqrtf)

Ok.

> diff --git a/sysdeps/aarch64/fpu/ma

Re: [PATCH v6 06/13] ARC: hardware floating point support

2020-06-02 Thread Joseph Myers
On Fri, 29 May 2020, Vineet Gupta via Libc-alpha wrote:

> Side question: what do s_ / e_ prefixes mean?
> The suffix is clear s_roundf (float), s_round (double), s_roundl (128).

I don't know what they stand for (the naming convention probably 
originates from fdlibm, or at least much of the code does), but e_* 
functions have a w_* wrapper for error handling round the __ieee754_* 
function in the e_* file (some have since eliminated the use of wrappers 
in some cases) and s_* functions have an implementation with no wrappers 
that does any required error handling itself.

-- 
Joseph S. Myers
jos...@codesourcery.com

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v6 06/13] ARC: hardware floating point support

2020-06-02 Thread Joseph Myers
On Fri, 29 May 2020, Vineet Gupta via Libc-alpha wrote:

> Something like below ?
> 
> +# define _FPU_FPSR_FWE   0x8000
> +
> -#  define _FPU_GETCW(cw) __asm__ volatile ("lr %0, [0x300]" : "=r" (cw))
> -#  define _FPU_SETCW(cw) __asm__ volatile ("sr %0, [0x300]" : : "r" (cw))
> +static inline unsigned int arc_fpu_getcw(void)
> +{
> +  unsigned int cw;

Even for a header that's not defined in any standard, as an installed 
header you should avoid names in the user's namespace that are not 
explicitly part of the API for the user to use.  That is, unless you 
actually intend the name arc_fpu_getcw to be a supported interface for 
users including , you should name it __arc_fpu_getcw, and 
you should use __cw to avoid conflicting with any user macro called sw.  
(Function definitions also need to be in GNU style - function name at the 
start of a line, space before '('.)

-- 
Joseph S. Myers
jos...@codesourcery.com

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH 4/5] aarch/fpu: use generic sqrt, fma functions

2020-06-02 Thread Joseph Myers
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
jos...@codesourcery.com

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: static inline math functions (was Re: [PATCH v6 06/13] ARC: hardware floating point support)

2020-06-02 Thread Joseph Myers
On Tue, 2 Jun 2020, Vineet Gupta via Libc-alpha wrote:

> Thi s approach seems to trip math/check-installed-headers.out
> 
> 
>  -std=c89
> In file included from ../include/fpu_control.h:2,
> from /tmp/cih_test_Nknxdp.c:8:
> ../sysdeps/arc/fpu_control.h:82:14: error: expected ';' before 'unsigned'
> 82 | static inline unsigned int arc_fpu_getcw(void)
> 
> 
> Any tips ?

Installed headers have to use __inline instead of inline to work in C90 
mode.

-- 
Joseph S. Myers
jos...@codesourcery.com

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2] ieee754/dbl-64: Reduce the scope of temporary storage variables

2020-06-02 Thread Joseph Myers
On Mon, 1 Jun 2020, Vineet Gupta via Libc-alpha wrote:

> Also as suggested by Joseph [1] used --strip and compared the libs with
> and w/o patch and their sizes are exactly same (with gcc 9).

My suggestion was to compare the *contents* of the libraries, not just 
their sizes.  Either they should be byte-for-byte identical, or if there 
are other differences (register allocation, line numbers in assertions, 
etc.) a more detailed investigation will be needed.

-- 
Joseph S. Myers
jos...@codesourcery.com

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: static inline math functions (was Re: [PATCH v6 06/13] ARC: hardware floating point support)

2020-06-02 Thread Adhemerval Zanella



On 02/06/2020 15:13, Joseph Myers wrote:
> On Tue, 2 Jun 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> Thi s approach seems to trip math/check-installed-headers.out
>>
>>
>>  -std=c89
>> In file included from ../include/fpu_control.h:2,
>> from /tmp/cih_test_Nknxdp.c:8:
>> ../sysdeps/arc/fpu_control.h:82:14: error: expected ';' before 'unsigned'
>> 82 | static inline unsigned int arc_fpu_getcw(void)
>>
>>
>> Any tips ?
> 
> Installed headers have to use __inline instead of inline to work in C90 
> mode.
> 

Do we need to export _FPU_{GET,SET}CW macros? Otherwise we remove it and
move the fp hardware control register to an internal definition?

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2 3/4] aarch/fpu: use generic builtins based math functions

2020-06-02 Thread Vineet Gupta
On 6/2/20 10:31 AM, Adhemerval Zanella via Libc-alpha wrote:
> 
> 
> On 01/06/2020 21:35, Vineet Gupta wrote:
>> introduce sysdep header math-use-builtins.h to replace aarch64
>> impementations with corresponding generic ones
> 
> s/impementations/implementations and missing ':'.

Fixed.

>>  - newly inroduced generic sqrt{,f}, fma{,f}
>>  - existing floor{,f}, nearbyint{,f}, rint{,f}, round{,f}, trunc{,f}
>>  - Note that generic copysign was already enabled (via generic
>>math-use-builtins.h) now thru sysdep header
>>
>> This is supposed to be a non functional change
>> Passes build-many for aarch64-linux-gnu
> 
> LGTM (just double check if the objects generated by the removed 
> implementations did not changed).

I will add the diff output to v3.

___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2] ieee754/dbl-64: Reduce the scope of temporary storage variables

2020-06-02 Thread Vineet Gupta
On 6/2/20 11:16 AM, Joseph Myers wrote:
> On Mon, 1 Jun 2020, Vineet Gupta via Libc-alpha wrote:
> 
>> Also as suggested by Joseph [1] used --strip and compared the libs with
>> and w/o patch and their sizes are exactly same (with gcc 9).
> 
> My suggestion was to compare the *contents* of the libraries, not just 
> their sizes.  Either they should be byte-for-byte identical, or if there 
> are other differences (register allocation, line numbers in assertions, 
> etc.) a more detailed investigation will be needed.
> 

Here's my diff of the 2 --strip builds

for i in `find . -name libm-2.31.9000.so`; do echo $i; diff $i
/SCRATCH/vgupta/gnu2/install/glibcs/$i ; echo $?; done

./aarch64-linux-gnu/lib64/libm-2.31.9000.so
0
./arm-linux-gnueabi/lib/libm-2.31.9000.so
0
./x86_64-linux-gnu/lib64/libm-2.31.9000.so
0
./arm-linux-gnueabihf/lib/libm-2.31.9000.so
0
./riscv64-linux-gnu-rv64imac-lp64/lib64/lp64/libm-2.31.9000.so
0
./riscv64-linux-gnu-rv64imafdc-lp64/lib64/lp64/libm-2.31.9000.so
0
./powerpc-linux-gnu/lib/libm-2.31.9000.so
0
./microblaze-linux-gnu/lib/libm-2.31.9000.so
0
./nios2-linux-gnu/lib/libm-2.31.9000.so
0
./hppa-linux-gnu/lib/libm-2.31.9000.so
0
./s390x-linux-gnu/lib64/libm-2.31.9000.so
0
___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 2/4] iee754: provide gcc builtins based generic fma functions

2020-06-02 Thread Vineet Gupta
Reviewed-by: Adhemerval Zanella  
---
 sysdeps/generic/math-use-builtins.h | 5 +
 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_fma.c| 5 +
 sysdeps/ieee754/ldbl-128/s_fmal.c   | 5 +
 sysdeps/s390/fpu/math-use-builtins.h| 5 +
 7 files changed, 34 insertions(+)

diff --git a/sysdeps/generic/math-use-builtins.h 
b/sysdeps/generic/math-use-builtins.h
index fc724c824a17..cf25ed8a2138 100644
--- a/sysdeps/generic/math-use-builtins.h
+++ b/sysdeps/generic/math-use-builtins.h
@@ -63,4 +63,9 @@
 #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
+#define USE_FMAF128_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..9dc5b132b9ee 100644
--- a/sysdeps/ieee754/dbl-64/s_fma.c
+++ b/sysdeps/ieee754/dbl-64/s_fma.c
@@ -25,6 +25,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* 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, y, z);
+#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..93b8660d5242 100644
--- a/sysdeps/ieee754/dbl-64/s_fmaf.c
+++ b/sysdeps/ieee754/dbl-64/s_fmaf.c
@@ -23,6 +23,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* 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, y, z);
+#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..ab6fc9f3c9cf 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_FMAF128_BUILTIN
 
 /* IEEE function renames.  */
 #define __ieee754_acoshl __ieee754_acoshf128
diff --git a/sysdeps/ieee754/ldbl-128/s_fma.c b/sysdeps/ieee754/ldbl-128/s_fma.c
index 13f8ed3b87eb..0feff0a71cd1 100644
--- a/sysdeps/ieee754/ldbl-128/s_fma.c
+++ b/sysdeps/ieee754/ldbl-128/s_fma.c
@@ -21,6 +21,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* This implementation relies on long double being more than twice as
precise as double and uses rounding to odd in order to avoid problems
@@ -31,6 +32,9 @@
 double
 __fma (double x, double y, double z)
 {
+#if USE_FMA_BUILTIN
+  return __builtin_fma (x, y, z);
+#else
   fenv_t env;
   /* Multiplication is always exact.  */
   long double temp = (long double) x * (long double) y;
@@ -50,6 +54,7 @@ __fma (double x, double y, double z)
   feupdateenv (&env);
   /* And finally truncation with round to nearest.  */
   return (double) u.d;
+#endif /* ! USE_FMA_BUILTIN  */
 }
 #ifndef __fma
 libm_alias_double (__fma, fma)
diff --git a/sysdeps/ieee754/ldbl-128/s_fmal.c 
b/sysdeps/ieee754/ldbl-128/s_fmal.c
index 7475015bcec6..a610499e47c7 100644
--- a/sysdeps/ieee754/ldbl-128/s_fmal.c
+++ b/sysdeps/ieee754/ldbl-128/s_fmal.c
@@ -25,6 +25,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* 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, y, z);
+#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)
diff --git a/sysdeps/s390/fpu/math-use-builtins.h 
b/sysdeps/s390/fpu/math-use-builtins.h
index eb87b6b0b16b..3a80f86b2e29 100644
--- a/sysdeps/s390/fpu/math-use-builtins.h
+++ b/s

[PATCH v3 4/4] powerpc/fpu: use generic fma functions

2020-06-02 Thread Vineet Gupta
Tested with build-many-glibcs for powerpc-linux-gnu

This is a non functional change and powerpc libm before/after was
byte invariant as compared below:

| cd /SCRATCH/vgupta/gnu/install-glibc-A-baseline
| for i in `find . -name libm-2.31.9000.so`; do
|   echo $i; diff $i /SCRATCH/vgupta/gnu/install-glibc-C-reduce-scope/$i ;
|   echo $?;
| done

| ./aarch64-linux-gnu/lib64/libm-2.31.9000.so
| 0
| ./arm-linux-gnueabi/lib/libm-2.31.9000.so
| 0
| ./x86_64-linux-gnu/lib64/libm-2.31.9000.so
| 0
| ./arm-linux-gnueabihf/lib/libm-2.31.9000.so
| 0
| ./riscv64-linux-gnu-rv64imac-lp64/lib64/lp64/libm-2.31.9000.so
| 0
| ./riscv64-linux-gnu-rv64imafdc-lp64/lib64/lp64/libm-2.31.9000.so
| 0
| ./powerpc-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./microblaze-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./nios2-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./hppa-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./s390x-linux-gnu/lib64/libm-2.31.9000.so
| 0

Reviewed-by: Adhemerval Zanella 

Reviewed-by: Adhemerval Zanella  
---
 sysdeps/powerpc/fpu/math-use-builtins.h | 69 +
 sysdeps/powerpc/fpu/s_fma.c | 27 --
 sysdeps/powerpc/fpu/s_fmaf.c| 27 --
 3 files changed, 69 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 ..4780934379ba
--- /dev/null
+++ b/sysdeps/powerpc/fpu/math-use-builtins.h
@@ -0,0 +1,69 @@
+/* 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
+   .  */
+
+#ifndef MATH_USE_BUILTINS_H
+#define MATH_USE_BUILTINS_H1
+
+#include  /* 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
+
+#endif
diff --git a/sysdeps/powerpc/fpu/s_fma.c b/sysdeps/powerpc/fpu/s_fma.c
deleted file mode 100644
index 9ddd13253485..
--- 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
-   .  */
-
-#include 
-#include 
-
-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

[PATCH v3 1/4] iee754: provide gcc builtins based generic sqrt functions

2020-06-02 Thread Vineet Gupta
Reviewed-by: Adhemerval Zanella  
---
 sysdeps/generic/math-use-builtins.h  |  3 +++
 sysdeps/ieee754/dbl-64/e_sqrt.c  |  6 ++
 sysdeps/ieee754/flt-32/e_sqrtf.c | 16 ++--
 sysdeps/s390/fpu/math-use-builtins.h |  3 +++
 4 files changed, 22 insertions(+), 6 deletions(-)

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 
 #include 
 #include 
+#include 
 
 /*/
 /* 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.859990725855365213134618E-01,
 rt1 = 4.495955425917856814202739E-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..177bf5dbdde2 100644
--- a/sysdeps/ieee754/flt-32/e_sqrtf.c
+++ b/sysdeps/ieee754/flt-32/e_sqrtf.c
@@ -16,12 +16,15 @@
 #include 
 #include 
 #include 
-
-static const float one = 1.0, tiny=1.0e-30;
+#include 
 
 float
 __ieee754_sqrtf(float x)
 {
+#if USE_SQRTF_BUILTIN
+   return __builtin_sqrtf (x);
+#else
+   /* Use generic implementation.  */
float z;
int32_t sign = (int)0x8000;
int32_t ix,s,q,m,t,i;
@@ -70,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);
@@ -83,6 +86,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)
diff --git a/sysdeps/s390/fpu/math-use-builtins.h 
b/sysdeps/s390/fpu/math-use-builtins.h
index db00c3a69b89..eb87b6b0b16b 100644
--- a/sysdeps/s390/fpu/math-use-builtins.h
+++ b/sysdeps/s390/fpu/math-use-builtins.h
@@ -108,4 +108,7 @@
 # define USE_COPYSIGNF128_BUILTIN 0
 #endif
 
+#define USE_SQRT_BUILTIN 0
+#define USE_SQRTF_BUILTIN 0
+
 #endif /* math-use-builtins.h */
-- 
2.20.1


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 0/4] Enable generic math code for more arches

2020-06-02 Thread Vineet Gupta
Hi,

This was suggested by Adhemerval Zanella as part of ARC hard float
review.

changes since v2:
  - Add new defines (0) to s390 too as suggested by Stephan
  - Handle USE_FMA_BUILTIN in both sysdeps/ieee754/{dbl-64,ldbl-128}/s_fma.c
  - Add diff output for all arches build tested

build-glibc-many tested for following
  aarch64-linux-gnu
  arm-linux-gnueabi
  arm-linux-gnueabihf
  hppa-linux-gnu
  x86_64-linux-gnu
  riscv64-linux-gnu-rv64imac-lp64
  riscv64-linux-gnu-rv64imafdc-lp64
  powerpc-linux-gnu
  microblaze-linux-gnu
  nios2-linux-gnu
  hppa-linux-gnu
  s390x-linux-gnu"

Thx,
-Vineet

Vineet Gupta (4):
  iee754: provide gcc builtins based generic sqrt functions
  iee754: provide gcc builtins based generic fma functions
  aarch/fpu: use generic builtins based math 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 | 71 +
 sysdeps/aarch64/fpu/s_floor.c   | 29 -
 sysdeps/aarch64/fpu/s_floorf.c  | 29 -
 sysdeps/aarch64/fpu/s_fma.c | 28 
 sysdeps/aarch64/fpu/s_fmaf.c| 28 
 sysdeps/aarch64/fpu/s_nearbyint.c   | 28 
 sysdeps/aarch64/fpu/s_nearbyintf.c  | 28 
 sysdeps/aarch64/fpu/s_rint.c| 29 -
 sysdeps/aarch64/fpu/s_rintf.c   | 29 -
 sysdeps/aarch64/fpu/s_round.c   | 29 -
 sysdeps/aarch64/fpu/s_roundf.c  | 29 -
 sysdeps/aarch64/fpu/s_trunc.c   | 29 -
 sysdeps/aarch64/fpu/s_truncf.c  | 29 -
 sysdeps/generic/math-use-builtins.h |  8 +++
 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| 16 +++--
 sysdeps/ieee754/ldbl-128/s_fma.c|  5 ++
 sysdeps/ieee754/ldbl-128/s_fmal.c   |  5 ++
 sysdeps/powerpc/fpu/math-use-builtins.h | 69 
 sysdeps/powerpc/fpu/s_fma.c | 27 
 sysdeps/powerpc/fpu/s_fmaf.c| 27 
 sysdeps/s390/fpu/math-use-builtins.h|  8 +++
 27 files changed, 196 insertions(+), 458 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_floor.c
 delete mode 100644 sysdeps/aarch64/fpu/s_floorf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_fma.c
 delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_nearbyint.c
 delete mode 100644 sysdeps/aarch64/fpu/s_nearbyintf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_rint.c
 delete mode 100644 sysdeps/aarch64/fpu/s_rintf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_round.c
 delete mode 100644 sysdeps/aarch64/fpu/s_roundf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_trunc.c
 delete mode 100644 sysdeps/aarch64/fpu/s_truncf.c
 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


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


[PATCH v3 3/4] aarch/fpu: use generic builtins based math functions

2020-06-02 Thread Vineet Gupta
introduce sysdep header math-use-builtins.h to replace aarch64
implementations with corresponding generic ones.

 - newly inroduced generic sqrt{,f}, fma{,f}
 - existing floor{,f}, nearbyint{,f}, rint{,f}, round{,f}, trunc{,f}
 - Note that generic copysign was already enabled (via generic
   math-use-builtins.h) now thru sysdep header

Tested with build-many-glibcs for aarch64-linux-gnu

This is a non functional change and aarch64 libm before/after was
byte invariant as compared below:

| cd /SCRATCH/vgupta/gnu/install-glibc-A-baseline
| for i in `find . -name libm-2.31.9000.so`; do
|   echo $i; diff $i /SCRATCH/vgupta/gnu/install-glibc-C-reduce-scope/$i ;
|   echo $?;
| done

| ./aarch64-linux-gnu/lib64/libm-2.31.9000.so
| 0
| ./arm-linux-gnueabi/lib/libm-2.31.9000.so
| 0
| ./x86_64-linux-gnu/lib64/libm-2.31.9000.so
| 0
| ./arm-linux-gnueabihf/lib/libm-2.31.9000.so
| 0
| ./riscv64-linux-gnu-rv64imac-lp64/lib64/lp64/libm-2.31.9000.so
| 0
| ./riscv64-linux-gnu-rv64imafdc-lp64/lib64/lp64/libm-2.31.9000.so
| 0
| ./powerpc-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./microblaze-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./nios2-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./hppa-linux-gnu/lib/libm-2.31.9000.so
| 0
| ./s390x-linux-gnu/lib64/libm-2.31.9000.so
| 0

Reviewed-by: Adhemerval Zanella 
---
 sysdeps/aarch64/fpu/e_sqrt.c| 27 --
 sysdeps/aarch64/fpu/e_sqrtf.c   | 27 --
 sysdeps/aarch64/fpu/math-use-builtins.h | 71 +
 sysdeps/aarch64/fpu/s_floor.c   | 29 --
 sysdeps/aarch64/fpu/s_floorf.c  | 29 --
 sysdeps/aarch64/fpu/s_fma.c | 28 --
 sysdeps/aarch64/fpu/s_fmaf.c| 28 --
 sysdeps/aarch64/fpu/s_nearbyint.c   | 28 --
 sysdeps/aarch64/fpu/s_nearbyintf.c  | 28 --
 sysdeps/aarch64/fpu/s_rint.c| 29 --
 sysdeps/aarch64/fpu/s_rintf.c   | 29 --
 sysdeps/aarch64/fpu/s_round.c   | 29 --
 sysdeps/aarch64/fpu/s_roundf.c  | 29 --
 sysdeps/aarch64/fpu/s_trunc.c   | 29 --
 sysdeps/aarch64/fpu/s_truncf.c  | 29 --
 15 files changed, 71 insertions(+), 398 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_floor.c
 delete mode 100644 sysdeps/aarch64/fpu/s_floorf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_fma.c
 delete mode 100644 sysdeps/aarch64/fpu/s_fmaf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_nearbyint.c
 delete mode 100644 sysdeps/aarch64/fpu/s_nearbyintf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_rint.c
 delete mode 100644 sysdeps/aarch64/fpu/s_rintf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_round.c
 delete mode 100644 sysdeps/aarch64/fpu/s_roundf.c
 delete mode 100644 sysdeps/aarch64/fpu/s_trunc.c
 delete mode 100644 sysdeps/aarch64/fpu/s_truncf.c

diff --git a/sysdeps/aarch64/fpu/e_sqrt.c b/sysdeps/aarch64/fpu/e_sqrt.c
deleted file mode 100644
index abb67ef7b061..
--- 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
-   .  */
-
-#include 
-#include 
-
-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..
--- 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. 

Re: [PATCH v2 2/4] iee754: provide gcc builtins based generic fma functions

2020-06-02 Thread Vineet Gupta
On 6/2/20 10:27 AM, Adhemerval Zanella via Libc-alpha wrote:
>> I used commit f82996f815 "Use GCC builtins for round functions if desired" as
>> starting point for my change. And seems it was not an ideal reference :-) as 
>> round
>> has far fewer instances than fma. Indeed fma is present in ldbl-128 and 
>> dbl-64 so
>> needs updating in both.
> I think after this set is upstream I will refactor to make each symbol and its
> variant (i.g sqrt, sqrtf, etc.) to be define on its own file.  The default
> math-use-builtins will then include each file:
> 
>   /* math-use-builtins.h  */
>   #inclde 
>   [...]
> 
> With default USE_* begin 0. This would allow to add new builtin usage without 
> require to sync with every architecture (and without breaking its build as 
> well).

OK !


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc


Re: [PATCH v2 2/4] iee754: provide gcc builtins based generic fma functions

2020-06-02 Thread Stefan Liebler
On 6/2/20 7:13 PM, Vineet Gupta wrote:
> On 6/2/20 5:51 AM, Stefan Liebler via Libc-alpha wrote:
>>  #endif /* math-use-builtins.h */
>> Please also update the current architecture specific math-use-builtins.h
>> file: sysdeps/s390/fpu/math-use-builtins.h
>> Otherwise it will break build on s390x.
> 
> Done.
> 
>>> diff --git a/sysdeps/ieee754/dbl-64/s_fma.c b/sysdeps/ieee754/dbl-64/s_fma.c
>>> index 876df6e78bdc..9dc5b132b9ee 100644
>>> --- a/sysdeps/ieee754/dbl-64/s_fma.c
>>> +++ b/sysdeps/ieee754/dbl-64/s_fma.c
>>> @@ -25,6 +25,7 @@
>>>  #include 
>>>  #include 
>>>  #include 
>>> +#include 
>>>
>>>  /* 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, y, z);
>>
>> Architectures which have support for ldbl-128 will use the file
>> sysdeps/ieee754/ldbl-128/s_fma.c instead of
>> sysdeps/ieee754/dbl-64/s_fma.c. Should this file also be adjusted in
>> order to use the builtin if USE_FMA_BUILTIN is set to one?
> 
> Right.
> 
> I used commit f82996f815 "Use GCC builtins for round functions if desired" as
> starting point for my change. And seems it was not an ideal reference :-) as 
> round
> has far fewer instances than fma. Indeed fma is present in ldbl-128 and 
> dbl-64 so
> needs updating in both.
> 
> But just to be sure s390 is currently not using the newly introduced builtins 
> so
> I'll keep them as follows.
> 
> #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
> #define USE_FMAF128_BUILTIN 0
> 
Yes. Those should be disabled for now in order to not break anything. As
soon as you've committed your patches, I'll have a look if I can
activate some of them and remove s390 specific implementations. But I
first have to check with the gcc guys, if the builtins are always
expanded correctly in various gcc versions.

Thanks.
Stefan
> -Vineet
> 


___
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc