On Wed, Mar 13, 2019 at 04:41:51PM +0100, Hans Petter Selasky wrote:
> On 3/13/19 4:16 PM, Steve Kargl wrote:
> > On Tue, Mar 12, 2019 at 07:45:41PM -0700, Steve Kargl wrote:
> >>
> >> gcc8 --version
> >> gcc8 (FreeBSD Ports Collection) 8.3.0
> >>
> >> gcc8 -fno-builtin -o z a.c -lm && ./z
> >> gcc8 -O -fno-builtin -o z a.c -lm && ./z
> >> gcc8 -O2 -fno-builtin -o z a.c -lm && ./z
> >> gcc8 -O3 -fno-builtin -o z a.c -lm && ./z
> >>
> >> Max ULP: 2.297073
> >> Count: 0           (# of ULP that exceed 21)
> >>
> > 
> > clang agrees with gcc8 if one changes ...
> > 
> >> int
> >> main(void)
> >> {
> >>     double re, im, u, ur, ui;
> >>     float complex f;
> >>     float x, y;
> > 
> > this line to "volatile float x, y".
> > 
> 
> Can you try to use:
> 
> #define sincos(x,p,q) do { \
>          *(p) = sin(x); \
>          *(q) = cos(x); \
> } while (0)
> 
> 
> Instead of libm's sincos(). Might be a bug in there.
> 

Using sin() and cos() directly as in 

/* Double precision csinh() without using C's double complex.s */
void
dp_csinh(double x, double y, double *re, double *im)
{
   double c, s;
   *re = sinh(x) * cos(y);
   *im = cosh(x) * sin(y);
}

does not change the result.  I'll also note that libm
is compiled by clang, and I do not recompile it for the
tests.  Both gcc8 and cc are using the same libm.

I've also tested clang of amd64 with the -m32, it fails
as well.

-- 
Steve
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to