sparc.c (function_arg_vector_value): Remove 'base_mode' parameter.
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 16 Nov 2008 17:05:34 +0000 (17:05 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 16 Nov 2008 17:05:34 +0000 (17:05 +0000)
* config/sparc/sparc.c (function_arg_vector_value): Remove 'base_mode'
parameter.  Use DImode for computing the number of registers.
(function_arg): Adjust for above change.
(function_value): Likewise.

From-SVN: r141921

gcc/ChangeLog
gcc/config/sparc/sparc.c

index 6df0f7f..4d91368 100644 (file)
@@ -1,3 +1,10 @@
+2008-11-16  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/sparc/sparc.c (function_arg_vector_value): Remove 'base_mode'
+       parameter.  Use DImode for computing the number of registers.
+       (function_arg): Adjust for above change.
+       (function_value): Likewise.
+
 2008-11-15  Zdenek Dvorak  <ook@ucw.cz>
 
        PR tree-optimization/37950
index c69f618..d3d1af0 100644 (file)
@@ -5138,15 +5138,13 @@ function_arg_union_value (int size, enum machine_mode mode, int slotno,
    Return an expression valid as a return value for the two macros
    FUNCTION_ARG and FUNCTION_VALUE.
 
-   SIZE is the size in bytes of the vector.
-   BASE_MODE is the argument's base machine mode.
+   SIZE is the size in bytes of the vector (at least 8 bytes).
    REGNO is the FP hard register the vector will be passed in.  */
 
 static rtx
-function_arg_vector_value (int size, enum machine_mode base_mode, int regno)
+function_arg_vector_value (int size, int regno)
 {
-  unsigned short base_mode_size = GET_MODE_SIZE (base_mode);
-  int nregs = size / base_mode_size, i;
+  int i, nregs = size / 8;
   rtx regs;
 
   regs = gen_rtx_PARALLEL (BLKmode, rtvec_alloc (nregs));
@@ -5155,9 +5153,8 @@ function_arg_vector_value (int size, enum machine_mode base_mode, int regno)
     {
       XVECEXP (regs, 0, i)
        = gen_rtx_EXPR_LIST (VOIDmode,
-                            gen_rtx_REG (base_mode, regno),
-                            GEN_INT (base_mode_size * i));
-      regno += base_mode_size / 4;
+                            gen_rtx_REG (DImode, regno + 2*i),
+                            GEN_INT (i*8));
     }
 
   return regs;
@@ -5203,7 +5200,6 @@ function_arg (const struct sparc_args *cum, enum machine_mode mode,
 
       if (mode == BLKmode)
        return function_arg_vector_value (size,
-                                         TYPE_MODE (TREE_TYPE (type)),
                                          SPARC_FP_ARG_FIRST + 2*slotno);
       else
        mclass = MODE_FLOAT;
@@ -5619,7 +5615,6 @@ function_value (const_tree type, enum machine_mode mode, int incoming_p)
 
       if (mode == BLKmode)
        return function_arg_vector_value (size,
-                                         TYPE_MODE (TREE_TYPE (type)),
                                          SPARC_FP_ARG_FIRST);
       else
        mclass = MODE_FLOAT;