mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Add comments that Solaris Sun compiler only supports sparc9 ASM,
This commit is contained in:
@ -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 @@
|
|||||||
* 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)
|
|||||||
{
|
{
|
||||||
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)
|
||||||
|
Reference in New Issue
Block a user