Tom Lane wrote:
> Bruce Momjian <[EMAIL PROTECTED]> writes:
> > He is uncomfortable with the port/*.h changes at this point, so it seems
> > I am going to have to add Itanium/Opteron tests to most of those files.
>
> Why don't you try to put together a proposed patch of that kind, and
> then we can look to see how big and ugly it is compared to the other?
> If the alternative is shown to be really messy, that would sway my
> opinion, maybe Marc's too.
OK, here is an Opteron/Itanium patch that might work. I say "might"
because I don't have a lot of confidence in the current spinlock
detection code. There is an uncoupling between the definition of
HAS_TEST_AND_SET, the data type used by slock_t, and the assembler code.
For example, here is darwin.h:
#if defined(__ppc__)
#define HAS_TEST_AND_SET
#endif
#if defined(__ppc__)
typedef unsigned int slock_t;
#else
typedef unsigned char slock_t;
#endif
Does this say that Darwin on something other than PPC doesn't have
spinlocks? Is that going to hit a spinlock define, or fall through?
Also, look at NEED_I386_TAS_ASM: It is used only by SCO compilers,
though it is defined for all Intel platforms. The s_lock.h gcc test
already tests __i386__. It really doesn't do anything on non-SCO
compilers, and non-SCO compilers are better testing for i386 anyway.
Also, Solaris has just this:
#define HAS_TEST_AND_SET
typedef unsigned char slock_t;
How do they know what CPU is being used? Both Sparc and i386 use
"unsigned char", so I guess it is OK, but I think you can see what I
mean when I say I don't have a lot of confidence in what we have now.
Let me also add that some slock_t typedef's didn't match the assembly
code. For example, __alpha_ on netbsd.h had slock_t defined as
"unsigned long", while in linux.h it was "long int". I assumed the
alpha was the correct one, but clearly they should be the same because
they use the same assembly code.
See what I mean.
--
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/include/port/bsdi.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/bsdi.h,v
retrieving revision 1.8
diff -c -c -r1.8 bsdi.h
*** src/include/port/bsdi.h 4 Aug 2003 00:43:32 -0000 1.8
--- src/include/port/bsdi.h 12 Sep 2003 15:14:15 -0000
***************
*** 1,10 ****
! #if defined(__i386__)
#define NEED_I386_TAS_ASM
#endif
#if defined(__sparc__)
#define NEED_SPARC_TAS_ASM
#endif
#define HAS_TEST_AND_SET
- typedef unsigned char slock_t;
--- 1,14 ----
! #if defined(__i386__) || defined(__x86_64__)
#define NEED_I386_TAS_ASM
+ typedef unsigned char slock_t;
+ #endif
+ #if defined(__ia64)
+ typedef unsigned int slock_t;
#endif
#if defined(__sparc__)
#define NEED_SPARC_TAS_ASM
+ typedef unsigned char slock_t;
#endif
#define HAS_TEST_AND_SET
Index: src/include/port/freebsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/freebsd.h,v
retrieving revision 1.10
diff -c -c -r1.10 freebsd.h
*** src/include/port/freebsd.h 4 Aug 2003 00:43:32 -0000 1.10
--- src/include/port/freebsd.h 12 Sep 2003 15:14:15 -0000
***************
*** 1,7 ****
! #if defined(__i386__)
#define NEED_I386_TAS_ASM
#define HAS_TEST_AND_SET
typedef unsigned char slock_t;
#endif
#if defined(__sparc__)
--- 1,12 ----
! #if defined(__i386__) || defined(__x86_64__)
#define NEED_I386_TAS_ASM
#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__)
Index: src/include/port/netbsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/netbsd.h,v
retrieving revision 1.9
diff -c -c -r1.9 netbsd.h
*** src/include/port/netbsd.h 4 Aug 2003 00:43:32 -0000 1.9
--- src/include/port/netbsd.h 12 Sep 2003 15:14:15 -0000
***************
*** 1,7 ****
! #if defined(__i386__)
#define NEED_I386_TAS_ASM
#define HAS_TEST_AND_SET
typedef unsigned char slock_t;
#endif
#if defined(__sparc__)
--- 1,12 ----
! #if defined(__i386__) || defined(__x86_64__)
#define NEED_I386_TAS_ASM
#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__)
Index: src/include/port/openbsd.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/openbsd.h,v
retrieving revision 1.8
diff -c -c -r1.8 openbsd.h
*** src/include/port/openbsd.h 4 Aug 2003 00:43:32 -0000 1.8
--- src/include/port/openbsd.h 12 Sep 2003 15:14:15 -0000
***************
*** 1,7 ****
! #if defined(__i386__)
#define NEED_I386_TAS_ASM
#define HAS_TEST_AND_SET
typedef unsigned char slock_t;
#endif
#if defined(__sparc__)
--- 1,12 ----
! #if defined(__i386__) || defined(__x86_64__)
#define NEED_I386_TAS_ASM
#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__)
Index: src/include/port/sco.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/sco.h,v
retrieving revision 1.13
diff -c -c -r1.13 sco.h
*** src/include/port/sco.h 28 Oct 2001 06:26:08 -0000 1.13
--- src/include/port/sco.h 12 Sep 2003 15:14:15 -0000
***************
*** 6,12 ****
--- 6,18 ----
#define USE_UNIVEL_CC
+ #if defined(__ia64)
+ #define HAS_TEST_AND_SET
+ typedef unsigned int slock_t;
+ #else
typedef unsigned char slock_t;
+ #endif
+
#ifndef BIG_ENDIAN
#define BIG_ENDIAN 4321
Index: src/include/port/univel.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/univel.h,v
retrieving revision 1.17
diff -c -c -r1.17 univel.h
*** src/include/port/univel.h 28 Oct 2001 06:26:08 -0000 1.17
--- src/include/port/univel.h 12 Sep 2003 15:14:15 -0000
***************
*** 7,13 ****
--- 7,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
Index: src/include/port/unixware.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port/unixware.h,v
retrieving revision 1.11
diff -c -c -r1.11 unixware.h
*** src/include/port/unixware.h 28 Oct 2001 06:26:08 -0000 1.11
--- src/include/port/unixware.h 12 Sep 2003 15:14:15 -0000
***************
*** 10,16 ****
--- 10,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
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html