This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
RE: [PATCH] Remove __isinf_ns
- From: "Wilco Dijkstra" <wdijkstr at arm dot com>
- To: 'Ondřej Bílka' <neleai at seznam dot cz>
- Cc: "GNU C Library" <libc-alpha at sourceware dot org>
- Date: Thu, 9 Jul 2015 17:40:21 +0100
- Subject: RE: [PATCH] Remove __isinf_ns
- Authentication-results: sourceware.org; auth=none
- References: <000e01d0a758$4dd24190$e976c4b0$ at com> <20150709152133 dot GC18030 at domone>
> Ondřej Bílka wrote:
> On Mon, Jun 15, 2015 at 11:44:48AM +0100, Wilco Dijkstra wrote:
> > Remove all uses and definition of the internal function __isinf_ns(l/f) as there is no
> benefit in
> > having it when isinf gets inlined in math.h (I'll post that as a separate patch).
> >
> > GLIBC builds and passes math tests on AArch64. OK for commit?
> >
> Almost ok.
>
> > diff --git a/math/divtc3.c b/math/divtc3.c
> > index bfd9b3f..c0dee8e 100644
> > --- a/math/divtc3.c
> > +++ b/math/divtc3.c
> > @@ -54,19 +54,19 @@ __divtc3 (long double a, long double b, long double c, long double d)
> > x = __copysignl (INFINITY, c) * a;
> > y = __copysignl (INFINITY, c) * b;
> > }
> > - else if ((__isinf_nsl (a) || __isinf_nsl (b))
> > + else if ((isinf (a) || isinf (b))
> > && isfinite (c) && isfinite (d))
> > {
> > - a = __copysignl (__isinf_nsl (a) ? 1 : 0, a);
> > - b = __copysignl (__isinf_nsl (b) ? 1 : 0, b);
> > + a = __copysignl (isinf (a) ? 1 : 0, a);
> > + b = __copysignl (isinf (b) ? 1 : 0, b);
> > x = INFINITY * (a * c + b * d);
> > y = INFINITY * (b * c - a * d);
> > }
> > - else if ((__isinf_nsl (c) || __isinf_nsl (d))
> > + else if ((isinf (c) || isinf (d))
> > && isfinite (a) && isfinite (b))
> > {
> > - c = __copysignl (__isinf_nsl (c) ? 1 : 0, c);
> > - d = __copysignl (__isinf_nsl (d) ? 1 : 0, d);
> > + c = __copysignl (isinf (c) ? 1 : 0, c);
> > + d = __copysignl (isinf (d) ? 1 : 0, d);
> > x = 0.0 * (a * c + b * d);
> > y = 0.0 * (b * c - a * d);
> > }
>
> These patterns are unnecessary as with libc they could be written as
>
> c = isinf (c);
>
> with libc isinf.
That's not exactly equivalent due to signed zeroes.
Wilco