mirror of git://sourceware.org/git/glibc.git
Better DLA_FMS
It's better to use __builtin_fma if it works. Use it for gcc 4.6 and higher. Move the x86-64 dla.h to the correct place.
This commit is contained in:
parent
485683c35f
commit
202c9deb15
|
|
@ -1,7 +1,9 @@
|
||||||
2011-10-24 Ulrich Drepper <drepper@gmail.com>
|
2011-10-24 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
* sysdeps/x86_64/dla.h (DLA_FMS): Some compilers fail to inline
|
* sysdeps/x86_64/dla.h: Move to ...
|
||||||
__builtin_fma in some situations. Have to use an asm.
|
* sysdeps/x86_64/fpu/dla.h: ...here.
|
||||||
|
(DLA_FMS): Some compilers fail to inline __builtin_fma in some
|
||||||
|
situations. Use __builtin_fma only for gcc 4.6 and up.
|
||||||
|
|
||||||
* config.make.in: Add have-mfma4 entry.
|
* config.make.in: Add have-mfma4 entry.
|
||||||
* configure.in: Substitute libc_cv_cc_fma4.
|
* configure.in: Substitute libc_cv_cc_fma4.
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,17 @@
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
#ifdef __FMA4__
|
#ifdef __FMA4__
|
||||||
# define DLA_FMS(x,y,z) \
|
# if __GNUC_PREREQ (4, 6)
|
||||||
|
# define DLA_FMS(x,y,z) \
|
||||||
|
__builtin_fma (x, y, -(z))
|
||||||
|
# else
|
||||||
|
# define DLA_FMS(x,y,z) \
|
||||||
({ double __z; \
|
({ double __z; \
|
||||||
asm ("vfmsubsd %3, %2, %1, %0" \
|
asm ("vfmsubsd %3, %2, %1, %0" \
|
||||||
: "=x" (__z) \
|
: "=x" (__z) \
|
||||||
: "x" ((double) (x)), "xm" ((double) (y)) , "x" ((double) (z))); \
|
: "x" ((double) (x)), "xm" ((double) (y)) , "x" ((double) (z))); \
|
||||||
__z; })
|
__z; })
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "sysdeps/ieee754/dbl-64/dla.h"
|
#include "sysdeps/ieee754/dbl-64/dla.h"
|
||||||
Loading…
Reference in New Issue