OSDN Git Service

*** empty log message ***
[pf3gnuchains/gcc-fork.git] / gcc / calls.c
1 /* Convert function calls to rtl insns, for GNU C compiler.
2    Copyright (C) 1989, 1992 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include "config.h"
21 #include "rtl.h"
22 #include "tree.h"
23 #include "flags.h"
24 #include "expr.h"
25 #include "insn-flags.h"
26
27 /* Decide whether a function's arguments should be processed
28    from first to last or from last to first.  */
29
30 #ifdef STACK_GROWS_DOWNWARD
31 #ifdef PUSH_ROUNDING
32 #define PUSH_ARGS_REVERSED      /* If it's last to first */
33 #endif
34 #endif
35
36 /* Like STACK_BOUNDARY but in units of bytes, not bits.  */
37 #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT)
38
39 /* Data structure and subroutines used within expand_call.  */
40
41 struct arg_data
42 {
43   /* Tree node for this argument.  */
44   tree tree_value;
45   /* Current RTL value for argument, or 0 if it isn't precomputed.  */
46   rtx value;
47   /* Initially-compute RTL value for argument; only for const functions.  */
48   rtx initial_value;
49   /* Register to pass this argument in, 0 if passed on stack, or an
50      EXPR_LIST if the arg is to be copied into multiple different
51      registers.  */
52   rtx reg;
53   /* Number of registers to use.  0 means put the whole arg in registers.
54      Also 0 if not passed in registers.  */
55   int partial;
56   /* Non-zero if argument must be passed on stack.  */
57   int pass_on_stack;
58   /* Offset of this argument from beginning of stack-args.  */
59   struct args_size offset;
60   /* Similar, but offset to the start of the stack slot.  Different from
61      OFFSET if this arg pads downward.  */
62   struct args_size slot_offset;
63   /* Size of this argument on the stack, rounded up for any padding it gets,
64      parts of the argument passed in registers do not count.
65      If REG_PARM_STACK_SPACE is defined, then register parms
66      are counted here as well.  */
67   struct args_size size;
68   /* Location on the stack at which parameter should be stored.  The store
69      has already been done if STACK == VALUE.  */
70   rtx stack;
71   /* Location on the stack of the start of this argument slot.  This can
72      differ from STACK if this arg pads downward.  This location is known
73      to be aligned to FUNCTION_ARG_BOUNDARY.  */
74   rtx stack_slot;
75 #ifdef ACCUMULATE_OUTGOING_ARGS
76   /* Place that this stack area has been saved, if needed.  */
77   rtx save_area;
78 #endif
79 };
80
81 #ifdef ACCUMULATE_OUTGOING_ARGS
82 /* A vector of one char per word of stack space.  A byte if non-zero if
83    the corresponding stack location has been used.
84    This vector is used to prevent a function call within an argument from
85    clobbering any stack already set up.  */
86 static char *stack_usage_map;
87
88 /* Size of STACK_USAGE_MAP.  */
89 static int highest_outgoing_arg_in_use;
90 #endif
91
92 static void store_one_arg ();
93 extern enum machine_mode mode_for_size ();
94 \f
95 /* Return 1 if EXP contains a call to the built-in function `alloca'.  */
96
97 static int
98 calls_alloca (exp)
99      tree exp;
100 {
101   register int i;
102   int type = TREE_CODE_CLASS (TREE_CODE (exp));
103   int length = tree_code_length[(int) TREE_CODE (exp)];
104
105   /* Only expressions and references can contain calls.  */
106
107   if (type != 'e' && type != '<' && type != '1' && type != '2' && type != 'r')
108     return 0;
109
110   switch (TREE_CODE (exp))
111     {
112     case CALL_EXPR:
113       if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
114           && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
115               == FUNCTION_DECL)
116           && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
117           && (DECL_FUNCTION_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
118               == BUILT_IN_ALLOCA))
119         return 1;
120
121       /* Third operand is RTL.  */
122       length = 2;
123       break;
124
125     case SAVE_EXPR:
126       if (SAVE_EXPR_RTL (exp) != 0)
127         return 0;
128       break;
129
130     case BLOCK:
131       /* Must not look at BLOCK_SUPERCONTEXT since it will point back to
132          us.  */
133       length = 3;
134       break;
135
136     case METHOD_CALL_EXPR:
137       length = 3;
138       break;
139
140     case WITH_CLEANUP_EXPR:
141       length = 1;
142       break;
143
144     case RTL_EXPR:
145       return 0;
146     }
147
148   for (i = 0; i < length; i++)
149     if (TREE_OPERAND (exp, i) != 0
150         && calls_alloca (TREE_OPERAND (exp, i)))
151       return 1;
152
153   return 0;
154 }
155 \f
156 /* Force FUNEXP into a form suitable for the address of a CALL,
157    and return that as an rtx.  Also load the static chain register
158    if FNDECL is a nested function.
159
160    USE_INSNS points to a variable holding a chain of USE insns
161    to which a USE of the static chain
162    register should be added, if required.  */
163
164 rtx
165 prepare_call_address (funexp, fndecl, use_insns)
166      rtx funexp;
167      tree fndecl;
168      rtx *use_insns;
169 {
170   rtx static_chain_value = 0;
171
172   funexp = protect_from_queue (funexp, 0);
173
174   if (fndecl != 0)
175     /* Get possible static chain value for nested function in C. */
176     static_chain_value = lookup_static_chain (fndecl);
177
178   /* Make a valid memory address and copy constants thru pseudo-regs,
179      but not for a constant address if -fno-function-cse.  */
180   if (GET_CODE (funexp) != SYMBOL_REF)
181     funexp = memory_address (FUNCTION_MODE, funexp);
182   else
183     {
184 #ifndef NO_FUNCTION_CSE
185       if (optimize && ! flag_no_function_cse)
186 #ifdef NO_RECURSIVE_FUNCTION_CSE
187         if (fndecl != current_function_decl)
188 #endif
189           funexp = force_reg (Pmode, funexp);
190 #endif
191     }
192
193   if (static_chain_value != 0)
194     {
195       emit_move_insn (static_chain_rtx, static_chain_value);
196
197       /* Put the USE insn in the chain we were passed.  It will later be
198          output immediately in front of the CALL insn.  */
199       push_to_sequence (*use_insns);
200       emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
201       *use_insns = get_insns ();
202       end_sequence ();
203     }
204
205   return funexp;
206 }
207
208 /* Generate instructions to call function FUNEXP,
209    and optionally pop the results.
210    The CALL_INSN is the first insn generated.
211
212    FUNTYPE is the data type of the function, or, for a library call,
213    the identifier for the name of the call.  This is given to the
214    macro RETURN_POPS_ARGS to determine whether this function pops its own args.
215
216    STACK_SIZE is the number of bytes of arguments on the stack,
217    rounded up to STACK_BOUNDARY; zero if the size is variable.
218    This is both to put into the call insn and
219    to generate explicit popping code if necessary.
220
221    STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
222    It is zero if this call doesn't want a structure value.
223
224    NEXT_ARG_REG is the rtx that results from executing
225      FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
226    just after all the args have had their registers assigned.
227    This could be whatever you like, but normally it is the first
228    arg-register beyond those used for args in this call,
229    or 0 if all the arg-registers are used in this call.
230    It is passed on to `gen_call' so you can put this info in the call insn.
231
232    VALREG is a hard register in which a value is returned,
233    or 0 if the call does not return a value.
234
235    OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
236    the args to this call were processed.
237    We restore `inhibit_defer_pop' to that value.
238
239    USE_INSNS is a chain of USE insns to be emitted immediately before
240    the actual CALL insn.
241
242    IS_CONST is true if this is a `const' call.  */
243
244 void
245 emit_call_1 (funexp, funtype, stack_size, struct_value_size, next_arg_reg,
246              valreg, old_inhibit_defer_pop, use_insns, is_const)
247      rtx funexp;
248      tree funtype;
249      int stack_size;
250      int struct_value_size;
251      rtx next_arg_reg;
252      rtx valreg;
253      int old_inhibit_defer_pop;
254      rtx use_insns;
255      int is_const;
256 {
257   rtx stack_size_rtx = gen_rtx (CONST_INT, VOIDmode, stack_size);
258   rtx struct_value_size_rtx = gen_rtx (CONST_INT, VOIDmode, struct_value_size);
259   rtx call_insn;
260   int already_popped = 0;
261
262   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
263      and we don't want to load it into a register as an optimization,
264      because prepare_call_address already did it if it should be done.  */
265   if (GET_CODE (funexp) != SYMBOL_REF)
266     funexp = memory_address (FUNCTION_MODE, funexp);
267
268 #ifndef ACCUMULATE_OUTGOING_ARGS
269 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
270   if (HAVE_call_pop && HAVE_call_value_pop
271       && (RETURN_POPS_ARGS (funtype, stack_size) > 0 || stack_size == 0))
272     {
273       rtx n_pop = gen_rtx (CONST_INT, VOIDmode, 
274                            RETURN_POPS_ARGS (funtype, stack_size));
275       rtx pat;
276
277       /* If this subroutine pops its own args, record that in the call insn
278          if possible, for the sake of frame pointer elimination.  */
279       if (valreg)
280         pat = gen_call_value_pop (valreg,
281                                   gen_rtx (MEM, FUNCTION_MODE, funexp),
282                                   stack_size_rtx, next_arg_reg, n_pop);
283       else
284         pat = gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, funexp),
285                             stack_size_rtx, next_arg_reg, n_pop);
286
287       emit_call_insn (pat);
288       already_popped = 1;
289     }
290   else
291 #endif
292 #endif
293
294 #if defined (HAVE_call) && defined (HAVE_call_value)
295   if (HAVE_call && HAVE_call_value)
296     {
297       if (valreg)
298         emit_call_insn (gen_call_value (valreg,
299                                         gen_rtx (MEM, FUNCTION_MODE, funexp),
300                                         stack_size_rtx, next_arg_reg));
301       else
302         emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, funexp),
303                                   stack_size_rtx, next_arg_reg,
304                                   struct_value_size_rtx));
305     }
306   else
307 #endif
308     abort ();
309
310   /* Find the CALL insn we just emitted and write the USE insns before it.  */
311   for (call_insn = get_last_insn ();
312        call_insn && GET_CODE (call_insn) != CALL_INSN;
313        call_insn = PREV_INSN (call_insn))
314     ;
315
316   if (! call_insn)
317     abort ();
318
319   /* Put the USE insns before the CALL.  */
320   emit_insns_before (use_insns, call_insn);
321
322   /* If this is a const call, then set the insn's unchanging bit.  */
323   if (is_const)
324     CONST_CALL_P (call_insn) = 1;
325
326   inhibit_defer_pop = old_inhibit_defer_pop;
327
328 #ifndef ACCUMULATE_OUTGOING_ARGS
329   /* If returning from the subroutine does not automatically pop the args,
330      we need an instruction to pop them sooner or later.
331      Perhaps do it now; perhaps just record how much space to pop later.
332
333      If returning from the subroutine does pop the args, indicate that the
334      stack pointer will be changed.  */
335
336   if (stack_size != 0 && RETURN_POPS_ARGS (funtype, stack_size) > 0)
337     {
338       if (!already_popped)
339         emit_insn (gen_rtx (CLOBBER, VOIDmode, stack_pointer_rtx));
340       stack_size -= RETURN_POPS_ARGS (funtype, stack_size);
341       stack_size_rtx = gen_rtx (CONST_INT, VOIDmode, stack_size);
342     }
343
344   if (stack_size != 0)
345     {
346       if (flag_defer_pop && inhibit_defer_pop == 0)
347         pending_stack_adjust += stack_size;
348       else
349         adjust_stack (stack_size_rtx);
350     }
351 #endif
352 }
353
354 /* Generate all the code for a function call
355    and return an rtx for its value.
356    Store the value in TARGET (specified as an rtx) if convenient.
357    If the value is stored in TARGET then TARGET is returned.
358    If IGNORE is nonzero, then we ignore the value of the function call.  */
359
360 rtx
361 expand_call (exp, target, ignore)
362      tree exp;
363      rtx target;
364      int ignore;
365 {
366   /* List of actual parameters.  */
367   tree actparms = TREE_OPERAND (exp, 1);
368   /* RTX for the function to be called.  */
369   rtx funexp;
370   /* Tree node for the function to be called (not the address!).  */
371   tree funtree;
372   /* Data type of the function.  */
373   tree funtype;
374   /* Declaration of the function being called,
375      or 0 if the function is computed (not known by name).  */
376   tree fndecl = 0;
377   char *name = 0;
378
379   /* Register in which non-BLKmode value will be returned,
380      or 0 if no value or if value is BLKmode.  */
381   rtx valreg;
382   /* Address where we should return a BLKmode value;
383      0 if value not BLKmode.  */
384   rtx structure_value_addr = 0;
385   /* Nonzero if that address is being passed by treating it as
386      an extra, implicit first parameter.  Otherwise,
387      it is passed by being copied directly into struct_value_rtx.  */
388   int structure_value_addr_parm = 0;
389   /* Size of aggregate value wanted, or zero if none wanted
390      or if we are using the non-reentrant PCC calling convention
391      or expecting the value in registers.  */
392   int struct_value_size = 0;
393   /* Nonzero if called function returns an aggregate in memory PCC style,
394      by returning the address of where to find it.  */
395   int pcc_struct_value = 0;
396
397   /* Number of actual parameters in this call, including struct value addr.  */
398   int num_actuals;
399   /* Number of named args.  Args after this are anonymous ones
400      and they must all go on the stack.  */
401   int n_named_args;
402   /* Count arg position in order args appear.  */
403   int argpos;
404
405   /* Vector of information about each argument.
406      Arguments are numbered in the order they will be pushed,
407      not the order they are written.  */
408   struct arg_data *args;
409
410   /* Total size in bytes of all the stack-parms scanned so far.  */
411   struct args_size args_size;
412   /* Size of arguments before any adjustments (such as rounding).  */
413   struct args_size original_args_size;
414   /* Data on reg parms scanned so far.  */
415   CUMULATIVE_ARGS args_so_far;
416   /* Nonzero if a reg parm has been scanned.  */
417   int reg_parm_seen;
418
419   /* Nonzero if we must avoid push-insns in the args for this call. 
420      If stack space is allocated for register parameters, but not by the
421      caller, then it is preallocated in the fixed part of the stack frame.
422      So the entire argument block must then be preallocated (i.e., we
423      ignore PUSH_ROUNDING in that case).  */
424
425 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
426   int must_preallocate = 1;
427 #else
428 #ifdef PUSH_ROUNDING
429   int must_preallocate = 0;
430 #else
431   int must_preallocate = 1;
432 #endif
433 #endif
434
435   /* 1 if scanning parms front to back, -1 if scanning back to front.  */
436   int inc;
437   /* Address of space preallocated for stack parms
438      (on machines that lack push insns), or 0 if space not preallocated.  */
439   rtx argblock = 0;
440
441   /* Nonzero if it is plausible that this is a call to alloca.  */
442   int may_be_alloca;
443   /* Nonzero if this is a call to setjmp or a related function.  */
444   int returns_twice;
445   /* Nonzero if this is a call to `longjmp'.  */
446   int is_longjmp;
447   /* Nonzero if this is a call to an inline function.  */
448   int is_integrable = 0;
449   /* Nonzero if this is a call to a `const' function.
450      Note that only explicitly named functions are handled as `const' here.  */
451   int is_const = 0;
452   /* Nonzero if this is a call to a `volatile' function.  */
453   int is_volatile = 0;
454 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
455   /* Define the boundary of the register parm stack space that needs to be
456      save, if any.  */
457   int low_to_save = -1, high_to_save;
458   rtx save_area = 0;            /* Place that it is saved */
459 #endif
460
461 #ifdef ACCUMULATE_OUTGOING_ARGS
462   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
463   char *initial_stack_usage_map = stack_usage_map;
464 #endif
465
466   rtx old_stack_level = 0;
467   int old_pending_adj;
468   int old_inhibit_defer_pop = inhibit_defer_pop;
469   tree old_cleanups = cleanups_this_call;
470
471   rtx use_insns = 0;
472
473   register tree p;
474   register int i;
475
476   /* See if we can find a DECL-node for the actual function.
477      As a result, decide whether this is a call to an integrable function.  */
478
479   p = TREE_OPERAND (exp, 0);
480   if (TREE_CODE (p) == ADDR_EXPR)
481     {
482       fndecl = TREE_OPERAND (p, 0);
483       if (TREE_CODE (fndecl) != FUNCTION_DECL)
484         {
485           /* May still be a `const' function if it is
486              a call through a pointer-to-const.
487              But we don't handle that.  */
488           fndecl = 0;
489         }
490       else
491         {
492           if (!flag_no_inline
493               && fndecl != current_function_decl
494               && DECL_SAVED_INSNS (fndecl))
495             is_integrable = 1;
496           else if (! TREE_ADDRESSABLE (fndecl))
497             {
498               /* In case this function later becomes inlineable,
499                  record that there was already a non-inline call to it.
500
501                  Use abstraction instead of setting TREE_ADDRESSABLE
502                  directly.  */
503               if (TREE_INLINE (fndecl) && extra_warnings && !flag_no_inline)
504                 warning_with_decl (fndecl, "can't inline call to `%s' which was declared inline");
505               mark_addressable (fndecl);
506             }
507
508           if (TREE_READONLY (fndecl) && ! TREE_THIS_VOLATILE (fndecl)
509               && TYPE_MODE (TREE_TYPE (exp)) != VOIDmode)
510             is_const = 1;
511         }
512     }
513
514   is_volatile = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (p)));
515
516   /* Warn if this value is an aggregate type,
517      regardless of which calling convention we are using for it.  */
518   if (warn_aggregate_return
519       && (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
520           || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
521           || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE))
522     warning ("function call has aggregate value");
523
524   /* Set up a place to return a structure.  */
525
526   /* Cater to broken compilers.  */
527   if (aggregate_value_p (exp))
528     {
529       /* This call returns a big structure.  */
530       is_const = 0;
531
532 #ifdef PCC_STATIC_STRUCT_RETURN
533       if (flag_pcc_struct_return)
534         {
535           pcc_struct_value = 1;
536           is_integrable = 0;  /* Easier than making that case work right.  */
537         }
538       else
539 #endif
540         {
541           struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
542
543           if (struct_value_size < 0)
544             abort ();
545
546           if (target && GET_CODE (target) == MEM)
547             structure_value_addr = XEXP (target, 0);
548           else
549             {
550               /* Assign a temporary on the stack to hold the value.  */
551
552               /* For variable-sized objects, we must be called with a target
553                  specified.  If we were to allocate space on the stack here,
554                  we would have no way of knowing when to free it.  */
555
556               structure_value_addr
557                 = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
558               target = 0;
559             }
560         }
561     }
562
563   /* If called function is inline, try to integrate it.  */
564
565   if (is_integrable)
566     {
567       rtx temp;
568
569       temp = expand_inline_function (fndecl, actparms, target,
570                                      ignore, TREE_TYPE (exp),
571                                      structure_value_addr);
572
573       /* If inlining succeeded, return.  */
574       if ((int) temp != -1)
575         {
576           /* Perform all cleanups needed for the arguments of this call
577              (i.e. destructors in C++).  It is ok if these destructors
578              clobber RETURN_VALUE_REG, because the only time we care about
579              this is when TARGET is that register.  But in C++, we take
580              care to never return that register directly.  */
581           expand_cleanups_to (old_cleanups);
582
583           /* If the result is equivalent to TARGET, return TARGET to simplify
584              checks in store_expr.  They can be equivalent but not equal in the
585              case of a function that returns BLKmode.  */
586           if (temp != target && rtx_equal_p (temp, target))
587             return target;
588           return temp;
589         }
590
591       /* If inlining failed, mark FNDECL as needing to be compiled
592          separately after all.  */
593       mark_addressable (fndecl);
594     }
595
596   /* When calling a const function, we must pop the stack args right away,
597      so that the pop is deleted or moved with the call.  */
598   if (is_const)
599     NO_DEFER_POP;
600
601   function_call_count++;
602
603   if (fndecl && DECL_NAME (fndecl))
604     name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
605
606 #if 0
607   /* Unless it's a call to a specific function that isn't alloca,
608      if it has one argument, we must assume it might be alloca.  */
609
610   may_be_alloca =
611     (!(fndecl != 0 && strcmp (name, "alloca"))
612      && actparms != 0
613      && TREE_CHAIN (actparms) == 0);
614 #else
615   /* We assume that alloca will always be called by name.  It
616      makes no sense to pass it as a pointer-to-function to
617      anything that does not understand its behavior.  */
618   may_be_alloca =
619     (name && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
620                  && name[0] == 'a'
621                  && ! strcmp (name, "alloca"))
622                 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
623                     && name[0] == '_'
624                     && ! strcmp (name, "__builtin_alloca"))));
625 #endif
626
627   /* See if this is a call to a function that can return more than once
628      or a call to longjmp.  */
629
630   returns_twice = 0;
631   is_longjmp = 0;
632
633   if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
634     {
635       char *tname = name;
636
637       if (name[0] == '_')
638         tname += ((name[1] == '_' && name[2] == 'x') ? 3 : 1);
639
640       if (tname[0] == 's')
641         {
642           returns_twice
643             = ((tname[1] == 'e'
644                 && (! strcmp (tname, "setjmp")
645                     || ! strcmp (tname, "setjmp_syscall")))
646                || (tname[1] == 'i'
647                    && ! strcmp (tname, "sigsetjmp"))
648                || (tname[1] == 'a'
649                    && ! strcmp (tname, "savectx")));
650           if (tname[1] == 'i'
651               && ! strcmp (tname, "siglongjmp"))
652             is_longjmp = 1;
653         }
654       else if ((tname[0] == 'q' && tname[1] == 's'
655                 && ! strcmp (tname, "qsetjmp"))
656                || (tname[0] == 'v' && tname[1] == 'f'
657                    && ! strcmp (tname, "vfork")))
658         returns_twice = 1;
659
660       else if (tname[0] == 'l' && tname[1] == 'o'
661                && ! strcmp (tname, "longjmp"))
662         is_longjmp = 1;
663     }
664
665   if (may_be_alloca)
666     current_function_calls_alloca = 1;
667
668   /* Don't let pending stack adjusts add up to too much.
669      Also, do all pending adjustments now
670      if there is any chance this might be a call to alloca.  */
671
672   if (pending_stack_adjust >= 32
673       || (pending_stack_adjust > 0 && may_be_alloca))
674     do_pending_stack_adjust ();
675
676   /* Operand 0 is a pointer-to-function; get the type of the function.  */
677   funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
678   if (TREE_CODE (funtype) != POINTER_TYPE)
679     abort ();
680   funtype = TREE_TYPE (funtype);
681
682   /* Push the temporary stack slot level so that we can free temporaries used
683      by each of the arguments separately.  */
684   push_temp_slots ();
685
686   /* Start updating where the next arg would go.  */
687   INIT_CUMULATIVE_ARGS (args_so_far, funtype, 0);
688
689   /* If struct_value_rtx is 0, it means pass the address
690      as if it were an extra parameter.  */
691   if (structure_value_addr && struct_value_rtx == 0)
692     {
693       actparms
694         = tree_cons (error_mark_node,
695                      make_tree (build_pointer_type (TREE_TYPE (funtype)),
696                                 force_reg (Pmode, structure_value_addr)),
697                      actparms);
698       structure_value_addr_parm = 1;
699     }
700
701   /* Count the arguments and set NUM_ACTUALS.  */
702   for (p = actparms, i = 0; p; p = TREE_CHAIN (p)) i++;
703   num_actuals = i;
704
705   /* Compute number of named args.
706      Normally, don't include the last named arg if anonymous args follow.
707      (If no anonymous args follow, the result of list_length
708      is actually one too large.)
709
710      If SETUP_INCOMING_VARARGS is defined, this machine will be able to
711      place unnamed args that were passed in registers into the stack.  So
712      treat all args as named.  This allows the insns emitting for a specific
713      argument list to be independent of the function declaration.
714
715      If SETUP_INCOMING_VARARGS is not defined, we do not have any reliable
716      way to pass unnamed args in registers, so we must force them into
717      memory.  */
718 #ifndef SETUP_INCOMING_VARARGS
719   if (TYPE_ARG_TYPES (funtype) != 0)
720     n_named_args
721       = list_length (TYPE_ARG_TYPES (funtype)) - 1
722         /* Count the struct value address, if it is passed as a parm.  */
723         + structure_value_addr_parm;
724   else
725 #endif
726     /* If we know nothing, treat all args as named.  */
727     n_named_args = num_actuals;
728
729   /* Make a vector to hold all the information about each arg.  */
730   args = (struct arg_data *) alloca (num_actuals * sizeof (struct arg_data));
731   bzero (args, num_actuals * sizeof (struct arg_data));
732
733   args_size.constant = 0;
734   args_size.var = 0;
735
736   /* In this loop, we consider args in the order they are written.
737      We fill up ARGS from the front of from the back if necessary
738      so that in any case the first arg to be pushed ends up at the front.  */
739
740 #ifdef PUSH_ARGS_REVERSED
741   i = num_actuals - 1, inc = -1;
742   /* In this case, must reverse order of args
743      so that we compute and push the last arg first.  */
744 #else
745   i = 0, inc = 1;
746 #endif
747
748   /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
749   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
750     {
751       tree type = TREE_TYPE (TREE_VALUE (p));
752
753       args[i].tree_value = TREE_VALUE (p);
754
755       /* Replace erroneous argument with constant zero.  */
756       if (type == error_mark_node || TYPE_SIZE (type) == 0)
757         args[i].tree_value = integer_zero_node, type = integer_type_node;
758
759       /* Decide where to pass this arg.
760
761          args[i].reg is nonzero if all or part is passed in registers.
762
763          args[i].partial is nonzero if part but not all is passed in registers,
764          and the exact value says how many words are passed in registers.
765
766          args[i].pass_on_stack is nonzero if the argument must at least be
767          computed on the stack.  It may then be loaded back into registers
768          if args[i].reg is nonzero.
769
770          These decisions are driven by the FUNCTION_... macros and must agree
771          with those made by function.c.  */
772
773 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
774       /* See if this argument should be passed by invisible reference.  */
775       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, TYPE_MODE (type), type,
776                                           argpos < n_named_args))
777         {
778           /* We make a copy of the object and pass the address to the function
779              being called.  */
780           int size = int_size_in_bytes (type);
781           rtx copy;
782
783           if (size < 0)
784             {
785               /* This is a variable-sized object.  Make space on the stack
786                  for it.  */
787               rtx size_rtx = expand_expr (size_in_bytes (type), 0,
788                                           VOIDmode, 0);
789
790               if (old_stack_level == 0)
791                 {
792                   old_stack_level = copy_to_mode_reg (Pmode, stack_pointer_rtx);
793                   old_pending_adj = pending_stack_adjust;
794                   pending_stack_adjust = 0;
795                 }
796
797               copy = gen_rtx (MEM, BLKmode,
798                               allocate_dynamic_stack_space (size_rtx, 0,
799                                                             TYPE_ALIGN (type)));
800             }
801           else
802             copy = assign_stack_temp (TYPE_MODE (type), size, 1);
803
804           store_expr (args[i].tree_value, copy, 0);
805
806           args[i].tree_value = build1 (ADDR_EXPR, build_pointer_type (type),
807                                        make_tree (type, copy));
808           type = build_pointer_type (type);
809         }
810 #endif
811
812       args[i].reg = FUNCTION_ARG (args_so_far, TYPE_MODE (type), type,
813                                   argpos < n_named_args);
814 #ifdef FUNCTION_ARG_PARTIAL_NREGS
815       if (args[i].reg)
816         args[i].partial
817           = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, TYPE_MODE (type), type,
818                                         argpos < n_named_args);
819 #endif
820
821       args[i].pass_on_stack = MUST_PASS_IN_STACK (TYPE_MODE (type), type);
822
823       /* If FUNCTION_ARG returned an (expr_list (nil) FOO), it means that
824          we are to pass this arg in the register(s) designated by FOO, but
825          also to pass it in the stack.  */
826       if (args[i].reg && GET_CODE (args[i].reg) == EXPR_LIST
827           && XEXP (args[i].reg, 0) == 0)
828         args[i].pass_on_stack = 1, args[i].reg = XEXP (args[i].reg, 1);
829
830       /* If this is an addressable type, we must preallocate the stack
831          since we must evaluate the object into its final location.
832
833          If this is to be passed in both registers and the stack, it is simpler
834          to preallocate.  */
835       if (TREE_ADDRESSABLE (type)
836           || (args[i].pass_on_stack && args[i].reg != 0))
837         must_preallocate = 1;
838
839       /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
840          we cannot consider this function call constant.  */
841       if (TREE_ADDRESSABLE (type))
842         is_const = 0;
843
844       /* Compute the stack-size of this argument.  */
845       if (args[i].reg == 0 || args[i].partial != 0
846 #ifdef REG_PARM_STACK_SPACE
847           || REG_PARM_STACK_SPACE (fndecl) > 0
848 #endif
849           || args[i].pass_on_stack)
850         locate_and_pad_parm (TYPE_MODE (type), type,
851 #ifdef STACK_PARMS_IN_REG_PARM_AREA
852                              1,
853 #else
854                              args[i].reg != 0,
855 #endif
856                              fndecl, &args_size, &args[i].offset,
857                              &args[i].size);
858
859 #ifndef ARGS_GROW_DOWNWARD
860       args[i].slot_offset = args_size;
861 #endif
862
863 #ifndef REG_PARM_STACK_SPACE
864       /* If a part of the arg was put into registers,
865          don't include that part in the amount pushed.  */
866       if (! args[i].pass_on_stack)
867         args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
868                                   / (PARM_BOUNDARY / BITS_PER_UNIT)
869                                   * (PARM_BOUNDARY / BITS_PER_UNIT));
870 #endif
871       
872       /* Update ARGS_SIZE, the total stack space for args so far.  */
873
874       args_size.constant += args[i].size.constant;
875       if (args[i].size.var)
876         {
877           ADD_PARM_SIZE (args_size, args[i].size.var);
878         }
879
880       /* Since the slot offset points to the bottom of the slot,
881          we must record it after incrementing if the args grow down.  */
882 #ifdef ARGS_GROW_DOWNWARD
883       args[i].slot_offset = args_size;
884
885       args[i].slot_offset.constant = -args_size.constant;
886       if (args_size.var)
887         {
888           SUB_PARM_SIZE (args[i].slot_offset, args_size.var);
889         }
890 #endif
891
892       /* Increment ARGS_SO_FAR, which has info about which arg-registers
893          have been used, etc.  */
894
895       FUNCTION_ARG_ADVANCE (args_so_far, TYPE_MODE (type), type,
896                             argpos < n_named_args);
897     }
898
899   /* Compute the actual size of the argument block required.  The variable
900      and constant sizes must be combined, the size may have to be rounded,
901      and there may be a minimum required size.  */
902
903   original_args_size = args_size;
904   if (args_size.var)
905     {
906       /* If this function requires a variable-sized argument list, don't try to
907          make a cse'able block for this call.  We may be able to do this
908          eventually, but it is too complicated to keep track of what insns go
909          in the cse'able block and which don't.  */
910
911       is_const = 0;
912       must_preallocate = 1;
913
914       args_size.var = ARGS_SIZE_TREE (args_size);
915       args_size.constant = 0;
916
917 #ifdef STACK_BOUNDARY
918       if (STACK_BOUNDARY != BITS_PER_UNIT)
919         args_size.var = round_up (args_size.var, STACK_BYTES);
920 #endif
921
922 #ifdef REG_PARM_STACK_SPACE
923       if (REG_PARM_STACK_SPACE (fndecl) > 0)
924         {
925           args_size.var
926             = size_binop (MAX_EXPR, args_size.var,
927                           size_int (REG_PARM_STACK_SPACE (fndecl)));
928
929 #ifndef OUTGOING_REG_PARM_STACK_SPACE
930           /* The area corresponding to register parameters is not to count in
931              the size of the block we need.  So make the adjustment.  */
932           args_size.var
933             = size_binop (MINUS_EXPR, args_size.var,
934                           size_int (REG_PARM_STACK_SPACE (fndecl)));
935 #endif
936         }
937 #endif
938     }
939   else
940     {
941 #ifdef STACK_BOUNDARY
942       args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
943                              / STACK_BYTES) * STACK_BYTES);
944 #endif
945
946 #ifdef REG_PARM_STACK_SPACE
947       args_size.constant = MAX (args_size.constant,
948                                 REG_PARM_STACK_SPACE (fndecl));
949 #ifndef OUTGOING_REG_PARM_STACK_SPACE
950       args_size.constant -= REG_PARM_STACK_SPACE (fndecl);
951 #endif
952 #endif
953     }
954
955   /* See if we have or want to preallocate stack space.
956
957      If we would have to push a partially-in-regs parm
958      before other stack parms, preallocate stack space instead.
959
960      If the size of some parm is not a multiple of the required stack
961      alignment, we must preallocate.
962
963      If the total size of arguments that would otherwise create a copy in
964      a temporary (such as a CALL) is more than half the total argument list
965      size, preallocation is faster.
966
967      Another reason to preallocate is if we have a machine (like the m88k)
968      where stack alignment is required to be maintained between every
969      pair of insns, not just when the call is made.  However, we assume here
970      that such machines either do not have push insns (and hence preallocation
971      would occur anyway) or the problem is taken care of with
972      PUSH_ROUNDING.  */
973
974   if (! must_preallocate)
975     {
976       int partial_seen = 0;
977       int copy_to_evaluate_size = 0;
978
979       for (i = 0; i < num_actuals && ! must_preallocate; i++)
980         {
981           if (args[i].partial > 0 && ! args[i].pass_on_stack)
982             partial_seen = 1;
983           else if (partial_seen && args[i].reg == 0)
984             must_preallocate = 1;
985
986           if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
987               && (TREE_CODE (args[i].tree_value) == CALL_EXPR
988                   || TREE_CODE (args[i].tree_value) == TARGET_EXPR
989                   || TREE_CODE (args[i].tree_value) == COND_EXPR
990                   || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
991             copy_to_evaluate_size
992               += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
993         }
994
995       if (copy_to_evaluate_size >= args_size.constant / 2)
996         must_preallocate = 1;
997     }
998
999   /* If the structure value address will reference the stack pointer, we must
1000      stabilize it.  We don't need to do this if we know that we are not going
1001      to adjust the stack pointer in processing this call.  */
1002
1003   if (structure_value_addr
1004       && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
1005        || reg_mentioned_p (virtual_outgoing_args_rtx, structure_value_addr))
1006       && (args_size.var
1007 #ifndef ACCUMULATE_OUTGOING_ARGS
1008           || args_size.constant
1009 #endif
1010           ))
1011     structure_value_addr = copy_to_reg (structure_value_addr);
1012
1013   /* If this function call is cse'able, precompute all the parameters.
1014      Note that if the parameter is constructed into a temporary, this will
1015      cause an additional copy because the parameter will be constructed
1016      into a temporary location and then copied into the outgoing arguments.
1017      If a parameter contains a call to alloca and this function uses the
1018      stack, precompute the parameter.  */
1019
1020   for (i = 0; i < num_actuals; i++)
1021     if (is_const
1022         || ((args_size.var != 0 || args_size.constant != 0)
1023             && calls_alloca (args[i].tree_value)))
1024       {
1025         args[i].initial_value = args[i].value
1026           = expand_expr (args[i].tree_value, 0, VOIDmode, 0);
1027         preserve_temp_slots (args[i].value);
1028         free_temp_slots ();
1029
1030         /* ANSI doesn't require a sequence point here,
1031            but PCC has one, so this will avoid some problems.  */
1032         emit_queue ();
1033       }
1034
1035   /* Now we are about to start emitting insns that can be deleted
1036      if a libcall is deleted.  */
1037   if (is_const)
1038     start_sequence ();
1039
1040   /* If we have no actual push instructions, or shouldn't use them,
1041      make space for all args right now.  */
1042
1043   if (args_size.var != 0)
1044     {
1045       if (old_stack_level == 0)
1046         {
1047           old_stack_level = copy_to_mode_reg (Pmode, stack_pointer_rtx);
1048           old_pending_adj = pending_stack_adjust;
1049           pending_stack_adjust = 0;
1050         }
1051       argblock = push_block (ARGS_SIZE_RTX (args_size), 0, 0);
1052     }
1053   else if (must_preallocate)
1054     {
1055       /* Note that we must go through the motions of allocating an argument
1056          block even if the size is zero because we may be storing args
1057          in the area reserved for register arguments, which may be part of
1058          the stack frame.  */
1059       int needed = args_size.constant;
1060
1061 #ifdef ACCUMULATE_OUTGOING_ARGS
1062       /* Store the maximum argument space used.  It will be pushed by the
1063          prologue.
1064
1065          Since the stack pointer will never be pushed, it is possible for
1066          the evaluation of a parm to clobber something we have already
1067          written to the stack.  Since most function calls on RISC machines
1068          do not use the stack, this is uncommon, but must work correctly.
1069          
1070          Therefore, we save any area of the stack that was already written
1071          and that we are using.  Here we set up to do this by making a new
1072          stack usage map from the old one.  The actual save will be done
1073          by store_one_arg. 
1074
1075          Another approach might be to try to reorder the argument
1076          evaluations to avoid this conflicting stack usage.  */
1077
1078       if (needed > current_function_outgoing_args_size)
1079         current_function_outgoing_args_size = needed;
1080
1081 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
1082       /* Since we will be writing into the entire argument area, the
1083          map must be allocated for its entire size, not just the part that
1084          is the responsibility of the caller.  */
1085       needed += REG_PARM_STACK_SPACE (fndecl);
1086 #endif
1087
1088 #ifdef ARGS_GROW_DOWNWARD
1089       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
1090                                          needed + 1);
1091 #else
1092       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, needed);
1093 #endif
1094       stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
1095
1096       if (initial_highest_arg_in_use)
1097         bcopy (initial_stack_usage_map, stack_usage_map,
1098                initial_highest_arg_in_use);
1099
1100       if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
1101         bzero (&stack_usage_map[initial_highest_arg_in_use],
1102                highest_outgoing_arg_in_use - initial_highest_arg_in_use);
1103       needed = 0;
1104       /* No need to copy this virtual register; the space we're
1105          using gets preallocated at the start of the function
1106          so the stack pointer won't change here.  */
1107       argblock = virtual_outgoing_args_rtx;
1108 #else /* not ACCUMULATE_OUTGOING_ARGS */
1109       if (inhibit_defer_pop == 0)
1110         {
1111           /* Try to reuse some or all of the pending_stack_adjust
1112              to get this space.  Maybe we can avoid any pushing.  */
1113           if (needed > pending_stack_adjust)
1114             {
1115               needed -= pending_stack_adjust;
1116               pending_stack_adjust = 0;
1117             }
1118           else
1119             {
1120               pending_stack_adjust -= needed;
1121               needed = 0;
1122             }
1123         }
1124       /* Special case this because overhead of `push_block' in this
1125          case is non-trivial.  */
1126       if (needed == 0)
1127         argblock = virtual_outgoing_args_rtx;
1128       else
1129         argblock = push_block (gen_rtx (CONST_INT, VOIDmode, needed), 0, 0);
1130
1131       /* We only really need to call `copy_to_reg' in the case where push
1132          insns are going to be used to pass ARGBLOCK to a function
1133          call in ARGS.  In that case, the stack pointer changes value
1134          from the allocation point to the call point, and hence
1135          the value of VIRTUAL_OUTGOING_ARGS_RTX changes as well.
1136          But might as well always do it.  */
1137       argblock = copy_to_reg (argblock);
1138 #endif /* not ACCUMULATE_OUTGOING_ARGS */
1139     }
1140
1141   /* If we preallocated stack space, compute the address of each argument.
1142      We need not ensure it is a valid memory address here; it will be 
1143      validized when it is used.  */
1144   if (argblock)
1145     {
1146       rtx arg_reg = argblock;
1147       int arg_offset = 0;
1148
1149       if (GET_CODE (argblock) == PLUS)
1150         arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1151
1152       for (i = 0; i < num_actuals; i++)
1153         {
1154           rtx offset = ARGS_SIZE_RTX (args[i].offset);
1155           rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1156           rtx addr;
1157
1158           /* Skip this parm if it will not be passed on the stack.  */
1159           if (! args[i].pass_on_stack && args[i].reg != 0)
1160             continue;
1161
1162           if (GET_CODE (offset) == CONST_INT)
1163             addr = plus_constant (arg_reg, INTVAL (offset));
1164           else
1165             addr = gen_rtx (PLUS, Pmode, arg_reg, offset);
1166
1167           addr = plus_constant (addr, arg_offset);
1168           args[i].stack
1169             = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (args[i].tree_value)), addr);
1170
1171           if (GET_CODE (slot_offset) == CONST_INT)
1172             addr = plus_constant (arg_reg, INTVAL (slot_offset));
1173           else
1174             addr = gen_rtx (PLUS, Pmode, arg_reg, slot_offset);
1175
1176           addr = plus_constant (addr, arg_offset);
1177           args[i].stack_slot
1178             = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (args[i].tree_value)), addr);
1179         }
1180     }
1181                                                
1182 #ifdef PUSH_ARGS_REVERSED
1183 #ifdef STACK_BOUNDARY
1184   /* If we push args individually in reverse order, perform stack alignment
1185      before the first push (the last arg).  */
1186   if (argblock == 0)
1187     anti_adjust_stack (gen_rtx (CONST_INT, VOIDmode,
1188                                 (args_size.constant
1189                                  - original_args_size.constant)));
1190 #endif
1191 #endif
1192
1193   /* Don't try to defer pops if preallocating, not even from the first arg,
1194      since ARGBLOCK probably refers to the SP.  */
1195   if (argblock)
1196     NO_DEFER_POP;
1197
1198   /* Get the function to call, in the form of RTL.  */
1199   if (fndecl)
1200     /* Get a SYMBOL_REF rtx for the function address.  */
1201     funexp = XEXP (DECL_RTL (fndecl), 0);
1202   else
1203     /* Generate an rtx (probably a pseudo-register) for the address.  */
1204     {
1205       funexp = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0);
1206       free_temp_slots ();       /* FUNEXP can't be BLKmode */
1207       emit_queue ();
1208     }
1209
1210   /* Figure out the register where the value, if any, will come back.  */
1211   valreg = 0;
1212   if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
1213       && ! structure_value_addr)
1214     {
1215       if (pcc_struct_value)
1216         valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
1217                                       fndecl);
1218       else
1219         valreg = hard_function_value (TREE_TYPE (exp), fndecl);
1220     }
1221
1222   /* Precompute all register parameters.  It isn't safe to compute anything
1223      once we have started filling any specific hard regs. */
1224   reg_parm_seen = 0;
1225   for (i = 0; i < num_actuals; i++)
1226     if (args[i].reg != 0 && ! args[i].pass_on_stack)
1227       {
1228         reg_parm_seen = 1;
1229
1230         if (args[i].value == 0)
1231           {
1232             args[i].value = expand_expr (args[i].tree_value, 0, VOIDmode, 0);
1233             preserve_temp_slots (args[i].value);
1234             free_temp_slots ();
1235
1236             /* ANSI doesn't require a sequence point here,
1237                but PCC has one, so this will avoid some problems.  */
1238             emit_queue ();
1239           }
1240       }
1241
1242 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
1243   /* The argument list is the property of the called routine and it
1244      may clobber it.  If the fixed area has been used for previous
1245      parameters, we must save and restore it.
1246
1247      Here we compute the boundary of the that needs to be saved, if any.  */
1248
1249   for (i = 0; i < REG_PARM_STACK_SPACE (fndecl); i++)
1250     {
1251       if (i >=  highest_outgoing_arg_in_use
1252           || stack_usage_map[i] == 0)
1253         continue;
1254
1255       if (low_to_save == -1)
1256         low_to_save = i;
1257
1258       high_to_save = i;
1259     }
1260
1261   if (low_to_save >= 0)
1262     {
1263       int num_to_save = high_to_save - low_to_save + 1;
1264       enum machine_mode save_mode
1265         = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
1266       rtx stack_area;
1267
1268       /* If we don't have the required alignment, must do this in BLKmode.  */
1269       if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
1270                                BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
1271         save_mode = BLKmode;
1272
1273       stack_area = gen_rtx (MEM, save_mode,
1274                             memory_address (save_mode,
1275                                             plus_constant (argblock,
1276                                                            low_to_save)));
1277       if (save_mode == BLKmode)
1278         {
1279           save_area = assign_stack_temp (BLKmode, num_to_save, 1);
1280           emit_block_move (validize_mem (save_area), stack_area,
1281                            gen_rtx (CONST_INT, VOIDmode, num_to_save),
1282                            PARM_BOUNDARY / BITS_PER_UNIT);
1283         }
1284       else
1285         {
1286           save_area = gen_reg_rtx (save_mode);
1287           emit_move_insn (save_area, stack_area);
1288         }
1289     }
1290 #endif
1291           
1292
1293   /* Now store (and compute if necessary) all non-register parms.
1294      These come before register parms, since they can require block-moves,
1295      which could clobber the registers used for register parms.
1296      Parms which have partial registers are not stored here,
1297      but we do preallocate space here if they want that.  */
1298
1299   for (i = 0; i < num_actuals; i++)
1300     if (args[i].reg == 0 || args[i].pass_on_stack)
1301       store_one_arg (&args[i], argblock, may_be_alloca,
1302                      args_size.var != 0, fndecl);
1303
1304   /* Now store any partially-in-registers parm.
1305      This is the last place a block-move can happen.  */
1306   if (reg_parm_seen)
1307     for (i = 0; i < num_actuals; i++)
1308       if (args[i].partial != 0 && ! args[i].pass_on_stack)
1309         store_one_arg (&args[i], argblock, may_be_alloca,
1310                        args_size.var != 0, fndecl);
1311
1312 #ifndef PUSH_ARGS_REVERSED
1313 #ifdef STACK_BOUNDARY
1314   /* If we pushed args in forward order, perform stack alignment
1315      after pushing the last arg.  */
1316   if (argblock == 0)
1317     anti_adjust_stack (gen_rtx (CONST_INT, VOIDmode,
1318                                 (args_size.constant
1319                                  - original_args_size.constant)));
1320 #endif
1321 #endif
1322
1323   /* Pass the function the address in which to return a structure value.  */
1324   if (structure_value_addr && ! structure_value_addr_parm)
1325     {
1326       emit_move_insn (struct_value_rtx,
1327                       force_reg (Pmode,
1328                                  force_operand (structure_value_addr, 0)));
1329       if (GET_CODE (struct_value_rtx) == REG)
1330         {
1331           push_to_sequence (use_insns);
1332           emit_insn (gen_rtx (USE, VOIDmode, struct_value_rtx));
1333           use_insns = get_insns ();
1334           end_sequence ();
1335         }
1336     }
1337
1338   /* Now do the register loads required for any wholly-register parms or any
1339      parms which are passed both on the stack and in a register.  Their
1340      expressions were already evaluated. 
1341
1342      Mark all register-parms as living through the call, putting these USE
1343      insns in a list headed by USE_INSNS.  */
1344
1345   for (i = 0; i < num_actuals; i++)
1346     {
1347       rtx list = args[i].reg;
1348       int partial = args[i].partial;
1349
1350       while (list)
1351         {
1352           rtx reg;
1353           int nregs;
1354
1355           /* Process each register that needs to get this arg.  */
1356           if (GET_CODE (list) == EXPR_LIST)
1357             reg = XEXP (list, 0), list = XEXP (list, 1);
1358           else
1359             reg = list, list = 0;
1360
1361           /* Set to non-zero if must move a word at a time, even if just one
1362              word (e.g, partial == 1 && mode == DFmode).  Set to zero if
1363              we just use a normal move insn.  */
1364           nregs = (partial ? partial
1365                    : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1366                       ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1367                           + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1368                       : 0));
1369
1370           /* If simple case, just do move.  If normal partial, store_one_arg
1371              has already loaded the register for us.  In all other cases,
1372              load the register(s) from memory.  */
1373
1374           if (nregs == 0)
1375             emit_move_insn (reg, args[i].value);
1376           else if (args[i].partial == 0 || args[i].pass_on_stack)
1377             move_block_to_reg (REGNO (reg),
1378                                validize_mem (args[i].value), nregs,
1379                                TYPE_MODE (TREE_TYPE (args[i].tree_value)));
1380         
1381           push_to_sequence (use_insns);
1382           if (nregs == 0)
1383             emit_insn (gen_rtx (USE, VOIDmode, reg));
1384           else
1385             use_regs (REGNO (reg), nregs);
1386           use_insns = get_insns ();
1387           end_sequence ();
1388
1389           /* PARTIAL referred only to the first register, so clear it for the
1390              next time.  */
1391           partial = 0;
1392         }
1393     }
1394
1395   /* Perform postincrements before actually calling the function.  */
1396   emit_queue ();
1397
1398   /* All arguments and registers used for the call must be set up by now!  */
1399
1400   funexp = prepare_call_address (funexp, fndecl, &use_insns);
1401
1402   /* Generate the actual call instruction.  */
1403   emit_call_1 (funexp, funtype, args_size.constant, struct_value_size,
1404                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
1405                valreg, old_inhibit_defer_pop, use_insns, is_const);
1406
1407   /* If call is cse'able, make appropriate pair of reg-notes around it.
1408      Test valreg so we don't crash; may safely ignore `const'
1409      if return type is void.  */
1410   if (is_const && valreg != 0)
1411     {
1412       rtx note = 0;
1413       rtx temp = gen_reg_rtx (GET_MODE (valreg));
1414       rtx insns;
1415
1416       /* Construct an "equal form" for the value which mentions all the
1417          arguments in order as well as the function name.  */
1418 #ifdef PUSH_ARGS_REVERSED
1419       for (i = 0; i < num_actuals; i++)
1420         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1421 #else
1422       for (i = num_actuals - 1; i >= 0; i--)
1423         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1424 #endif
1425       note = gen_rtx (EXPR_LIST, VOIDmode, funexp, note);
1426
1427       insns = get_insns ();
1428       end_sequence ();
1429
1430       emit_libcall_block (insns, temp, valreg, note);
1431
1432       valreg = temp;
1433     }
1434
1435   /* For calls to `setjmp', etc., inform flow.c it should complain
1436      if nonvolatile values are live.  */
1437
1438   if (returns_twice)
1439     {
1440       emit_note (name, NOTE_INSN_SETJMP);
1441       current_function_calls_setjmp = 1;
1442     }
1443
1444   if (is_longjmp)
1445     current_function_calls_longjmp = 1;
1446
1447   /* Notice functions that cannot return.
1448      If optimizing, insns emitted below will be dead.
1449      If not optimizing, they will exist, which is useful
1450      if the user uses the `return' command in the debugger.  */
1451
1452   if (is_volatile || is_longjmp)
1453     emit_barrier ();
1454
1455   /* If value type not void, return an rtx for the value.  */
1456
1457   /* If there are cleanups to be called, don't use a hard reg as target.  */
1458   if (cleanups_this_call != old_cleanups
1459       && target && REG_P (target)
1460       && REGNO (target) < FIRST_PSEUDO_REGISTER)
1461     target = 0;
1462
1463   if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
1464       || ignore)
1465     {
1466       target = const0_rtx;
1467     }
1468   else if (structure_value_addr)
1469     {
1470       if (target == 0 || GET_CODE (target) != MEM)
1471         target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1472                           memory_address (TYPE_MODE (TREE_TYPE (exp)),
1473                                           structure_value_addr));
1474     }
1475   else if (pcc_struct_value)
1476     {
1477       if (target == 0)
1478         target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1479                           copy_to_reg (valreg));
1480       else if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
1481         emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1482                                          copy_to_reg (valreg)));
1483       else
1484         emit_block_move (target, gen_rtx (MEM, BLKmode, copy_to_reg (valreg)),
1485                          expr_size (exp),
1486                          TYPE_ALIGN (TREE_TYPE (exp)) / BITS_PER_UNIT);
1487     }
1488   else if (target && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp)))
1489     /* TARGET and VALREG cannot be equal at this point because the latter
1490        would not have REG_FUNCTION_VALUE_P true, while the former would if
1491        it were referring to the same register.
1492
1493        If they refer to the same register, this move will be a no-op, except
1494        when function inlining is being done.  */
1495     emit_move_insn (target, valreg);
1496   else
1497     target = copy_to_reg (valreg);
1498
1499   /* Perform all cleanups needed for the arguments of this call
1500      (i.e. destructors in C++).  */
1501   expand_cleanups_to (old_cleanups);
1502
1503   /* If size of args is variable, restore saved stack-pointer value.  */
1504
1505   if (old_stack_level)
1506     {
1507       emit_move_insn (stack_pointer_rtx, old_stack_level);
1508       pending_stack_adjust = old_pending_adj;
1509     }
1510
1511 #ifdef ACCUMULATE_OUTGOING_ARGS
1512   else
1513     {
1514 #ifdef REG_PARM_STACK_SPACE
1515       if (save_area)
1516         {
1517           enum machine_mode save_mode = GET_MODE (save_area);
1518           rtx stack_area
1519             = gen_rtx (MEM, save_mode,
1520                        memory_address (save_mode,
1521                                        plus_constant (argblock, low_to_save)));
1522
1523           if (save_mode != BLKmode)
1524             emit_move_insn (stack_area, save_area);
1525           else
1526             emit_block_move (stack_area, validize_mem (save_area),
1527                              gen_rtx (CONST_INT, VOIDmode,
1528                                       high_to_save - low_to_save + 1,
1529                                       PARM_BOUNDARY / BITS_PER_UNIT));
1530         }
1531 #endif
1532           
1533       /* If we saved any argument areas, restore them.  */
1534       for (i = 0; i < num_actuals; i++)
1535         if (args[i].save_area)
1536           {
1537             enum machine_mode save_mode = GET_MODE (args[i].save_area);
1538             rtx stack_area
1539               = gen_rtx (MEM, save_mode,
1540                          memory_address (save_mode,
1541                                          XEXP (args[i].stack_slot, 0)));
1542
1543             if (save_mode != BLKmode)
1544               emit_move_insn (stack_area, args[i].save_area);
1545             else
1546               emit_block_move (stack_area, validize_mem (args[i].save_area),
1547                                gen_rtx (CONST_INT, VOIDmode,
1548                                         args[i].size.constant),
1549                                PARM_BOUNDARY / BITS_PER_UNIT);
1550           }
1551
1552       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
1553       stack_usage_map = initial_stack_usage_map;
1554     }
1555 #endif
1556
1557   /* If this was alloca, record the new stack level for nonlocal gotos.  */
1558   if (may_be_alloca && nonlocal_goto_stack_level != 0)
1559     emit_move_insn (nonlocal_goto_stack_level, stack_pointer_rtx);
1560
1561   pop_temp_slots ();
1562
1563   return target;
1564 }
1565 \f
1566 #if 0
1567 /* Return an rtx which represents a suitable home on the stack
1568    given TYPE, the type of the argument looking for a home.
1569    This is called only for BLKmode arguments.
1570
1571    SIZE is the size needed for this target.
1572    ARGS_ADDR is the address of the bottom of the argument block for this call.
1573    OFFSET describes this parameter's offset into ARGS_ADDR.  It is meaningless
1574    if this machine uses push insns.  */
1575
1576 static rtx
1577 target_for_arg (type, size, args_addr, offset)
1578      tree type;
1579      rtx size;
1580      rtx args_addr;
1581      struct args_size offset;
1582 {
1583   rtx target;
1584   rtx offset_rtx = ARGS_SIZE_RTX (offset);
1585
1586   /* We do not call memory_address if possible,
1587      because we want to address as close to the stack
1588      as possible.  For non-variable sized arguments,
1589      this will be stack-pointer relative addressing.  */
1590   if (GET_CODE (offset_rtx) == CONST_INT)
1591     target = plus_constant (args_addr, INTVAL (offset_rtx));
1592   else
1593     {
1594       /* I have no idea how to guarantee that this
1595          will work in the presence of register parameters.  */
1596       target = gen_rtx (PLUS, Pmode, args_addr, offset_rtx);
1597       target = memory_address (QImode, target);
1598     }
1599
1600   return gen_rtx (MEM, BLKmode, target);
1601 }
1602 #endif
1603 \f
1604 /* Store a single argument for a function call
1605    into the register or memory area where it must be passed.
1606    *ARG describes the argument value and where to pass it.
1607
1608    ARGBLOCK is the address of the stack-block for all the arguments,
1609    or 0 on a machine where arguments are pushed individually.
1610
1611    MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
1612    so must be careful about how the stack is used. 
1613
1614    VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
1615    argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
1616    that we need not worry about saving and restoring the stack.
1617
1618    FNDECL is the declaration of the function we are calling.  */
1619
1620 static void
1621 store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl)
1622      struct arg_data *arg;
1623      rtx argblock;
1624      int may_be_alloca;
1625      int variable_size;
1626      tree fndecl;
1627 {
1628   register tree pval = arg->tree_value;
1629   rtx reg = 0;
1630   int partial = 0;
1631   int used = 0;
1632   int i, lower_bound, upper_bound;
1633
1634   if (TREE_CODE (pval) == ERROR_MARK)
1635     return;
1636
1637 #ifdef ACCUMULATE_OUTGOING_ARGS
1638   /* If this is being stored into a pre-allocated, fixed-size, stack area,
1639      save any previous data at that location.  */
1640   if (argblock && ! variable_size && arg->stack)
1641     {
1642 #ifdef ARGS_GROW_DOWNWARD
1643       /* stack_slot is negative, but we want to index stack_usage_map */
1644       /* with positive values. */
1645       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
1646         upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
1647       else
1648         abort ();
1649
1650       lower_bound = upper_bound - arg->size.constant;
1651 #else
1652       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
1653         lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
1654       else
1655         lower_bound = 0;
1656
1657       upper_bound = lower_bound + arg->size.constant;
1658 #endif
1659
1660       for (i = lower_bound; i < upper_bound; i++)
1661         if (stack_usage_map[i]
1662 #ifdef REG_PARM_STACK_SPACE
1663             /* Don't store things in the fixed argument area at this point;
1664                it has already been saved.  */
1665             && i > REG_PARM_STACK_SPACE (fndecl)
1666 #endif
1667             )
1668           break;
1669
1670       if (i != upper_bound)
1671         {
1672           /* We need to make a save area.  See what mode we can make it.  */
1673           enum machine_mode save_mode
1674             = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
1675           rtx stack_area
1676             = gen_rtx (MEM, save_mode,
1677                        memory_address (save_mode, XEXP (arg->stack_slot, 0)));
1678
1679           if (save_mode == BLKmode)
1680             {
1681               arg->save_area = assign_stack_temp (BLKmode,
1682                                                   arg->size.constant, 1);
1683               emit_block_move (validize_mem (arg->save_area), stack_area,
1684                                gen_rtx (CONST_INT, VOIDmode,
1685                                         arg->size.constant),
1686                                PARM_BOUNDARY / BITS_PER_UNIT);
1687             }
1688           else
1689             {
1690               arg->save_area = gen_reg_rtx (save_mode);
1691               emit_move_insn (arg->save_area, stack_area);
1692             }
1693         }
1694     }
1695 #endif
1696
1697   /* If this isn't going to be placed on both the stack and in registers,
1698      set up the register and number of words.  */
1699   if (! arg->pass_on_stack)
1700     reg = arg->reg, partial = arg->partial;
1701
1702   if (reg != 0 && partial == 0)
1703     /* Being passed entirely in a register.  We shouldn't be called in
1704        this case.   */
1705     abort ();
1706
1707   /* If this is being partially passed in a register, but multiple locations
1708      are specified, we assume that the one partially used is the one that is
1709      listed first.  */
1710   if (reg && GET_CODE (reg) == EXPR_LIST)
1711     reg = XEXP (reg, 0);
1712
1713   /* If this is being passes partially in a register, we can't evaluate
1714      it directly into its stack slot.  Otherwise, we can.  */
1715   if (arg->value == 0)
1716     arg->value = expand_expr (pval, partial ? 0 : arg->stack, VOIDmode, 0);
1717
1718   /* Don't allow anything left on stack from computation
1719      of argument to alloca.  */
1720   if (may_be_alloca)
1721     do_pending_stack_adjust ();
1722
1723   if (arg->value == arg->stack)
1724     /* If the value is already in the stack slot, we are done.  */
1725     ;
1726   else if (TYPE_MODE (TREE_TYPE (pval)) != BLKmode)
1727     {
1728       register int size;
1729
1730       /* Argument is a scalar, not entirely passed in registers.
1731          (If part is passed in registers, arg->partial says how much
1732          and emit_push_insn will take care of putting it there.)
1733          
1734          Push it, and if its size is less than the
1735          amount of space allocated to it,
1736          also bump stack pointer by the additional space.
1737          Note that in C the default argument promotions
1738          will prevent such mismatches.  */
1739
1740       size = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (pval)));
1741       /* Compute how much space the push instruction will push.
1742          On many machines, pushing a byte will advance the stack
1743          pointer by a halfword.  */
1744 #ifdef PUSH_ROUNDING
1745       size = PUSH_ROUNDING (size);
1746 #endif
1747       used = size;
1748
1749       /* Compute how much space the argument should get:
1750          round up to a multiple of the alignment for arguments.  */
1751       if (none != FUNCTION_ARG_PADDING (TYPE_MODE (TREE_TYPE (pval)),
1752                                         TREE_TYPE (pval)))
1753         used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
1754                  / (PARM_BOUNDARY / BITS_PER_UNIT))
1755                 * (PARM_BOUNDARY / BITS_PER_UNIT));
1756
1757       /* This isn't already where we want it on the stack, so put it there.
1758          This can either be done with push or copy insns.  */
1759       emit_push_insn (arg->value, TYPE_MODE (TREE_TYPE (pval)),
1760                       TREE_TYPE (pval), 0, 0, partial, reg,
1761                       used - size, argblock, ARGS_SIZE_RTX (arg->offset));
1762     }
1763   else
1764     {
1765       /* BLKmode, at least partly to be pushed.  */
1766
1767       register int excess;
1768       rtx size_rtx;
1769
1770       /* Pushing a nonscalar.
1771          If part is passed in registers, PARTIAL says how much
1772          and emit_push_insn will take care of putting it there.  */
1773
1774       /* Round its size up to a multiple
1775          of the allocation unit for arguments.  */
1776
1777       if (arg->size.var != 0)
1778         {
1779           excess = 0;
1780           size_rtx = ARGS_SIZE_RTX (arg->size);
1781         }
1782       else
1783         {
1784           register tree size = size_in_bytes (TREE_TYPE (pval));
1785           /* PUSH_ROUNDING has no effect on us, because
1786              emit_push_insn for BLKmode is careful to avoid it.  */
1787           excess = (arg->size.constant - TREE_INT_CST_LOW (size)
1788                     + partial * UNITS_PER_WORD);
1789           size_rtx = expand_expr (size, 0, VOIDmode, 0);
1790         }
1791
1792       emit_push_insn (arg->value, TYPE_MODE (TREE_TYPE (pval)),
1793                       TREE_TYPE (pval), size_rtx,
1794                       TYPE_ALIGN (TREE_TYPE (pval)) / BITS_PER_UNIT, partial,
1795                       reg, excess, argblock, ARGS_SIZE_RTX (arg->offset));
1796     }
1797
1798
1799   /* Unless this is a partially-in-register argument, the argument is now
1800      in the stack. 
1801
1802      ??? Note that this can change arg->value from arg->stack to
1803      arg->stack_slot and it matters when they are not the same.
1804      It isn't totally clear that this is correct in all cases.  */
1805   if (partial == 0)
1806     arg->value = arg->stack_slot;
1807
1808   /* Once we have pushed something, pops can't safely
1809      be deferred during the rest of the arguments.  */
1810   NO_DEFER_POP;
1811
1812   /* ANSI doesn't require a sequence point here,
1813      but PCC has one, so this will avoid some problems.  */
1814   emit_queue ();
1815
1816   /* Free any temporary slots made in processing this argument.  */
1817   free_temp_slots ();
1818
1819 #ifdef ACCUMULATE_OUTGOING_ARGS
1820   /* Now mark the segment we just used.  */
1821   if (argblock && ! variable_size && arg->stack)
1822     for (i = lower_bound; i < upper_bound; i++)
1823       stack_usage_map[i] = 1;
1824 #endif
1825 }