From: | Jon Buller <jonb(at)metronet(dot)com> |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | spinlock code for ns32k (again) |
Date: | 1998-09-28 03:27:45 |
Message-ID: | 199809280327.WAA27944@bullbox.heeia.hi.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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 */
<
From | Date | Subject | |
---|---|---|---|
Next Message | Hiroshi Inoue | 1998-09-28 04:09:47 | LIBPQ for WIN32 |
Previous Message | Tom Lane | 1998-09-27 21:34:33 | It sorta works, but I'm confused about locking |