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)
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);
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)
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);
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)
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);
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)
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;
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)
exc = __ieee_get_fp_control ();
- return (exc << 16) & FE_ALL_EXCEPT;
+ return (exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
}
/* 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
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)
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
- return (fpcr >> 58) & 3;
+ return (fpcr >> FPCR_ROUND_SHIFT) & 3;
}
/* 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
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)
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;
}
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)
/* 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;
/* 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
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)
__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));
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)
/* 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;
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)
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;
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)
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);
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)
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);
/* 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.
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)
/* Get current exceptions. */
tmp = __ieee_get_fp_control();
- return tmp & excepts & FE_ALL_EXCEPT;
+ return tmp & excepts & SWCR_STATUS_MASK;
}