mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
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
This commit is contained in:
parent
744c3cd271
commit
731ea8076f
@ -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__) */
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user