Commit 407885ea authored by Bruce Momjian's avatar Bruce Momjian

Add comments that Solaris Sun compiler only supports sparc9 ASM,

parent 0d02ef4b
...@@ -16,6 +16,23 @@ ...@@ -16,6 +16,23 @@
.global pg_atomic_cas .global pg_atomic_cas
pg_atomic_cas: pg_atomic_cas:
! "cas" only works on sparcv9 chips, and requies a compiler
! that is targeting sparcv9. It will fail on a compiler
! targeting sparcv8, and of course will not be understood
! by a sparcv8 CPU. If this fails on existing Solaris
! systems, we need to use a !defined(__sparcv9) test
! to fall back to the old "ldstub" call for sparcv8 compiles.
! gcc continues to use "ldstub" because there is no indication
! which sparc version it is targeting.
!
! There actually is a trick for embedding "cas" for a compiler
! that is targeting sparcv8:
!
! http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libc/sparc/threads/sparc.il
!
! This might work for sparc8:
! ldstub [%o0],%o1 ! moves only a byte
cas [%o0],%o2,%o1 cas [%o0],%o2,%o1
mov %o1,%o0 mov %o1,%o0
retl retl
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.152 2006/04/29 11:55:19 momjian Exp $ * $PostgreSQL: pgsql/src/include/storage/s_lock.h,v 1.153 2006/05/17 23:57:03 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -311,6 +311,10 @@ tas(volatile slock_t *lock) ...@@ -311,6 +311,10 @@ tas(volatile slock_t *lock)
{ {
register slock_t _res; register slock_t _res;
/*
* See comment in /pg/backend/port/tas/solaris_sparc.s for why this
* uses "ldstub", and that file uses "cas".
*/
__asm__ __volatile__( __asm__ __volatile__(
" ldstub [%2], %0 \n" " ldstub [%2], %0 \n"
: "=r"(_res), "+m"(*lock) : "=r"(_res), "+m"(*lock)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment