On Mon, Mar 31, 2008 at 11:19:29AM +0200, Andreas Schwab wrote:
> Till Straumann <[EMAIL PROTECTED]> writes:
> 
> > /* Powerpc I/O barrier instruction */
> > #define EIEIO(pmem) do { asm volatile("eieio":"=m"(*pmem):"m"(*pmem)); }
> > while (0)
> 
> Looking closer, your asm statement has a bug.  The "m" constraint can
> match memory addresses with side effects (auto inc/dec), but the insn
> does not carry out that side effect.  On powerpc the side effect must be
> encoded through the update form of the load/store insns.  If you don't
> use a load or store insn with the operand the you must use the "o"
> constraint to avoid the side effect.

Should asm "m" be required to carry out the side effect?  It seems
like this would break every end-user use of inline assembly; you'd
never know whether a memory argument should be used for lwz or lwzu.

I think treating =m as generating the output address is unhelpful.

-- 
Daniel Jacobowitz
CodeSourcery

Reply via email to