include/asm-ppc/atomic.h: fluff in inline assembly code?

4 messages, 2 authors, 2005-06-29 · open the first message on its own page

include/asm-ppc/atomic.h: fluff in inline assembly code?

From: Frank van Maarseveen <hidden>
Date: 2005-06-29 16:01:28

Does anyone know why there are often excess arguments in asm() here?

For example,

	static __inline__ void atomic_add(int a, atomic_t *v)
	{
		int t;

		__asm__ __volatile__(
	"1:     lwarx   %0,0,%3         # atomic_add\n\
		add     %0,%2,%0\n"
		PPC405_ERR77(0,%3)
	"       stwcx.  %0,0,%3 \n\
		bne-    1b"
		: "=&r" (t), "=m" (v->counter)
		: "r" (a), "r" (&v->counter), "m" (v->counter)
		: "cc");
	}

seems equivalent to 

	static __inline__ void atomic_add(int a, atomic_t *v)
	{
		int t;

		__asm__ __volatile__(
	"1:     lwarx   %0,0,%2         # atomic_add\n\
		add     %0,%1,%0\n"
		PPC405_ERR77(0,%2)
	"       stwcx.  %0,0,%2 \n\
		bne-    1b"
		: "=&r" (t)
		: "r" (a), "r" (&v->counter)
		: "cc");
	}

What is the point of all those v->counter arguments?

-- 
Frank

Re: include/asm-ppc/atomic.h: fluff in inline assembly code?

From: Andreas Schwab <hidden>
Date: 2005-06-29 16:15:02

Frank van Maarseveen [off-list ref] writes:
What is the point of all those v->counter arguments?
It tells the compiler that v->counter is changed by the asm.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Re: include/asm-ppc/atomic.h: fluff in inline assembly code?

From: Frank van Maarseveen <hidden>
Date: 2005-06-29 18:36:29

On Wed, Jun 29, 2005 at 06:14:52PM +0200, Andreas Schwab wrote:
Frank van Maarseveen [off-list ref] writes:
quoted
What is the point of all those v->counter arguments?
It tells the compiler that v->counter is changed by the asm.
So it's an optimized alternative for "memory" in the clobber list?
ok, I couldn't find that anywhere in the doc.

But v->counter is not supposed to be accessed directly by the
compiler (i.e. by C code) at all, is it? so it shouldn't matter.

Even if it would be: the counter itself is declared "volatile int"
which basically tells the compiler not to cache it in a register.

-- 
Frank

Re: include/asm-ppc/atomic.h: fluff in inline assembly code?

From: Andreas Schwab <hidden>
Date: 2005-06-29 22:34:15

Frank van Maarseveen [off-list ref] writes:
But v->counter is not supposed to be accessed directly by the
compiler (i.e. by C code) at all, is it? so it shouldn't matter.

Even if it would be: the counter itself is declared "volatile int"
which basically tells the compiler not to cache it in a register.
Never lie to the compiler, or it gets its revenge, sooner or later.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help