https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97708
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|REOPENED |RESOLVED --- Comment #22 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Segher Boessenkool from comment #21) > register float foo asm ("xmm0") = 0.99f; > > asm volatile("movl %0, %%r8d\n\t" > "vmcall\n\t" > :: "g" (foo)); > > The user said operands[0] should go in xmm0, but that hard reg is not > valid for its constraint. No, the user didn't say that. The user said put foo into something that matches the "g" constraint. The compiler did. As documented, the register in which the var lives will (and can) be only satisfied if the constraint allows that register.