# Copyright (c) 1998, Regents of the University of California
#
# IDENTIFICATION
-# $PostgreSQL: pgsql/src/Makefile.shlib,v 1.100 2005/12/09 21:19:34 petere Exp $
+# $PostgreSQL: pgsql/src/Makefile.shlib,v 1.101 2005/12/30 21:43:41 momjian Exp $
#
#-------------------------------------------------------------------------
ifeq ($(GCC), yes)
LINK.shared = $(CC) -shared
else
- LINK.shared = $(CC) -G
+ LINK.shared = $(CC) -G $(CFLAGS) # CFLAGS added for X86_64
endif
ifeq ($(with_gnu_ld), yes)
LINK.shared += -Wl,-soname,$(soname)
--- /dev/null
+/=============================================================================
+/ tas.s -- test and set lock for solaris_i386
+/ based on i386 ASM with modifications outlined in
+/ http://www.x86-64.org/documentation/assembly
+/=============================================================================
+
+ .file "tas.s"
+ .text
+ .align 16
+.L1.text:
+
+ .globl tas
+tas:
+ pushq %rbp /save prev base pointer
+ movq %rsp,%rbp /new base pointer
+ pushq %rbx /save prev bx
+ movq 8(%rbp),%rbx /load bx with address of lock
+ movq $255,%rax /put something in ax
+ xchgb %al,(%rbx) /swap lock value with "0"
+ cmpb $0,%al /did we get the lock?
+ jne .Locked
+ subq %rax,%rax /yes, we got it -- return 0
+ jmp .Finish
+ .align 8
+.Locked:
+ movq $1,%rax /no, we didn't get it - return 1
+.Finish:
+ popq %rbx /restore prev bx
+ movq %rbp,%rsp /restore stack state
+ popq %rbp
+ ret /return
+ .align 8
+ .type tas,@function
+ .size tas,.-tas
+
* 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.145 2005/12/17 21:08:24 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.146 2005/12/30 21:43:41 momjian Exp $
*
*-------------------------------------------------------------------------
*/
/* out-of-line assembler from src/backend/port/tas/foo.s */
-#if defined(__sun) && defined(__i386) /* i386 using Sun compiler */
+/* i386/X86_64 using Sun compiler */
+#if defined(__sun) && (defined(__i386) || defined(__x86_64__))
/*
* Solaris/386 (we only get here for non-gcc case)
*/
;;
i?86-*-solaris*)
if test "$GCC" != yes ; then
- need_tas=yes
- tas_file=solaris_i386.s
+ soarch=`isainfo`
+ if isainfo | grep amd64
+ then
+ need_tas=yes
+ tas_file=solaris_x86_64.s
+ else
+ need_tas=yes
+ tas_file=solaris_i386.s
+ fi
fi
;;
esac