]> gcc.gnu.org Git - gcc.git/commitdiff
ia64.h (struct machine_function): Add n_varargs.
authorRichard Henderson <rth@cygnus.com>
Fri, 25 Aug 2000 22:39:05 +0000 (15:39 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 25 Aug 2000 22:39:05 +0000 (15:39 -0700)
        * config/ia64/ia64.h (struct machine_function): Add n_varargs.
        * config/ia64/ia64.c (ia64_compute_frame_size): Use it.
        (ia64_expand_prologue): Likewise.
        (ia64_setup_incoming_varargs): Set it.  Properly skip the current
        argument for stdargs.

From-SVN: r35994

gcc/ChangeLog
gcc/config/ia64/ia64.c
gcc/config/ia64/ia64.h

index 7a53d4f8c2a6510591342045423d8c0daa3dc3a2..4a3bc018e5732d53cf1e62e1b2f53dbb86d9e3d3 100644 (file)
@@ -1,3 +1,11 @@
+2000-08-25  Richard Henderson  <rth@cygnus.com>
+
+       * config/ia64/ia64.h (struct machine_function): Add n_varargs.
+       * config/ia64/ia64.c (ia64_compute_frame_size): Use it.
+       (ia64_expand_prologue): Likewise.
+       (ia64_setup_incoming_varargs): Set it.  Properly skip the current
+       argument for stdargs.
+
 2000-08-25  Jason Merrill  <jason@redhat.com>
 
        * integrate.c (expand_inline_function): Pull out the original decl.
index f73972963d9feac1244c839dd99824f17dd0e948..f42d7b1a4df921abcbdda8668117555f428791f1 100644 (file)
@@ -1183,7 +1183,7 @@ ia64_compute_frame_size (size)
       break;
   current_frame_info.n_local_regs = regno - LOC_REG (0) + 1;
 
-  if (current_function_varargs || current_function_stdarg)
+  if (cfun->machine->n_varargs > 0)
     current_frame_info.n_input_regs = 8;
   else
     {
@@ -1323,7 +1323,7 @@ ia64_compute_frame_size (size)
 
   /* If we're forced to use st8.spill, we're forced to save and restore
      ar.unat as well.  */
-  if (spilled_gr_p || current_function_varargs || current_function_stdarg)
+  if (spilled_gr_p || cfun->machine->n_varargs)
     {
       SET_HARD_REG_BIT (mask, AR_UNAT_REGNUM);
       current_frame_info.reg_save_ar_unat = find_gr_spill (spill_size == 0);
@@ -1782,7 +1782,7 @@ ia64_expand_prologue ()
 
   /* Set up frame pointer, stack pointer, and spill iterators.  */
 
-  n_varargs = current_function_pretend_args_size / UNITS_PER_WORD;
+  n_varargs = cfun->machine->n_varargs;
   setup_spill_pointers (current_frame_info.n_spilled + n_varargs,
                        stack_pointer_rtx, 0);
 
@@ -2437,17 +2437,21 @@ ia64_initialize_trampoline (addr, fnaddr, static_chain)
 void
 ia64_setup_incoming_varargs (cum, int_mode, type, pretend_size, second_time)
      CUMULATIVE_ARGS cum;
-     int             int_mode ATTRIBUTE_UNUSED;
-     tree            type ATTRIBUTE_UNUSED;
+     int             int_mode;
+     tree            type;
      int *           pretend_size;
      int            second_time ATTRIBUTE_UNUSED;
 {
-  /* If this is a stdarg function, then don't save the current argument.  */
-  int offset = ! current_function_varargs;
+  /* If this is a stdarg function, then skip the current argument.  */
+  if (! current_function_varargs)
+    ia64_function_arg_advance (&cum, int_mode, type, 1);
 
   if (cum.words < MAX_ARGUMENT_SLOTS)
-    *pretend_size = ((MAX_ARGUMENT_SLOTS - cum.words - offset)
-                    * UNITS_PER_WORD);
+    {
+      int n = MAX_ARGUMENT_SLOTS - cum.words;
+      *pretend_size = n * UNITS_PER_WORD;
+      cfun->machine->n_varargs = n;
+    }
 }
 
 /* Check whether TYPE is a homogeneous floating point aggregate.  If
index 2410ecd5e855f25dd3f5ef47494a9c0a67a63676..0c8197ab6ac01f194330f866f8ddc49ccf21c08d 100644 (file)
@@ -2795,6 +2795,9 @@ struct machine_function
 
   /* The GP value save register.  */
   struct rtx_def* ia64_gp_save;
+
+  /* The number of varargs registers to save.  */
+  int n_varargs;
 };
 
 
This page took 0.079456 seconds and 5 git commands to generate.