http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57299
--- Comment #2 from Chris Mihelich <umbricola at gmail dot com> --- 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").