On Fri, 2010-07-30 at 09:19 +0200, Jakub Jelinek wrote:
> So, in short, I'm afraid "m<>" needs to be used only for GCC 4.6+
> (and, vendors which backported the inline-asm handling changes
> to their older gcc would need to adjust for their gccs too).
> When "m<>" isn't used, it just leads to poten
On Fri, Jul 30, 2010 at 05:04:46PM +1000, Benjamin Herrenschmidt wrote:
> On Thu, 2010-07-08 at 16:08 +1000, Benjamin Herrenschmidt wrote:
> > On Fri, 2010-06-25 at 11:56 +0200, Jakub Jelinek wrote:
> >
> > > static inline void sync(void)
> > > diff --git a/arch/powerpc/include/asm/atomic.h
> >
On Thu, 2010-07-08 at 16:08 +1000, Benjamin Herrenschmidt wrote:
> On Fri, 2010-06-25 at 11:56 +0200, Jakub Jelinek wrote:
>
> > static inline void sync(void)
> > diff --git a/arch/powerpc/include/asm/atomic.h
> > b/arch/powerpc/include/asm/atomic.h
> > index b8f152e..288d8b2 100644
> > --- a/ar
On Fri, 2010-06-25 at 11:56 +0200, Jakub Jelinek wrote:
> static inline void sync(void)
> diff --git a/arch/powerpc/include/asm/atomic.h
> b/arch/powerpc/include/asm/atomic.h
> index b8f152e..288d8b2 100644
> --- a/arch/powerpc/include/asm/atomic.h
> +++ b/arch/powerpc/include/asm/atomic.h
> @@
- stw%U0%X0 %L2,%1"
- : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
+ stw%U1%X1 %L2,%1"
+ : "=m<>" (*ptep), "=m<>" (*((unsigned char *)ptep+4))
: "r" (pte) : "memory");
This still isn't correct -- the constraint says that a byte
is written, but
On Fri, 2010-06-25 at 13:18 +0200, Jakub Jelinek wrote:
> On Fri, Jun 25, 2010 at 01:08:23PM +0200, Segher Boessenkool wrote:
> > > - stw%U0%X0 %L2,%1"
> > > - : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> > > + stw%U1%X1 %L2,%1"
> > > + : "=m<>" (*ptep), "=m<>" (*((unsigned c
On Fri, Jun 25, 2010 at 01:08:23PM +0200, Segher Boessenkool wrote:
> > - stw%U0%X0 %L2,%1"
> > - : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> > + stw%U1%X1 %L2,%1"
> > + : "=m<>" (*ptep), "=m<>" (*((unsigned char *)ptep+4))
> > : "r" (pte) : "memory");
>
> This
> - stw%U0%X0 %L2,%1"
> - : "=m" (*ptep), "=m" (*((unsigned char *)ptep+4))
> + stw%U1%X1 %L2,%1"
> + : "=m<>" (*ptep), "=m<>" (*((unsigned char *)ptep+4))
> : "r" (pte) : "memory");
This still isn't correct -- the constraint says that a byte
is written, but t
Hi!
I've recently changed gcc handling of inline-asm, such that it by default
disallows side-effects on memory operands of inline-asm and only allows
them if < or > constraint is present for the operand.
See http://gcc.gnu.org/PR44492 and http://bugzilla.redhat.com/602359
for details. The change