LLVM by default turns these: case LibFunc::copysign: case LibFunc::copysignf: case LibFunc::copysignl: case LibFunc::fabs: case LibFunc::fabsf: case LibFunc::fabsl: case LibFunc::sin: case LibFunc::sinf: case LibFunc::sinl: case LibFunc::cos: case LibFunc::cosf: case LibFunc::cosl: case LibFunc::sqrt: case LibFunc::sqrtf: case LibFunc::sqrtl: case LibFunc::floor: case LibFunc::floorf: case LibFunc::floorl: case LibFunc::nearbyint: case LibFunc::nearbyintf: case LibFunc::nearbyintl: case LibFunc::ceil: case LibFunc::ceilf: case LibFunc::ceill: case LibFunc::rint: case LibFunc::rintf: case LibFunc::rintl: case LibFunc::trunc: case LibFunc::truncf: case LibFunc::truncl: case LibFunc::log2: case LibFunc::log2f: case LibFunc::log2l: case LibFunc::exp2: case LibFunc::exp2f: case LibFunc::exp2l: from lib calls to direct code (ie. instruction or sequence of). This is not a "bug" but feature ;) I am not sure what the rules for the transformation should be. Allow it only with -ffast-math ? Disallow it on i386? Really, no idea. Steve, you tested on i386? Can you test on amd64? Do you guys have any opinion what to do here? On Fri, Sep 14, 2012 at 06:06:00PM -0700, 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 > > of calls to the library routines. AFAIK, the library > > routines are faster and more accurate. > > > > Yep. Clang has problems with at least sinf on i386 FreeBSD. > > % pwd > /usr/home/kargl/trunk/math/sine > > % make clean && make CC=cc 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 > > % ./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 > > % make clean && make CC=clang 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 > > % ./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 > > -- > Steve > _______________________________________________ > freebsd-current_at_freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"Received on Sat Sep 15 2012 - 07:15:06 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:30 UTC