http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57299
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Chris Mihelich from comment #2) > The asm statement uses only two registers. Of the six inputs and outputs, > only "r" (p) and "r" (q) are registers; the four "=m" and "m" entries only > declare that memory is read or written in the assembly code. See the part > of http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html about memory operands > (search for "If your assembler instructions access memory"). Since the value of y and x are stored on the stack as they are arguments to the function, their values need to be loaded into a regsiter first before passing it on to the inline-asm.