Comment 3 for bug 192134

Revision history for this message
In , Petr Cervenka (grugh) wrote :

I would like to repost my previously deleted bug by (lazy IMHO)
<email address hidden>. The math sin function is at least 1000x slower on 64bit
distributions for special numbers (and carlos dosn't care about it).
I can't try it with CVS head, because I cannot connect to cvs through our firewall.
But even when I tried the latest snapshot, I couldn't build it (maybe another bug):
a - elf/dl-vdso.os
: /home/inova/projects/glibc/build/libc_pic.a
gcc -nostdlib -nostartfiles -r -o
/home/inova/projects/glibc/build/elf/librtld.map.o '-Wl,-('
/home/inova/projects/glibc/build/elf/dl-allobjs.os
/home/inova/projects/glibc/build/libc_pic.a -lgcc '-Wl,-)'
-Wl,-Map,/home/inova/projects/glibc/build/elf/librtld.mapT
/home/inova/projects/glibc/build/libc_pic.a(init-first.os):(.data+0x0): multiple
definition of `__libc_multiple_libcs'
/home/inova/projects/glibc/build/elf/dl-allobjs.os:/home/inova/projects/glibc/src/glibc-20080218/elf/rtld.c:641:
first defined here
/home/inova/projects/glibc/build/libc_pic.a(dl-addr.os): In function
`_dl_addr_inside_object':
/home/inova/projects/glibc/src/glibc-20080218/elf/dl-addr.c:158: multiple
definition of `_dl_addr_inside_object'
/home/inova/projects/glibc/build/elf/dl-allobjs.os:/home/inova/projects/glibc/src/glibc-20080218/elf/dl-open.c:700:
first defined here
collect2: ld returned 1 exit status
make[2]: *** [/home/inova/projects/glibc/build/elf/librtld.map] Error 1
make[2]: Leaving directory `/home/inova/projects/glibc/src/glibc-20080218/elf'
make[1]: *** [elf/subdir_lib] Error 2
make[1]: Leaving directory `/home/inova/projects/glibc/src/glibc-20080218'
make: *** [all] Error 2

Please, anyone with 64bit distribution and glibc CVS head, could you try the
attached example and post the time results of it? (or help me to build the
snapshot...)
Thank you

====== Original bug report ======================================
The math sin(double) function is in 64bit distribution (Kubuntu 7.10 AMD64 and
Fedora - unknown version) unreasonable slow (~400 microseconds on Atlon64 X2
4800+!!!) for some special values. In 32bit distribution is everything fine.
I captured some of those values:
0.93340582292648832662962377071381 0x3fedde75e36bb000
2.3328432680770916363144351635128 0x4002a9a9bb38add0
3.7439477503636453548097051680088 0x400df39ae0cdf500
3.9225160069792437411706487182528 0x400f615012801950
4.0711651639931289992091478779912 0x401048df854fdc20
4.7858438478542097982426639646292 0x401324b43fe92fc0
5.9840767662578002727968851104379 0x4017efb1d1df52a0

Example:
#include <math.h>
int main(int argc, char** argv) {
    volatile double value = 0.93340582292648832662962377071381;
    volatile double out;
    int i;
    for (i=0; i < 20000; i++)
        out = sin(value);
    return 0;
}