Re: Use float stack slots for e500 promoted arguments

Top Page

Reply to this message
Author: Daniel Jacobowitz
Date:  
To: Steve Ellcey
CC: gcc-patches, dave.anglin
Subject: Re: Use float stack slots for e500 promoted arguments
On Thu, Jul 03, 2008 at 11:33:41AM -0700, Steve Ellcey wrote:
> But it did not help with the test case I sent you. I get the same
> error.


But from a different backtrace. Could you try this patch? It fixes
your testcase, and does not perturb the code used for e500 floating
point as far as I can tell.

Block-mode parameters are generally PARALLEL. So the PARALLEL check
from before in assign_parm_setup_block_p was handling this case, and
I didn't realize it.

Testing now on x86_64-linux.

-- 
Daniel Jacobowitz
CodeSourcery


2008-07-03 Daniel Jacobowitz <dan@???>

    * function.c (assign_parm_remove_parallels): Check mode of
    entry_parm.
    (assign_parm_setup_block_p): Also check mode of entry_parm.

Index: function.c
===================================================================
--- function.c    (revision 137326)
+++ function.c    (working copy)
@@ -2364,8 +2364,7 @@ assign_parm_remove_parallels (struct ass
This can be done with register operations rather than on the
stack, even if we will store the reconstituted parameter on the
stack later. */
- if (GET_CODE (entry_parm) == PARALLEL
- && data->passed_mode != BLKmode)
+ if (GET_CODE (entry_parm) == PARALLEL && GET_MODE (entry_parm) != BLKmode)
{
rtx parmreg = gen_reg_rtx (GET_MODE (entry_parm));
emit_group_store (parmreg, entry_parm, NULL_TREE,
@@ -2421,6 +2420,8 @@ assign_parm_setup_block_p (struct assign
{
if (data->nominal_mode == BLKmode)
return true;
+ if (GET_MODE (data->entry_parm) == BLKmode)
+ return true;

#ifdef BLOCK_REG_PADDING
/* Only assign_parm_setup_block knows how to deal with register arguments