diff --git a/src/include/port/bsd.h b/src/include/port/bsd.h index 03c99acd87..4e754e77de 100644 --- a/src/include/port/bsd.h +++ b/src/include/port/bsd.h @@ -15,8 +15,8 @@ #define HAS_TEST_AND_SET #endif -#if defined(ns32k) -#define NEED_NS32k_TAS_ASM +#if defined(__ns32k__) +#define NEED_NS32K_TAS_ASM #define HAS_TEST_AND_SET #endif diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index 7cbf56385e..70a0f4226c 100644 --- a/src/include/storage/s_lock.h +++ b/src/include/storage/s_lock.h @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.39 1998/07/18 14:58:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.40 1998/07/19 01:19:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -209,6 +209,22 @@ tas(slock_t *s_lock) #endif /* NEED_I386_TAS_ASM */ + +#if defined(NEED_NS32K_TAS_ASM) + +#define S_LOCK(lock) \ +{ \ + slock_t res = 1; \ + while (res) { \ + __asm__("movqd 0, r0"); \ + __asm__("sbitd r0, %0" : "=m"(*lock)); \ + __asm__("sprb us, %0" : "=r" (res)); \ + res = ((res >> 5) & 1); \ + } \ +} +#endif /* NEED_NS32K_TAS_ASM */ + + #endif /* defined(__GNUC__) */ @@ -308,6 +324,10 @@ int tas(volatile slock_t *lock); /* port/.../tas.s, or s_lock.c */ #define TAS(lock) tas((volatile slock_t *) lock) #endif /* TAS */ +#define S_UNLOCK(lock) (*(lock) = 0) + +#define S_INIT_LOCK(lock) S_UNLOCK(lock) + #endif /* HAS_TEST_AND_SET */ #endif /* S_LOCK_H */