Andi Kleen wrote: > On Sun, Jul 22, 2007 at 11:05:24AM -0700, H. Peter Anvin wrote: >> Andi Kleen wrote: >>>> The main reason is that everyone seems to invoke it either incorrectly >>> Where is it incorrect? >> Using "r" or "m" (as opposed as "+m") gives gcc the wrong dependency >> information, and it could, at least in theory, cause memory references >> to be moved around it -- especially when using "r". > > That doesn't sound correct. Taking the address should be like an escaping > pointer and equivalent to read/write and effectively disable optimizations > on this memory.
It might be in the existing gcc for all I know, but there is no explicit guarantee to that effect. Remember that inline assembly is really nothing but the guts of gcc exposed to the programmer, and that the gcc people are very blunt about not wanting to muck with the former to suit the latter. This means that there are a lot of things that may accidentally work in one version of gcc which breaks in another. There are two documented ways to tell gcc that you're mucking with memory, and those are "m" constraints ("m" read, "=m" write, "+m" read/write) and "memory" clobbers; the latter which affects all memory. -hpa - 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/