This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/59157] "+f" constraint rejected: output constraint 0 must specify a single register
- From: "glisse at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 18 Nov 2013 15:11:36 +0000
- Subject: [Bug target/59157] "+f" constraint rejected: output constraint 0 must specify a single register
- Auto-submitted: auto-generated
- References: <bug-59157-4 at http dot gcc dot gnu dot org/bugzilla/>
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...