2000-10-07  Ulrich Drepper  <drepper@redhat.com>

	* include/features.h (__STDC_ISO_10646__): Set to correct date.
	Patch by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>.

2000-10-06  Jes Sorensen  <jes@linuxcare.com>

	* sysdeps/ia64/fpu/fraiseexcpt.c (feraiseexcept): Implement
	overflow generation by adding DBL_MAX to DBL_MAX instead of
	setting the bits manually in the fpsr and generating the exception
	with kill() if necessary.
	(feraiseexcept): Implement underflow by dividing DBL_MIN by
	DBL_MIN - similar to the overflow change described above.

2000-08-27  H.J. Lu  <hjl@gnu.org>

	* sysdeps/unix/sysv/linux/ia64/clone.S: Make it a dummy as clone
	is not supported under Linux/ia64, use clone2.

2000-10-06  Jakub Jelinek  <jakub@redhat.com>

	* malloc/malloc.h (__THROW): Define to nothing if not gcc.
	* misc/sys/cdefs.h (__THROW): Likewise.
This commit is contained in:
Ulrich Drepper 2000-10-07 22:28:05 +00:00
parent 19e89d15a1
commit 9b767d19e6
6 changed files with 35 additions and 98 deletions

View File

@ -1,3 +1,27 @@
2000-10-07 Ulrich Drepper <drepper@redhat.com>
* include/features.h (__STDC_ISO_10646__): Set to correct date.
Patch by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>.
2000-10-06 Jes Sorensen <jes@linuxcare.com>
* sysdeps/ia64/fpu/fraiseexcpt.c (feraiseexcept): Implement
overflow generation by adding DBL_MAX to DBL_MAX instead of
setting the bits manually in the fpsr and generating the exception
with kill() if necessary.
(feraiseexcept): Implement underflow by dividing DBL_MIN by
DBL_MIN - similar to the overflow change described above.
2000-08-27 H.J. Lu <hjl@gnu.org>
* sysdeps/unix/sysv/linux/ia64/clone.S: Make it a dummy as clone
is not supported under Linux/ia64, use clone2.
2000-10-06 Jakub Jelinek <jakub@redhat.com>
* malloc/malloc.h (__THROW): Define to nothing if not gcc.
* misc/sys/cdefs.h (__THROW): Likewise.
2000-10-05 Jakub Jelinek <jakub@redhat.com> 2000-10-05 Jakub Jelinek <jakub@redhat.com>
* sysdeps/sparc/sparc64/fpu/libm-test-ulps: New file. * sysdeps/sparc/sparc64/fpu/libm-test-ulps: New file.

View File

@ -243,8 +243,8 @@
#define __STDC_IEC_559__ 1 #define __STDC_IEC_559__ 1
#define __STDC_IEC_559_COMPLEX__ 1 #define __STDC_IEC_559_COMPLEX__ 1
/* wchar_t uses Unicode 3.0. */ /* wchar_t uses ISO 10646-1:2000 / Unicode 3.0 */
#define __STDC_ISO_10646__ 200001L #define __STDC_ISO_10646__ 200010L
/* This macro indicates that the installed library is the GNU C Library. /* This macro indicates that the installed library is the GNU C Library.
For historic reasons the value now is 6 and this will stay from now For historic reasons the value now is 6 and this will stay from now

View File

@ -1,5 +1,5 @@
/* Prototypes and definition for malloc implementation. /* Prototypes and definition for malloc implementation.
Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -76,6 +76,8 @@
#else /* Not GCC. */ #else /* Not GCC. */
# define __THROW
# if (defined __STDC__ && __STDC__) || defined __cplusplus # if (defined __STDC__ && __STDC__) || defined __cplusplus
# define __MALLOC_P(args) args # define __MALLOC_P(args) args

View File

@ -54,6 +54,7 @@
# define __inline /* No inline functions. */ # define __inline /* No inline functions. */
# define __THROW
# define __P(args) args # define __P(args) args
# define __PMT(args) args # define __PMT(args) args

View File

@ -51,35 +51,20 @@ feraiseexcept (int excepts)
if (FE_DIVBYZERO & excepts) if (FE_DIVBYZERO & excepts)
__asm__ __volatile__ ("frcpa.s0 %0,p1=f1,f0" : "=f" (tmp) : : "p1" ); __asm__ __volatile__ ("frcpa.s0 %0,p1=f1,f0" : "=f" (tmp) : : "p1" );
/* XXX There seem to be no reliable way to generate
overflow/underflow exceptions without causing inexact exceptions
as well. */
/* Next: overflow. */ /* Next: overflow. */
if (FE_OVERFLOW & excepts) if (FE_OVERFLOW & excepts)
{ {
__asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); dummy = DBL_MAX;
fpsr |= (FE_OVERFLOW << 13);
__asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r" (fpsr));
if (!((unsigned long int) fpsr & FE_OVERFLOW)) __asm__ __volatile__ ("fadd.d.s0 %0=%1,%1" : "=f" (dummy) : "0" (dummy));
{
pid_t pid = getpid ();
kill (pid, SIGFPE);
}
} }
/* Next: underflow. */ /* Next: underflow. */
if (FE_UNDERFLOW & excepts) if (FE_UNDERFLOW & excepts)
{ {
__asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr)); dummy = DBL_MIN;
fpsr |= (FE_UNDERFLOW << 13);
__asm__ __volatile__ ("mov.m ar.fpsr=%0" : : "r" (fpsr));
if (!((unsigned long int) fpsr & FE_UNDERFLOW)) __asm__ __volatile__ ("fnma.d.s0 %0=%1,%1,f0" : "=f" (tmp) : "f" (dummy));
{
pid_t pid = getpid();
kill (pid, SIGFPE);
}
} }
/* Last: inexact. */ /* Last: inexact. */

View File

@ -1,76 +1 @@
/* Copyright (C) 1999,2000 Free Software Foundation, Inc. /* clone is not supported under Linux/ia64, use clone2. */
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* clone is even more special than fork as it mucks with stacks
and invokes a function in the right context after its all over. */
#include <sysdep.h>
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
/*
* Used for both clone and fork system calls. Note that if fn is NULL
* then clone was called from fork.
*/
ENTRY(__clone)
add r2 = -16, r33 // save space for fn and arg
cmp.ne p6,p0 = 0,r33
;;
(p6) add r33 = -16, r33
add r12 = -16, r12
;;
(p6) st8 [r2] = r32, 8 // save fn for child
st8 [r12] = r32 // save fn for parent
;;
(p6) st8 [r2] = r35 // save arg for child
mov r32 = r34 // put flags in out0
DO_CALL (SYS_ify (clone))
1:
ld8 r33 = [r12], 8 // recover fn
;;
ld8 r32 = [r12], 8 // recover arg
cmp.eq p6,p0=-1,r10
(p6) br.cond.spnt.many __syscall_error // handle error
cmp.ne p7,p0=0,r8
(p7) ret // parent process, just return
cmp.eq p8,p0=0,r33
(p8) ret // fork call, return
alloc loc0 = ar.pfs,2,2,2,0
;;
ld8 r2 = [in1], 8 // get address of fn
mov out0 = in0
mov loc1 = gp // save gp across indirect call
;;
ld8 gp = [in1] // set new gp
mov b6 = r2
br.call.sptk b0 = b6 // call thread routine
;;
mov ar.pfs = loc0
mov gp = loc1
mov r32 = r8 // exit value
;;
br.call.sptk b0 = _exit // we're out of here
PSEUDO_END(__clone)
weak_alias (__clone, clone)