]> granicus.if.org Git - postgresql/commitdiff
Get the MIPS assembler syntax right. Also add a separate sync command;
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 27 Aug 2005 16:22:48 +0000 (16:22 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 27 Aug 2005 16:22:48 +0000 (16:22 +0000)
the reference I consulted yesterday said SC does a SYNC, but apparently
this is not true on newer MIPS processors, so be safe.

src/include/storage/s_lock.h

index 3951aa7137b0b22afd2b7d2c068379f94111950d..75b15a334e23716ad05a0581c7b61c9543aa8c65 100644 (file)
@@ -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.137 2005/08/26 22:04:42 tgl Exp $
+ *       $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.138 2005/08/27 16:22:48 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -455,6 +455,7 @@ do \
 
 #if defined(__mips__) && !defined(__sgi)
 /* Note: on SGI we use the OS' mutex ABI, see below */
+/* Note: R10000 processors require a separate SYNC */
 #define HAS_TEST_AND_SET
 
 typedef unsigned int slock_t;
@@ -474,11 +475,12 @@ tas(volatile slock_t *lock)
                "       .set noreorder      \n"
                "       .set nomacro        \n"
                "       ll      %0, %2      \n"
-               "       or      %1, %0, $1  \n"
+               "       or      %1, %0,   \n"
                "       sc      %1, %2      \n"
-               "       xori    %1, $1      \n"
+               "       xori    %1,       \n"
                "       or      %0, %0, %1  \n"
-               "1:     .set pop              "
+               "       sync                \n"
+               "       .set pop              "
 :              "=&r" (_res), "=&r" (_tmp), "+R" (*_l)
 :
 :              "memory");