Dave Korn wrote: > Adding a "memory" clobber to the inline asm works around the problem, > causing 4.3 series to generate the same assembly as head, but I think it's a > sledgehammer approach. Am I asking too much of GCC to not sink the store, or > is 4.3 doing something wrong? I /think/ that the fact that there's a volatile > store in ilockcmpexch means the earlier store shouldn't be moved past it, and > that GCC is perhaps missing that the asm's output operand effectively > represents a volatile write through *t, but I could be misunderstanding the > rules about volatile. Anyone got their language lawyer's hat on at the > moment?
You could just look at the standard, y'know. Volatile stores only block other volatile stores: they don't block *all* stores. If you really want a complete memory barrier, which in a mutex you surely do, then you're going to have to clobber memory. Andrew.