This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH [mainline] apple-ppc-darwin passing


On Thu, Jun 24, 2004 at 12:47:15PM -0700, Fariborz Jahanian wrote:
> *************** emit_push_insn (rtx x, enum machine_mode
> *** 3609,3614 ****
> --- 3610,3627 ----
>         int args_offset = INTVAL (args_so_far);
>         int skip;
>   
> +       if (mode == DFmode && reg && GET_CODE (reg) == PARALLEL)
> +         {
> + 	  /* Pattern for splitting up a DFmode part in GRP, part on stack 
> + 	     as well as fully in an FPR. */

Your fix to emit_push_insn looks good to me, except that you really
don't want the DFmode test here.  There's nothing special about DFmode.
It just happens to be one of the reg types, of size different to
UNITS_PER_WORD, that you need to handle specially here.  I came up with
with a similar patch, minus the DFmode test, when developing
http://gcc.gnu.org/ml/gcc-patches/2004-05/msg00665.html.

The reason I didn't post the patch at that stage was that I wanted the
rs6000 backend fixes in first.  Also, you need to verify that any other
backend emitting PARALLELs for arg passing doesn't have some hack in
function_arg_partial_nregs to work around the emit_push_insn bug.  I
didn't go so far as to do this verification..

Oh, and I'm not qualified to review this patch, just commenting as
someone who has fiddled enough with the function arg machinery to be
reasonably familiar with this code.

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]