spinlock code for ns32k (again) - Mailing list pgsql-hackers

From Jon Buller
Subject spinlock code for ns32k (again)
Date
Msg-id 199809280327.WAA27944@bullbox.heeia.hi.us
Whole thread Raw
Responses Re: [HACKERS] spinlock code for ns32k (again)  (Bruce Momjian <maillist@candle.pha.pa.us>)
List pgsql-hackers
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



Index: src/include/storage/s_lock.h
===================================================================
RCS file: /usr/local/cvsroot/pgsql/src/include/storage/s_lock.h,v
retrieving revision 1.50
diff -r1.50 s_lock.h
170a171,186
> #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 */
>
>
214,231d229
<
<
<
< #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 */
<

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: It sorta works, but I'm confused about locking
Next
From: "Hiroshi Inoue"
Date:
Subject: LIBPQ for WIN32