From 60f0e64b3c13cf717fd49d327dbbca88568ca647 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 19 Aug 2000 16:58:09 +0000 Subject: Update. * malloc/mtrace.pl (usage): Inform about --help. 2000-08-19 Wolfram Gloger * malloc/malloc.c (new_heap): try harder to get an aligned chunk of size HEAP_MAX_SIZE. 2000-08-19 Andreas Jaeger * shlib-versions: Remove libnss_db, libdb and libdb1. 2000-08-19 Jakub Jelinek * sysdeps/unix/sysv/linux/alpha/readdir.c: Move... * sysdeps/unix/sysv/linux/ia64/readdir.c: ...here and * sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: ...here. * sysdeps/unix/sysv/linux/alpha/readdir_r.c: Move... * sysdeps/unix/sysv/linux/ia64/readdir_r.c: ...here and * sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: ...here. * sysdeps/unix/sysv/linux/alpha/readdir64.c: Remove. * sysdeps/unix/sysv/linux/alpha/readdir64_r.c: Remove. * sysdeps/unix/sysv/linux/alpha/getdents64.c: Remove. * sysdeps/unix/sysv/linux/alpha/getdents.c: Only use for non-LFS getdents. * sysdeps/unix/sysv/linux/readdir64.c: Remove versioning. * sysdeps/unix/sysv/linux/readdir64_r.c: Likewise. 2000-08-18 Jakub Jelinek * include/glob.h (__glob64): Add prototype. * sysdeps/generic/glob.c: If GLOB_ONLY_P is defined, only define glob and glob_in_dir. * sysdeps/unix/sysv/linux/i386/Versions: Add glob64@@GLIBC_2.2. * sysdeps/unix/sysv/linux/arm/Versions: Likewise. * sysdeps/unix/sysv/linux/powerpc/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/Versions: Likewise. * sysdeps/unix/sysv/linux/i386/glob64.c: New file. * sysdeps/unix/sysv/linux/arm/glob64.c: New file. * sysdeps/unix/sysv/linux/powerpc/glob64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: New file. 2000-08-18 Jakub Jelinek * malloc/Makefile (memusage): libmemusage.so is installed in slibdir. 2000-08-17 Andreas Jaeger * math/test-fenv.c (fe_single_test): New function. (fe_env_tests): Use fe_single_test. (feenable_test): New tests for feenable/fedisable and fegetexcpetions. (feexcp_mask_test): New function. (feexcp_nomask_test): New function. 2000-08-19 Richard Henderson * sysdeps/alpha/fpu/fenv_libc.h: New file. * sysdeps/alpha/fpu/fclrexcpt.c: Use it. * sysdeps/alpha/fpu/fegetenv.c: Likewise. * sysdeps/alpha/fpu/fesetround.c: Likewise. * sysdeps/alpha/fpu/fegetround.c: Likewise. * sysdeps/alpha/fpu/fgetexcptflg.c: Likewise. * sysdeps/alpha/fpu/fraiseexcpt.c: Likewise. * sysdeps/alpha/fpu/ftestexcept.c: Likewise. * sysdeps/alpha/fpu/fedisblxcpt.c: Likewise. Use the smaller mask. * sysdeps/alpha/fpu/feenablxcpt.c: Likewise. * sysdeps/alpha/fpu/fegetexcept.c: Likewise. * sysdeps/alpha/fpu/feholdexcpt.c: Retain the SWCR_MAP bits. * sysdeps/alpha/fpu/fesetenv.c: Likewise. * sysdeps/alpha/fpu/feupdateenv.c: Likewise. * sysdeps/alpha/fpu/fsetexcptflg.c: Likewise. * sysdeps/alpha/fpu/bits/fenv.h (FE_DENORMAL): New. (FE_MAP_DMZ, FE_MAP_UMZ, FE_NONIEEE_ENV): New. 2000-08-19 Andreas Jaeger --- sysdeps/alpha/fpu/bits/fenv.h | 26 +++++++++++++++++++++++--- sysdeps/alpha/fpu/fclrexcpt.c | 4 ++-- sysdeps/alpha/fpu/fedisblxcpt.c | 6 +++--- sysdeps/alpha/fpu/feenablxcpt.c | 6 +++--- sysdeps/alpha/fpu/fegetenv.c | 8 +++----- sysdeps/alpha/fpu/fegetexcept.c | 4 ++-- sysdeps/alpha/fpu/fegetround.c | 6 +++--- sysdeps/alpha/fpu/feholdexcpt.c | 6 +++--- sysdeps/alpha/fpu/fesetenv.c | 6 +++--- sysdeps/alpha/fpu/fesetround.c | 7 ++++--- sysdeps/alpha/fpu/feupdateenv.c | 4 ++-- sysdeps/alpha/fpu/fgetexcptflg.c | 4 ++-- sysdeps/alpha/fpu/fraiseexcpt.c | 5 ++--- sysdeps/alpha/fpu/fsetexcptflg.c | 4 ++-- sysdeps/alpha/fpu/ftestexcept.c | 6 +++--- 15 files changed, 60 insertions(+), 42 deletions(-) (limited to 'sysdeps/alpha') diff --git a/sysdeps/alpha/fpu/bits/fenv.h b/sysdeps/alpha/fpu/bits/fenv.h index 82b85debcd..b6d9b98c86 100644 --- a/sysdeps/alpha/fpu/bits/fenv.h +++ b/sysdeps/alpha/fpu/bits/fenv.h @@ -36,6 +36,11 @@ enum { +#ifdef __USE_GNU + FE_DENORMAL = 1UL << 22, +#define FE_DENORMAL FE_DENORMAL +#endif + FE_INEXACT = 1UL << 21, #define FE_INEXACT FE_INEXACT @@ -51,12 +56,10 @@ enum FE_INVALID = 1UL << 17, #define FE_INVALID FE_INVALID - FE_ALL_EXCEPT = - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) + FE_ALL_EXCEPT = 0x3f << 17 #define FE_ALL_EXCEPT FE_ALL_EXCEPT }; - /* Alpha chips support all four defined rouding modes. Note that code must be compiled to use dynamic rounding (/d) instructions @@ -81,6 +84,19 @@ enum #define FE_UPWARD FE_UPWARD }; +#ifdef __USE_GNU +/* On later hardware, and later kernels for earlier hardware, we can forcibly + underflow denormal inputs and outputs. This can speed up certain programs + significantly, usually without affecting accuracy. */ +enum + { + FE_MAP_DMZ = 1UL << 12, /* Map denorm inputs to zero */ +#define FE_MAP_DMZ FE_MAP_DMZ + + FE_MAP_UMZ = 1UL << 13, /* Map underflowed outputs to zero */ +#define FE_MAP_UMZ FE_MAP_UMZ + }; +#endif /* Type representing exception flags. */ typedef unsigned long int fexcept_t; @@ -96,6 +112,10 @@ typedef unsigned long int fenv_t; #ifdef __USE_GNU /* Floating-point environment where none of the exceptions are masked. */ # define FE_NOMASK_ENV ((fenv_t *) 0x880000000000003eUL) + +/* Floating-point environment with (processor-dependent) non-IEEE floating + point. In this case, mapping denormals to zero. */ +# define FE_NONIEEE_ENV ((fenv_t *) 0x8800000000003000UL) #endif /* The system calls to talk to the kernel's FP code. */ diff --git a/sysdeps/alpha/fpu/fclrexcpt.c b/sysdeps/alpha/fpu/fclrexcpt.c index 006f50613d..71ff748f73 100644 --- a/sysdeps/alpha/fpu/fclrexcpt.c +++ b/sysdeps/alpha/fpu/fclrexcpt.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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); diff --git a/sysdeps/alpha/fpu/fedisblxcpt.c b/sysdeps/alpha/fpu/fedisblxcpt.c index ab0630c084..7359e144b7 100644 --- a/sysdeps/alpha/fpu/fedisblxcpt.c +++ b/sysdeps/alpha/fpu/fedisblxcpt.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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); diff --git a/sysdeps/alpha/fpu/feenablxcpt.c b/sysdeps/alpha/fpu/feenablxcpt.c index d2b0f2e5e5..b36e84680c 100644 --- a/sysdeps/alpha/fpu/feenablxcpt.c +++ b/sysdeps/alpha/fpu/feenablxcpt.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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); diff --git a/sysdeps/alpha/fpu/fegetenv.c b/sysdeps/alpha/fpu/fegetenv.c index 51ce1c21ab..d6b3f70897 100644 --- a/sysdeps/alpha/fpu/fegetenv.c +++ b/sysdeps/alpha/fpu/fegetenv.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; diff --git a/sysdeps/alpha/fpu/fegetexcept.c b/sysdeps/alpha/fpu/fegetexcept.c index e4d5e784ea..c0de38f8aa 100644 --- a/sysdeps/alpha/fpu/fegetexcept.c +++ b/sysdeps/alpha/fpu/fegetexcept.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; } diff --git a/sysdeps/alpha/fpu/fegetround.c b/sysdeps/alpha/fpu/fegetround.c index 623e2ce358..f64fee7def 100644 --- a/sysdeps/alpha/fpu/fegetround.c +++ b/sysdeps/alpha/fpu/fegetround.c @@ -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 , 1997 @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; } diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c index a179366cbf..d683a37bdc 100644 --- a/sysdeps/alpha/fpu/feholdexcpt.c +++ b/sysdeps/alpha/fpu/feholdexcpt.c @@ -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 , 1997 @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; } diff --git a/sysdeps/alpha/fpu/fesetenv.c b/sysdeps/alpha/fpu/fesetenv.c index 58bc13aaf2..5bf3b5e59a 100644 --- a/sysdeps/alpha/fpu/fesetenv.c +++ b/sysdeps/alpha/fpu/fesetenv.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c index f0aaaa2c88..42a8b62f49 100644 --- a/sysdeps/alpha/fpu/fesetround.c +++ b/sysdeps/alpha/fpu/fesetround.c @@ -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 , 1997 @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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)); diff --git a/sysdeps/alpha/fpu/feupdateenv.c b/sysdeps/alpha/fpu/feupdateenv.c index 61226c6b44..b9f1c5b69e 100644 --- a/sysdeps/alpha/fpu/feupdateenv.c +++ b/sysdeps/alpha/fpu/feupdateenv.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; diff --git a/sysdeps/alpha/fpu/fgetexcptflg.c b/sysdeps/alpha/fpu/fgetexcptflg.c index bd47535be8..bae1556f5d 100644 --- a/sysdeps/alpha/fpu/fgetexcptflg.c +++ b/sysdeps/alpha/fpu/fgetexcptflg.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; diff --git a/sysdeps/alpha/fpu/fraiseexcpt.c b/sysdeps/alpha/fpu/fraiseexcpt.c index b0eab000cb..1f72ebaf6a 100644 --- a/sysdeps/alpha/fpu/fraiseexcpt.c +++ b/sysdeps/alpha/fpu/fraiseexcpt.c @@ -18,8 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include +#include 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); diff --git a/sysdeps/alpha/fpu/fsetexcptflg.c b/sysdeps/alpha/fpu/fsetexcptflg.c index eb74defb5a..57531a4aa0 100644 --- a/sysdeps/alpha/fpu/fsetexcptflg.c +++ b/sysdeps/alpha/fpu/fsetexcptflg.c @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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); diff --git a/sysdeps/alpha/fpu/ftestexcept.c b/sysdeps/alpha/fpu/ftestexcept.c index 9ee9dc9c55..9c006de79e 100644 --- a/sysdeps/alpha/fpu/ftestexcept.c +++ b/sysdeps/alpha/fpu/ftestexcept.c @@ -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 , 1997. @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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; } -- cgit v1.2.3