https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97708
--- Comment #7 from Boris <bp at alien8 dot de> --- (In reply to Jakub Jelinek from comment #6) > I agree with Andrew here, the compiler does what it is asked to do, so puts > the value into either memory or general purpose register. Neither "r" nor > "g" allows putting the value into an SSE register. Use "x" constraint for > that. Look at the documentation: "āgā Any register, memory or immediate integer operand is allowed, except for registers that are not general registers." so this reads to me like "g" doesn't allow xmm registers. What gcc does is go "around the corner" and stick it in a g-allowed register. So that behavior should *at* *least* be documented so that people know what's going on here. Because it is confusing...