Use <fenv_libc.h>.

This commit is contained in:
Ulrich Drepper 2000-08-19 16:07:37 +00:00
parent 4b84abdd3e
commit c9bca5114f
14 changed files with 37 additions and 39 deletions

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
__feclearexcept (int excepts)
@ -29,7 +29,7 @@ __feclearexcept (int excepts)
swcr = __ieee_get_fp_control ();
/* Clear the relevant bits. */
swcr &= ~((unsigned long int) excepts & FE_ALL_EXCEPT);
swcr &= ~((unsigned long int) excepts & SWCR_STATUS_MASK);
/* Put the new state in effect. */
__ieee_set_fp_control (swcr);

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
fedisableexcept (int excepts)
@ -27,8 +27,8 @@ fedisableexcept (int excepts)
new_exc = __ieee_get_fp_control ();
old_exc = (new_exc << 16) & FE_ALL_EXCEPT;
new_exc &= ~((excepts & FE_ALL_EXCEPT) >> 16);
old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
new_exc &= ~((excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK);
__ieee_set_fp_control (new_exc);

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
feenableexcept (int excepts)
@ -27,8 +27,8 @@ feenableexcept (int excepts)
new_exc = __ieee_get_fp_control ();
old_exc = (new_exc << 16) & FE_ALL_EXCEPT;
new_exc |= (excepts & FE_ALL_EXCEPT) >> 16;
old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
new_exc |= (excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK;
__ieee_set_fp_control (new_exc);

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
__fegetenv (fenv_t *envp)
@ -31,10 +31,8 @@ __fegetenv (fenv_t *envp)
swcr = __ieee_get_fp_control ();
__asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr));
/* Merge the two bits of information. The magic number at the end is
the exception enable mask. */
*envp = (fpcr & (3UL << 58)) | (swcr & (FE_ALL_EXCEPT | 0x3e));
/* Merge the two bits of information. */
*envp = ((fpcr & FPCR_ROUND_MASK) | (swcr & SWCR_ALL_MASK));
/* Success. */
return 0;

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
fegetexcept (void)
@ -27,5 +27,5 @@ fegetexcept (void)
exc = __ieee_get_fp_control ();
return (exc << 16) & FE_ALL_EXCEPT;
return (exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
}

View File

@ -1,5 +1,5 @@
/* Return current rounding direction.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997
@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
fegetround (void)
@ -27,5 +27,5 @@ fegetround (void)
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
return (fpcr >> 58) & 3;
return (fpcr >> FPCR_ROUND_SHIFT) & 3;
}

View File

@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997
@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
feholdexcept (fenv_t *envp)
@ -27,7 +27,7 @@ feholdexcept (fenv_t *envp)
fegetenv(envp);
/* Clear all exception status bits and exception enable bits. */
__ieee_set_fp_control(0);
__ieee_set_fp_control(*envp & SWCR_MAP_MASK);
return 0;
}

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
__fesetenv (const fenv_t *envp)
@ -37,11 +37,11 @@ __fesetenv (const fenv_t *envp)
/* Reset the rounding mode with the hardware fpcr. Note that the following
system call is an implied trap barrier for our modification. */
__asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr));
fpcr = (fpcr & ~(3UL << 58)) | (env & (3UL << 58));
fpcr = (fpcr & ~FPCR_ROUND_MASK) | (env & FPCR_ROUND_MASK);
__asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr));
/* Reset the exception status and mask with the kernel's FP code. */
__ieee_set_fp_control (env & (FE_ALL_EXCEPT | 0x3e));
__ieee_set_fp_control (env & SWCR_ALL_MASK);
/* Success. */
return 0;

View File

@ -1,5 +1,5 @@
/* Set current rounding direction.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997
@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
fesetround (int round)
@ -32,7 +32,8 @@ fesetround (int round)
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
/* Set the relevant bits. */
fpcr = (fpcr & ~(3UL << 58)) | ((unsigned long)round << 58);
fpcr = ((fpcr & ~FPCR_ROUND_MASK)
| ((unsigned long)round << FPCR_ROUND_SHIFT));
/* Put the new state in effect. */
__asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr));

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
__feupdateenv (const fenv_t *envp)
@ -34,7 +34,7 @@ __feupdateenv (const fenv_t *envp)
/* Raise the saved exception. Incidently for us the implementation
defined format of the values in objects of type fexcept_t is the
same as the ones specified using the FE_* constants. */
feraiseexcept ((int) tmp & FE_ALL_EXCEPT);
feraiseexcept (tmp & SWCR_STATUS_MASK);
/* Success. */
return 0;

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
__fegetexceptflag (fexcept_t *flagp, int excepts)
@ -29,7 +29,7 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
tmp = __ieee_get_fp_control();
/* Return that portion that corresponds to the requested exceptions. */
*flagp = tmp & excepts & FE_ALL_EXCEPT;
*flagp = tmp & excepts & SWCR_STATUS_MASK;
/* Success. */
return 0;

View File

@ -18,8 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <math.h>
#include <fenv_libc.h>
int
__feraiseexcept (int excepts)
@ -30,7 +29,7 @@ __feraiseexcept (int excepts)
tmp = __ieee_get_fp_control ();
/* Set all the bits that were called for. */
tmp |= (excepts & FE_ALL_EXCEPT);
tmp |= (excepts & SWCR_STATUS_MASK);
/* And store it back. */
__ieee_set_fp_control (tmp);

View File

@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
__fesetexceptflag (const fexcept_t *flagp, int excepts)
@ -29,7 +29,7 @@ __fesetexceptflag (const fexcept_t *flagp, int excepts)
tmp = __ieee_get_fp_control ();
/* Set all the bits that were called for. */
tmp = (tmp & ~FE_ALL_EXCEPT) | (*flagp & excepts & FE_ALL_EXCEPT);
tmp = (tmp & ~SWCR_STATUS_MASK) | (*flagp & excepts & SWCR_STATUS_MASK);
/* And store it back. */
__ieee_set_fp_control (tmp);

View File

@ -1,5 +1,5 @@
/* Test exception in current environment.
Copyright (C) 1997 Free Software Foundation, Inc.
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997.
@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <fenv.h>
#include <fenv_libc.h>
int
fetestexcept (int excepts)
@ -28,5 +28,5 @@ fetestexcept (int excepts)
/* Get current exceptions. */
tmp = __ieee_get_fp_control();
return tmp & excepts & FE_ALL_EXCEPT;
return tmp & excepts & SWCR_STATUS_MASK;
}