LISKNI_SI:
No tohle IMHO bohuzel nejde, resi se to tak, ze se ten registr ulozi do jine dummy promenne, ktera se pak zahodi (a prekladac ji proto vyoptimalizuje). Viz
http://www.cs.virginia.edu/~clc5q/gcc-inline-asm.pdf sekce 4.8 Temporary registers a okoli.
Pokud ten asm kod jenom vezme vstup, neco s nim dela a pak ho prohlasi za dummy vystup, prekladac muze usoudit, ze se vyoptimalizuje CELY ten asm (protoze z pohledu prekladace byl vysledkem snazeni pouze dummy). Pro takovy pripad je nutne uzit asm volatile (nikoliv volatile dummy, to by se zbytecne provadely operace s dummy promennou). Tohle plati obecne i v pripadech, ze clobber je prazdne a kod dela neco "magickeho", co nelze popsat prostredky inline assembly (tzn. ruzna manipulace se stavovymi registry procesoru atd.).
I kdyz kod asm volatile je bezpecny pred odstranenim, prekladac ho stale muze posouvat okolo ostatnich prikazu, se kterymi nema kod uvedenou datovou zavislost, takze se provedou ve spatnem poradi. Nekde jsem videl priklad prepnuti do jineho rezimu zpracovani floatu pred vypoctem, ktere bylo vsak presunuto az ZA ten vypocet. Toto je potreba resit "virtualni" zavislosti tak, ze jeden z operandu ovlivneneho prikazu bude oznacen jako vystup asm operace.
Doufam, ze jsem to moc nezmotal, preci jen se mi ocka klizi.