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>, current@freebsd.org, Dimitry Andric <dim@freebsd.org>, toolchain@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>