re PR target/13559 (deviation from the psABI for small structures)
authorEric Botcazou <ebotcazou@libertysurf.fr>
Thu, 22 Jan 2004 09:33:24 +0000 (10:33 +0100)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 22 Jan 2004 09:33:24 +0000 (09:33 +0000)
PR target/13559
* config/sparc/sparc.c (function_arg_record_value_3): Revert
to 'word_mode' once the first slot has been filled.

From-SVN: r76342

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

index 5c01e68bda46f71957dafd1c02d32ff542d74c3c..5a199711ffa437501d17151c44d31565fd9150b4 100644 (file)
@@ -1,3 +1,9 @@
+2004-01-22  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR target/13559
+       * config/sparc/sparc.c (function_arg_record_value_3): Revert
+       to 'word_mode' once the first slot has been filled.
+
 2004-01-22  Olivier Hainque  <hainque@act-europe.fr>
 
        * config/sparc/sparc.c (function_arg_record_value_1): Fix
index d3eb9986ed55f8f5e22d07f45fcdc4f87e854646..8805bbeb4dc211540d61d451527b1bfb714b087e 100644 (file)
@@ -4972,7 +4972,7 @@ struct function_arg_record_value_parms
   int named;           /* whether the argument is named.  */
   int regbase;         /* regno of the base register.  */
   int stack;           /* 1 if part of the argument is on the stack.  */
-  int intoffset;       /* offset of the pending integer field.  */
+  int intoffset;       /* offset of the first pending integer field.  */
   unsigned int nregs;  /* number of words passed in registers.  */
 };
 
@@ -5124,6 +5124,7 @@ function_arg_record_value_3 (HOST_WIDE_INT bitpos,
 
       this_slotno += 1;
       intoffset = (intoffset | (UNITS_PER_WORD-1)) + 1;
+      mode = word_mode;
       parms->nregs += 1;
       intslots -= 1;
     }
@@ -5251,6 +5252,7 @@ function_arg_record_value (tree type, enum machine_mode mode,
   parms.intoffset = 0;
   function_arg_record_value_1 (type, 0, &parms, false);
 
+  /* Take into account pending integer fields.  */
   if (parms.intoffset != -1)
     {
       unsigned int startbit, endbit;