On 1.12.2015, David Wohlferd wrote: On 12/1/2015 10:10 AM, Bernd Edlinger wrote: > > But IMHO asm("bla":) isn't any better than asm("bla"). > > I think _any_ asm with non-empty assembler string, that > > claims to clobber _nothing_ is highly suspicious, and worth to be > > warned about. I don't see any exceptions from this rule. > > There's one right now in the basic asm docs: asm("int $3"); > > And I've seen others: asm volatile ("nop"), asm(".byte 0xf1\n"). I've > seen a bunch more, but you get the idea.
I disagree. Consider this example where "nop" should be injected to guarantee a minimum pulse length: int x; x = 1; asm volatile ("nop"); x = 0; resulting code at -O2 is something like this: nop movl $0,x That is because this asm statement allows gcc to move the assembler code anywhere. It is only guaranteed to be executed once, but it not guaranteed to be executed between the two assignments. To avoid that we have to use a "memory" clobber. Bernd.