From: Bruce Momjian Date: Fri, 2 Oct 1998 15:23:08 +0000 (+0000) Subject: Here's the new diff for getting the NS32K assembly code into the X-Git-Tag: REL6_4_2~360 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=731ea8076f0c7d46496f95d227a2102c83ed5438;p=postgresql 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 --- diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h index eb9a808f09..b094ed8fb8 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__) */