From 6eaccb759aff7e3fdd679d39aabaf773b18dfbd1 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 29 Jan 1999 16:58:13 +0000 Subject: Update. 1999-01-29 Richard Henderson * scripts/config.sub: Recognize alpha{pca5[67],ev[67]}. * sysdeps/generic/elf/backtracesyms.c (__backtrace_symbols): Format pointer differences as longs. * sysdeps/alpha/fpu/s_floor.c, sysdeps/alpha/fpu/s_floorf.c: Copy commentary from bits/mathinclude.h. Kill unused defines. * sysdeps/alpha/atomicity.h: New file. --- ChangeLog | 12 +++++ linuxthreads/manager.c | 1 + scripts/config.sub | 6 ++- sysdeps/alpha/atomicity.h | 102 ++++++++++++++++++++++++++++++++++++ sysdeps/alpha/fpu/s_floor.c | 11 ++-- sysdeps/alpha/fpu/s_floorf.c | 14 +++-- sysdeps/generic/elf/backtracesyms.c | 8 +-- 7 files changed, 135 insertions(+), 19 deletions(-) create mode 100644 sysdeps/alpha/atomicity.h diff --git a/ChangeLog b/ChangeLog index 5f1db4db07..adefded996 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +1999-01-29 Richard Henderson + + * scripts/config.sub: Recognize alpha{pca5[67],ev[67]}. + + * sysdeps/generic/elf/backtracesyms.c (__backtrace_symbols): + Format pointer differences as longs. + + * sysdeps/alpha/fpu/s_floor.c, sysdeps/alpha/fpu/s_floorf.c: + Copy commentary from bits/mathinclude.h. Kill unused defines. + + * sysdeps/alpha/atomicity.h: New file. + 1999-01-29 Ulrich Drepper * version.h (VERSION): Bump to 2.0.112. diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index b244d87686..033e5adc5f 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -314,6 +314,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, &guardaddr, &guardsize) == 0) break; } + __pthread_handles_num++; /* Allocate new thread identifier */ pthread_threads_counter += PTHREAD_THREADS_MAX; new_thread_id = sseg + pthread_threads_counter; diff --git a/scripts/config.sub b/scripts/config.sub index df7022d37e..8e0adacb9b 100755 --- a/scripts/config.sub +++ b/scripts/config.sub @@ -152,7 +152,8 @@ case $basic_machine in tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \ - | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ + | alpha | alphaev5 | alphaev56 | alphapca56 | alphaev6 \ + | alphapca57 | alphaev7 | we32k | ns16k | clipper \ | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ | mipstx39 | mipstx39el | armv[34][lb] \ @@ -176,7 +177,8 @@ case $basic_machine in | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \ - | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ + | alpha-* | alphaev5-* | alphaev56-* | alphapca56-* \ + | alphaev6-* | alphapca57-* | alphaev7-* | we32k-* | cydra-* \ | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ | sparc64-* | mips64-* | mipsel-* | armv[34][lb]-* \ diff --git a/sysdeps/alpha/atomicity.h b/sysdeps/alpha/atomicity.h new file mode 100644 index 0000000000..34a538f4c0 --- /dev/null +++ b/sysdeps/alpha/atomicity.h @@ -0,0 +1,102 @@ +/* Low-level functions for atomic operations. Alpha version. + Copyright (C) 1999 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 + 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. */ + +#ifndef _ATOMICITY_H +#define _ATOMICITY_H 1 + +#include + + +static inline int +__attribute__ ((unused)) +exchange_and_add (volatile uint32_t *mem, int val) +{ + register int result, tmp; + + __asm__ __volatile__ ( + "/* Inline exchange & add */\n" + "1:\t" + "ldl_l %0,%3\n\t" + "addl %0,%4,%1\n\t" + "stl_c %1,%2\n\t" + "beq %1,2f\n" + ".subsection 2\n" + "2:\t" + "br 1b\n" + ".subsection 1\n\t" + "mb\n\t" + "/* End exchange & add */" + : "=&r"(result), "=&r"(tmp), "=m"(*mem) + : "m" (*mem), "r"(val)); + + return result; +} + +static inline void +__attribute__ ((unused)) +atomic_add (volatile uint32_t *mem, int val) +{ + register int result; + + __asm__ __volatile__ ( + "/* Inline exchange & add */\n" + "1:\t" + "ldl_l %0,%2\n\t" + "addl %0,%3,%0\n\t" + "stl_c %0,%1\n\t" + "beq %0,2f\n\t" + ".subsection 2\n" + "2:\t" + "br 1b\n" + ".subsection 1\n\t" + "mb\n\t" + "/* End exchange & add */" + : "=&r"(result), "=m"(*mem) + : "m" (*mem), "r"(val)); +} + +static inline long +__attribute__ ((unused)) +compare_and_swap (volatile long int *p, long int oldval, long int newval) +{ + long int ret; + + __asm__ __volatile__ ( + "/* Inline compare & swap */\n" + "1:\t" + "ldq_l %0,%4\n\t" + "cmpeq %0,%2,%0\n\t" + "beq %0,3f\n\t" + "mov %3,%0\n\t" + "stq_c %0,%1\n\t" + "beq %0,2f\n\t" + ".subsection 2\n" + "2:\t" + "br 1b\n" + ".subsection 1\n\t" + "3:\t" + "mb\n\t" + "/* End compare & swap */" + : "=&r"(ret), "=m"(*p) + : "r"(oldval), "r"(newval), "m"(*p)); + + return ret; +} + +#endif /* atomicity.h */ diff --git a/sysdeps/alpha/fpu/s_floor.c b/sysdeps/alpha/fpu/s_floor.c index c7e14662fe..146e19b35a 100644 --- a/sysdeps/alpha/fpu/s_floor.c +++ b/sysdeps/alpha/fpu/s_floor.c @@ -17,18 +17,17 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __USE_EXTERN_INLINES -#define __USE_EXTERN_INLINES -#endif -#define __floor __i_floor - #include -#undef __floor + +/* Use the -inf rounding mode conversion instructions to implement + floor. We note when the exponent is large enough that the value + must be integral, as this avoids unpleasant integer overflows. */ double __floor (double x) { + /* Check not zero since floor(-0) == -0. */ if (x != 0 && fabs (x) < 9007199254740992.0) /* 1 << DBL_MANT_DIG */ { double __tmp1; diff --git a/sysdeps/alpha/fpu/s_floorf.c b/sysdeps/alpha/fpu/s_floorf.c index 7502b6781e..9e693642dd 100644 --- a/sysdeps/alpha/fpu/s_floorf.c +++ b/sysdeps/alpha/fpu/s_floorf.c @@ -17,14 +17,12 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __USE_EXTERN_INLINES -#define __USE_EXTERN_INLINES -#endif -#define __floorf __i_floorf - #include -#undef __floorf + +/* Use the -inf rounding mode conversion instructions to implement + floor. We note when the exponent is large enough that the value + must be integral, as this avoids unpleasant integer overflows. */ float __floorf (float x) @@ -37,7 +35,7 @@ __floorf (float x) convert back to S_Floating in the end. The initial conversion to T_Floating is needed to handle denormals. */ - float __tmp1, __tmp2; + float tmp1, tmp2; __asm ("cvtst/s %3,%2\n\t" #ifdef _IEEE_FP_INEXACT @@ -46,7 +44,7 @@ __floorf (float x) "cvttq/svm %2,%1\n\t" #endif "cvtqt/m %1,%0\n\t" - : "=f"(x), "=&f"(__tmp1), "=&f"(__tmp2) + : "=f"(x), "=&f"(tmp1), "=&f"(tmp2) : "f"(x)); } return x; diff --git a/sysdeps/generic/elf/backtracesyms.c b/sysdeps/generic/elf/backtracesyms.c index a14ac596b4..100d94aa42 100644 --- a/sysdeps/generic/elf/backtracesyms.c +++ b/sysdeps/generic/elf/backtracesyms.c @@ -1,5 +1,5 @@ /* Return list with names for address in backtrace. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -76,9 +76,11 @@ __backtrace_symbols (array, size) char buf[20]; if (array[cnt] >= (void *) info[cnt].dli_saddr) - sprintf (buf, "+0x%x", array[cnt] - info[cnt].dli_saddr); + sprintf (buf, "+%#lx", + (unsigned long)(array[cnt] - info[cnt].dli_saddr)); else - sprintf (buf, "-0x%x", info[cnt].dli_saddr - array[cnt]); + sprintf (buf, "-%#lx", + (unsigned long)(info[cnt].dli_saddr - array[cnt])); last += 1 + sprintf (last, "%s%s%s%s%s[%p]", info[cnt].dli_fname ?: "", -- cgit v1.2.3