* [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
@ 2020-05-30 2:00 ` Vineet Gupta
2020-05-30 2:17 ` Vineet Gupta
2020-05-30 2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta
` (3 subsequent siblings)
4 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta @ 2020-05-30 2:00 UTC (permalink / raw)
To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc, Adhemerval Zanella
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
2020-05-30 2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta
@ 2020-05-30 2:00 ` Vineet Gupta
2020-06-01 14:13 ` Adhemerval Zanella
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
` (2 subsequent siblings)
4 siblings, 2 replies; 20+ messages in thread
From: Vineet Gupta @ 2020-05-30 2:00 UTC (permalink / raw)
To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc, Adhemerval Zanella
---
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply related [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
@ 2020-06-01 14:13 ` Adhemerval Zanella
2020-06-01 14:42 ` Adhemerval Zanella
2020-06-01 14:18 ` Florian Weimer
1 sibling, 1 reply; 20+ messages in thread
From: Adhemerval Zanella @ 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.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
@ 2020-06-01 14:42 ` Adhemerval Zanella
2020-06-01 18:12 ` Vineet Gupta
0 siblings, 1 reply; 20+ messages in thread
From: Adhemerval Zanella @ 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.
>
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply related [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
@ 2020-06-01 18:12 ` Vineet Gupta
2020-06-01 18:32 ` Adhemerval Zanella
0 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta @ 2020-06-01 18:12 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha; +Cc: linux-snps-arc
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
@ 2020-06-01 18:32 ` Adhemerval Zanella
0 siblings, 0 replies; 20+ messages in thread
From: Adhemerval Zanella @ 2020-06-01 18:32 UTC (permalink / raw)
To: Vineet Gupta, libc-alpha; +Cc: linux-snps-arc
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.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
2020-06-01 14:13 ` Adhemerval Zanella
@ 2020-06-01 14:18 ` Florian Weimer
2020-06-01 18:12 ` Vineet Gupta
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”.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [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
2020-05-30 2:00 ` [PATCH 1/5] ARC/dl-runtime helper macros Vineet Gupta
2020-05-30 2:00 ` [PATCH 2/5] iee754: prvoide gcc builtins based generic sqrt functions Vineet Gupta
@ 2020-05-30 2:00 ` Vineet Gupta
2020-06-01 14:20 ` Adhemerval Zanella
2020-06-01 16:13 ` Florian Weimer
2020-05-30 2:00 ` [PATCH 4/5] aarch/fpu: use generic sqrt, " Vineet Gupta
2020-05-30 2:00 ` [PATCH 5/5] powerpc/fpu: use generic " Vineet Gupta
4 siblings, 2 replies; 20+ messages in thread
From: Vineet Gupta @ 2020-05-30 2:00 UTC (permalink / raw)
To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc, Adhemerval Zanella
---
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
@ 2020-06-01 14:20 ` Adhemerval Zanella
2020-06-01 16:13 ` Florian Weimer
1 sibling, 0 replies; 20+ messages in thread
From: Adhemerval Zanella @ 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)
>
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
2020-06-01 14:20 ` Adhemerval Zanella
@ 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”).
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [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
` (2 preceding siblings ...)
2020-05-30 2:00 ` [PATCH 3/5] iee754: prvoide gcc builtins based generic fma functions Vineet Gupta
@ 2020-05-30 2:00 ` Vineet Gupta
2020-06-01 16:38 ` Adhemerval Zanella
2020-05-30 2:00 ` [PATCH 5/5] powerpc/fpu: use generic " Vineet Gupta
4 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta @ 2020-05-30 2:00 UTC (permalink / raw)
To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc, Adhemerval Zanella
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply related [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
@ 2020-06-01 16:38 ` Adhemerval Zanella
2020-06-01 21:44 ` Vineet Gupta
0 siblings, 1 reply; 20+ messages in thread
From: Adhemerval Zanella @ 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.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
@ 2020-06-01 21:44 ` Vineet Gupta
2020-06-01 22:08 ` Ramana Radhakrishnan
2020-06-02 18:12 ` Joseph Myers
0 siblings, 2 replies; 20+ messages in thread
From: Vineet Gupta @ 2020-06-01 21:44 UTC (permalink / raw)
To: Adhemerval Zanella, libc-alpha; +Cc: linux-snps-arc
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
@ 2020-06-01 22:08 ` Ramana Radhakrishnan
2020-06-02 18:12 ` Joseph Myers
1 sibling, 0 replies; 20+ messages in thread
From: Ramana Radhakrishnan @ 2020-06-01 22:08 UTC (permalink / raw)
To: Vineet Gupta
Cc: Szabolcs Nagy, linux-snps-arc, libc-alpha, Adhemerval Zanella
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ 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
2020-06-01 22:08 ` Ramana Radhakrishnan
@ 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, libc-alpha, Adhemerval Zanella
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [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
` (3 preceding siblings ...)
2020-05-30 2:00 ` [PATCH 4/5] aarch/fpu: use generic sqrt, " Vineet Gupta
@ 2020-05-30 2:00 ` Vineet Gupta
2020-06-01 17:10 ` Adhemerval Zanella
4 siblings, 1 reply; 20+ messages in thread
From: Vineet Gupta @ 2020-05-30 2:00 UTC (permalink / raw)
To: libc-alpha; +Cc: Vineet Gupta, linux-snps-arc, Adhemerval Zanella
---
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
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply related [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
@ 2020-06-01 17:10 ` Adhemerval Zanella
0 siblings, 0 replies; 20+ messages in thread
From: Adhemerval Zanella @ 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.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
^ permalink raw reply [flat|nested] 20+ messages in thread