summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane2005-08-26 22:04:42 +0000
committerTom Lane2005-08-26 22:04:42 +0000
commit846319db3ffb6b9c0f1e9e4722fc2652d82fccad (patch)
tree49ec4f39a23ae6ae99a3822a97423d9966535320 /src/include
parentf9244df78f647de52f7280bcfb62449b27348fa3 (diff)
Another try at the inlined MIPS spinlock code. Can't test this myself,
but for sure it's not any more broken than the prior version.
Diffstat (limited to 'src/include')
-rw-r--r--src/include/storage/s_lock.h24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index 0124b365a01..3951aa7137b 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -66,7 +66,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.136 2005/08/26 14:47:35 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.137 2005/08/26 22:04:42 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -464,25 +464,25 @@ typedef unsigned int slock_t;
static __inline__ int
tas(volatile slock_t *lock)
{
- register volatile slock_t *__l = lock;
- register int __r;
+ register volatile slock_t *_l = lock;
+ register int _res;
+ register int _tmp;
__asm__ __volatile__(
" .set push \n"
" .set mips2 \n"
" .set noreorder \n"
" .set nomacro \n"
- "1: ll %0, %1 \n"
- " bne %0, $0, 1f \n"
- " xori %0, 1 \n"
- " sc %0, %1 \n"
- " beq %0, $0, 1b \n"
- " sync \n"
+ " ll %0, %2 \n"
+ " or %1, %0, $1 \n"
+ " sc %1, %2 \n"
+ " xori %1, $1 \n"
+ " or %0, %0, %1 \n"
"1: .set pop "
-: "=&r" (__r), "+R" (*__l)
+: "=&r" (_res), "=&r" (_tmp), "+R" (*_l)
:
-: "memory", "cc");
- return __r;
+: "memory");
+ return _res;
}
#endif /* __mips__ && !__sgi */