This is the mail archive of the 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 Jun 25, 2004, at 5:40 AM, Alan Modra wrote:

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.

No there isn't. But I just wanted to check the condition which I knew caused this
bug and protect against other cases of PARALLEL being gen'd. As you pointed
out below, there maybe hackery on other platforms that I wanted to guard against
and not breaking them. But thanks for your comments.

- fariborz

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

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]