PowerPC: Fix for POWER7 sinf/cosf

This patch fixes some sinf/cosf calculations that generated unexpected
underflows exceptions.
This commit is contained in:
Adhemerval Zanella 2012-06-01 10:10:18 -03:00
parent ebc64a18c0
commit 73a68f94d6
3 changed files with 11 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2012-06-01 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
* sysdeps/powerpc/fpu/k_cosf.c: Fix underflow generation.
* sysdeps/powerpc/fpu/k_sinf.c: Likewise.
2012-05-31 H.J. Lu <hongjiu.lu@intel.com>
[BZ #14117]

View File

@ -18,6 +18,7 @@
not, see <http://www.gnu.org/licenses/>. */
#include <math.h>
#include <fenv.h>
#include <math_private.h>
static const float twom27 = 7.4505806e-09;
@ -40,8 +41,8 @@ __kernel_cosf (float x, float y)
ix = __builtin_fabsf (x);
if (ix < twom27)
{ /* |x| < 2**-27 */
if (x == 0.0)
return one;
__feraiseexcept (FE_INEXACT);
return one;
}
z = x * x;
r = z * (C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * C6)))));

View File

@ -18,6 +18,7 @@
not, see <http://www.gnu.org/licenses/>. */
#include <math.h>
#include <fenv.h>
#include <math_private.h>
@ -39,8 +40,8 @@ __kernel_sinf (float x, float y, int iy)
ix = __builtin_fabsf (x);
if (ix < twom27)
{ /* |x| < 2**-27 */
if (x == 0.0)
return x;
__feraiseexcept (FE_INEXACT);
return x;
}
z = x * x;
v = z * x;