Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Sep 2012 12:34:53 +0200
From:      Tijl Coosemans <tijl@coosemans.org>
To:        Steve Kargl <sgk@troutmask.apl.washington.edu>
Cc:        Ian Lepore <freebsd@damnhippie.dyndns.org>, Brooks Davis <brooks@freebsd.org>, current@freebsd.org, Dimitry Andric <dim@freebsd.org>, toolchain@freebsd.org, Nathan Whitehorn <nwhitehorn@freebsd.org>
Subject:   Re: Clang as default compiler November 4th
Message-ID:  <505459CD.2090308@coosemans.org>
In-Reply-To: <20120915010600.GA70426@troutmask.apl.washington.edu>
References:  <20120911132410.GA87126@troutmask.apl.washington.edu> <504F4645.4070900@FreeBSD.org> <504F4A6B.4010001@coosemans.org> <504F5101.8090906@FreeBSD.org> <505101C3.70203@freebsd.org> <20120913020833.GA8255@troutmask.apl.washington.edu> <1347550332.1110.108.camel@revolution.hippie.lan> <20120913161024.GA13846@troutmask.apl.washington.edu> <20120914202319.GB5244@lor.one-eyed-alien.net> <20120915001808.GA70215@troutmask.apl.washington.edu> <20120915010600.GA70426@troutmask.apl.washington.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigE4BDDEC79567F38A12DCF386
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

On 15-09-2012 03:06, Steve Kargl wrote:
> On Fri, Sep 14, 2012 at 05:18:08PM -0700, Steve Kargl wrote:
>>
>> A third class of failure appears to be that clang emits
>> i387 fpu instructions for at least sinf and cosf instead=20
>> of calls to the library routines.  AFAIK, the library
>> routines are faster and more accurate.
>>
>=20
> Yep. Clang has problems with at least sinf on i386 FreeBSD.
>=20
> % pwd
> /usr/home/kargl/trunk/math/sine
>=20
> % make clean && make CC=3Dcc testf
> cc -o testf -O2 -pipe -static -I/usr/local/include -I../mp testf.c \
>  -L/usr/local/lib -L../mp -lsgk -lmpfr -lgmp -lm
>=20
> % ./testf -m 0 -M 1e20 -r
>  ULP Range |
> -----------+-------------------------
>  [0.0:0.6] | 1006424    (100.00%)
>  (0.6:0.7] | 0  ( 0.00%)
>  (0.7:0.8] | 0  ( 0.00%)
>  (0.8:0.9] | 0  ( 0.00%)
>  (0.9:1.0] | 0  ( 0.00%)
>  (1.0:2.0] | 0  ( 0.00%)
>  (2.0:3.0] | 0  ( 0.00%)
>  3.0 < ULP | 0  ( 0.00%)
> -----------+-------------------------
>    Count   | 1006424
>    Max ULP | 0.50084
>  Max ULP x | 53462490661259313152.000000 0x1.72f876p+65
>=20
> % make clean && make CC=3Dclang testf
> clang -o testf -O2 -pipe -static -I/usr/local/include -I../mp testf.c \=

>  -L/usr/local/lib -L../mp -lsgk -lmpfr -lgmp -lm
>=20
> % ./testf -m 0 -M 1e20 -r
>  ULP Range |
> -----------+-------------------------
>  [0.0:0.6] | 1  ( 0.00%)
>  (0.6:0.7] | 0  ( 0.00%)
>  (0.7:0.8] | 0  ( 0.00%)
>  (0.8:0.9] | 0  ( 0.00%)
>  (0.9:1.0] | 0  ( 0.00%)
>  (1.0:2.0] | 0  ( 0.00%)
>  (2.0:3.0] | 0  ( 0.00%)
>  3.0 < ULP | 999998     (100.00%)
> -----------+-------------------------
>    Count   | 999999
>    Max ULP | 1328505256679420125050194353979392.00000
>  Max ULP x | 75516780764213542912.000000 0x1.06006p+66

A ULP this big can't be because of using a built-in instead of a library
call, right? Something must be wrong with clang's implementation of the
built-in. The fcos/fsin instructions have a limited domain and return a
value unchanged if it's outside that domain. Maybe clang doesn't check
this.

This error probably also explains the precision loss in j0, because it
calls cos/sin.


--------------enigE4BDDEC79567F38A12DCF386
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)

iF4EAREIAAYFAlBUWdMACgkQfoCS2CCgtitafwD/WLfHJvjHlGOSb6KI/3sotFXq
aTwA3tCJrjNJw5ERZq0A/iQCvvE1YAysrqd04GnCIBqy8jwCbdXkzgenJtJQPN5+
=Vyd7
-----END PGP SIGNATURE-----

--------------enigE4BDDEC79567F38A12DCF386--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?505459CD.2090308>