This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/59157] "+f" constraint rejected: output constraint 0 must specify a single register


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...

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]