This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug inline-asm/11819] rejects-valid: GCC inline assembler rejects valid MMX constraints
- From: "pinskia at physics dot uc dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 6 Aug 2003 14:11:48 -0000
- Subject: [Bug inline-asm/11819] rejects-valid: GCC inline assembler rejects valid MMX constraints
- References: <20030806022500.11819.bkausbk@web.de>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11819
------- Additional Comments From pinskia at physics dot uc dot edu 2003-08-06 14:11 -------
But the problem is that in and out can be still be register allocated with the same register. Use this
instead: "=&y".
>From http://gcc.gnu.org/onlinedocs/gcc/Modifiers.html#Modifiers:
&
Means (in a particular alternative) that this operand is an earlyclobber operand, which is modified
before the instruction is finished using the input operands. Therefore, this operand may not lie in
a register that is used as an input operand or as part of any memory address.
& applies only to the alternative in which it is written. In constraints with multiple alternatives,
sometimes one alternative requires & while others do not. See, for example, the movdf insn of the
68000.
An input operand can be tied to an earlyclobber operand if its only use as an input occurs before
the early result is written. Adding alternatives of this form often allows GCC to produce better
code when only some of the inputs can be affected by the earlyclobber. See, for example, the
mulsi3 insn of the ARM.
& does not obviate the need to write =.