http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51423

Richard Earnshaw <rearnsha at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED

--- Comment #1 from Richard Earnshaw <rearnsha at gcc dot gnu.org> 2011-12-05 
16:22:14 UTC ---
Bugzilla is for reporting bugs, please use gcc-h...@gcc.gnu.org for questions.

If you use specific registers in an ASM statement you have to declare all of
them, even if the register is call-clobbered.  The compiler does not try to
parse the contents of the asm statement (it does simple substitution of the
declared operands) so if you don't specify which registers you are modifying
the compiler might try to use them for other purposes.

In GCC-4.5 and earlier you have to specify the smallest addressable register
unit in any clobber list (so s0...s31 and d16...d31)[1].  GCC-4.6 and later are
smarter: the compiler now knows that q0 is equivalent to d0+d1 is equivalent to
s0+s1+s2+s3 etc.

[1] in these older compilers saying "q0" or "d0" will be interpreted as "s0"
and not clobber what you think it should.

Reply via email to