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 #ifndef ACCUMULATE_OUTGOING_ARGS
327   /* If returning from the subroutine does not automatically pop the args,
328      we need an instruction to pop them sooner or later.
329      Perhaps do it now; perhaps just record how much space to pop later.
330
331      If returning from the subroutine does pop the args, indicate that the
332      stack pointer will be changed.  */
333
334   if (stack_size != 0 && RETURN_POPS_ARGS (funtype, stack_size) > 0)
335     {
336       if (!already_popped)
337         emit_insn (gen_rtx (CLOBBER, VOIDmode, stack_pointer_rtx));
338       stack_size -= RETURN_POPS_ARGS (funtype, stack_size);
339       stack_size_rtx = gen_rtx (CONST_INT, VOIDmode, stack_size);
340     }
341
342   if (stack_size != 0)
343     {
344       if (flag_defer_pop && inhibit_defer_pop == 0)
345         pending_stack_adjust += stack_size;
346       else
347         adjust_stack (stack_size_rtx);
348     }
349 #endif
350
351   inhibit_defer_pop = old_inhibit_defer_pop;
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   /* Size of the stack reserved for paramter registers.  */
436   int reg_parm_stack_space = 0;
437
438   /* 1 if scanning parms front to back, -1 if scanning back to front.  */
439   int inc;
440   /* Address of space preallocated for stack parms
441      (on machines that lack push insns), or 0 if space not preallocated.  */
442   rtx argblock = 0;
443
444   /* Nonzero if it is plausible that this is a call to alloca.  */
445   int may_be_alloca;
446   /* Nonzero if this is a call to setjmp or a related function.  */
447   int returns_twice;
448   /* Nonzero if this is a call to `longjmp'.  */
449   int is_longjmp;
450   /* Nonzero if this is a call to an inline function.  */
451   int is_integrable = 0;
452   /* Nonzero if this is a call to a `const' function.
453      Note that only explicitly named functions are handled as `const' here.  */
454   int is_const = 0;
455   /* Nonzero if this is a call to a `volatile' function.  */
456   int is_volatile = 0;
457 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
458   /* Define the boundary of the register parm stack space that needs to be
459      save, if any.  */
460   int low_to_save = -1, high_to_save;
461   rtx save_area = 0;            /* Place that it is saved */
462 #endif
463
464 #ifdef ACCUMULATE_OUTGOING_ARGS
465   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
466   char *initial_stack_usage_map = stack_usage_map;
467 #endif
468
469   rtx old_stack_level = 0;
470   int old_pending_adj;
471   int old_inhibit_defer_pop = inhibit_defer_pop;
472   tree old_cleanups = cleanups_this_call;
473
474   rtx use_insns = 0;
475
476   register tree p;
477   register int i;
478
479   /* See if we can find a DECL-node for the actual function.
480      As a result, decide whether this is a call to an integrable function.  */
481
482   p = TREE_OPERAND (exp, 0);
483   if (TREE_CODE (p) == ADDR_EXPR)
484     {
485       fndecl = TREE_OPERAND (p, 0);
486       if (TREE_CODE (fndecl) != FUNCTION_DECL)
487         {
488           /* May still be a `const' function if it is
489              a call through a pointer-to-const.
490              But we don't handle that.  */
491           fndecl = 0;
492         }
493       else
494         {
495           if (!flag_no_inline
496               && fndecl != current_function_decl
497               && DECL_SAVED_INSNS (fndecl))
498             is_integrable = 1;
499           else if (! TREE_ADDRESSABLE (fndecl))
500             {
501               /* In case this function later becomes inlineable,
502                  record that there was already a non-inline call to it.
503
504                  Use abstraction instead of setting TREE_ADDRESSABLE
505                  directly.  */
506               if (TREE_INLINE (fndecl) && extra_warnings && !flag_no_inline)
507                 warning_with_decl (fndecl, "can't inline call to `%s' which was declared inline");
508               mark_addressable (fndecl);
509             }
510
511           if (TREE_READONLY (fndecl) && ! TREE_THIS_VOLATILE (fndecl)
512               && TYPE_MODE (TREE_TYPE (exp)) != VOIDmode)
513             is_const = 1;
514         }
515     }
516
517   is_volatile = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (p)));
518
519 #ifdef REG_PARM_STACK_SPACE
520 #ifdef MAYBE_REG_PARM_STACK_SPACE
521   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
522 #else
523   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
524 #endif
525 #endif
526
527   /* Warn if this value is an aggregate type,
528      regardless of which calling convention we are using for it.  */
529   if (warn_aggregate_return
530       && (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
531           || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
532           || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE))
533     warning ("function call has aggregate value");
534
535   /* Set up a place to return a structure.  */
536
537   /* Cater to broken compilers.  */
538   if (aggregate_value_p (exp))
539     {
540       /* This call returns a big structure.  */
541       is_const = 0;
542
543 #ifdef PCC_STATIC_STRUCT_RETURN
544       if (flag_pcc_struct_return)
545         {
546           pcc_struct_value = 1;
547           is_integrable = 0;  /* Easier than making that case work right.  */
548         }
549       else
550 #endif
551         {
552           struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
553
554           if (struct_value_size < 0)
555             abort ();
556
557           if (target && GET_CODE (target) == MEM)
558             structure_value_addr = XEXP (target, 0);
559           else
560             {
561               /* Assign a temporary on the stack to hold the value.  */
562
563               /* For variable-sized objects, we must be called with a target
564                  specified.  If we were to allocate space on the stack here,
565                  we would have no way of knowing when to free it.  */
566
567               structure_value_addr
568                 = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
569               target = 0;
570             }
571         }
572     }
573
574   /* If called function is inline, try to integrate it.  */
575
576   if (is_integrable)
577     {
578       rtx temp;
579
580       temp = expand_inline_function (fndecl, actparms, target,
581                                      ignore, TREE_TYPE (exp),
582                                      structure_value_addr);
583
584       /* If inlining succeeded, return.  */
585       if ((int) temp != -1)
586         {
587           /* Perform all cleanups needed for the arguments of this call
588              (i.e. destructors in C++).  It is ok if these destructors
589              clobber RETURN_VALUE_REG, because the only time we care about
590              this is when TARGET is that register.  But in C++, we take
591              care to never return that register directly.  */
592           expand_cleanups_to (old_cleanups);
593
594           /* If the result is equivalent to TARGET, return TARGET to simplify
595              checks in store_expr.  They can be equivalent but not equal in the
596              case of a function that returns BLKmode.  */
597           if (temp != target && rtx_equal_p (temp, target))
598             return target;
599           return temp;
600         }
601
602       /* If inlining failed, mark FNDECL as needing to be compiled
603          separately after all.  */
604       mark_addressable (fndecl);
605     }
606
607   /* When calling a const function, we must pop the stack args right away,
608      so that the pop is deleted or moved with the call.  */
609   if (is_const)
610     NO_DEFER_POP;
611
612   function_call_count++;
613
614   if (fndecl && DECL_NAME (fndecl))
615     name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
616
617 #if 0
618   /* Unless it's a call to a specific function that isn't alloca,
619      if it has one argument, we must assume it might be alloca.  */
620
621   may_be_alloca =
622     (!(fndecl != 0 && strcmp (name, "alloca"))
623      && actparms != 0
624      && TREE_CHAIN (actparms) == 0);
625 #else
626   /* We assume that alloca will always be called by name.  It
627      makes no sense to pass it as a pointer-to-function to
628      anything that does not understand its behavior.  */
629   may_be_alloca =
630     (name && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
631                  && name[0] == 'a'
632                  && ! strcmp (name, "alloca"))
633                 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
634                     && name[0] == '_'
635                     && ! strcmp (name, "__builtin_alloca"))));
636 #endif
637
638   /* See if this is a call to a function that can return more than once
639      or a call to longjmp.  */
640
641   returns_twice = 0;
642   is_longjmp = 0;
643
644   if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
645     {
646       char *tname = name;
647
648       if (name[0] == '_')
649         tname += ((name[1] == '_' && name[2] == 'x') ? 3 : 1);
650
651       if (tname[0] == 's')
652         {
653           returns_twice
654             = ((tname[1] == 'e'
655                 && (! strcmp (tname, "setjmp")
656                     || ! strcmp (tname, "setjmp_syscall")))
657                || (tname[1] == 'i'
658                    && ! strcmp (tname, "sigsetjmp"))
659                || (tname[1] == 'a'
660                    && ! strcmp (tname, "savectx")));
661           if (tname[1] == 'i'
662               && ! strcmp (tname, "siglongjmp"))
663             is_longjmp = 1;
664         }
665       else if ((tname[0] == 'q' && tname[1] == 's'
666                 && ! strcmp (tname, "qsetjmp"))
667                || (tname[0] == 'v' && tname[1] == 'f'
668                    && ! strcmp (tname, "vfork")))
669         returns_twice = 1;
670
671       else if (tname[0] == 'l' && tname[1] == 'o'
672                && ! strcmp (tname, "longjmp"))
673         is_longjmp = 1;
674     }
675
676   if (may_be_alloca)
677     current_function_calls_alloca = 1;
678
679   /* Don't let pending stack adjusts add up to too much.
680      Also, do all pending adjustments now
681      if there is any chance this might be a call to alloca.  */
682
683   if (pending_stack_adjust >= 32
684       || (pending_stack_adjust > 0 && may_be_alloca))
685     do_pending_stack_adjust ();
686
687   /* Operand 0 is a pointer-to-function; get the type of the function.  */
688   funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
689   if (TREE_CODE (funtype) != POINTER_TYPE)
690     abort ();
691   funtype = TREE_TYPE (funtype);
692
693   /* Push the temporary stack slot level so that we can free temporaries used
694      by each of the arguments separately.  */
695   push_temp_slots ();
696
697   /* Start updating where the next arg would go.  */
698   INIT_CUMULATIVE_ARGS (args_so_far, funtype, 0);
699
700   /* If struct_value_rtx is 0, it means pass the address
701      as if it were an extra parameter.  */
702   if (structure_value_addr && struct_value_rtx == 0)
703     {
704       actparms
705         = tree_cons (error_mark_node,
706                      make_tree (build_pointer_type (TREE_TYPE (funtype)),
707                                 force_reg (Pmode, structure_value_addr)),
708                      actparms);
709       structure_value_addr_parm = 1;
710     }
711
712   /* Count the arguments and set NUM_ACTUALS.  */
713   for (p = actparms, i = 0; p; p = TREE_CHAIN (p)) i++;
714   num_actuals = i;
715
716   /* Compute number of named args.
717      Normally, don't include the last named arg if anonymous args follow.
718      (If no anonymous args follow, the result of list_length
719      is actually one too large.)
720
721      If SETUP_INCOMING_VARARGS is defined, this machine will be able to
722      place unnamed args that were passed in registers into the stack.  So
723      treat all args as named.  This allows the insns emitting for a specific
724      argument list to be independent of the function declaration.
725
726      If SETUP_INCOMING_VARARGS is not defined, we do not have any reliable
727      way to pass unnamed args in registers, so we must force them into
728      memory.  */
729 #ifndef SETUP_INCOMING_VARARGS
730   if (TYPE_ARG_TYPES (funtype) != 0)
731     n_named_args
732       = list_length (TYPE_ARG_TYPES (funtype)) - 1
733         /* Count the struct value address, if it is passed as a parm.  */
734         + structure_value_addr_parm;
735   else
736 #endif
737     /* If we know nothing, treat all args as named.  */
738     n_named_args = num_actuals;
739
740   /* Make a vector to hold all the information about each arg.  */
741   args = (struct arg_data *) alloca (num_actuals * sizeof (struct arg_data));
742   bzero (args, num_actuals * sizeof (struct arg_data));
743
744   args_size.constant = 0;
745   args_size.var = 0;
746
747   /* In this loop, we consider args in the order they are written.
748      We fill up ARGS from the front of from the back if necessary
749      so that in any case the first arg to be pushed ends up at the front.  */
750
751 #ifdef PUSH_ARGS_REVERSED
752   i = num_actuals - 1, inc = -1;
753   /* In this case, must reverse order of args
754      so that we compute and push the last arg first.  */
755 #else
756   i = 0, inc = 1;
757 #endif
758
759   /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
760   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
761     {
762       tree type = TREE_TYPE (TREE_VALUE (p));
763
764       args[i].tree_value = TREE_VALUE (p);
765
766       /* Replace erroneous argument with constant zero.  */
767       if (type == error_mark_node || TYPE_SIZE (type) == 0)
768         args[i].tree_value = integer_zero_node, type = integer_type_node;
769
770       /* Decide where to pass this arg.
771
772          args[i].reg is nonzero if all or part is passed in registers.
773
774          args[i].partial is nonzero if part but not all is passed in registers,
775          and the exact value says how many words are passed in registers.
776
777          args[i].pass_on_stack is nonzero if the argument must at least be
778          computed on the stack.  It may then be loaded back into registers
779          if args[i].reg is nonzero.
780
781          These decisions are driven by the FUNCTION_... macros and must agree
782          with those made by function.c.  */
783
784 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
785       /* See if this argument should be passed by invisible reference.  */
786       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, TYPE_MODE (type), type,
787                                           argpos < n_named_args))
788         {
789           /* We make a copy of the object and pass the address to the function
790              being called.  */
791           int size = int_size_in_bytes (type);
792           rtx copy;
793
794           if (size < 0)
795             {
796               /* This is a variable-sized object.  Make space on the stack
797                  for it.  */
798               rtx size_rtx = expand_expr (size_in_bytes (type), 0,
799                                           VOIDmode, 0);
800
801               if (old_stack_level == 0)
802                 {
803                   emit_stack_save (SAVE_BLOCK, &old_stack_level, 0);
804                   old_pending_adj = pending_stack_adjust;
805                   pending_stack_adjust = 0;
806                 }
807
808               copy = gen_rtx (MEM, BLKmode,
809                               allocate_dynamic_stack_space (size_rtx, 0,
810                                                             TYPE_ALIGN (type)));
811             }
812           else
813             copy = assign_stack_temp (TYPE_MODE (type), size, 1);
814
815           store_expr (args[i].tree_value, copy, 0);
816
817           args[i].tree_value = build1 (ADDR_EXPR, build_pointer_type (type),
818                                        make_tree (type, copy));
819           type = build_pointer_type (type);
820         }
821 #endif
822
823       args[i].reg = FUNCTION_ARG (args_so_far, TYPE_MODE (type), type,
824                                   argpos < n_named_args);
825 #ifdef FUNCTION_ARG_PARTIAL_NREGS
826       if (args[i].reg)
827         args[i].partial
828           = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, TYPE_MODE (type), type,
829                                         argpos < n_named_args);
830 #endif
831
832       args[i].pass_on_stack = MUST_PASS_IN_STACK (TYPE_MODE (type), type);
833
834       /* If FUNCTION_ARG returned an (expr_list (nil) FOO), it means that
835          we are to pass this arg in the register(s) designated by FOO, but
836          also to pass it in the stack.  */
837       if (args[i].reg && GET_CODE (args[i].reg) == EXPR_LIST
838           && XEXP (args[i].reg, 0) == 0)
839         args[i].pass_on_stack = 1, args[i].reg = XEXP (args[i].reg, 1);
840
841       /* If this is an addressable type, we must preallocate the stack
842          since we must evaluate the object into its final location.
843
844          If this is to be passed in both registers and the stack, it is simpler
845          to preallocate.  */
846       if (TREE_ADDRESSABLE (type)
847           || (args[i].pass_on_stack && args[i].reg != 0))
848         must_preallocate = 1;
849
850       /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
851          we cannot consider this function call constant.  */
852       if (TREE_ADDRESSABLE (type))
853         is_const = 0;
854
855       /* Compute the stack-size of this argument.  */
856       if (args[i].reg == 0 || args[i].partial != 0
857 #ifdef REG_PARM_STACK_SPACE
858           || reg_parm_stack_space > 0
859 #endif
860           || args[i].pass_on_stack)
861         locate_and_pad_parm (TYPE_MODE (type), type,
862 #ifdef STACK_PARMS_IN_REG_PARM_AREA
863                              1,
864 #else
865                              args[i].reg != 0,
866 #endif
867                              fndecl, &args_size, &args[i].offset,
868                              &args[i].size);
869
870 #ifndef ARGS_GROW_DOWNWARD
871       args[i].slot_offset = args_size;
872 #endif
873
874 #ifndef REG_PARM_STACK_SPACE
875       /* If a part of the arg was put into registers,
876          don't include that part in the amount pushed.  */
877       if (! args[i].pass_on_stack)
878         args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
879                                   / (PARM_BOUNDARY / BITS_PER_UNIT)
880                                   * (PARM_BOUNDARY / BITS_PER_UNIT));
881 #endif
882       
883       /* Update ARGS_SIZE, the total stack space for args so far.  */
884
885       args_size.constant += args[i].size.constant;
886       if (args[i].size.var)
887         {
888           ADD_PARM_SIZE (args_size, args[i].size.var);
889         }
890
891       /* Since the slot offset points to the bottom of the slot,
892          we must record it after incrementing if the args grow down.  */
893 #ifdef ARGS_GROW_DOWNWARD
894       args[i].slot_offset = args_size;
895
896       args[i].slot_offset.constant = -args_size.constant;
897       if (args_size.var)
898         {
899           SUB_PARM_SIZE (args[i].slot_offset, args_size.var);
900         }
901 #endif
902
903       /* Increment ARGS_SO_FAR, which has info about which arg-registers
904          have been used, etc.  */
905
906       FUNCTION_ARG_ADVANCE (args_so_far, TYPE_MODE (type), type,
907                             argpos < n_named_args);
908     }
909
910 #ifdef FINAL_REG_PARM_STACK_SPACE
911   reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
912                                                      args_size.var);
913 #endif
914       
915   /* Compute the actual size of the argument block required.  The variable
916      and constant sizes must be combined, the size may have to be rounded,
917      and there may be a minimum required size.  */
918
919   original_args_size = args_size;
920   if (args_size.var)
921     {
922       /* If this function requires a variable-sized argument list, don't try to
923          make a cse'able block for this call.  We may be able to do this
924          eventually, but it is too complicated to keep track of what insns go
925          in the cse'able block and which don't.  */
926
927       is_const = 0;
928       must_preallocate = 1;
929
930       args_size.var = ARGS_SIZE_TREE (args_size);
931       args_size.constant = 0;
932
933 #ifdef STACK_BOUNDARY
934       if (STACK_BOUNDARY != BITS_PER_UNIT)
935         args_size.var = round_up (args_size.var, STACK_BYTES);
936 #endif
937
938 #ifdef REG_PARM_STACK_SPACE
939       if (reg_parm_stack_space > 0)
940         {
941           args_size.var
942             = size_binop (MAX_EXPR, args_size.var,
943                           size_int (REG_PARM_STACK_SPACE (fndecl)));
944
945 #ifndef OUTGOING_REG_PARM_STACK_SPACE
946           /* The area corresponding to register parameters is not to count in
947              the size of the block we need.  So make the adjustment.  */
948           args_size.var
949             = size_binop (MINUS_EXPR, args_size.var,
950                           size_int (reg_parm_stack_space));
951 #endif
952         }
953 #endif
954     }
955   else
956     {
957 #ifdef STACK_BOUNDARY
958       args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
959                              / STACK_BYTES) * STACK_BYTES);
960 #endif
961
962 #ifdef REG_PARM_STACK_SPACE
963       args_size.constant = MAX (args_size.constant,
964                                 reg_parm_stack_space);
965 #ifndef OUTGOING_REG_PARM_STACK_SPACE
966       args_size.constant -= reg_parm_stack_space;
967 #endif
968 #endif
969     }
970
971   /* See if we have or want to preallocate stack space.
972
973      If we would have to push a partially-in-regs parm
974      before other stack parms, preallocate stack space instead.
975
976      If the size of some parm is not a multiple of the required stack
977      alignment, we must preallocate.
978
979      If the total size of arguments that would otherwise create a copy in
980      a temporary (such as a CALL) is more than half the total argument list
981      size, preallocation is faster.
982
983      Another reason to preallocate is if we have a machine (like the m88k)
984      where stack alignment is required to be maintained between every
985      pair of insns, not just when the call is made.  However, we assume here
986      that such machines either do not have push insns (and hence preallocation
987      would occur anyway) or the problem is taken care of with
988      PUSH_ROUNDING.  */
989
990   if (! must_preallocate)
991     {
992       int partial_seen = 0;
993       int copy_to_evaluate_size = 0;
994
995       for (i = 0; i < num_actuals && ! must_preallocate; i++)
996         {
997           if (args[i].partial > 0 && ! args[i].pass_on_stack)
998             partial_seen = 1;
999           else if (partial_seen && args[i].reg == 0)
1000             must_preallocate = 1;
1001
1002           if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1003               && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1004                   || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1005                   || TREE_CODE (args[i].tree_value) == COND_EXPR
1006                   || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1007             copy_to_evaluate_size
1008               += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1009         }
1010
1011       if (copy_to_evaluate_size * 2 >= args_size.constant
1012           && args_size.constant > 0)
1013         must_preallocate = 1;
1014     }
1015
1016   /* If the structure value address will reference the stack pointer, we must
1017      stabilize it.  We don't need to do this if we know that we are not going
1018      to adjust the stack pointer in processing this call.  */
1019
1020   if (structure_value_addr
1021       && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
1022        || reg_mentioned_p (virtual_outgoing_args_rtx, structure_value_addr))
1023       && (args_size.var
1024 #ifndef ACCUMULATE_OUTGOING_ARGS
1025           || args_size.constant
1026 #endif
1027           ))
1028     structure_value_addr = copy_to_reg (structure_value_addr);
1029
1030   /* If this function call is cse'able, precompute all the parameters.
1031      Note that if the parameter is constructed into a temporary, this will
1032      cause an additional copy because the parameter will be constructed
1033      into a temporary location and then copied into the outgoing arguments.
1034      If a parameter contains a call to alloca and this function uses the
1035      stack, precompute the parameter.  */
1036
1037   for (i = 0; i < num_actuals; i++)
1038     if (is_const
1039         || ((args_size.var != 0 || args_size.constant != 0)
1040             && calls_alloca (args[i].tree_value)))
1041       {
1042         args[i].initial_value = args[i].value
1043           = expand_expr (args[i].tree_value, 0, VOIDmode, 0);
1044         preserve_temp_slots (args[i].value);
1045         free_temp_slots ();
1046
1047         /* ANSI doesn't require a sequence point here,
1048            but PCC has one, so this will avoid some problems.  */
1049         emit_queue ();
1050       }
1051
1052   /* Now we are about to start emitting insns that can be deleted
1053      if a libcall is deleted.  */
1054   if (is_const)
1055     start_sequence ();
1056
1057   /* If we have no actual push instructions, or shouldn't use them,
1058      make space for all args right now.  */
1059
1060   if (args_size.var != 0)
1061     {
1062       if (old_stack_level == 0)
1063         {
1064           emit_stack_save (SAVE_BLOCK, &old_stack_level, 0);
1065           old_pending_adj = pending_stack_adjust;
1066           pending_stack_adjust = 0;
1067         }
1068       argblock = push_block (ARGS_SIZE_RTX (args_size), 0, 0);
1069     }
1070   else if (must_preallocate)
1071     {
1072       /* Note that we must go through the motions of allocating an argument
1073          block even if the size is zero because we may be storing args
1074          in the area reserved for register arguments, which may be part of
1075          the stack frame.  */
1076       int needed = args_size.constant;
1077
1078 #ifdef ACCUMULATE_OUTGOING_ARGS
1079       /* Store the maximum argument space used.  It will be pushed by the
1080          prologue.
1081
1082          Since the stack pointer will never be pushed, it is possible for
1083          the evaluation of a parm to clobber something we have already
1084          written to the stack.  Since most function calls on RISC machines
1085          do not use the stack, this is uncommon, but must work correctly.
1086          
1087          Therefore, we save any area of the stack that was already written
1088          and that we are using.  Here we set up to do this by making a new
1089          stack usage map from the old one.  The actual save will be done
1090          by store_one_arg. 
1091
1092          Another approach might be to try to reorder the argument
1093          evaluations to avoid this conflicting stack usage.  */
1094
1095       if (needed > current_function_outgoing_args_size)
1096         current_function_outgoing_args_size = needed;
1097
1098 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
1099       /* Since we will be writing into the entire argument area, the
1100          map must be allocated for its entire size, not just the part that
1101          is the responsibility of the caller.  */
1102       needed += reg_parm_stack_space;
1103 #endif
1104
1105 #ifdef ARGS_GROW_DOWNWARD
1106       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
1107                                          needed + 1);
1108 #else
1109       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, needed);
1110 #endif
1111       stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
1112
1113       if (initial_highest_arg_in_use)
1114         bcopy (initial_stack_usage_map, stack_usage_map,
1115                initial_highest_arg_in_use);
1116
1117       if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
1118         bzero (&stack_usage_map[initial_highest_arg_in_use],
1119                highest_outgoing_arg_in_use - initial_highest_arg_in_use);
1120       needed = 0;
1121       /* No need to copy this virtual register; the space we're
1122          using gets preallocated at the start of the function
1123          so the stack pointer won't change here.  */
1124       argblock = virtual_outgoing_args_rtx;
1125 #else /* not ACCUMULATE_OUTGOING_ARGS */
1126       if (inhibit_defer_pop == 0)
1127         {
1128           /* Try to reuse some or all of the pending_stack_adjust
1129              to get this space.  Maybe we can avoid any pushing.  */
1130           if (needed > pending_stack_adjust)
1131             {
1132               needed -= pending_stack_adjust;
1133               pending_stack_adjust = 0;
1134             }
1135           else
1136             {
1137               pending_stack_adjust -= needed;
1138               needed = 0;
1139             }
1140         }
1141       /* Special case this because overhead of `push_block' in this
1142          case is non-trivial.  */
1143       if (needed == 0)
1144         argblock = virtual_outgoing_args_rtx;
1145       else
1146         argblock = push_block (gen_rtx (CONST_INT, VOIDmode, needed), 0, 0);
1147
1148       /* We only really need to call `copy_to_reg' in the case where push
1149          insns are going to be used to pass ARGBLOCK to a function
1150          call in ARGS.  In that case, the stack pointer changes value
1151          from the allocation point to the call point, and hence
1152          the value of VIRTUAL_OUTGOING_ARGS_RTX changes as well.
1153          But might as well always do it.  */
1154       argblock = copy_to_reg (argblock);
1155 #endif /* not ACCUMULATE_OUTGOING_ARGS */
1156     }
1157
1158   /* If we preallocated stack space, compute the address of each argument.
1159      We need not ensure it is a valid memory address here; it will be 
1160      validized when it is used.  */
1161   if (argblock)
1162     {
1163       rtx arg_reg = argblock;
1164       int arg_offset = 0;
1165
1166       if (GET_CODE (argblock) == PLUS)
1167         arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1168
1169       for (i = 0; i < num_actuals; i++)
1170         {
1171           rtx offset = ARGS_SIZE_RTX (args[i].offset);
1172           rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1173           rtx addr;
1174
1175           /* Skip this parm if it will not be passed on the stack.  */
1176           if (! args[i].pass_on_stack && args[i].reg != 0)
1177             continue;
1178
1179           if (GET_CODE (offset) == CONST_INT)
1180             addr = plus_constant (arg_reg, INTVAL (offset));
1181           else
1182             addr = gen_rtx (PLUS, Pmode, arg_reg, offset);
1183
1184           addr = plus_constant (addr, arg_offset);
1185           args[i].stack
1186             = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (args[i].tree_value)), addr);
1187
1188           if (GET_CODE (slot_offset) == CONST_INT)
1189             addr = plus_constant (arg_reg, INTVAL (slot_offset));
1190           else
1191             addr = gen_rtx (PLUS, Pmode, arg_reg, slot_offset);
1192
1193           addr = plus_constant (addr, arg_offset);
1194           args[i].stack_slot
1195             = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (args[i].tree_value)), addr);
1196         }
1197     }
1198                                                
1199 #ifdef PUSH_ARGS_REVERSED
1200 #ifdef STACK_BOUNDARY
1201   /* If we push args individually in reverse order, perform stack alignment
1202      before the first push (the last arg).  */
1203   if (argblock == 0)
1204     anti_adjust_stack (gen_rtx (CONST_INT, VOIDmode,
1205                                 (args_size.constant
1206                                  - original_args_size.constant)));
1207 #endif
1208 #endif
1209
1210   /* Don't try to defer pops if preallocating, not even from the first arg,
1211      since ARGBLOCK probably refers to the SP.  */
1212   if (argblock)
1213     NO_DEFER_POP;
1214
1215   /* Get the function to call, in the form of RTL.  */
1216   if (fndecl)
1217     /* Get a SYMBOL_REF rtx for the function address.  */
1218     funexp = XEXP (DECL_RTL (fndecl), 0);
1219   else
1220     /* Generate an rtx (probably a pseudo-register) for the address.  */
1221     {
1222       funexp = expand_expr (TREE_OPERAND (exp, 0), 0, VOIDmode, 0);
1223       free_temp_slots ();       /* FUNEXP can't be BLKmode */
1224       emit_queue ();
1225     }
1226
1227   /* Figure out the register where the value, if any, will come back.  */
1228   valreg = 0;
1229   if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
1230       && ! structure_value_addr)
1231     {
1232       if (pcc_struct_value)
1233         valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
1234                                       fndecl);
1235       else
1236         valreg = hard_function_value (TREE_TYPE (exp), fndecl);
1237     }
1238
1239   /* Precompute all register parameters.  It isn't safe to compute anything
1240      once we have started filling any specific hard regs. */
1241   reg_parm_seen = 0;
1242   for (i = 0; i < num_actuals; i++)
1243     if (args[i].reg != 0 && ! args[i].pass_on_stack)
1244       {
1245         reg_parm_seen = 1;
1246
1247         if (args[i].value == 0)
1248           {
1249             args[i].value = expand_expr (args[i].tree_value, 0, VOIDmode, 0);
1250             preserve_temp_slots (args[i].value);
1251             free_temp_slots ();
1252
1253             /* ANSI doesn't require a sequence point here,
1254                but PCC has one, so this will avoid some problems.  */
1255             emit_queue ();
1256           }
1257       }
1258
1259 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
1260   /* The argument list is the property of the called routine and it
1261      may clobber it.  If the fixed area has been used for previous
1262      parameters, we must save and restore it.
1263
1264      Here we compute the boundary of the that needs to be saved, if any.  */
1265
1266   for (i = 0; i < reg_parm_stack_space; i++)
1267     {
1268       if (i >=  highest_outgoing_arg_in_use
1269           || stack_usage_map[i] == 0)
1270         continue;
1271
1272       if (low_to_save == -1)
1273         low_to_save = i;
1274
1275       high_to_save = i;
1276     }
1277
1278   if (low_to_save >= 0)
1279     {
1280       int num_to_save = high_to_save - low_to_save + 1;
1281       enum machine_mode save_mode
1282         = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
1283       rtx stack_area;
1284
1285       /* If we don't have the required alignment, must do this in BLKmode.  */
1286       if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
1287                                BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
1288         save_mode = BLKmode;
1289
1290       stack_area = gen_rtx (MEM, save_mode,
1291                             memory_address (save_mode,
1292                                             plus_constant (argblock,
1293                                                            low_to_save)));
1294       if (save_mode == BLKmode)
1295         {
1296           save_area = assign_stack_temp (BLKmode, num_to_save, 1);
1297           emit_block_move (validize_mem (save_area), stack_area,
1298                            gen_rtx (CONST_INT, VOIDmode, num_to_save),
1299                            PARM_BOUNDARY / BITS_PER_UNIT);
1300         }
1301       else
1302         {
1303           save_area = gen_reg_rtx (save_mode);
1304           emit_move_insn (save_area, stack_area);
1305         }
1306     }
1307 #endif
1308           
1309
1310   /* Now store (and compute if necessary) all non-register parms.
1311      These come before register parms, since they can require block-moves,
1312      which could clobber the registers used for register parms.
1313      Parms which have partial registers are not stored here,
1314      but we do preallocate space here if they want that.  */
1315
1316   for (i = 0; i < num_actuals; i++)
1317     if (args[i].reg == 0 || args[i].pass_on_stack)
1318       store_one_arg (&args[i], argblock, may_be_alloca,
1319                      args_size.var != 0, fndecl, reg_parm_stack_space);
1320
1321   /* Now store any partially-in-registers parm.
1322      This is the last place a block-move can happen.  */
1323   if (reg_parm_seen)
1324     for (i = 0; i < num_actuals; i++)
1325       if (args[i].partial != 0 && ! args[i].pass_on_stack)
1326         store_one_arg (&args[i], argblock, may_be_alloca,
1327                        args_size.var != 0, fndecl, reg_parm_stack_space);
1328
1329 #ifndef PUSH_ARGS_REVERSED
1330 #ifdef STACK_BOUNDARY
1331   /* If we pushed args in forward order, perform stack alignment
1332      after pushing the last arg.  */
1333   if (argblock == 0)
1334     anti_adjust_stack (gen_rtx (CONST_INT, VOIDmode,
1335                                 (args_size.constant
1336                                  - original_args_size.constant)));
1337 #endif
1338 #endif
1339
1340   /* If register arguments require space on the stack and stack space
1341      was not preallocated, allocate stack space here for arguments
1342      passed in registers.  */
1343 #if ! defined(ALLOCATE_OUTGOING_ARGS) && defined(OUTGOING_REG_PARM_STACK_SPACE)
1344   if (must_preallocate == 0 && reg_parm_stack_space > 0)
1345     anti_adjust_stack (gen_rtx (CONST_INT, VOIDmode, reg_parm_stack_space));
1346 #endif
1347
1348   /* Pass the function the address in which to return a structure value.  */
1349   if (structure_value_addr && ! structure_value_addr_parm)
1350     {
1351       emit_move_insn (struct_value_rtx,
1352                       force_reg (Pmode,
1353                                  force_operand (structure_value_addr, 0)));
1354       if (GET_CODE (struct_value_rtx) == REG)
1355         {
1356           push_to_sequence (use_insns);
1357           emit_insn (gen_rtx (USE, VOIDmode, struct_value_rtx));
1358           use_insns = get_insns ();
1359           end_sequence ();
1360         }
1361     }
1362
1363   /* Now do the register loads required for any wholly-register parms or any
1364      parms which are passed both on the stack and in a register.  Their
1365      expressions were already evaluated. 
1366
1367      Mark all register-parms as living through the call, putting these USE
1368      insns in a list headed by USE_INSNS.  */
1369
1370   for (i = 0; i < num_actuals; i++)
1371     {
1372       rtx list = args[i].reg;
1373       int partial = args[i].partial;
1374
1375       while (list)
1376         {
1377           rtx reg;
1378           int nregs;
1379
1380           /* Process each register that needs to get this arg.  */
1381           if (GET_CODE (list) == EXPR_LIST)
1382             reg = XEXP (list, 0), list = XEXP (list, 1);
1383           else
1384             reg = list, list = 0;
1385
1386           /* Set to non-zero if must move a word at a time, even if just one
1387              word (e.g, partial == 1 && mode == DFmode).  Set to zero if
1388              we just use a normal move insn.  */
1389           nregs = (partial ? partial
1390                    : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1391                       ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1392                           + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1393                       : 0));
1394
1395           /* If simple case, just do move.  If normal partial, store_one_arg
1396              has already loaded the register for us.  In all other cases,
1397              load the register(s) from memory.  */
1398
1399           if (nregs == 0)
1400             emit_move_insn (reg, args[i].value);
1401           else if (args[i].partial == 0 || args[i].pass_on_stack)
1402             move_block_to_reg (REGNO (reg),
1403                                validize_mem (args[i].value), nregs,
1404                                TYPE_MODE (TREE_TYPE (args[i].tree_value)));
1405         
1406           push_to_sequence (use_insns);
1407           if (nregs == 0)
1408             emit_insn (gen_rtx (USE, VOIDmode, reg));
1409           else
1410             use_regs (REGNO (reg), nregs);
1411           use_insns = get_insns ();
1412           end_sequence ();
1413
1414           /* PARTIAL referred only to the first register, so clear it for the
1415              next time.  */
1416           partial = 0;
1417         }
1418     }
1419
1420   /* Perform postincrements before actually calling the function.  */
1421   emit_queue ();
1422
1423   /* All arguments and registers used for the call must be set up by now!  */
1424
1425   funexp = prepare_call_address (funexp, fndecl, &use_insns);
1426
1427   /* Generate the actual call instruction.  */
1428   emit_call_1 (funexp, funtype, args_size.constant, struct_value_size,
1429                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
1430                valreg, old_inhibit_defer_pop, use_insns, is_const);
1431
1432   /* If call is cse'able, make appropriate pair of reg-notes around it.
1433      Test valreg so we don't crash; may safely ignore `const'
1434      if return type is void.  */
1435   if (is_const && valreg != 0)
1436     {
1437       rtx note = 0;
1438       rtx temp = gen_reg_rtx (GET_MODE (valreg));
1439       rtx insns;
1440
1441       /* Construct an "equal form" for the value which mentions all the
1442          arguments in order as well as the function name.  */
1443 #ifdef PUSH_ARGS_REVERSED
1444       for (i = 0; i < num_actuals; i++)
1445         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1446 #else
1447       for (i = num_actuals - 1; i >= 0; i--)
1448         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1449 #endif
1450       note = gen_rtx (EXPR_LIST, VOIDmode, funexp, note);
1451
1452       insns = get_insns ();
1453       end_sequence ();
1454
1455       emit_libcall_block (insns, temp, valreg, note);
1456
1457       valreg = temp;
1458     }
1459
1460   /* For calls to `setjmp', etc., inform flow.c it should complain
1461      if nonvolatile values are live.  */
1462
1463   if (returns_twice)
1464     {
1465       emit_note (name, NOTE_INSN_SETJMP);
1466       current_function_calls_setjmp = 1;
1467     }
1468
1469   if (is_longjmp)
1470     current_function_calls_longjmp = 1;
1471
1472   /* Notice functions that cannot return.
1473      If optimizing, insns emitted below will be dead.
1474      If not optimizing, they will exist, which is useful
1475      if the user uses the `return' command in the debugger.  */
1476
1477   if (is_volatile || is_longjmp)
1478     emit_barrier ();
1479
1480   /* If value type not void, return an rtx for the value.  */
1481
1482   /* If there are cleanups to be called, don't use a hard reg as target.  */
1483   if (cleanups_this_call != old_cleanups
1484       && target && REG_P (target)
1485       && REGNO (target) < FIRST_PSEUDO_REGISTER)
1486     target = 0;
1487
1488   if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
1489       || ignore)
1490     {
1491       target = const0_rtx;
1492     }
1493   else if (structure_value_addr)
1494     {
1495       if (target == 0 || GET_CODE (target) != MEM)
1496         {
1497           target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1498                             memory_address (TYPE_MODE (TREE_TYPE (exp)),
1499                                             structure_value_addr));
1500           MEM_IN_STRUCT_P (target)
1501             = (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1502                || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
1503                || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE);
1504         }
1505     }
1506   else if (pcc_struct_value)
1507     {
1508       if (target == 0)
1509         {
1510           target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1511                             copy_to_reg (valreg));
1512           MEM_IN_STRUCT_P (target)
1513             = (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1514                || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
1515                || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE);
1516         }
1517       else if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
1518         emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1519                                          copy_to_reg (valreg)));
1520       else
1521         emit_block_move (target, gen_rtx (MEM, BLKmode, copy_to_reg (valreg)),
1522                          expr_size (exp),
1523                          TYPE_ALIGN (TREE_TYPE (exp)) / BITS_PER_UNIT);
1524     }
1525   else if (target && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp)))
1526     /* TARGET and VALREG cannot be equal at this point because the latter
1527        would not have REG_FUNCTION_VALUE_P true, while the former would if
1528        it were referring to the same register.
1529
1530        If they refer to the same register, this move will be a no-op, except
1531        when function inlining is being done.  */
1532     emit_move_insn (target, valreg);
1533   else
1534     target = copy_to_reg (valreg);
1535
1536   /* Perform all cleanups needed for the arguments of this call
1537      (i.e. destructors in C++).  */
1538   expand_cleanups_to (old_cleanups);
1539
1540   /* If size of args is variable, restore saved stack-pointer value.  */
1541
1542   if (old_stack_level)
1543     {
1544       emit_stack_restore (SAVE_BLOCK, old_stack_level, 0);
1545       pending_stack_adjust = old_pending_adj;
1546     }
1547
1548 #ifdef ACCUMULATE_OUTGOING_ARGS
1549   else
1550     {
1551 #ifdef REG_PARM_STACK_SPACE
1552       if (save_area)
1553         {
1554           enum machine_mode save_mode = GET_MODE (save_area);
1555           rtx stack_area
1556             = gen_rtx (MEM, save_mode,
1557                        memory_address (save_mode,
1558                                        plus_constant (argblock, low_to_save)));
1559
1560           if (save_mode != BLKmode)
1561             emit_move_insn (stack_area, save_area);
1562           else
1563             emit_block_move (stack_area, validize_mem (save_area),
1564                              gen_rtx (CONST_INT, VOIDmode,
1565                                       high_to_save - low_to_save + 1,
1566                                       PARM_BOUNDARY / BITS_PER_UNIT));
1567         }
1568 #endif
1569           
1570       /* If we saved any argument areas, restore them.  */
1571       for (i = 0; i < num_actuals; i++)
1572         if (args[i].save_area)
1573           {
1574             enum machine_mode save_mode = GET_MODE (args[i].save_area);
1575             rtx stack_area
1576               = gen_rtx (MEM, save_mode,
1577                          memory_address (save_mode,
1578                                          XEXP (args[i].stack_slot, 0)));
1579
1580             if (save_mode != BLKmode)
1581               emit_move_insn (stack_area, args[i].save_area);
1582             else
1583               emit_block_move (stack_area, validize_mem (args[i].save_area),
1584                                gen_rtx (CONST_INT, VOIDmode,
1585                                         args[i].size.constant),
1586                                PARM_BOUNDARY / BITS_PER_UNIT);
1587           }
1588
1589       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
1590       stack_usage_map = initial_stack_usage_map;
1591     }
1592 #endif
1593
1594   /* If this was alloca, record the new stack level for nonlocal gotos.  
1595      Check for the handler slots since we might not have a save area
1596      for non-local gotos. */
1597
1598   if (may_be_alloca && nonlocal_goto_handler_slot != 0)
1599     emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, 0);
1600
1601   pop_temp_slots ();
1602
1603   return target;
1604 }
1605 \f
1606 #if 0
1607 /* Return an rtx which represents a suitable home on the stack
1608    given TYPE, the type of the argument looking for a home.
1609    This is called only for BLKmode arguments.
1610
1611    SIZE is the size needed for this target.
1612    ARGS_ADDR is the address of the bottom of the argument block for this call.
1613    OFFSET describes this parameter's offset into ARGS_ADDR.  It is meaningless
1614    if this machine uses push insns.  */
1615
1616 static rtx
1617 target_for_arg (type, size, args_addr, offset)
1618      tree type;
1619      rtx size;
1620      rtx args_addr;
1621      struct args_size offset;
1622 {
1623   rtx target;
1624   rtx offset_rtx = ARGS_SIZE_RTX (offset);
1625
1626   /* We do not call memory_address if possible,
1627      because we want to address as close to the stack
1628      as possible.  For non-variable sized arguments,
1629      this will be stack-pointer relative addressing.  */
1630   if (GET_CODE (offset_rtx) == CONST_INT)
1631     target = plus_constant (args_addr, INTVAL (offset_rtx));
1632   else
1633     {
1634       /* I have no idea how to guarantee that this
1635          will work in the presence of register parameters.  */
1636       target = gen_rtx (PLUS, Pmode, args_addr, offset_rtx);
1637       target = memory_address (QImode, target);
1638     }
1639
1640   return gen_rtx (MEM, BLKmode, target);
1641 }
1642 #endif
1643 \f
1644 /* Store a single argument for a function call
1645    into the register or memory area where it must be passed.
1646    *ARG describes the argument value and where to pass it.
1647
1648    ARGBLOCK is the address of the stack-block for all the arguments,
1649    or 0 on a machine where arguments are pushed individually.
1650
1651    MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
1652    so must be careful about how the stack is used. 
1653
1654    VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
1655    argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
1656    that we need not worry about saving and restoring the stack.
1657
1658    FNDECL is the declaration of the function we are calling.  */
1659
1660 static void
1661 store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl,
1662                reg_parm_stack_space)
1663      struct arg_data *arg;
1664      rtx argblock;
1665      int may_be_alloca;
1666      int variable_size;
1667      tree fndecl;
1668      int reg_parm_stack_space;
1669 {
1670   register tree pval = arg->tree_value;
1671   rtx reg = 0;
1672   int partial = 0;
1673   int used = 0;
1674   int i, lower_bound, upper_bound;
1675
1676   if (TREE_CODE (pval) == ERROR_MARK)
1677     return;
1678
1679 #ifdef ACCUMULATE_OUTGOING_ARGS
1680   /* If this is being stored into a pre-allocated, fixed-size, stack area,
1681      save any previous data at that location.  */
1682   if (argblock && ! variable_size && arg->stack)
1683     {
1684 #ifdef ARGS_GROW_DOWNWARD
1685       /* stack_slot is negative, but we want to index stack_usage_map */
1686       /* with positive values. */
1687       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
1688         upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
1689       else
1690         abort ();
1691
1692       lower_bound = upper_bound - arg->size.constant;
1693 #else
1694       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
1695         lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
1696       else
1697         lower_bound = 0;
1698
1699       upper_bound = lower_bound + arg->size.constant;
1700 #endif
1701
1702       for (i = lower_bound; i < upper_bound; i++)
1703         if (stack_usage_map[i]
1704 #ifdef REG_PARM_STACK_SPACE
1705             /* Don't store things in the fixed argument area at this point;
1706                it has already been saved.  */
1707             && i > reg_parm_stack_space
1708 #endif
1709             )
1710           break;
1711
1712       if (i != upper_bound)
1713         {
1714           /* We need to make a save area.  See what mode we can make it.  */
1715           enum machine_mode save_mode
1716             = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
1717           rtx stack_area
1718             = gen_rtx (MEM, save_mode,
1719                        memory_address (save_mode, XEXP (arg->stack_slot, 0)));
1720
1721           if (save_mode == BLKmode)
1722             {
1723               arg->save_area = assign_stack_temp (BLKmode,
1724                                                   arg->size.constant, 1);
1725               emit_block_move (validize_mem (arg->save_area), stack_area,
1726                                gen_rtx (CONST_INT, VOIDmode,
1727                                         arg->size.constant),
1728                                PARM_BOUNDARY / BITS_PER_UNIT);
1729             }
1730           else
1731             {
1732               arg->save_area = gen_reg_rtx (save_mode);
1733               emit_move_insn (arg->save_area, stack_area);
1734             }
1735         }
1736     }
1737 #endif
1738
1739   /* If this isn't going to be placed on both the stack and in registers,
1740      set up the register and number of words.  */
1741   if (! arg->pass_on_stack)
1742     reg = arg->reg, partial = arg->partial;
1743
1744   if (reg != 0 && partial == 0)
1745     /* Being passed entirely in a register.  We shouldn't be called in
1746        this case.   */
1747     abort ();
1748
1749   /* If this is being partially passed in a register, but multiple locations
1750      are specified, we assume that the one partially used is the one that is
1751      listed first.  */
1752   if (reg && GET_CODE (reg) == EXPR_LIST)
1753     reg = XEXP (reg, 0);
1754
1755   /* If this is being passes partially in a register, we can't evaluate
1756      it directly into its stack slot.  Otherwise, we can.  */
1757   if (arg->value == 0)
1758     arg->value = expand_expr (pval, partial ? 0 : arg->stack, VOIDmode, 0);
1759
1760   /* Don't allow anything left on stack from computation
1761      of argument to alloca.  */
1762   if (may_be_alloca)
1763     do_pending_stack_adjust ();
1764
1765   if (arg->value == arg->stack)
1766     /* If the value is already in the stack slot, we are done.  */
1767     ;
1768   else if (TYPE_MODE (TREE_TYPE (pval)) != BLKmode)
1769     {
1770       register int size;
1771
1772       /* Argument is a scalar, not entirely passed in registers.
1773          (If part is passed in registers, arg->partial says how much
1774          and emit_push_insn will take care of putting it there.)
1775          
1776          Push it, and if its size is less than the
1777          amount of space allocated to it,
1778          also bump stack pointer by the additional space.
1779          Note that in C the default argument promotions
1780          will prevent such mismatches.  */
1781
1782       size = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (pval)));
1783       /* Compute how much space the push instruction will push.
1784          On many machines, pushing a byte will advance the stack
1785          pointer by a halfword.  */
1786 #ifdef PUSH_ROUNDING
1787       size = PUSH_ROUNDING (size);
1788 #endif
1789       used = size;
1790
1791       /* Compute how much space the argument should get:
1792          round up to a multiple of the alignment for arguments.  */
1793       if (none != FUNCTION_ARG_PADDING (TYPE_MODE (TREE_TYPE (pval)),
1794                                         TREE_TYPE (pval)))
1795         used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
1796                  / (PARM_BOUNDARY / BITS_PER_UNIT))
1797                 * (PARM_BOUNDARY / BITS_PER_UNIT));
1798
1799       /* This isn't already where we want it on the stack, so put it there.
1800          This can either be done with push or copy insns.  */
1801       emit_push_insn (arg->value, TYPE_MODE (TREE_TYPE (pval)),
1802                       TREE_TYPE (pval), 0, 0, partial, reg,
1803                       used - size, argblock, ARGS_SIZE_RTX (arg->offset));
1804     }
1805   else
1806     {
1807       /* BLKmode, at least partly to be pushed.  */
1808
1809       register int excess;
1810       rtx size_rtx;
1811
1812       /* Pushing a nonscalar.
1813          If part is passed in registers, PARTIAL says how much
1814          and emit_push_insn will take care of putting it there.  */
1815
1816       /* Round its size up to a multiple
1817          of the allocation unit for arguments.  */
1818
1819       if (arg->size.var != 0)
1820         {
1821           excess = 0;
1822           size_rtx = ARGS_SIZE_RTX (arg->size);
1823         }
1824       else
1825         {
1826           register tree size = size_in_bytes (TREE_TYPE (pval));
1827           /* PUSH_ROUNDING has no effect on us, because
1828              emit_push_insn for BLKmode is careful to avoid it.  */
1829           excess = (arg->size.constant - TREE_INT_CST_LOW (size)
1830                     + partial * UNITS_PER_WORD);
1831           size_rtx = expand_expr (size, 0, VOIDmode, 0);
1832         }
1833
1834       emit_push_insn (arg->value, TYPE_MODE (TREE_TYPE (pval)),
1835                       TREE_TYPE (pval), size_rtx,
1836                       TYPE_ALIGN (TREE_TYPE (pval)) / BITS_PER_UNIT, partial,
1837                       reg, excess, argblock, ARGS_SIZE_RTX (arg->offset));
1838     }
1839
1840
1841   /* Unless this is a partially-in-register argument, the argument is now
1842      in the stack. 
1843
1844      ??? Note that this can change arg->value from arg->stack to
1845      arg->stack_slot and it matters when they are not the same.
1846      It isn't totally clear that this is correct in all cases.  */
1847   if (partial == 0)
1848     arg->value = arg->stack_slot;
1849
1850   /* Once we have pushed something, pops can't safely
1851      be deferred during the rest of the arguments.  */
1852   NO_DEFER_POP;
1853
1854   /* ANSI doesn't require a sequence point here,
1855      but PCC has one, so this will avoid some problems.  */
1856   emit_queue ();
1857
1858   /* Free any temporary slots made in processing this argument.  */
1859   free_temp_slots ();
1860
1861 #ifdef ACCUMULATE_OUTGOING_ARGS
1862   /* Now mark the segment we just used.  */
1863   if (argblock && ! variable_size && arg->stack)
1864     for (i = lower_bound; i < upper_bound; i++)
1865       stack_usage_map[i] = 1;
1866 #endif
1867 }