Re: [PATCH 7/8] i386: bitops: Kill needless usage of __asm____volatile__
From: Satyam Sharma
Date: Mon Jul 23 2007 - 12:41:53 EST
Hi Jeremy,
On Mon, 23 Jul 2007, Jeremy Fitzhardinge wrote:
> Satyam Sharma wrote:
> > From: Satyam Sharma <ssatyam@xxxxxxxxxxxxxx>
> >
> > [7/8] i386: bitops: Kill needless usage of __asm__ __volatile__
> >
> > Another oddity I noticed in this file. The semantics of __volatile__
> > when used to qualify inline __asm__ are that the compiler will not
> > (1) elid, or, (2) reorder, or, (3) intersperse, our inline asm with
> > the rest of the generated code.
> >
>
> "asm volatile" does not mean that at all. It only guarantees (1),
Actually, you're probably right about (2), but (3)?
>From the gcc manual:
<quote>
Similarly, you can't expect a sequence of volatile asm instructions to
remain perfectly consecutive. If you want consecutive output, use a
single asm. Also GCC will perform some optimizations across a volatile
asm instruction, GCC does not "forget everything" when it encounters a
volatile asm instruction the way some other compilers do.
</quote>
I'm reading "Similarly, you can't expect a sequence of volatile asm
instructions to remain perfectly consecutive" to mean they're talking
about something like:
asm volatile(...);
asm volatile(...);
asm volatile(...);
But "If you want consecutive output, use a single asm" probably means:
asm volatile(... multiple instructions here ...);
would actually ensure the code written in there would not be
interspersed ... at least that's how I read it.
[ BTW "Also GCC will perform some optimizations across a volatile
asm instruction ..." is exactly the kind of optimizations we must
allow the compiler to do, but that's not related to point at hand. ]
> and
> only then if the asm is ever reachable.
Yup, of course.
Satyam
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/