yann@1: 2000-03-15 Cristian Gafton yann@1: yann@1: * db2/mutex/alpha.gcc (TSL_SET): Backport from db3. yann@1: * sysdeps/alpha/Makefile (CPPFLAGS): Define for db2 directory. yann@1: * db2/mutex/mutex.c: Include alpha.gcc ifdef HAVE_ASSEM_ALPHA_GCC. yann@1: yann@1: 2000-03-14 Ulrich Drepper yann@1: yann@1: * sysdeps/unix/sysv/linux/alpha/ioperm.c (platform): Add entry for yann@1: Nautilus. Patch by Soohoon Lee . yann@1: yann@1: --- glibc-2.1.3-15/db2/mutex/alpha.gcc Wed Aug 27 15:32:54 1997 yann@1: +++ glibc-2.1.3-16/db2/mutex/alpha.gcc Wed Mar 15 16:50:45 2000 yann@1: @@ -1,52 +1,24 @@ yann@1: /* yann@1: - * @(#)alpha.gcc 10.1 (Sleepycat) 4/12/97 yann@1: - * yann@1: - * The code appearing below is taken from Richard L. Sites, ed. "Alpha yann@1: - * Architecture Reference Manual", Digital Press, 1992, page 5-7 and 5-8. yann@1: - * There are 2 modifications: yann@1: - * yann@1: - * 1. The jump from blbs __r1,30f to !__r1, which is dictated by the way the yann@1: - * TSL_SET macro is used. The code suggested in Sites includes the main loop yann@1: - * of the spin lock, whereas in this code the rest the loop is specified in C. yann@1: - * The generated code might be suboptimal if the compiler generates a forward yann@1: - * branch for the usual case in which the mutex is uncontested. yann@1: - * yann@1: - * 2. At label 20, Sites suggests including code for testing for an excessive yann@1: - * number of _processor_ lock conflicts. (The seq_c instruction stores its yann@1: - * first argument provided that no other processor has written to a byte range yann@1: - * including its memory-location argument.) Absent such checking the code yann@1: - * below could conceivably stall silently on a multiprocessor alpha, depending yann@1: - * on how often processor/processor conflicts occur in a particular byte range. yann@1: - * yann@1: - * Note that the mb ("memory-barrier") instruction in TSL_UNSET is critical to yann@1: - * correct operation in a multiprocessor alpha (as is, of course, the mb in yann@1: - * the TSL_SET macro). Without the mb, changes to shared memory that occurred yann@1: - * inside the critical section (before the TSL_UNSET) might reach shared memory yann@1: - * _after_ the change of tsl to 0, thereby permitting another processor to see yann@1: - * an inconsistent view of the data protected by the mutex. yann@1: + * @(#)alpha.gcc 11.1 (Sleepycat) 8/30/99 yann@1: * yann@1: * For gcc/alpha, 0 is clear, 1 is set. yann@1: */ yann@1: -#define TSL_SET(tsl) ({ \ yann@1: +#ifdef __GNUC__ yann@1: +#define TSL_SET(tsl) ({ \ yann@1: register tsl_t *__l = (tsl); \ yann@1: - register tsl_t __r1, __r2; \ yann@1: - __asm__ volatile(" \n\ yann@1: - 10: ldq_l %0,(%2) \n\ yann@1: - blbs %0,30f \n\ yann@1: - or %0,1,%1 \n\ yann@1: - stq_c %1,(%2) \n\ yann@1: - beq %1,20f \n\ yann@1: - mb \n\ yann@1: - br 30f \n\ yann@1: - 20: br 10b \n\ yann@1: - 30: " \ yann@1: - : "=&r" (__r1), "=&r" (__r2) \ yann@1: - : "r" (__l)); \ yann@1: - !__r1; \ yann@1: + int __r; \ yann@1: + asm volatile( \ yann@1: + "1: ldl_l %0,%1\n" \ yann@1: + " blbs %0,2f\n" \ yann@1: + " mov 1,%0\n" \ yann@1: + " stl_c %0,%1\n" \ yann@1: + " bne %0,1b\n" \ yann@1: + " mb\n" \ yann@1: + "2:" \ yann@1: + : "=&r"(__r), "=m"(*__l) : "m"(*__l) : "memory"); \ yann@1: + __r; \ yann@1: }) yann@1: +#endif yann@1: yann@1: -#define TSL_UNSET(tsl) ({ \ yann@1: - register tsl_t *__l = (tsl); \ yann@1: - __asm__ volatile("mb; stq $31,(%0);" : : "r" (__l)); \ yann@1: -}) yann@1: +#define TSL_UNSET(tsl) (*(tsl) = 0) yann@1: #define TSL_INIT(tsl) TSL_UNSET(tsl) yann@1: --- glibc-2.1.3-15/db2/mutex/mutex.c Wed Jun 30 11:51:07 1999 yann@1: +++ glibc-2.1.3-16/db2/mutex/mutex.c Wed Mar 15 16:50:45 2000 yann@1: @@ -86,6 +86,10 @@ static const char sccsid[] = "@(#)mutex. yann@1: #include "sparc.gcc" yann@1: #endif yann@1: yann@1: +#ifdef HAVE_ASSEM_ALPHA_GCC yann@1: +#include "alpha.gcc" yann@1: +#endif yann@1: + yann@1: #ifdef HAVE_ASSEM_UTS4_CC yann@1: #define TSL_INIT(x) yann@1: #define TSL_SET(x) (!uts_lock(x, 1)) yann@1: --- glibc-2.1.3-15/sysdeps/alpha/Makefile Thu Jul 9 14:52:03 1998 yann@1: +++ glibc-2.1.3-16/sysdeps/alpha/Makefile Wed Mar 15 16:50:45 2000 yann@1: @@ -17,6 +17,10 @@ yann@1: # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, yann@1: # Boston, MA 02111-1307, USA. yann@1: yann@1: +ifeq ($(subdir),db2) yann@1: +CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_ALPHA_GCC=1 yann@1: +endif yann@1: + yann@1: ifeq ($(subdir),gmon) yann@1: sysdep_routines += _mcount yann@1: endif yann@1: --- glibc-2.1.3-15/sysdeps/unix/sysv/linux/alpha/ioperm.c Mon Oct 11 10:25:24 1999 yann@1: +++ glibc-2.1.3-16/sysdeps/unix/sysv/linux/alpha/ioperm.c Wed Mar 15 11:57:14 2000 yann@1: @@ -1,4 +1,4 @@ yann@1: -/* Copyright (C) 1992, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. yann@1: +/* Copyright (C) 1992, 1996-1999, 2000 Free Software Foundation, Inc. yann@1: This file is part of the GNU C Library. yann@1: Contributed by David Mosberger. yann@1: yann@1: @@ -139,6 +139,7 @@ static struct platform { yann@1: {"Sable", IOSYS_CPUDEP}, yann@1: {"Miata", IOSYS_CIA}, yann@1: {"Tsunami", IOSYS_TSUNAMI}, yann@1: + {"Nautilus", IOSYS_TSUNAMI}, yann@1: {"Rawhide", IOSYS_MCPCIA}, yann@1: {"Ruffian", IOSYS_CIA}, yann@1: {"Takara", IOSYS_CIA},