* db2/db_int.h: Change tsl_t type to u_int32_t.
	* db2/mutex/mutex.c: Allow Alpha mutex definitions.
	* db2/mutex/alpha.h: New file.
	* db2/mutex/sparc.gcc: Fix store code for v9.  Simplify clear code.
	* sysdeps/alpha/Makefile [db2]: Set CFLAGS of mutex.c to make spinlocks
	known.
	Patches by Richard Henderson.
This commit is contained in:
Ulrich Drepper 1999-08-30 21:51:29 +00:00
parent 0742e50134
commit 9a93ac006d
7 changed files with 51 additions and 11 deletions

View File

@ -1,5 +1,13 @@
1999-08-30 Ulrich Drepper <drepper@cygnus.com>
* db2/db_int.h: Change tsl_t type to u_int32_t.
* db2/mutex/mutex.c: Allow Alpha mutex definitions.
* db2/mutex/alpha.h: New file.
* db2/mutex/sparc.gcc: Fix store code for v9. Simplify clear code.
* sysdeps/alpha/Makefile [db2]: Set CFLAGS of mutex.c to make spinlocks
known.
Patches by Richard Henderson.
* stdlib/tst-environ.c: Add cast to avoid warning.
* timezone/test-tz.c: Use setenv instead of putenv.

View File

@ -138,7 +138,7 @@ typedef struct __fn {
/*******************************************************
* Mutex support.
*******************************************************/
typedef unsigned char tsl_t;
typedef u_int32_t tsl_t;
/*
* !!!

26
db2/mutex/alpha.h Normal file
View File

@ -0,0 +1,26 @@
/* For alpha, 0 is clear, 1 is set. */
#ifdef __GNUC__
#define TSL_SET(tsl) ({ \
register tsl_t *__l = (tsl); \
int __r; \
asm volatile( \
"1: ldl_l %0,%1\n" \
" blbs %0,2f\n" \
" mov 1,%0\n" \
" stl_c %0,%1\n" \
" bne %0,1b\n" \
" mb\n" \
"2:" \
: "=&r"(__r), "=m"(*__l) : "m"(*__l) : "memory"); \
__r; \
})
#endif
#ifdef __DECC
#include <alpha/builtins.h>
#define TSL_SET(tsl) (__LOCK_LONG_RETRY((tsl), 1) != 0)
#endif
#define TSL_UNSET(tsl) (*(tsl) = 0)
#define TSL_INIT(tsl) TSL_UNSET(tsl)

View File

@ -110,6 +110,10 @@ static const char sccsid[] = "@(#)mutex.c 10.52 (Sleepycat) 11/8/98";
#include "x86.gcc"
#endif
#ifdef HAVE_ASSEM_ALPHA
#include "alpha.h"
#endif
#ifdef WIN16
/* Win16 spinlocks are simple because we cannot possibly be preempted. */
#define TSL_INIT(tsl)

View File

@ -13,21 +13,19 @@
* For gcc/sparc, 0 is clear, 1 is set.
*/
#if defined(__sparcv9__)
Does the following code need membar instructions for V9 processors?
#endif
/* The stbar is needed for v8, and is implemented as membar #sync on v9,
so is functional there as well. For v7, stbar may generate an illegal
instruction and we have no way to tell what we're running on. Some
operating systems notice and skip this instruction in the fault handler. */
#define TSL_SET(tsl) ({ \
register tsl_t *__l = (tsl); \
register tsl_t __r; \
__asm__ volatile \
("ldstub [%1],%0" \
("ldstub [%1],%0; stbar" \
: "=r"( __r) : "r" (__l)); \
!__r; \
})
#define TSL_UNSET(tsl) ({ \
register tsl_t *__l = (tsl); \
__asm__ volatile ("stb %%g0,[%0]" : : "r" (__l)); \
})
#define TSL_UNSET(tsl) ((tsl) = 0)
#define TSL_INIT(tsl) TSL_UNSET(tsl)

View File

@ -1,4 +1,4 @@
# Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
# Copyright (C) 1993, 94, 95, 96, 97, 99 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# Contributed by Brendan Kehoe (brendan@zen.org).
@ -17,6 +17,10 @@
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
ifeq ($(subdir),db2)
CPPFLAGS += -DHAVE_SPINLOCKS=1 -DHAVE_ASSEM_ALPHA=1
endif
ifeq ($(subdir),gmon)
sysdep_routines += _mcount
endif

View File

@ -34,7 +34,7 @@ main (int argc, char ** argv)
for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
{
setenv ("TZ", tests[i].env);
setenv ("TZ", tests[i].env, 1);
t = mktime (&tm);
if (t != tests[i].expected)
{