mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-24 12:25:35 +08:00
PowerPC: Fix copysignf optimization macro
This patch fixes the __copysignf optimized macro meant to internal libm usage when used with constant value. Without the explicit cast to float, if it is used with const double value (for instance, on s_casinhf.c) double constants will be used and it may lead to precision issues in some algorithms. It fixes the following failures on PPC64/POWER7: Failure: Test: Real part of: cacos_downward (inf + 0 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_downward (inf - 0 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_downward (inf + 0.5 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_downward (inf - 0.5 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_towardzero (inf + 0 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_towardzero (inf - 0 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_towardzero (inf + 0.5 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0 Failure: Test: Real part of: cacos_towardzero (inf - 0.5 i) Result: is: 1.19209289550781250000e-07 0x1.00000000000000000000p-23 should be: 0.00000000000000000000e+00 0x0.00000000000000000000p+0
This commit is contained in:
parent
4406c41c1d
commit
e13bccd3de
@ -1,3 +1,8 @@
|
||||
2014-05-20 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/powerpc/fpu/math_private.h [__copysignf]: Fix copysign macro
|
||||
optimization when used with float constants.
|
||||
|
||||
2014-05-20 Aurelien Jarno <aurelien@aurel32.net>
|
||||
|
||||
[BZ #16915]
|
||||
|
@ -166,11 +166,13 @@ __ieee754_sqrtf (float __x)
|
||||
# ifndef __copysignf
|
||||
# define __copysignf(x, y) \
|
||||
({ float __z; \
|
||||
float __x = x; \
|
||||
float __y = y; \
|
||||
__asm __volatile ( \
|
||||
" fcpsgn %0,%1,%2\n" \
|
||||
" frsp %0,%0\n" \
|
||||
: "=f" (__z) \
|
||||
: "f" (y), "f" (x)); \
|
||||
: "f" (__y), "f" (__x));\
|
||||
__z; })
|
||||
# endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user