Skip to content

Commit

Permalink
* sysdeps/powerpc/fpu/e_sqrt.c: Avoid call to fetestexcept.
Browse files Browse the repository at this point in the history
	* sysdeps/powerpc/fpu/e_sqrtf.c: Likewise.
  • Loading branch information
Ulrich Drepper committed Apr 12, 2008
1 parent 3cc56f9 commit c3a0ead
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
3 changes: 3 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
2008-04-11 Ulrich Drepper <drepper@redhat.com>

* sysdeps/powerpc/fpu/e_sqrt.c: Avoid call to fetestexcept.
* sysdeps/powerpc/fpu/e_sqrtf.c: Likewise.

* scripts/data/localplt-powerpc64-linux-gnu.data: New file.

* sysdeps/powerpc/fpu/fenv_libc.h: Add libm_hidden_proto for
Expand Down
8 changes: 5 additions & 3 deletions sysdeps/powerpc/fpu/e_sqrt.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Double-precision floating point square root.
Copyright (C) 1997, 2002, 2003, 2004 Free Software Foundation, Inc.
Copyright (C) 1997, 2002, 2003, 2004, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand Down Expand Up @@ -150,7 +150,9 @@ __slow_ieee754_sqrt (x)
FE_INVALID_SQRT. */
#ifdef FE_INVALID_SQRT
feraiseexcept (FE_INVALID_SQRT);
if (!fetestexcept (FE_INVALID))

fenv_union_t u = { .fenv = fegetenv_register () };
if ((u.l[1] & FE_INVALID) == 0)
#endif
feraiseexcept (FE_INVALID);
x = a_nan.value;
Expand All @@ -172,7 +174,7 @@ __ieee754_sqrt (x)
/* If the CPU is 64-bit we can use the optional FP instructions. */
if (__CPU_HAS_FSQRT)
{
/* Volatile is required to prevent the compiler from moving the
/* Volatile is required to prevent the compiler from moving the
fsqrt instruction above the branch. */
__asm __volatile (" fsqrt %0,%1\n"
:"=f" (z):"f" (x));
Expand Down
8 changes: 5 additions & 3 deletions sysdeps/powerpc/fpu/e_sqrtf.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Single-precision floating point square root.
Copyright (C) 1997, 2003, 2004 Free Software Foundation, Inc.
Copyright (C) 1997, 2003, 2004, 2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand Down Expand Up @@ -126,7 +126,9 @@ __slow_ieee754_sqrtf (x)
FE_INVALID_SQRT. */
#ifdef FE_INVALID_SQRT
feraiseexcept (FE_INVALID_SQRT);
if (!fetestexcept (FE_INVALID))

fenv_union_t u = { .fenv = fegetenv_register () };
if ((u.l[1] & FE_INVALID) == 0)
#endif
feraiseexcept (FE_INVALID);
x = a_nan.value;
Expand All @@ -149,7 +151,7 @@ __ieee754_sqrtf (x)
/* If the CPU is 64-bit we can use the optional FP instructions. */
if (__CPU_HAS_FSQRT)
{
/* Volatile is required to prevent the compiler from moving the
/* Volatile is required to prevent the compiler from moving the
fsqrt instruction above the branch. */
__asm __volatile (" fsqrts %0,%1\n"
:"=f" (z):"f" (x));
Expand Down

0 comments on commit c3a0ead

Please sign in to comment.