The attached applied patch moves slock_t defines into s_lock.h and moves
them out of the individual include/port files so they are centralized
and easier to maintain.  This patch was already reviewed during 7.4 beta
but was recreated to match current CVS.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/port/dynloader/netbsd.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/port/dynloader/netbsd.c,v
retrieving revision 1.12
diff -c -c -r1.12 netbsd.c
*** src/backend/port/dynloader/netbsd.c 4 Aug 2003 02:40:02 -0000       1.12
--- src/backend/port/dynloader/netbsd.c 23 Dec 2003 03:28:43 -0000
***************
*** 1,4 ****
! /*-
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
--- 1,4 ----
! /*
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
Index: src/backend/port/dynloader/openbsd.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/port/dynloader/openbsd.c,v
retrieving revision 1.12
diff -c -c -r1.12 openbsd.c
*** src/backend/port/dynloader/openbsd.c        4 Aug 2003 02:40:02 -0000       1.12
--- src/backend/port/dynloader/openbsd.c        23 Dec 2003 03:28:43 -0000
***************
*** 1,4 ****
! /*-
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
--- 1,4 ----
! /*
   * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
   * Portions Copyright (c) 1990 The Regents of the University of California.
   * All rights reserved.
Index: src/backend/storage/lmgr/s_lock.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/storage/lmgr/s_lock.c,v
retrieving revision 1.19
diff -c -c -r1.19 s_lock.c
*** src/backend/storage/lmgr/s_lock.c   23 Dec 2003 00:32:06 -0000      1.19
--- src/backend/storage/lmgr/s_lock.c   23 Dec 2003 03:28:43 -0000
***************
*** 17,23 ****
  
  #include <sys/time.h>
  #include <unistd.h>
- 
  #include "storage/s_lock.h"
  
  
--- 17,22 ----
***************
*** 118,123 ****
--- 117,125 ----
   * Various TAS implementations that cannot live in s_lock.h as no inline
   * definition exists (yet).
   * In the future, get rid of tas.[cso] and fold it into this file.
+  *
+  * If you change something here, you have to modify s_lock.h because
+  * the definitions for these is split between this file and s_lock.h.
   */
  
  
Index: src/backend/storage/lmgr/spin.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/storage/lmgr/spin.c,v
retrieving revision 1.12
diff -c -c -r1.12 spin.c
*** src/backend/storage/lmgr/spin.c     29 Nov 2003 19:51:57 -0000      1.12
--- src/backend/storage/lmgr/spin.c     23 Dec 2003 03:28:43 -0000
***************
*** 25,30 ****
--- 25,31 ----
  #include "storage/lwlock.h"
  #include "storage/pg_sema.h"
  #include "storage/spin.h"
+ #include "storage/s_lock.h"
  
  
  #ifdef HAS_TEST_AND_SET
Index: src/include/port/aix.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/aix.h,v
retrieving revision 1.9
diff -c -c -r1.9 aix.h
*** src/include/port/aix.h      12 Nov 2002 00:39:08 -0000      1.9
--- src/include/port/aix.h      23 Dec 2003 03:28:46 -0000
***************
*** 1,8 ****
  #define CLASS_CONFLICT
  #define DISABLE_XOPEN_NLS
- #define HAS_TEST_AND_SET
- 
- typedef unsigned int slock_t;
  
  #include <sys/machine.h>              /* ENDIAN definitions for network
                                                                 * communication */
--- 1,5 ----
Index: src/include/port/beos.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/beos.h,v
retrieving revision 1.11
diff -c -c -r1.11 beos.h
*** src/include/port/beos.h     25 Oct 2001 05:50:09 -0000      1.11
--- src/include/port/beos.h     23 Dec 2003 03:28:46 -0000
***************
*** 2,11 ****
  #include <kernel/image.h>
  #include <sys/ioctl.h>
  
- #define HAS_TEST_AND_SET
- 
- typedef unsigned char slock_t;
- 
  #define AF_UNIX               10                      /* no domain sockets on BeOS */
  
  /* Beos doesn't have all the required getrusage fields */
--- 2,7 ----
Index: src/include/port/bsdi.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/bsdi.h,v
retrieving revision 1.11
diff -c -c -r1.11 bsdi.h
*** src/include/port/bsdi.h     23 Dec 2003 00:32:06 -0000      1.11
--- src/include/port/bsdi.h     23 Dec 2003 03:28:46 -0000
***************
*** 1,12 ****
- #if defined(__i386__) || defined(__x86_64__)
- typedef unsigned char slock_t;
- #endif
- #if defined(__ia64)
- typedef unsigned int slock_t;
- #endif
- #if defined(__sparc__)
- typedef unsigned char slock_t;
- #endif
- 
- #define HAS_TEST_AND_SET
- 
--- 0 ----
Index: src/include/port/cygwin.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/cygwin.h,v
retrieving revision 1.5
diff -c -c -r1.5 cygwin.h
*** src/include/port/cygwin.h   29 Nov 2003 19:52:08 -0000      1.5
--- src/include/port/cygwin.h   23 Dec 2003 03:28:46 -0000
***************
*** 1,8 ****
  /* $PostgreSQL: pgsql-server/src/include/port/cygwin.h,v 1.5 2003/11/29 19:52:08 
pgsql Exp $ */
  
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- 
  #include <cygwin/version.h>
  
  /*
--- 1,5 ----
Index: src/include/port/darwin.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/darwin.h,v
retrieving revision 1.5
diff -c -c -r1.5 darwin.h
*** src/include/port/darwin.h   28 Oct 2001 06:26:08 -0000      1.5
--- src/include/port/darwin.h   23 Dec 2003 03:28:46 -0000
***************
*** 1,13 ****
  #define __darwin__    1
- 
- #if defined(__ppc__)
- #define HAS_TEST_AND_SET
- #endif
- 
- #if defined(__ppc__)
- typedef unsigned int slock_t;
- 
- #else
- typedef unsigned char slock_t;
- 
- #endif
--- 1 ----
Index: src/include/port/freebsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/freebsd.h,v
retrieving revision 1.13
diff -c -c -r1.13 freebsd.h
*** src/include/port/freebsd.h  23 Dec 2003 00:32:06 -0000      1.13
--- src/include/port/freebsd.h  23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__ia64)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- #endif
- 
- #if defined(__sparc__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__vax__)
- #define NEED_VAX_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__ns32k__)
- #define NEED_NS32K_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__m68k__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__arm__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__mips__)
- /* #  undef HAS_TEST_AND_SET */
- #endif
- 
- #if defined(__alpha__)
- #define HAS_TEST_AND_SET
- typedef unsigned long slock_t;
- #endif
- 
- #if defined(__powerpc__)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- 
- #endif
--- 0 ----
Index: src/include/port/hpux.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/hpux.h,v
retrieving revision 1.19
diff -c -c -r1.19 hpux.h
*** src/include/port/hpux.h     4 Aug 2003 00:43:32 -0000       1.19
--- src/include/port/hpux.h     23 Dec 2003 03:28:46 -0000
***************
*** 10,29 ****
  
  #if defined(__hppa)
  
- #define HAS_TEST_AND_SET
- typedef struct
- {
-       int                     sema[4];
- } slock_t;
- 
  #ifndef                       BYTE_ORDER
  #define                       BYTE_ORDER              BIG_ENDIAN
  #endif
  
  #elif defined(__ia64)
- 
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
  
  #ifndef                       BYTE_ORDER
  #define                       BYTE_ORDER              LITTLE_ENDIAN
--- 10,20 ----
Index: src/include/port/irix5.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/irix5.h,v
retrieving revision 1.8
diff -c -c -r1.8 irix5.h
*** src/include/port/irix5.h    12 Nov 2002 00:39:08 -0000      1.8
--- src/include/port/irix5.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,3 ****
- #define HAS_TEST_AND_SET
- 
- typedef unsigned long slock_t;
--- 0 ----
Index: src/include/port/linux.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/linux.h,v
retrieving revision 1.38
diff -c -c -r1.38 linux.h
*** src/include/port/linux.h    26 Oct 2003 01:41:10 -0000      1.38
--- src/include/port/linux.h    23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- typedef unsigned char slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__sparc__)
- typedef unsigned char slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__powerpc64__)
- typedef unsigned long slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__powerpc__)
- typedef unsigned int slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__alpha__)
- typedef long int slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__mips__)
- typedef unsigned int slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__arm__)
- typedef unsigned char slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__ia64__)
- typedef unsigned int slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__s390__) || defined(__s390x__)
- typedef unsigned int slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #elif defined(__mc68000__)
- typedef unsigned char slock_t;
- 
- #define HAS_TEST_AND_SET
- 
- #endif
--- 0 ----
Index: src/include/port/netbsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/netbsd.h,v
retrieving revision 1.12
diff -c -c -r1.12 netbsd.h
*** src/include/port/netbsd.h   23 Dec 2003 00:32:06 -0000      1.12
--- src/include/port/netbsd.h   23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__ia64)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- #endif
- 
- #if defined(__sparc__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__vax__)
- #define NEED_VAX_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__ns32k__)
- #define NEED_NS32K_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__m68k__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__arm__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__mips__)
- /* #  undef HAS_TEST_AND_SET */
- #endif
- 
- #if defined(__alpha__)
- #define HAS_TEST_AND_SET
- typedef unsigned long slock_t;
- #endif
- 
- #if defined(__powerpc__)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- 
- #endif
--- 0 ----
Index: src/include/port/nextstep.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/nextstep.h,v
retrieving revision 1.6
diff -c -c -r1.6 nextstep.h
*** src/include/port/nextstep.h 28 Oct 2000 23:53:00 -0000      1.6
--- src/include/port/nextstep.h 23 Dec 2003 03:28:46 -0000
***************
*** 15,18 ****
  #endif
  
  #define NO_WAITPID
- typedef struct mutex slock_t;
--- 15,17 ----
Index: src/include/port/openbsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/openbsd.h,v
retrieving revision 1.11
diff -c -c -r1.11 openbsd.h
*** src/include/port/openbsd.h  23 Dec 2003 00:32:06 -0000      1.11
--- src/include/port/openbsd.h  23 Dec 2003 03:28:46 -0000
***************
*** 1,51 ****
- #if defined(__i386__) || defined(__x86_64__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__ia64)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- #endif
- 
- #if defined(__sparc__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__vax__)
- #define NEED_VAX_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__ns32k__)
- #define NEED_NS32K_TAS_ASM
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__m68k__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__arm__)
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- #endif
- 
- #if defined(__mips__)
- /* #  undef HAS_TEST_AND_SET */
- #endif
- 
- #if defined(__alpha__)
- #define HAS_TEST_AND_SET
- typedef unsigned long slock_t;
- #endif
- 
- #if defined(__powerpc__)
- #define HAS_TEST_AND_SET
- typedef unsigned int slock_t;
- 
- #endif
--- 0 ----
Index: src/include/port/osf.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/osf.h,v
retrieving revision 1.7
diff -c -c -r1.7 osf.h
*** src/include/port/osf.h      28 Oct 2001 06:26:08 -0000      1.7
--- src/include/port/osf.h      23 Dec 2003 03:28:46 -0000
***************
*** 1,7 ****
  #define NOFIXADE
  #define DISABLE_XOPEN_NLS
- #define HAS_TEST_AND_SET
-  /* #include <sys/mman.h> */  /* for msemaphore */
- /*typedef msemaphore slock_t;*/
- #include <alpha/builtins.h>
- typedef volatile long slock_t;
--- 1,2 ----
Index: src/include/port/qnx4.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/qnx4.h,v
retrieving revision 1.8
diff -c -c -r1.8 qnx4.h
*** src/include/port/qnx4.h     9 May 2003 16:59:43 -0000       1.8
--- src/include/port/qnx4.h     23 Dec 2003 03:28:46 -0000
***************
*** 5,12 ****
  #include <unix.h>
  #include <sys/select.h>                       /* for select */
  
- #define HAS_TEST_AND_SET
- 
  #undef HAVE_GETRUSAGE
  
  #define strncasecmp strnicmp
--- 5,10 ----
***************
*** 21,28 ****
  #endif   /* NAN */
  
  typedef u_short ushort;
- 
- typedef unsigned char slock_t;
  
  extern int    isnan(double dsrc);
  
--- 19,24 ----
Index: src/include/port/sco.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/sco.h,v
retrieving revision 1.15
diff -c -c -r1.15 sco.h
*** src/include/port/sco.h      23 Dec 2003 00:32:06 -0000      1.15
--- src/include/port/sco.h      23 Dec 2003 03:28:46 -0000
***************
*** 1,16 ****
  /* see src/backend/libpq/pqcomm.c */
  #define SCO_ACCEPT_BUG
  
- #define HAS_TEST_AND_SET
- 
  #define USE_UNIVEL_CC
- 
- #if defined(__ia64)
- typedef unsigned int slock_t;
- #else
- typedef unsigned char slock_t;
- #endif
- 
  
  #ifndef                       BIG_ENDIAN
  #define                       BIG_ENDIAN              4321
--- 1,7 ----
Index: src/include/port/solaris.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/solaris.h,v
retrieving revision 1.9
diff -c -c -r1.9 solaris.h
*** src/include/port/solaris.h  29 Nov 2003 19:52:08 -0000      1.9
--- src/include/port/solaris.h  23 Dec 2003 03:28:46 -0000
***************
*** 1,8 ****
  /* $PostgreSQL: pgsql-server/src/include/port/solaris.h,v 1.9 2003/11/29 19:52:08 
pgsql Exp $ */
  
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- 
  /*
   * Sort this out for all operating systems some time.  The __xxx
   * symbols are defined on both GCC and Solaris CC, although GCC
--- 1,5 ----
Index: src/include/port/sunos4.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/sunos4.h,v
retrieving revision 1.7
diff -c -c -r1.7 sunos4.h
*** src/include/port/sunos4.h   28 Oct 2001 06:26:08 -0000      1.7
--- src/include/port/sunos4.h   23 Dec 2003 03:28:46 -0000
***************
*** 1,6 ****
- #define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
- 
  /* sprintf() returns char *, not int, on SunOS 4.1.x */
  #define SPRINTF_CHAR
  
--- 1,3 ----
Index: src/include/port/svr4.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/svr4.h,v
retrieving revision 1.11
diff -c -c -r1.11 svr4.h
*** src/include/port/svr4.h     28 Oct 2001 06:26:08 -0000      1.11
--- src/include/port/svr4.h     23 Dec 2003 03:28:46 -0000
***************
*** 3,13 ****
  #define                       BYTE_ORDER              BIG_ENDIAN
  #endif
  #endif
- 
- #ifdef sinix
- #define HAS_TEST_AND_SET
- 
- #include "abi_mutex.h"
- typedef abilock_t slock_t;
- 
- #endif
--- 3,5 ----
Index: src/include/port/univel.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/univel.h,v
retrieving revision 1.19
diff -c -c -r1.19 univel.h
*** src/include/port/univel.h   23 Dec 2003 00:32:06 -0000      1.19
--- src/include/port/univel.h   23 Dec 2003 03:28:46 -0000
***************
*** 6,18 ****
   ***************************************/
  #define USE_UNIVEL_CC
  
- #if defined(__ia64)
- typedef unsigned int slock_t;
- #else
- typedef unsigned char slock_t;
- #endif
- 
- 
  #ifndef                       BIG_ENDIAN
  #define                       BIG_ENDIAN              4321
  #endif
--- 6,11 ----
Index: src/include/port/unixware.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/unixware.h,v
retrieving revision 1.13
diff -c -c -r1.13 unixware.h
*** src/include/port/unixware.h 23 Dec 2003 00:32:06 -0000      1.13
--- src/include/port/unixware.h 23 Dec 2003 03:28:46 -0000
***************
*** 9,21 ****
   ***************************************/
  #define USE_UNIVEL_CC
  
- #if defined(__ia64)
- typedef unsigned int slock_t;
- #else
- typedef unsigned char slock_t;
- #endif
- 
- 
  #ifndef                       BIG_ENDIAN
  #define                       BIG_ENDIAN              4321
  #endif
--- 9,14 ----
Index: src/include/storage/s_lock.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/storage/s_lock.h,v
retrieving revision 1.119
diff -c -c -r1.119 s_lock.h
*** src/include/storage/s_lock.h        23 Dec 2003 00:32:06 -0000      1.119
--- src/include/storage/s_lock.h        23 Dec 2003 03:28:46 -0000
***************
*** 73,84 ****
  #include "storage/pg_sema.h"
  
  
- #if defined(HAS_TEST_AND_SET)
- 
- 
  #if defined(__GNUC__) || defined(__ICC)
  /*************************************************************************
   * All the gcc inlines
   */
  
  /*
--- 73,83 ----
  #include "storage/pg_sema.h"
  
  
  #if defined(__GNUC__) || defined(__ICC)
  /*************************************************************************
   * All the gcc inlines
+  * Gcc consistently defines the CPU as __cpu__.
+  * Other compilers use __cpu or __cpu__ so we test for both in those cases.
   */
  
  /*
***************
*** 95,100 ****
--- 94,102 ----
  
  
  #if defined(__i386__) || defined(__x86_64__) /* AMD Opteron */
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
+ 
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 114,120 ****
  
  
  /* Intel Itanium */
! #if defined(__ia64__) || defined(__ia64)
  #define TAS(lock) tas(lock)
  
  static __inline__ int
--- 116,125 ----
  
  
  /* Intel Itanium */
! #if defined(__ia64__) || defined(__ia64)  /* __ia64 is used by ICC the compiler? */
! typedef unsigned int slock_t;
! #define HAS_TEST_AND_SET
! 
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 135,140 ****
--- 140,148 ----
  
  
  #if defined(__arm__) || defined(__arm)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
+ 
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 153,161 ****
  
  
  #if defined(__s390__) && !defined(__s390x__)
! /*
!  * S/390 Linux
!  */
  #define TAS(lock)        tas(lock)
  
  static __inline__ int
--- 161,170 ----
  
  
  #if defined(__s390__) && !defined(__s390x__)
! typedef unsigned int slock_t;
! #define HAS_TEST_AND_SET
! 
! /* S/390 Linux */
  #define TAS(lock)        tas(lock)
  
  static __inline__ int
***************
*** 179,187 ****
  #endif         /* __s390__ */
  
  #if defined(__s390x__)
! /*
!  * S/390x Linux (64-bit zSeries)
!  */
  #define TAS(lock)        tas(lock)
  
  static __inline__ int
--- 188,196 ----
  #endif         /* __s390__ */
  
  #if defined(__s390x__)
! typedef unsigned int slock_t;
! #define HAS_TEST_AND_SET
! /* S/390x Linux (64-bit zSeries) */
  #define TAS(lock)        tas(lock)
  
  static __inline__ int
***************
*** 206,211 ****
--- 215,222 ----
  
  
  #if defined(__sparc__)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 223,228 ****
--- 234,247 ----
  #endif         /* __sparc__ */
  
  #if defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__)
+ /* Is this correct? */
+ #ifndef defined(__powerpc64__)
+ typedef unsigned int slock_t;
+ #else
+ typedef unsigned long slock_t;
+ #endif
+ #define HAS_TEST_AND_SET
+ 
  #define TAS(lock) tas(lock)
  /*
   * NOTE: per the Enhanced PowerPC Architecture manual, v1.0 dated 7-May-2002,
***************
*** 255,264 ****
--- 274,295 ----
        return _res;
  }
  
+ /*
+  * PowerPC S_UNLOCK is almost standard but requires a "sync" instruction.
+  */
+ #define S_UNLOCK(lock)        \
+ do \
+ {\
+       __asm__ __volatile__ (" sync \n"); \
+       *((volatile slock_t *) (lock)) = 0; \
+ } while (0)
+ 
  #endif /* powerpc */
  
  
  #if defined(__mc68000__) && defined(__linux__)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 280,304 ****
  #endif         /* defined(__mc68000__) && defined(__linux__) */
  
  
! #if defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__)
! /*
!  * PowerPC S_UNLOCK is almost standard but requires a "sync" instruction.
!  */
! #define S_UNLOCK(lock)        \
! do \
! {\
!       __asm__ __volatile__ (" sync \n"); \
!       *((volatile slock_t *) (lock)) = 0; \
! } while (0)
! 
! #endif /* powerpc */
! 
! 
! #if defined(NEED_VAX_TAS_ASM)
  /*
   * VAXen -- even multiprocessor ones
   * (thanks to Tom Ivar Helbekkmo)
   */
  #define TAS(lock) tas(lock)
  
  static __inline__ int
--- 311,323 ----
  #endif         /* defined(__mc68000__) && defined(__linux__) */
  
  
! #if defined(__vax__)
  /*
   * VAXen -- even multiprocessor ones
   * (thanks to Tom Ivar Helbekkmo)
   */
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 317,326 ****
        return _res;
  }
  
! #endif         /* NEED_VAX_TAS_ASM */
  
  
! #if defined(NEED_NS32K_TAS_ASM)
  #define TAS(lock) tas(lock)
  
  static __inline__ int
--- 336,347 ----
        return _res;
  }
  
! #endif         /* __vax__ */
  
  
! #if defined(__ns32k__)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
  #define TAS(lock) tas(lock)
  
  static __inline__ int
***************
*** 335,388 ****
        return _res;
  }
  
! #endif         /* NEED_NS32K_TAS_ASM */
! 
! 
! 
! #else                                                 /* !__GNUC__ */
! 
! /***************************************************************************
!  * All non-gcc inlines
!  */
! 
! #if defined(USE_UNIVEL_CC)
! #define TAS(lock)     tas(lock)
! 
! asm int
! tas(volatile slock_t *s_lock)
! {
! /* UNIVEL wants %mem in column 1, so we don't pg_indent this file */
! %mem s_lock
!       pushl %ebx
!       movl s_lock, %ebx
!       movl $255, %eax
!       lock
!       xchgb %al, (%ebx)
!       popl %ebx
! }
! 
! #endif         /* defined(USE_UNIVEL_CC) */
! 
! #endif         /* defined(__GNUC__) */
! 
! 
! 
! /*************************************************************************
!  * These are the platforms that have only one compiler, or do not use inline
!  * assembler (and hence have common code for gcc and non-gcc compilers,
!  * if both are available).
!  */
  
  
  #if defined(__alpha) || defined(__alpha__)
- 
  /*
   * Correct multi-processor locking methods are explained in section 5.5.3
   * of the Alpha AXP Architecture Handbook, which at this writing can be
   * found at ftp://ftp.netbsd.org/pub/NetBSD/misc/dec-docs/index.html.
   * For gcc we implement the handbook's code directly with inline assembler.
   */
! #if defined(__GNUC__)
  
  #define TAS(lock)  tas(lock)
  #define S_UNLOCK(lock)        \
--- 356,373 ----
        return _res;
  }
  
! #endif         /* __ns32k__ */
  
  
  #if defined(__alpha) || defined(__alpha__)
  /*
   * Correct multi-processor locking methods are explained in section 5.5.3
   * of the Alpha AXP Architecture Handbook, which at this writing can be
   * found at ftp://ftp.netbsd.org/pub/NetBSD/misc/dec-docs/index.html.
   * For gcc we implement the handbook's code directly with inline assembler.
   */
! typedef unsigned long slock_t;
! #define HAS_TEST_AND_SET
  
  #define TAS(lock)  tas(lock)
  #define S_UNLOCK(lock)        \
***************
*** 416,423 ****
        return (int) _res;
  }
  
! #else                                                 /* !defined(__GNUC__) */
  
  /*
   * The Tru64 compiler doesn't support gcc-style inline asm, but it does
   * have some builtin functions that accomplish much the same results.
--- 401,469 ----
        return (int) _res;
  }
  
! #endif /* __alpha || __alpha__ */
! 
! 
! /* These live in s_lock.c, but only for gcc */
! 
! #if defined(__m68k__)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #endif
! 
! #ifdef sinix  /* This symbol is not protected with __, for SvR4 port */
! #include "abi_mutex.h"
! typedef abilock_t slock_t;
! #define HAS_TEST_AND_SET
! #endif
! 
! 
! /* These are in s_lock.c */
! 
! #if defined(__m68k__)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #endif
! 
! #if defined(__mips__) && !defined(__sgi)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #endif
! 
! #endif        /* __GNUC__ */
! 
! 
! 
! /***************************************************************************
!  * Uses non-gcc inline assembly:
!  */
! 
! #if !defined(HAS_TEST_AND_SET)
! 
! #if defined(USE_UNIVEL_CC)
! typedef unsigned char slock_t;
! #define HAS_TEST_AND_SET
! #define TAS(lock)     tas(lock)
! 
! asm int
! tas(volatile slock_t *s_lock)
! {
! /* UNIVEL wants %mem in column 1, so we don't pg_indent this file */
! %mem s_lock
!       pushl %ebx
!       movl s_lock, %ebx
!       movl $255, %eax
!       lock
!       xchgb %al, (%ebx)
!       popl %ebx
! }
! 
! #endif         /* defined(USE_UNIVEL_CC) */
! 
  
+ #if defined(__alpha) || defined(__alpha__)
+ typedef volatile long slock_t;
+ #define HAS_TEST_AND_SET
  /*
   * The Tru64 compiler doesn't support gcc-style inline asm, but it does
   * have some builtin functions that accomplish much the same results.
***************
*** 428,444 ****
   */
  
  #include <alpha/builtins.h>
- 
  #define S_INIT_LOCK(lock)  (*(lock) = 0)
  #define TAS(lock)                (__LOCK_LONG_RETRY((lock), 1) == 0)
  #define S_UNLOCK(lock)           __UNLOCK_LONG(lock)
  
- #endif         /* defined(__GNUC__) */
- 
  #endif         /* __alpha || __alpha__ */
  
  
  #if defined(__hppa)
  /*
   * HP's PA-RISC
   *
--- 474,492 ----
   */
  
  #include <alpha/builtins.h>
  #define S_INIT_LOCK(lock)  (*(lock) = 0)
  #define TAS(lock)                (__LOCK_LONG_RETRY((lock), 1) == 0)
  #define S_UNLOCK(lock)           __UNLOCK_LONG(lock)
  
  #endif         /* __alpha || __alpha__ */
  
  
  #if defined(__hppa)
+ typedef struct
+ {
+       int                     sema[4];
+ } slock_t;
+ #define HAS_TEST_AND_SET
  /*
   * HP's PA-RISC
   *
***************
*** 462,468 ****
--- 510,519 ----
  
  #endif         /* __hppa */
  
+ 
  #if defined(__QNX__) && defined(__WATCOMC__)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
  /*
   * QNX 4 using WATCOM C
   */
***************
*** 490,495 ****
--- 541,548 ----
   * assembly from his NECEWS SVR4 port, but we probably ought to retain this
   * for the R3000 chips out there.
   */
+ typedef unsigned long slock_t;
+ #define HAS_TEST_AND_SET
  #include "mutex.h"
  #define TAS(lock)     (test_and_set(lock,1))
  #define S_UNLOCK(lock)        (test_then_and(lock,0))
***************
*** 497,502 ****
--- 550,556 ----
  #define S_LOCK_FREE(lock)     (test_then_add(lock,0) == 0)
  #endif         /* __sgi */
  
+ 
  #if defined(sinix)
  /*
   * SINIX / Reliant UNIX
***************
*** 504,509 ****
--- 558,564 ----
   * member. (Basically same as SGI)
   *
   */
+ #define HAS_TEST_AND_SET
  #define TAS(lock)     (!acquire_lock(lock))
  #define S_UNLOCK(lock)        release_lock(lock)
  #define S_INIT_LOCK(lock)     init_lock(lock)
***************
*** 517,532 ****
   *
   * Note that slock_t on POWER/POWER2/PowerPC is int instead of char
   */
  #define TAS(lock)                     _check_lock(lock, 0, 1)
  #define S_UNLOCK(lock)                _clear_lock(lock, 0)
  #endif         /* _AIX */
  
  
  #if defined (nextstep)
! /*
!  * NEXTSTEP (mach)
!  * slock_t is defined as a struct mutex.
!  */
  
  #define S_LOCK(lock)  mutex_lock(lock)
  #define S_UNLOCK(lock)        mutex_unlock(lock)
--- 572,586 ----
   *
   * Note that slock_t on POWER/POWER2/PowerPC is int instead of char
   */
+ #define HAS_TEST_AND_SET
  #define TAS(lock)                     _check_lock(lock, 0, 1)
  #define S_UNLOCK(lock)                _clear_lock(lock, 0)
  #endif         /* _AIX */
  
  
  #if defined (nextstep)
! typedef struct mutex slock_t;
! #define HAS_TEST_AND_SET
  
  #define S_LOCK(lock)  mutex_lock(lock)
  #define S_UNLOCK(lock)        mutex_unlock(lock)
***************
*** 535,547 ****
  #define S_LOCK_FREE(alock)    ((alock)->lock == 0)
  #endif         /* nextstep */
  
  
  
- #else  /* HAS_TEST_AND_SET */
  
  #ifdef HAVE_SPINLOCKS
  #error PostgreSQL does not have native spinlock support on this platform.  To 
continue the compilation, rerun configure using --disable-spinlocks.  However, 
performance will be poor.  Please report this to [EMAIL PROTECTED]
! #endif
  
  /*
   * Fake spinlock implementation using semaphores --- slow and prone
--- 589,616 ----
  #define S_LOCK_FREE(alock)    ((alock)->lock == 0)
  #endif         /* nextstep */
  
+ /* These are in s_lock.c */
  
+ #if defined(sun3)
+ typedef unsigned char slock_t;
+ #define HAS_TEST_AND_SET
+ #endif
+ 
+ #if defined(__sparc__) || defined(__sparc)
+ #define HAS_TEST_AND_SET
+ typedef unsigned char slock_t;
+ #endif
+ 
+ 
+ #endif        /* !defined(HAS_TEST_AND_SET */
  
  
+ 
+ #ifndef HAS_TEST_AND_SET
  #ifdef HAVE_SPINLOCKS
  #error PostgreSQL does not have native spinlock support on this platform.  To 
continue the compilation, rerun configure using --disable-spinlocks.  However, 
performance will be poor.  Please report this to [EMAIL PROTECTED]
! 
! #else
  
  /*
   * Fake spinlock implementation using semaphores --- slow and prone
***************
*** 560,566 ****
  #define S_INIT_LOCK(lock)     s_init_lock_sema(lock)
  #define TAS(lock)     tas_sema(lock)
  
! #endif         /* HAS_TEST_AND_SET */
  
  
  
--- 629,636 ----
  #define S_INIT_LOCK(lock)     s_init_lock_sema(lock)
  #define TAS(lock)     tas_sema(lock)
  
! #endif        /* HAVE_SPINLOCKS */
! #endif        /* HAS_TEST_AND_SET */
  
  
  
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to