http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59157
--- Comment #4 from Marc Glisse <glisse at gcc dot gnu.org> --- (In reply to Uroš Bizjak from comment #2) > > long double f(long double x){ > > asm volatile("":"+mf"(x)); > > "+t"(x) should be used here. That's not really the same thing. The idea is that if I have: fmulp %st, %st(2) I could apply it to the second argument before that instruction and it would still be a NOP, while providing the barrier (against cprop, etc) that I need. For the determinant of a 3x3 matrix, calling f for each operation on the arguments and the result changes the number of insn from 27 to 39 (removing "volatile" doesn't help) (it may not all be for this reason though). Well, "+mt" is still an improvement over "+m" I guess...