This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [mn10300] return-in-a0-d0 ABI helper
On Fri, 2005-09-16 at 16:15 -0400, DJ Delorie wrote:
> > This situation is precisely why we support PARALLELs for return
> > values (the need to return a value in multiple registers).
> >
> > It ought to "just work".
>
> It just didn't.
>
> ../../gcc/gcc/testsuite/gcc.c-torture/compile/20000804-1.c:16: error: unrecognizable insn:
> (insn 77 90 82 7 (set (parallel/i:SI [
> (expr_list:REG_DEP_TRUE (reg:SI 4 a0)
> (const_int 0 [0x0]))
> (expr_list:REG_DEP_TRUE (reg:SI 0 d0)
> (const_int 0 [0x0]))
> ])
> (reg/f:SI 71 [ D.1210 ])) -1 (nil)
> (nil))
>
> If I manually try all the permutations of caller/callee/int/pointer,
> they all work, and the code looks reasonable. Relevent portions of
> the patch attached - see any obvious mistakes in it?
You'll have to walk through expand_value_return and its children
(particularly emit_group_load). You might also have to peek at
expand_function_end.
Jeff