Patchwork Fix asm-es-2.c testcase and PowerPC/IA-64 "m"/"es"/"S" constrain documentation

login
register
mail settings
Submitter Jakub Jelinek
Date July 13, 2010, 2:11 p.m.
Message ID <20100713141140.GA20208@tyan-ft48-01.lab.bos.redhat.com>
Download mbox | patch
Permalink /patch/58780/
State New
Headers show

Comments

Jakub Jelinek - July 13, 2010, 2:11 p.m.
Hi!

Some adjustments needed after the inline-asm side-effect changes.
Ok for trunk?

2010-07-13  Jakub Jelinek  <jakub@redhat.com>

	PR testsuite/44701
	* doc/md.texi: Clarify m and es constraints on PowerPC and m and S
	constraints on IA-64.

	* gcc.target/powerpc/asm-es-2.c (f2): Add <> constraints.


	Jakub
Andreas Schwab - July 13, 2010, 2:50 p.m.
Jakub Jelinek <jakub@redhat.com> writes:

> --- gcc/doc/md.texi.jj	2010-06-28 15:36:03.000000000 +0200
> +++ gcc/doc/md.texi	2010-07-13 13:31:31.000000000 +0200
> @@ -1998,31 +1998,33 @@ Integer/Floating point constant that can
>  three instructions
>  
>  @item m
> -Memory operand.  Note that on PowerPC targets, @code{m} can include
> -addresses that update the base register.  It is therefore only safe
> -to use @samp{m} in an @code{asm} statement if that @code{asm} statement
> +Memory operand.  Note that on PowerPC targets,
> +Normally, @code{m} does not allow addresses that update the base register.

Did you mean to remove the part before the first comma?

Andreas.
Jakub Jelinek - July 13, 2010, 2:55 p.m.
On Tue, Jul 13, 2010 at 04:50:16PM +0200, Andreas Schwab wrote:
> Jakub Jelinek <jakub@redhat.com> writes:
> 
> > --- gcc/doc/md.texi.jj	2010-06-28 15:36:03.000000000 +0200
> > +++ gcc/doc/md.texi	2010-07-13 13:31:31.000000000 +0200
> > @@ -1998,31 +1998,33 @@ Integer/Floating point constant that can
> >  three instructions
> >  
> >  @item m
> > -Memory operand.  Note that on PowerPC targets, @code{m} can include
> > -addresses that update the base register.  It is therefore only safe
> > -to use @samp{m} in an @code{asm} statement if that @code{asm} statement
> > +Memory operand.  Note that on PowerPC targets,
> > +Normally, @code{m} does not allow addresses that update the base register.
> 
> Did you mean to remove the part before the first comma?

I haven't actually removed it?  Consider it done.  Thanks.

	Jakub

Patch

--- gcc/testsuite/gcc.target/powerpc/asm-es-2.c.jj	2009-07-20 20:41:46.000000000 +0200
+++ gcc/testsuite/gcc.target/powerpc/asm-es-2.c	2010-07-13 13:22:13.000000000 +0200
@@ -11,7 +11,7 @@  f2 (int *p)
   while (1)
     {
       p += 4;
-      asm ("asm2%U0 %0" : "=m" (*p));
+      asm ("asm2%U0 %0" : "=m<>" (*p));
     }
 }
 
--- gcc/doc/md.texi.jj	2010-06-28 15:36:03.000000000 +0200
+++ gcc/doc/md.texi	2010-07-13 13:31:31.000000000 +0200
@@ -1998,31 +1998,33 @@  Integer/Floating point constant that can
 three instructions
 
 @item m
-Memory operand.  Note that on PowerPC targets, @code{m} can include
-addresses that update the base register.  It is therefore only safe
-to use @samp{m} in an @code{asm} statement if that @code{asm} statement
+Memory operand.  Note that on PowerPC targets,
+Normally, @code{m} does not allow addresses that update the base register.
+If @samp{<} or @samp{>} constraint is also used, they are allowed and
+therefore on PowerPC targets in that case it is only safe
+to use @samp{m<>} in an @code{asm} statement if that @code{asm} statement
 accesses the operand exactly once.  The @code{asm} statement must also
 use @samp{%U@var{<opno>}} as a placeholder for the ``update'' flag in the
 corresponding load or store instruction.  For example:
 
 @smallexample
-asm ("st%U0 %1,%0" : "=m" (mem) : "r" (val));
+asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));
 @end smallexample
 
 is correct but:
 
 @smallexample
-asm ("st %1,%0" : "=m" (mem) : "r" (val));
+asm ("st %1,%0" : "=m<>" (mem) : "r" (val));
 @end smallexample
 
-is not.  Use @code{es} rather than @code{m} if you don't want the
-base register to be updated.
+is not.
 
 @item es
 A ``stable'' memory operand; that is, one which does not include any
-automodification of the base register.  Unlike @samp{m}, this constraint
-can be used in @code{asm} statements that might access the operand
-several times, or that might not access it at all.
+automodification of the base register.  This used to be useful when
+@samp{m} allowed automodification of the base register, but as those are now only
+allowed when @samp{<} or @samp{>} is used, @samp{es} is basically the same
+as @samp{m} without @samp{<} and @samp{>}.
 
 @item Q
 Memory operand that is an offset from a register (it is usually better
@@ -2194,10 +2196,9 @@  Application register residing in I-unit
 Floating-point register
 
 @item m
-Memory operand.
-Remember that @samp{m} allows postincrement and postdecrement which
+Memory operand.  If used together with @samp{<} or @samp{>},
+the operand can have postincrement and postdecrement which
 require printing with @samp{%Pn} on IA-64.
-Use @samp{S} to disallow postincrement and postdecrement.
 
 @item G
 Floating-point constant 0.0 or 1.0
@@ -2233,7 +2234,9 @@  Non-volatile memory for floating-point l
 Integer constant in the range 1 to 4 for @code{shladd} instruction
 
 @item S
-Memory operand except postincrement and postdecrement
+Memory operand except postincrement and postdecrement.  This is
+now roughly the same as @samp{m} when not used together with @samp{<}
+or @samp{>}.
 @end table
 
 @item FRV---@file{config/frv/frv.h}