This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: commutative asm operands
On Sun, Aug 04, 2002 at 06:29:19PM +0200, Roman Zippel wrote:
> Alan Modra wrote:
> > * recog.c (constrain_operands): Handle commutative operands.
>
> What exactly does this patch fix?
The ICE reported at the beginning of this thread, and the following
similar one.
> What is the assembly output for this test case (register names might
> need a change):
Thanks, this testcase is useful.
void f (void)
{
register int a asm ("%r3");
register int b asm ("%r4");
register int c asm ("%r5");
register int d asm ("%r6");
asm volatile ("addc %0, %2, %3\n\tadde %1, %4, %5"
: "=r" (a), "=r" (b)
: "%0" (a), "r" (c), "%1" (b), "r" (d));
asm volatile ("addc %0, %2, %3\n\tadde %1, %4, %5"
: "=r" (a), "=r" (b)
: "%0" (c), "r" (a), "%1" (d), "r" (b));
}
produces, with my patch:
.f:
#APP
addc 3, 3, 5
adde 4, 4, 6
addc 3, 5, 3
adde 4, 4, 6
#NO_APP
blr
and without:
addc.c: In function `f':
addc.c:14: error: unrecognizable insn:
(insn:HI 14 12 22 0 0x4012c0c0 (parallel [
(set (reg/v:SI 3 r3)
(asm_operands/v:SI ("addc %0, %2, %3
adde %1, %4, %5") ("=r") 0 [
(reg/v:SI 5 r5)
(reg/v:SI 3 r3)
(reg/v:SI 4 r4)
(reg/v:SI 6 r6)
]
[
(asm_input:SI ("%0"))
(asm_input:SI ("r"))
(asm_input:SI ("%1"))
(asm_input:SI ("r"))
] ("addc.c") 11))
(set (reg/v:SI 4 r4)
(asm_operands/v:SI ("addc %0, %2, %3
adde %1, %4, %5") ("=r") 1 [
(reg/v:SI 5 r5)
(reg/v:SI 3 r3)
(reg/v:SI 4 r4)
(reg/v:SI 6 r6)
]
[
(asm_input:SI ("%0"))
(asm_input:SI ("r"))
(asm_input:SI ("%1"))
(asm_input:SI ("r"))
] ("addc.c") 11))
]) -1 (insn_list 12 (nil))
(nil))
addc.c:14: internal compiler error: Internal compiler error in reload_cse_simplify_operands, at reload1.c:8308
--
Alan Modra
IBM OzLabs - Linux Technology Centre