Re: [Mesa3d-dev] [PATCH] Gallium: Add Solaris atomic function definitions to u_atomic.h
I think nested extern "C" is alright. The problem I hit was that the header provided some optional C++ interfaces, and the compiler barfed at having C++ inside extern "C" { .. }. Jose From: alan.coopersm...@sun.com [alan.coopersm...@sun.com] Sent: Saturday, February 06, 2010 6:00 To: Jose Fonseca Cc: mesa3d-dev@lists.sourceforge.net Subject: Re: [Mesa3d-dev] [PATCH] Gallium: Add Solaris atomic function definitions to u_atomic.h Jose Fonseca wrote: > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#include > > It's probably fine for Solaris, but putting OS includes inside extern "C" > sometimes causes problems -- it does with certain MS headers. > > Other than that it looks fine. Hmm, hadn't thought about it - do C++ compilers get upset if you have nested extern "C" blocks? The entire atomic.h header is already inside one so could move out without issue: http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/atomic.h -- -Alan Coopersmith- alan.coopersm...@sun.com Sun Microsystems, Inc. - X Window System Engineering -- The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com ___ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
Re: [Mesa3d-dev] [PATCH] Gallium: Add Solaris atomic function definitions to u_atomic.h
Jose Fonseca wrote: > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#include > > It's probably fine for Solaris, but putting OS includes inside extern "C" > sometimes causes problems -- it does with certain MS headers. > > Other than that it looks fine. Hmm, hadn't thought about it - do C++ compilers get upset if you have nested extern "C" blocks? The entire atomic.h header is already inside one so could move out without issue: http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/atomic.h -- -Alan Coopersmith- alan.coopersm...@sun.com Sun Microsystems, Inc. - X Window System Engineering -- The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com ___ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
Re: [Mesa3d-dev] [PATCH] Gallium: Add Solaris atomic function definitions to u_atomic.h
From: Alan Coopersmith [alan.coopersm...@sun.com] Sent: Saturday, February 06, 2010 3:37 To: mesa3d-dev@lists.sourceforge.net Cc: Alan Coopersmith Subject: [Mesa3d-dev] [PATCH] Gallium: Add Solaris atomic function definitions to u_atomic.h Signed-off-by: Alan Coopersmith --- src/gallium/auxiliary/util/u_atomic.h | 36 - 1 files changed, 35 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/util/u_atomic.h b/src/gallium/auxiliary/util/u_atomic.h index 540112f..e4750c0 100644 --- a/src/gallium/auxiliary/util/u_atomic.h +++ b/src/gallium/auxiliary/util/u_atomic.h @@ -20,7 +20,9 @@ */ #if (defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) || \ defined(PIPE_SUBSYSTEM_WINDOWS_MINIPORT)) -#define PIPE_ATOMIC_OS_UNLOCKED +#define PIPE_ATOMIC_OS_UNLOCKED +#elif defined(PIPE_OS_SOLARIS) +#define PIPE_ATOMIC_OS_SOLARIS #elif defined(PIPE_CC_MSVC) #define PIPE_ATOMIC_MSVC_INTRINSIC #elif (defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)) @@ -260,6 +262,38 @@ p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new) #endif +#if defined(PIPE_ATOMIC_OS_SOLARIS) + +#define PIPE_ATOMIC "Solaris OS atomic functions" + +#ifdef __cplusplus +extern "C" { +#endif + +#include It's probably fine for Solaris, but putting OS includes inside extern "C" sometimes causes problems -- it does with certain MS headers. Other than that it looks fine. Jose + +#define p_atomic_set(_v, _i) (*(_v) = (_i)) +#define p_atomic_read(_v) (*(_v)) + +static INLINE boolean +p_atomic_dec_zero(int32_t *v) +{ + uint32_t n = atomic_dec_32_nv((uint32_t *) v); + + return n != 0; +} + +#define p_atomic_inc(_v) atomic_inc_32((uint32_t *) _v) +#define p_atomic_dec(_v) atomic_dec_32((uint32_t *) _v) + +#define p_atomic_cmpxchg(_v, _old, _new) \ + atomic_cas_32( (uint32_t *) _v, (uint32_t) _old, (uint32_t) _new) + +#ifdef __cplusplus +} +#endif + +#endif #ifndef PIPE_ATOMIC -- 1.5.6.5 -- The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com ___ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev -- The Planet: dedicated and managed hosting, cloud storage, colocation Stay online with enterprise data centers and the best network in the business Choose flexible plans and management services without long-term contracts Personal 24x7 support from experience hosting pros just a phone call away. http://p.sf.net/sfu/theplanet-com ___ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev