diff options
author | Bruce Momjian | 1998-10-02 15:23:08 +0000 |
---|---|---|
committer | Bruce Momjian | 1998-10-02 15:23:08 +0000 |
commit | 731ea8076f0c7d46496f95d227a2102c83ed5438 (patch) | |
tree | 5cc1c306869259bdd97626411b96f9897cccf121 | |
parent | 744c3cd2719854d4691f15a4e69bd5903ec3a09c (diff) |
Here's the new diff for getting the NS32K assembly code into the
spin-locks. Notice that it's now inline assembler in s_lock.h,
rather than seperate code in s_lock.c. It also shrank a little
bit... Just rip out the S_LOCK() define and insert the tas() inline
function. Please let me know if there are any problems with it.
Jon Buller
-rw-r--r-- | src/include/storage/s_lock.h | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index eb9a808f099..b094ed8fb8d 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.51 1998/10/01 01:53:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.52 1998/10/02 15:23:08 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -168,6 +168,22 @@ tas(volatile slock_t *lock) +#if defined(NEED_NS32K_TAS_ASM) +#define TAS(lock) tas(lock) + +static __inline__ int +tas(volatile slock_t *lock) +{ + register _res; + __asm__("sbitb 0, %0 + sfsd %1" + : "=m"(*lock), "=r"(_res)); + return (int) _res; +} + +#endif /* NEED_NS32K_TAS_ASM */ + + #else /* __GNUC__ */ /*************************************************************************** @@ -212,24 +228,6 @@ 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__) */ |