ping? -tom
tom fogal <tfo...@sci.utah.edu> writes: > A friend of mine had trouble building 7.8.2 on an old gcc3.3 system > (no gcc intrinsics). I put together this patch and he said his build > worked. Our software doesn't thread so it's not really verified > otherwise. > > I was a bit surprised we didn't need int64_t variants for x86_64. > Maybe that's needed in general, but just not in swrast / under Mesa > w/ our particular option set? > > Anyway, okay for 7.8 and master? > > -tom > > > ------- =_aaaaaaaaaa0 > Content-Type: text/x-diff; charset="us-ascii" > Content-ID: <7248.128555187...@shigeru.sci.utah.edu> > Content-Description: 0001-Implement-x86_64-atomics-for-compilers-w-o-intrinsi > c.patch > Content-Transfer-Encoding: quoted-printable > > =46rom cc32ff741c5d32a66531a586b1f9268b94846c58 Mon Sep 17 00:00:00 2001 > From: Tom Fogal <tfo...@alumni.unh.edu> > Date: Sun, 26 Sep 2010 18:57:59 -0600 > Subject: [PATCH] Implement x86_64 atomics for compilers w/o intrinsics. > > Really old gcc's (3.3, at least) don't have support for the > intrinsics we need. This implements a fallback for that case. > --- > src/gallium/auxiliary/util/u_atomic.h | 47 ++++++++++++++++++++++++++++= > +++++ > 1 files changed, 47 insertions(+), 0 deletions(-) > > diff --git a/src/gallium/auxiliary/util/u_atomic.h b/src/gallium/auxiliary= > /util/u_atomic.h > index a156823..8434491 100644 > --- a/src/gallium/auxiliary/util/u_atomic.h > +++ b/src/gallium/auxiliary/util/u_atomic.h > @@ -29,6 +29,8 @@ > #define PIPE_ATOMIC_ASM_MSVC_X86 = > > #elif (defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86)) > #define PIPE_ATOMIC_ASM_GCC_X86 > +#elif (defined(PIPE_CC_GCC) && defined(PIPE_ARCH_X86_64)) > +#define PIPE_ATOMIC_ASM_GCC_X86_64 > #elif defined(PIPE_CC_GCC) && (PIPE_CC_GCC_VERSION >=3D 401) > #define PIPE_ATOMIC_GCC_INTRINSIC > #else > @@ -36,6 +38,51 @@ > #endif > = > > = > > +#if defined(PIPE_ATOMIC_ASM_GCC_X86_64) > +#define PIPE_ATOMIC "GCC x86_64 assembly" > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#define p_atomic_set(_v, _i) (*(_v) =3D (_i)) > +#define p_atomic_read(_v) (*(_v)) > + > +static INLINE boolean > +p_atomic_dec_zero(int32_t *v) > +{ > + unsigned char c; > + > + __asm__ __volatile__("lock; decl %0; sete %1":"+m"(*v), "=3Dqm"(c) > + ::"memory"); > + > + return c !=3D 0; > +} > + > +static INLINE void > +p_atomic_inc(int32_t *v) > +{ > + __asm__ __volatile__("lock; incl %0":"+m"(*v)); > +} > + > +static INLINE void > +p_atomic_dec(int32_t *v) > +{ > + __asm__ __volatile__("lock; decl %0":"+m"(*v)); > +} > + > +static INLINE int32_t > +p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new) > +{ > + return __sync_val_compare_and_swap(v, old, _new); > +} > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* PIPE_ATOMIC_ASM_GCC_X86_64 */ > + > = > > #if defined(PIPE_ATOMIC_ASM_GCC_X86) > = > > -- = > > 1.7.0.2 > > > ------- =_aaaaaaaaaa0 > Content-Type: text/plain; charset="us-ascii" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Content-Disposition: inline > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > ------- =_aaaaaaaaaa0-- _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev