Hi Jeremy,
On Mon, 23 Jul 2007, Jeremy Fitzhardinge wrote: > Satyam Sharma wrote: > > From: Satyam Sharma <[EMAIL PROTECTED]> > > > > [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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/