From fea31288e6ee4c60874e61de5e7477af26bc05da Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 27 Jul 2010 19:52:35 +0200 Subject: [PATCH] re PR testsuite/44701 (PR44492 fix broke gcc.target/powerpc/asm-es-2.c) 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. From-SVN: r162581 --- gcc/ChangeLog | 6 ++++ gcc/doc/md.texi | 31 +++++++++++---------- gcc/testsuite/ChangeLog | 3 ++ gcc/testsuite/gcc.target/powerpc/asm-es-2.c | 2 +- 4 files changed, 27 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5134e69170d..cd97a4a03a0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-07-27 Jakub Jelinek + + PR testsuite/44701 + * doc/md.texi: Clarify m and es constraints on PowerPC and m and S + constraints on IA-64. + 2010-07-27 Jie Zhang PR target/44290 diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 211fdcb8635..fd8423a2866 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -1998,31 +1998,33 @@ Integer/Floating point constant that can be loaded into a register using 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. +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{}} 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 loads and stores 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} diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6a331227cd2..7bfba79f0f4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2010-07-27 Jakub Jelinek + PR testsuite/44701 + * gcc.target/powerpc/asm-es-2.c (f2): Add <> constraints. + PR c/45079 * gcc.dg/pr45079.c: New test. diff --git a/gcc/testsuite/gcc.target/powerpc/asm-es-2.c b/gcc/testsuite/gcc.target/powerpc/asm-es-2.c index e9319654cc7..94c2883d18a 100644 --- a/gcc/testsuite/gcc.target/powerpc/asm-es-2.c +++ b/gcc/testsuite/gcc.target/powerpc/asm-es-2.c @@ -11,7 +11,7 @@ f2 (int *p) while (1) { p += 4; - asm ("asm2%U0 %0" : "=m" (*p)); + asm ("asm2%U0 %0" : "=m<>" (*p)); } }