Re: [PORTS] solaris build problem with Sun compilers - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [PORTS] solaris build problem with Sun compilers
Date
Msg-id 200605181852.k4IIqLd16624@candle.pha.pa.us
Whole thread Raw
List pgsql-patches
Theo Schlossnagle wrote:
>
> On May 18, 2006, at 11:56 AM, Bruce Momjian wrote:
>
> > Theo Schlossnagle wrote:
> >>
> >> On May 17, 2006, at 8:30 PM, Bruce Momjian wrote:
> >>
>
> [ snip ]
>
> >>> OK, so what do you suggest?  Remove that URL from the comments?
> >>> Anything else?
> >>
> >> If you compile with -xarch=v8plus you should be able to omit the
> >> #ifdef's entirely.  The sparcv8plus and sparcv9 cas instruction are
> >> identical.  Is the goal here to support Sparc chips that do not
> >> support the v8plus instruction set?  I'm not on the ports list, so
> >> maybe I missed the original problem report.
> >
> > We don't actually know all the Solaris versions/hardware we should
> > support, so it is hard to say if we currently have running sparcv8
> > CPUs.
> > The best solution is to use separate entries for v8 and v9.  Is
> > there a
> > unique preprocessor symbol when a sparcv8plus binary is being
> > generated?
>
> Heh.. you could likely guess it:
> #if defined(__sparcv8plus)

Nice, comments and macro tests updated.  New version of file attached.

--
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +
!=======================================================================
! solaris_sparc.s -- compare and swap for solaris_sparc
!=======================================================================

! Fortunately the Sun compiler can process cpp conditionals with -P

! '/' is the comment for x86, while '!' is the comment for Sparc

#if defined(__sparcv9) || defined(__sparc)

    .section        ".text"
    .align  8
    .skip   24
    .align  4

    .global pg_atomic_cas
pg_atomic_cas:

    ! "cas" only works on sparcv9 and sparcv8plus chips, and
    ! requies a compiler targeting these CPUs.  It will fail
    ! on a compiler targeting sparcv8, and of course will not
    ! be understood by a sparcv8 CPU.  gcc continues to use
    ! "ldstub" because it targets sparcv7.
    !
    ! There is actually a trick for embedding "cas" in a
    ! sparcv8-targeted compiler, but it can only be run
    ! on a sparcv8plus/v9 cpus:
    !
    !   http://cvs.opensolaris.org/source/xref/on/usr/src/lib/libc/sparc/threads/sparc.il
    !

#if defined(__sparcv9) || defined(__sparcv8plus)
    cas     [%o0],%o2,%o1
#else
    ldstub [%o0],%o1
#endif
    mov     %o1,%o0
    retl
    nop
    .type   pg_atomic_cas,2
    .size   pg_atomic_cas,(.-pg_atomic_cas)
#endif

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] buildfarm failures
Next
From: Bruce Momjian
Date:
Subject: Re: [GENERAL] Querying libpq compile time options