OSDN Git Service

* configure.in (stage1_warn_cflags): Add -Wstrict-prototypes
[pf3gnuchains/gcc-fork.git] / gcc / calls.c
1 /* Convert function calls to rtl insns, for GNU C compiler.
2    Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
3    1999, 2000 Free Software Foundation, Inc.
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "rtl.h"
25 #include "tree.h"
26 #include "flags.h"
27 #include "expr.h"
28 #include "function.h"
29 #include "regs.h"
30 #include "insn-flags.h"
31 #include "toplev.h"
32 #include "output.h"
33 #include "tm_p.h"
34
35 #ifndef ACCUMULATE_OUTGOING_ARGS
36 #define ACCUMULATE_OUTGOING_ARGS 0
37 #endif
38
39 /* Supply a default definition for PUSH_ARGS.  */
40 #ifndef PUSH_ARGS
41 #ifdef PUSH_ROUNDING
42 #define PUSH_ARGS       !ACCUMULATE_OUTGOING_ARGS
43 #else
44 #define PUSH_ARGS       0
45 #endif
46 #endif
47
48 #if !defined FUNCTION_OK_FOR_SIBCALL
49 #define FUNCTION_OK_FOR_SIBCALL(DECL) 1
50 #endif
51
52 #if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY
53 #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
54 #endif
55
56 /* Decide whether a function's arguments should be processed
57    from first to last or from last to first.
58
59    They should if the stack and args grow in opposite directions, but
60    only if we have push insns.  */
61
62 #ifdef PUSH_ROUNDING
63
64 #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
65 #define PUSH_ARGS_REVERSED  PUSH_ARGS
66 #endif
67
68 #endif
69
70 #ifndef PUSH_ARGS_REVERSED
71 #define PUSH_ARGS_REVERSED 0
72 #endif
73
74 /* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits.  */
75 #define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
76
77 /* Data structure and subroutines used within expand_call.  */
78
79 struct arg_data
80 {
81   /* Tree node for this argument.  */
82   tree tree_value;
83   /* Mode for value; TYPE_MODE unless promoted.  */
84   enum machine_mode mode;
85   /* Current RTL value for argument, or 0 if it isn't precomputed.  */
86   rtx value;
87   /* Initially-compute RTL value for argument; only for const functions.  */
88   rtx initial_value;
89   /* Register to pass this argument in, 0 if passed on stack, or an
90      PARALLEL if the arg is to be copied into multiple non-contiguous
91      registers.  */
92   rtx reg;
93   /* Register to pass this argument in when generating tail call sequence.
94      This is not the same register as for normal calls on machines with
95      register windows.  */
96   rtx tail_call_reg;
97   /* If REG was promoted from the actual mode of the argument expression,
98      indicates whether the promotion is sign- or zero-extended.  */
99   int unsignedp;
100   /* Number of registers to use.  0 means put the whole arg in registers.
101      Also 0 if not passed in registers.  */
102   int partial;
103   /* Non-zero if argument must be passed on stack.
104      Note that some arguments may be passed on the stack
105      even though pass_on_stack is zero, just because FUNCTION_ARG says so.
106      pass_on_stack identifies arguments that *cannot* go in registers.  */
107   int pass_on_stack;
108   /* Offset of this argument from beginning of stack-args.  */
109   struct args_size offset;
110   /* Similar, but offset to the start of the stack slot.  Different from
111      OFFSET if this arg pads downward.  */
112   struct args_size slot_offset;
113   /* Size of this argument on the stack, rounded up for any padding it gets,
114      parts of the argument passed in registers do not count.
115      If REG_PARM_STACK_SPACE is defined, then register parms
116      are counted here as well.  */
117   struct args_size size;
118   /* Location on the stack at which parameter should be stored.  The store
119      has already been done if STACK == VALUE.  */
120   rtx stack;
121   /* Location on the stack of the start of this argument slot.  This can
122      differ from STACK if this arg pads downward.  This location is known
123      to be aligned to FUNCTION_ARG_BOUNDARY.  */
124   rtx stack_slot;
125   /* Place that this stack area has been saved, if needed.  */
126   rtx save_area;
127   /* If an argument's alignment does not permit direct copying into registers,
128      copy in smaller-sized pieces into pseudos.  These are stored in a
129      block pointed to by this field.  The next field says how many
130      word-sized pseudos we made.  */
131   rtx *aligned_regs;
132   int n_aligned_regs;
133   /* The amount that the stack pointer needs to be adjusted to
134      force alignment for the next argument.  */
135   struct args_size alignment_pad;
136 };
137
138 /* A vector of one char per byte of stack space.  A byte if non-zero if
139    the corresponding stack location has been used.
140    This vector is used to prevent a function call within an argument from
141    clobbering any stack already set up.  */
142 static char *stack_usage_map;
143
144 /* Size of STACK_USAGE_MAP.  */
145 static int highest_outgoing_arg_in_use;
146
147 /* stack_arg_under_construction is nonzero when an argument may be
148    initialized with a constructor call (including a C function that
149    returns a BLKmode struct) and expand_call must take special action
150    to make sure the object being constructed does not overlap the
151    argument list for the constructor call.  */
152 int stack_arg_under_construction;
153
154 static int calls_function       PARAMS ((tree, int));
155 static int calls_function_1     PARAMS ((tree, int));
156
157 /* Nonzero if this is a call to a `const' function. */
158 #define ECF_CONST               1
159 /* Nonzero if this is a call to a `volatile' function.  */
160 #define ECF_NORETURN            2
161 /* Nonzero if this is a call to malloc or a related function. */
162 #define ECF_MALLOC              4
163 /* Nonzero if it is plausible that this is a call to alloca.  */
164 #define ECF_MAY_BE_ALLOCA       8
165 /* Nonzero if this is a call to a function that won't throw an exception.  */
166 #define ECF_NOTHROW             16
167 /* Nonzero if this is a call to setjmp or a related function.  */
168 #define ECF_RETURNS_TWICE       32
169 /* Nonzero if this is a call to `longjmp'.  */
170 #define ECF_LONGJMP             64
171 /* Nonzero if this is a syscall that makes a new process in the image of
172    the current one.  */
173 #define ECF_FORK_OR_EXEC        128
174 #define ECF_SIBCALL             256
175 /* Nonzero if this is a call to "pure" function (like const function,
176    but may read memory.  */
177 #define ECF_PURE                512
178
179 static void emit_call_1         PARAMS ((rtx, tree, tree, HOST_WIDE_INT,
180                                          HOST_WIDE_INT, HOST_WIDE_INT, rtx,
181                                          rtx, int, rtx, int));
182 static void precompute_register_parameters      PARAMS ((int,
183                                                          struct arg_data *,
184                                                          int *));
185 static void store_one_arg       PARAMS ((struct arg_data *, rtx, int, int,
186                                          int));
187 static void store_unaligned_arguments_into_pseudos PARAMS ((struct arg_data *,
188                                                             int));
189 static int finalize_must_preallocate            PARAMS ((int, int,
190                                                          struct arg_data *,
191                                                          struct args_size *));
192 static void precompute_arguments                PARAMS ((int, int,
193                                                          struct arg_data *));
194 static int compute_argument_block_size          PARAMS ((int, 
195                                                          struct args_size *,
196                                                          int));
197 static void initialize_argument_information     PARAMS ((int,
198                                                          struct arg_data *,
199                                                          struct args_size *,
200                                                          int, tree, tree,
201                                                          CUMULATIVE_ARGS *,
202                                                          int, rtx *, int *,
203                                                          int *, int *));
204 static void compute_argument_addresses          PARAMS ((struct arg_data *,
205                                                          rtx, int));
206 static rtx rtx_for_function_call                PARAMS ((tree, tree));
207 static void load_register_parameters            PARAMS ((struct arg_data *,
208                                                          int, rtx *, int));
209 static int libfunc_nothrow                      PARAMS ((rtx));
210 static rtx emit_library_call_value_1            PARAMS ((int, rtx, rtx, int,
211                                                          enum machine_mode,
212                                                          int, va_list));
213 static int special_function_p                   PARAMS ((tree, int));
214 static int flags_from_decl_or_type              PARAMS ((tree));
215 static rtx try_to_integrate                     PARAMS ((tree, tree, rtx,
216                                                          int, tree, rtx));
217 static int combine_pending_stack_adjustment_and_call
218                                                 PARAMS ((int, struct args_size *, int));
219
220 #ifdef REG_PARM_STACK_SPACE
221 static rtx save_fixed_argument_area     PARAMS ((int, rtx, int *, int *));
222 static void restore_fixed_argument_area PARAMS ((rtx, rtx, int, int));
223 #endif
224 \f
225 /* If WHICH is 1, return 1 if EXP contains a call to the built-in function
226    `alloca'.
227
228    If WHICH is 0, return 1 if EXP contains a call to any function.
229    Actually, we only need return 1 if evaluating EXP would require pushing
230    arguments on the stack, but that is too difficult to compute, so we just
231    assume any function call might require the stack.  */
232
233 static tree calls_function_save_exprs;
234
235 static int
236 calls_function (exp, which)
237      tree exp;
238      int which;
239 {
240   int val;
241
242   calls_function_save_exprs = 0;
243   val = calls_function_1 (exp, which);
244   calls_function_save_exprs = 0;
245   return val;
246 }
247
248 /* Recursive function to do the work of above function.  */
249
250 static int
251 calls_function_1 (exp, which)
252      tree exp;
253      int which;
254 {
255   register int i;
256   enum tree_code code = TREE_CODE (exp);
257   int class = TREE_CODE_CLASS (code);
258   int length = first_rtl_op (code);
259
260   /* If this code is language-specific, we don't know what it will do.  */
261   if ((int) code >= NUM_TREE_CODES)
262     return 1;
263
264   switch (code)
265     {
266     case CALL_EXPR:
267       if (which == 0)
268         return 1;
269       else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
270                && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
271                    == FUNCTION_DECL)
272                && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
273                                        0)
274                    & ECF_MAY_BE_ALLOCA))
275         return 1;
276
277       break;
278
279     case SAVE_EXPR:
280       if (SAVE_EXPR_RTL (exp) != 0)
281         return 0;
282       if (value_member (exp, calls_function_save_exprs))
283         return 0;
284       calls_function_save_exprs = tree_cons (NULL_TREE, exp,
285                                              calls_function_save_exprs);
286       return (TREE_OPERAND (exp, 0) != 0
287               && calls_function_1 (TREE_OPERAND (exp, 0), which));
288
289     case BLOCK:
290       {
291         register tree local;
292         register tree subblock;
293
294         for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local))
295           if (DECL_INITIAL (local) != 0
296               && calls_function_1 (DECL_INITIAL (local), which))
297             return 1;
298
299         for (subblock = BLOCK_SUBBLOCKS (exp);
300              subblock;
301              subblock = TREE_CHAIN (subblock))
302           if (calls_function_1 (subblock, which))
303             return 1;
304       }
305       return 0;
306
307     case TREE_LIST:
308       for (; exp != 0; exp = TREE_CHAIN (exp))
309         if (calls_function_1 (TREE_VALUE (exp), which))
310           return 1;
311       return 0;
312
313     default:
314       break;
315     }
316
317   /* Only expressions, references, and blocks can contain calls.  */
318   if (! IS_EXPR_CODE_CLASS (class) && class != 'r' && class != 'b')
319     return 0;
320
321   for (i = 0; i < length; i++)
322     if (TREE_OPERAND (exp, i) != 0
323         && calls_function_1 (TREE_OPERAND (exp, i), which))
324       return 1;
325
326   return 0;
327 }
328 \f
329 /* Force FUNEXP into a form suitable for the address of a CALL,
330    and return that as an rtx.  Also load the static chain register
331    if FNDECL is a nested function.
332
333    CALL_FUSAGE points to a variable holding the prospective
334    CALL_INSN_FUNCTION_USAGE information.  */
335
336 rtx
337 prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
338      rtx funexp;
339      tree fndecl;
340      rtx *call_fusage;
341      int reg_parm_seen;
342 {
343   rtx static_chain_value = 0;
344
345   funexp = protect_from_queue (funexp, 0);
346
347   if (fndecl != 0)
348     /* Get possible static chain value for nested function in C.  */
349     static_chain_value = lookup_static_chain (fndecl);
350
351   /* Make a valid memory address and copy constants thru pseudo-regs,
352      but not for a constant address if -fno-function-cse.  */
353   if (GET_CODE (funexp) != SYMBOL_REF)
354     /* If we are using registers for parameters, force the
355        function address into a register now.  */
356     funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
357               ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
358               : memory_address (FUNCTION_MODE, funexp));
359   else
360     {
361 #ifndef NO_FUNCTION_CSE
362       if (optimize && ! flag_no_function_cse)
363 #ifdef NO_RECURSIVE_FUNCTION_CSE
364         if (fndecl != current_function_decl)
365 #endif
366           funexp = force_reg (Pmode, funexp);
367 #endif
368     }
369
370   if (static_chain_value != 0)
371     {
372       emit_move_insn (static_chain_rtx, static_chain_value);
373
374       if (GET_CODE (static_chain_rtx) == REG)
375         use_reg (call_fusage, static_chain_rtx);
376     }
377
378   return funexp;
379 }
380
381 /* Generate instructions to call function FUNEXP,
382    and optionally pop the results.
383    The CALL_INSN is the first insn generated.
384
385    FNDECL is the declaration node of the function.  This is given to the
386    macro RETURN_POPS_ARGS to determine whether this function pops its own args.
387
388    FUNTYPE is the data type of the function.  This is given to the macro
389    RETURN_POPS_ARGS to determine whether this function pops its own args.
390    We used to allow an identifier for library functions, but that doesn't
391    work when the return type is an aggregate type and the calling convention
392    says that the pointer to this aggregate is to be popped by the callee.
393
394    STACK_SIZE is the number of bytes of arguments on the stack,
395    ROUNDED_STACK_SIZE is that number rounded up to
396    PREFERRED_STACK_BOUNDARY; zero if the size is variable.  This is
397    both to put into the call insn and to generate explicit popping
398    code if necessary.
399
400    STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
401    It is zero if this call doesn't want a structure value.
402
403    NEXT_ARG_REG is the rtx that results from executing
404      FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
405    just after all the args have had their registers assigned.
406    This could be whatever you like, but normally it is the first
407    arg-register beyond those used for args in this call,
408    or 0 if all the arg-registers are used in this call.
409    It is passed on to `gen_call' so you can put this info in the call insn.
410
411    VALREG is a hard register in which a value is returned,
412    or 0 if the call does not return a value.
413
414    OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
415    the args to this call were processed.
416    We restore `inhibit_defer_pop' to that value.
417
418    CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that
419    denote registers used by the called function.  */
420
421 static void
422 emit_call_1 (funexp, fndecl, funtype, stack_size, rounded_stack_size,
423              struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop,
424              call_fusage, ecf_flags)
425      rtx funexp;
426      tree fndecl ATTRIBUTE_UNUSED;
427      tree funtype ATTRIBUTE_UNUSED;
428      HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED;
429      HOST_WIDE_INT rounded_stack_size;
430      HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED;
431      rtx next_arg_reg;
432      rtx valreg;
433      int old_inhibit_defer_pop;
434      rtx call_fusage;
435      int ecf_flags;
436 {
437   rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
438   rtx call_insn;
439   int already_popped = 0;
440   HOST_WIDE_INT n_popped = RETURN_POPS_ARGS (fndecl, funtype, stack_size);
441 #if defined (HAVE_call) && defined (HAVE_call_value)
442   rtx struct_value_size_rtx;
443   struct_value_size_rtx = GEN_INT (struct_value_size);
444 #endif
445
446   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
447      and we don't want to load it into a register as an optimization,
448      because prepare_call_address already did it if it should be done.  */
449   if (GET_CODE (funexp) != SYMBOL_REF)
450     funexp = memory_address (FUNCTION_MODE, funexp);
451
452 #if defined (HAVE_sibcall_pop) && defined (HAVE_sibcall_value_pop)
453   if ((ecf_flags & ECF_SIBCALL)
454       && HAVE_sibcall_pop && HAVE_sibcall_value_pop
455       && (RETURN_POPS_ARGS (fndecl, funtype, stack_size) > 0 
456           || stack_size == 0))
457     {
458       rtx n_pop = GEN_INT (RETURN_POPS_ARGS (fndecl, funtype, stack_size));
459       rtx pat;
460
461       /* If this subroutine pops its own args, record that in the call insn
462          if possible, for the sake of frame pointer elimination.  */
463
464       if (valreg)
465         pat = GEN_SIBCALL_VALUE_POP (valreg,
466                                      gen_rtx_MEM (FUNCTION_MODE, funexp),
467                                      rounded_stack_size_rtx, next_arg_reg,
468                                      n_pop);
469       else
470         pat = GEN_SIBCALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
471                                rounded_stack_size_rtx, next_arg_reg, n_pop);
472
473       emit_call_insn (pat);
474       already_popped = 1;
475     }
476   else
477 #endif
478
479 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
480 /* If the target has "call" or "call_value" insns, then prefer them
481    if no arguments are actually popped.  If the target does not have
482    "call" or "call_value" insns, then we must use the popping versions
483    even if the call has no arguments to pop.  */
484 #if defined (HAVE_call) && defined (HAVE_call_value)
485   if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop
486       && n_popped > 0)
487 #else
488   if (HAVE_call_pop && HAVE_call_value_pop)
489 #endif
490     {
491       rtx n_pop = GEN_INT (n_popped);
492       rtx pat;
493
494       /* If this subroutine pops its own args, record that in the call insn
495          if possible, for the sake of frame pointer elimination.  */
496
497       if (valreg)
498         pat = GEN_CALL_VALUE_POP (valreg,
499                                   gen_rtx_MEM (FUNCTION_MODE, funexp),
500                                   rounded_stack_size_rtx, next_arg_reg, n_pop);
501       else
502         pat = GEN_CALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
503                             rounded_stack_size_rtx, next_arg_reg, n_pop);
504
505       emit_call_insn (pat);
506       already_popped = 1;
507     }
508   else
509 #endif
510
511 #if defined (HAVE_sibcall) && defined (HAVE_sibcall_value)
512   if ((ecf_flags & ECF_SIBCALL)
513       && HAVE_sibcall && HAVE_sibcall_value)
514     {
515       if (valreg)
516         emit_call_insn (GEN_SIBCALL_VALUE (valreg,
517                                            gen_rtx_MEM (FUNCTION_MODE, funexp),
518                                            rounded_stack_size_rtx,
519                                            next_arg_reg, NULL_RTX));
520       else
521         emit_call_insn (GEN_SIBCALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
522                                      rounded_stack_size_rtx, next_arg_reg,
523                                      struct_value_size_rtx));
524     }
525   else
526 #endif
527
528 #if defined (HAVE_call) && defined (HAVE_call_value)
529   if (HAVE_call && HAVE_call_value)
530     {
531       if (valreg)
532         emit_call_insn (GEN_CALL_VALUE (valreg,
533                                         gen_rtx_MEM (FUNCTION_MODE, funexp),
534                                         rounded_stack_size_rtx, next_arg_reg,
535                                         NULL_RTX));
536       else
537         emit_call_insn (GEN_CALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
538                                   rounded_stack_size_rtx, next_arg_reg,
539                                   struct_value_size_rtx));
540     }
541   else
542 #endif
543     abort ();
544
545   /* Find the CALL insn we just emitted.  */
546   for (call_insn = get_last_insn ();
547        call_insn && GET_CODE (call_insn) != CALL_INSN;
548        call_insn = PREV_INSN (call_insn))
549     ;
550
551   if (! call_insn)
552     abort ();
553
554   /* Mark memory as used for "pure" function call.  */
555   if (ecf_flags & ECF_PURE)
556     {
557       call_fusage =  gen_rtx_EXPR_LIST (VOIDmode,
558         gen_rtx_USE (VOIDmode,
559                      gen_rtx_MEM (BLKmode,
560                                   gen_rtx_SCRATCH (VOIDmode))), call_fusage);
561     }
562
563   /* Put the register usage information on the CALL.  If there is already
564      some usage information, put ours at the end.  */
565   if (CALL_INSN_FUNCTION_USAGE (call_insn))
566     {
567       rtx link;
568
569       for (link = CALL_INSN_FUNCTION_USAGE (call_insn); XEXP (link, 1) != 0;
570            link = XEXP (link, 1))
571         ;
572
573       XEXP (link, 1) = call_fusage;
574     }
575   else
576     CALL_INSN_FUNCTION_USAGE (call_insn) = call_fusage;
577
578   /* If this is a const call, then set the insn's unchanging bit.  */
579   if (ecf_flags & (ECF_CONST | ECF_PURE))
580     CONST_CALL_P (call_insn) = 1;
581
582   /* If this call can't throw, attach a REG_EH_REGION reg note to that
583      effect.  */
584   if (ecf_flags & ECF_NOTHROW)
585     REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
586                                                REG_NOTES (call_insn));
587
588   SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0);
589
590   /* Restore this now, so that we do defer pops for this call's args
591      if the context of the call as a whole permits.  */
592   inhibit_defer_pop = old_inhibit_defer_pop;
593
594   if (n_popped > 0)
595     {
596       if (!already_popped)
597         CALL_INSN_FUNCTION_USAGE (call_insn)
598           = gen_rtx_EXPR_LIST (VOIDmode,
599                                gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx),
600                                CALL_INSN_FUNCTION_USAGE (call_insn));
601       rounded_stack_size -= n_popped;
602       rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
603       stack_pointer_delta -= n_popped;
604     }
605
606   if (!ACCUMULATE_OUTGOING_ARGS)
607     {
608       /* If returning from the subroutine does not automatically pop the args,
609          we need an instruction to pop them sooner or later.
610          Perhaps do it now; perhaps just record how much space to pop later.
611
612          If returning from the subroutine does pop the args, indicate that the
613          stack pointer will be changed.  */
614
615       if (rounded_stack_size != 0)
616         {
617           if (flag_defer_pop && inhibit_defer_pop == 0
618               && !(ecf_flags & (ECF_CONST | ECF_PURE)))
619             pending_stack_adjust += rounded_stack_size;
620           else
621             adjust_stack (rounded_stack_size_rtx);
622         }
623     }
624   /* When we accumulate outgoing args, we must avoid any stack manipulations.
625      Restore the stack pointer to its original value now.  Usually
626      ACCUMULATE_OUTGOING_ARGS targets don't get here, but there are exceptions.
627      On  i386 ACCUMULATE_OUTGOING_ARGS can be enabled on demand, and
628      popping variants of functions exist as well.
629
630      ??? We may optimize similar to defer_pop above, but it is
631      probably not worthwhile.
632    
633      ??? It will be worthwhile to enable combine_stack_adjustments even for
634      such machines.  */
635   else if (n_popped)
636     anti_adjust_stack (GEN_INT (n_popped));
637 }
638
639 /* Determine if the function identified by NAME and FNDECL is one with
640    special properties we wish to know about.
641
642    For example, if the function might return more than one time (setjmp), then
643    set RETURNS_TWICE to a nonzero value.
644
645    Similarly set LONGJMP for if the function is in the longjmp family.
646
647    Set MALLOC for any of the standard memory allocation functions which
648    allocate from the heap.
649
650    Set MAY_BE_ALLOCA for any memory allocation function that might allocate
651    space from the stack such as alloca.  */
652
653 static int
654 special_function_p (fndecl, flags)
655      tree fndecl;
656      int flags;
657 {
658   if (! (flags & ECF_MALLOC)
659       && fndecl && DECL_NAME (fndecl)
660       && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
661       /* Exclude functions not at the file scope, or not `extern',
662          since they are not the magic functions we would otherwise
663          think they are.  */
664       && DECL_CONTEXT (fndecl) == NULL_TREE && TREE_PUBLIC (fndecl))
665     {
666       char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
667       char *tname = name;
668
669       /* We assume that alloca will always be called by name.  It
670          makes no sense to pass it as a pointer-to-function to
671          anything that does not understand its behavior.  */
672       if (((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
673             && name[0] == 'a'
674             && ! strcmp (name, "alloca"))
675            || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
676                && name[0] == '_'
677                && ! strcmp (name, "__builtin_alloca"))))
678         flags |= ECF_MAY_BE_ALLOCA;
679
680       /* Disregard prefix _, __ or __x.  */
681       if (name[0] == '_')
682         {
683           if (name[1] == '_' && name[2] == 'x')
684             tname += 3;
685           else if (name[1] == '_')
686             tname += 2;
687           else
688             tname += 1;
689         }
690
691       if (tname[0] == 's')
692         {
693           if ((tname[1] == 'e'
694                && (! strcmp (tname, "setjmp")
695                    || ! strcmp (tname, "setjmp_syscall")))
696               || (tname[1] == 'i'
697                   && ! strcmp (tname, "sigsetjmp"))
698               || (tname[1] == 'a'
699                   && ! strcmp (tname, "savectx")))
700             flags |= ECF_RETURNS_TWICE;
701
702           if (tname[1] == 'i'
703               && ! strcmp (tname, "siglongjmp"))
704             flags |= ECF_LONGJMP;
705         }
706       else if ((tname[0] == 'q' && tname[1] == 's'
707                 && ! strcmp (tname, "qsetjmp"))
708                || (tname[0] == 'v' && tname[1] == 'f'
709                    && ! strcmp (tname, "vfork")))
710         flags |= ECF_RETURNS_TWICE;
711
712       else if (tname[0] == 'l' && tname[1] == 'o'
713                && ! strcmp (tname, "longjmp"))
714         flags |= ECF_LONGJMP;
715
716       else if ((tname[0] == 'f' && tname[1] == 'o'
717                 && ! strcmp (tname, "fork"))
718                /* Linux specific: __clone.  check NAME to insist on the
719                   leading underscores, to avoid polluting the ISO / POSIX
720                   namespace.  */
721                || (name[0] == '_' && name[1] == '_'
722                    && ! strcmp (tname, "clone"))
723                || (tname[0] == 'e' && tname[1] == 'x' && tname[2] == 'e'
724                    && tname[3] == 'c' && (tname[4] == 'l' || tname[4] == 'v')
725                    && (tname[5] == '\0'
726                        || ((tname[5] == 'p' || tname[5] == 'e')
727                            && tname[6] == '\0'))))
728         flags |= ECF_FORK_OR_EXEC;
729
730       /* Do not add any more malloc-like functions to this list,
731          instead mark them as malloc functions using the malloc attribute.
732          Note, realloc is not suitable for attribute malloc since
733          it may return the same address across multiple calls.
734          C++ operator new is not suitable because it is not required
735          to return a unique pointer; indeed, the standard placement new
736          just returns its argument. */
737       else if (TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl))) == Pmode
738                && (! strcmp (tname, "malloc")
739                    || ! strcmp (tname, "calloc")
740                    || ! strcmp (tname, "strdup")))
741         flags |= ECF_MALLOC;
742     }
743   return flags;
744 }
745
746 /* Return nonzero when tree represent call to longjmp.  */
747 int
748 setjmp_call_p (fndecl)
749      tree fndecl;
750 {
751   return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE;
752 }
753
754 /* Detect flags (function attributes) from the function type node.  */
755 static int
756 flags_from_decl_or_type (exp)
757      tree exp;
758 {
759   int flags = 0;
760   /* ??? We can't set IS_MALLOC for function types?  */
761   if (DECL_P (exp))
762     {
763       /* The function exp may have the `malloc' attribute.  */
764       if (DECL_P (exp) && DECL_IS_MALLOC (exp))
765         flags |= ECF_MALLOC;
766
767       /* The function exp may have the `pure' attribute.  */
768       if (DECL_P (exp) && DECL_IS_PURE (exp))
769         flags |= ECF_PURE;
770
771       if (TREE_NOTHROW (exp))
772         flags |= ECF_NOTHROW;
773     }
774
775   if (TREE_READONLY (exp) && !TREE_THIS_VOLATILE (exp))
776     flags |= ECF_CONST;
777
778   if (TREE_THIS_VOLATILE (exp))
779     flags |= ECF_NORETURN;
780
781   return flags;
782 }
783
784
785 /* Precompute all register parameters as described by ARGS, storing values
786    into fields within the ARGS array.
787
788    NUM_ACTUALS indicates the total number elements in the ARGS array.
789
790    Set REG_PARM_SEEN if we encounter a register parameter.  */
791
792 static void
793 precompute_register_parameters (num_actuals, args, reg_parm_seen)
794      int num_actuals;
795      struct arg_data *args;
796      int *reg_parm_seen;
797 {
798   int i;
799
800   *reg_parm_seen = 0;
801
802   for (i = 0; i < num_actuals; i++)
803     if (args[i].reg != 0 && ! args[i].pass_on_stack)
804       {
805         *reg_parm_seen = 1;
806
807         if (args[i].value == 0)
808           {
809             push_temp_slots ();
810             args[i].value = expand_expr (args[i].tree_value, NULL_RTX,
811                                          VOIDmode, 0);
812             preserve_temp_slots (args[i].value);
813             pop_temp_slots ();
814
815             /* ANSI doesn't require a sequence point here,
816                but PCC has one, so this will avoid some problems.  */
817             emit_queue ();
818           }
819
820         /* If we are to promote the function arg to a wider mode,
821            do it now.  */
822
823         if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
824           args[i].value
825             = convert_modes (args[i].mode,
826                              TYPE_MODE (TREE_TYPE (args[i].tree_value)),
827                              args[i].value, args[i].unsignedp);
828
829         /* If the value is expensive, and we are inside an appropriately 
830            short loop, put the value into a pseudo and then put the pseudo
831            into the hard reg.
832
833            For small register classes, also do this if this call uses
834            register parameters.  This is to avoid reload conflicts while
835            loading the parameters registers.  */
836
837         if ((! (GET_CODE (args[i].value) == REG
838                 || (GET_CODE (args[i].value) == SUBREG
839                     && GET_CODE (SUBREG_REG (args[i].value)) == REG)))
840             && args[i].mode != BLKmode
841             && rtx_cost (args[i].value, SET) > 2
842             && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
843                 || preserve_subexpressions_p ()))
844           args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
845       }
846 }
847
848 #ifdef REG_PARM_STACK_SPACE
849
850   /* The argument list is the property of the called routine and it
851      may clobber it.  If the fixed area has been used for previous
852      parameters, we must save and restore it.  */
853 static rtx
854 save_fixed_argument_area (reg_parm_stack_space, argblock,
855                           low_to_save, high_to_save)
856      int reg_parm_stack_space;
857      rtx argblock;
858      int *low_to_save;
859      int *high_to_save;
860 {
861   int i;
862   rtx save_area = NULL_RTX;
863
864   /* Compute the boundary of the that needs to be saved, if any.  */
865 #ifdef ARGS_GROW_DOWNWARD
866   for (i = 0; i < reg_parm_stack_space + 1; i++)
867 #else
868   for (i = 0; i < reg_parm_stack_space; i++)
869 #endif
870     {
871       if (i >= highest_outgoing_arg_in_use
872           || stack_usage_map[i] == 0)
873         continue;
874
875       if (*low_to_save == -1)
876         *low_to_save = i;
877
878       *high_to_save = i;
879     }
880
881   if (*low_to_save >= 0)
882     {
883       int num_to_save = *high_to_save - *low_to_save + 1;
884       enum machine_mode save_mode
885         = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
886       rtx stack_area;
887
888       /* If we don't have the required alignment, must do this in BLKmode.  */
889       if ((*low_to_save & (MIN (GET_MODE_SIZE (save_mode),
890                                 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
891         save_mode = BLKmode;
892
893 #ifdef ARGS_GROW_DOWNWARD
894       stack_area = gen_rtx_MEM (save_mode,
895                                 memory_address (save_mode,
896                                                 plus_constant (argblock,
897                                                                - *high_to_save)));
898 #else
899       stack_area = gen_rtx_MEM (save_mode,
900                                 memory_address (save_mode,
901                                                 plus_constant (argblock,
902                                                                *low_to_save)));
903 #endif
904       if (save_mode == BLKmode)
905         {
906           save_area = assign_stack_temp (BLKmode, num_to_save, 0);
907           /* Cannot use emit_block_move here because it can be done by a
908              library call which in turn gets into this place again and deadly
909              infinite recursion happens.  */
910           move_by_pieces (validize_mem (save_area), stack_area, num_to_save,
911                           PARM_BOUNDARY);
912         }
913       else
914         {
915           save_area = gen_reg_rtx (save_mode);
916           emit_move_insn (save_area, stack_area);
917         }
918     }
919   return save_area;
920 }
921
922 static void
923 restore_fixed_argument_area (save_area, argblock, high_to_save, low_to_save)
924      rtx save_area;
925      rtx argblock;
926      int high_to_save;
927      int low_to_save;
928 {
929   enum machine_mode save_mode = GET_MODE (save_area);
930 #ifdef ARGS_GROW_DOWNWARD
931   rtx stack_area
932     = gen_rtx_MEM (save_mode,
933                    memory_address (save_mode,
934                                    plus_constant (argblock,
935                                                   - high_to_save)));
936 #else
937   rtx stack_area
938     = gen_rtx_MEM (save_mode,
939                    memory_address (save_mode,
940                                    plus_constant (argblock,
941                                                   low_to_save)));
942 #endif
943
944   if (save_mode != BLKmode)
945     emit_move_insn (stack_area, save_area);
946   else
947     /* Cannot use emit_block_move here because it can be done by a library
948        call which in turn gets into this place again and deadly infinite
949        recursion happens.  */
950     move_by_pieces (stack_area, validize_mem (save_area),
951                     high_to_save - low_to_save + 1, PARM_BOUNDARY);
952 }
953 #endif
954           
955 /* If any elements in ARGS refer to parameters that are to be passed in
956    registers, but not in memory, and whose alignment does not permit a
957    direct copy into registers.  Copy the values into a group of pseudos
958    which we will later copy into the appropriate hard registers. 
959
960    Pseudos for each unaligned argument will be stored into the array
961    args[argnum].aligned_regs.  The caller is responsible for deallocating
962    the aligned_regs array if it is nonzero.  */
963
964 static void
965 store_unaligned_arguments_into_pseudos (args, num_actuals)
966      struct arg_data *args;
967      int num_actuals;
968 {
969   int i, j;
970      
971   for (i = 0; i < num_actuals; i++)
972     if (args[i].reg != 0 && ! args[i].pass_on_stack
973         && args[i].mode == BLKmode
974         && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
975             < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
976       {
977         int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
978         int big_endian_correction = 0;
979
980         args[i].n_aligned_regs
981           = args[i].partial ? args[i].partial
982             : (bytes + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
983
984         args[i].aligned_regs = (rtx *) xmalloc (sizeof (rtx)
985                                                 * args[i].n_aligned_regs);
986
987         /* Structures smaller than a word are aligned to the least
988            significant byte (to the right).  On a BYTES_BIG_ENDIAN machine,
989            this means we must skip the empty high order bytes when
990            calculating the bit offset.  */
991         if (BYTES_BIG_ENDIAN && bytes < UNITS_PER_WORD)
992           big_endian_correction = (BITS_PER_WORD  - (bytes * BITS_PER_UNIT));
993
994         for (j = 0; j < args[i].n_aligned_regs; j++)
995           {
996             rtx reg = gen_reg_rtx (word_mode);
997             rtx word = operand_subword_force (args[i].value, j, BLKmode);
998             int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD);
999             int bitalign = TYPE_ALIGN (TREE_TYPE (args[i].tree_value));
1000
1001             args[i].aligned_regs[j] = reg;
1002
1003             /* There is no need to restrict this code to loading items
1004                in TYPE_ALIGN sized hunks.  The bitfield instructions can
1005                load up entire word sized registers efficiently.
1006
1007                ??? This may not be needed anymore.
1008                We use to emit a clobber here but that doesn't let later
1009                passes optimize the instructions we emit.  By storing 0 into
1010                the register later passes know the first AND to zero out the
1011                bitfield being set in the register is unnecessary.  The store
1012                of 0 will be deleted as will at least the first AND.  */
1013
1014             emit_move_insn (reg, const0_rtx);
1015
1016             bytes -= bitsize / BITS_PER_UNIT;
1017             store_bit_field (reg, bitsize, big_endian_correction, word_mode,
1018                              extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
1019                                                 word_mode, word_mode, bitalign,
1020                                                 BITS_PER_WORD),
1021                              bitalign, BITS_PER_WORD);
1022           }
1023       }
1024 }
1025
1026 /* Fill in ARGS_SIZE and ARGS array based on the parameters found in
1027    ACTPARMS. 
1028
1029    NUM_ACTUALS is the total number of parameters.
1030
1031    N_NAMED_ARGS is the total number of named arguments.
1032
1033    FNDECL is the tree code for the target of this call (if known)
1034
1035    ARGS_SO_FAR holds state needed by the target to know where to place
1036    the next argument.
1037
1038    REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
1039    for arguments which are passed in registers.
1040
1041    OLD_STACK_LEVEL is a pointer to an rtx which olds the old stack level
1042    and may be modified by this routine.
1043
1044    OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
1045    flags which may may be modified by this routine.  */
1046
1047 static void
1048 initialize_argument_information (num_actuals, args, args_size, n_named_args,
1049                                  actparms, fndecl, args_so_far,
1050                                  reg_parm_stack_space, old_stack_level,
1051                                  old_pending_adj, must_preallocate,
1052                                  ecf_flags)
1053      int num_actuals ATTRIBUTE_UNUSED;
1054      struct arg_data *args;
1055      struct args_size *args_size;
1056      int n_named_args ATTRIBUTE_UNUSED;
1057      tree actparms;
1058      tree fndecl;
1059      CUMULATIVE_ARGS *args_so_far;
1060      int reg_parm_stack_space;
1061      rtx *old_stack_level;
1062      int *old_pending_adj;
1063      int *must_preallocate;
1064      int *ecf_flags;
1065 {
1066   /* 1 if scanning parms front to back, -1 if scanning back to front.  */
1067   int inc;
1068
1069   /* Count arg position in order args appear.  */
1070   int argpos;
1071
1072   struct args_size alignment_pad;
1073   int i;
1074   tree p;
1075   
1076   args_size->constant = 0;
1077   args_size->var = 0;
1078
1079   /* In this loop, we consider args in the order they are written.
1080      We fill up ARGS from the front or from the back if necessary
1081      so that in any case the first arg to be pushed ends up at the front.  */
1082
1083   if (PUSH_ARGS_REVERSED)
1084     {
1085       i = num_actuals - 1, inc = -1;
1086       /* In this case, must reverse order of args
1087          so that we compute and push the last arg first.  */
1088     }
1089   else
1090     {
1091       i = 0, inc = 1;
1092     }
1093
1094   /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
1095   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
1096     {
1097       tree type = TREE_TYPE (TREE_VALUE (p));
1098       int unsignedp;
1099       enum machine_mode mode;
1100
1101       args[i].tree_value = TREE_VALUE (p);
1102
1103       /* Replace erroneous argument with constant zero.  */
1104       if (type == error_mark_node || !COMPLETE_TYPE_P (type))
1105         args[i].tree_value = integer_zero_node, type = integer_type_node;
1106
1107       /* If TYPE is a transparent union, pass things the way we would
1108          pass the first field of the union.  We have already verified that
1109          the modes are the same.  */
1110       if (TYPE_TRANSPARENT_UNION (type))
1111         type = TREE_TYPE (TYPE_FIELDS (type));
1112
1113       /* Decide where to pass this arg.
1114
1115          args[i].reg is nonzero if all or part is passed in registers.
1116
1117          args[i].partial is nonzero if part but not all is passed in registers,
1118          and the exact value says how many words are passed in registers.
1119
1120          args[i].pass_on_stack is nonzero if the argument must at least be
1121          computed on the stack.  It may then be loaded back into registers
1122          if args[i].reg is nonzero.
1123
1124          These decisions are driven by the FUNCTION_... macros and must agree
1125          with those made by function.c.  */
1126
1127       /* See if this argument should be passed by invisible reference.  */
1128       if ((TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1129            && contains_placeholder_p (TYPE_SIZE (type)))
1130           || TREE_ADDRESSABLE (type)
1131 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
1132           || FUNCTION_ARG_PASS_BY_REFERENCE (*args_so_far, TYPE_MODE (type),
1133                                              type, argpos < n_named_args)
1134 #endif
1135           )
1136         {
1137           /* If we're compiling a thunk, pass through invisible
1138              references instead of making a copy.  */
1139           if (current_function_is_thunk
1140 #ifdef FUNCTION_ARG_CALLEE_COPIES
1141               || (FUNCTION_ARG_CALLEE_COPIES (*args_so_far, TYPE_MODE (type),
1142                                              type, argpos < n_named_args)
1143                   /* If it's in a register, we must make a copy of it too.  */
1144                   /* ??? Is this a sufficient test?  Is there a better one? */
1145                   && !(TREE_CODE (args[i].tree_value) == VAR_DECL
1146                        && REG_P (DECL_RTL (args[i].tree_value)))
1147                   && ! TREE_ADDRESSABLE (type))
1148 #endif
1149               )
1150             {
1151               /* C++ uses a TARGET_EXPR to indicate that we want to make a
1152                  new object from the argument.  If we are passing by
1153                  invisible reference, the callee will do that for us, so we
1154                  can strip off the TARGET_EXPR.  This is not always safe,
1155                  but it is safe in the only case where this is a useful
1156                  optimization; namely, when the argument is a plain object.
1157                  In that case, the frontend is just asking the backend to
1158                  make a bitwise copy of the argument. */
1159                  
1160               if (TREE_CODE (args[i].tree_value) == TARGET_EXPR
1161                   && (DECL_P (TREE_OPERAND (args[i].tree_value, 1)))
1162                   && ! REG_P (DECL_RTL (TREE_OPERAND (args[i].tree_value, 1))))
1163                 args[i].tree_value = TREE_OPERAND (args[i].tree_value, 1);
1164
1165               args[i].tree_value = build1 (ADDR_EXPR,
1166                                            build_pointer_type (type),
1167                                            args[i].tree_value);
1168               type = build_pointer_type (type);
1169             }
1170           else
1171             {
1172               /* We make a copy of the object and pass the address to the
1173                  function being called.  */
1174               rtx copy;
1175
1176               if (!COMPLETE_TYPE_P (type)
1177                   || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1178                   || (flag_stack_check && ! STACK_CHECK_BUILTIN
1179                       && (0 < compare_tree_int (TYPE_SIZE_UNIT (type),
1180                                                 STACK_CHECK_MAX_VAR_SIZE))))
1181                 {
1182                   /* This is a variable-sized object.  Make space on the stack
1183                      for it.  */
1184                   rtx size_rtx = expr_size (TREE_VALUE (p));
1185
1186                   if (*old_stack_level == 0)
1187                     {
1188                       emit_stack_save (SAVE_BLOCK, old_stack_level, NULL_RTX);
1189                       *old_pending_adj = pending_stack_adjust;
1190                       pending_stack_adjust = 0;
1191                     }
1192
1193                   copy = gen_rtx_MEM (BLKmode,
1194                                       allocate_dynamic_stack_space (size_rtx,
1195                                                                     NULL_RTX,
1196                                                                     TYPE_ALIGN (type)));
1197                 }
1198               else
1199                 {
1200                   int size = int_size_in_bytes (type);
1201                   copy = assign_stack_temp (TYPE_MODE (type), size, 0);
1202                 }
1203
1204               MEM_SET_IN_STRUCT_P (copy, AGGREGATE_TYPE_P (type));
1205
1206               store_expr (args[i].tree_value, copy, 0);
1207               *ecf_flags &= ~(ECF_CONST | ECF_PURE);
1208
1209               args[i].tree_value = build1 (ADDR_EXPR,
1210                                            build_pointer_type (type),
1211                                            make_tree (type, copy));
1212               type = build_pointer_type (type);
1213             }
1214         }
1215
1216       mode = TYPE_MODE (type);
1217       unsignedp = TREE_UNSIGNED (type);
1218
1219 #ifdef PROMOTE_FUNCTION_ARGS
1220       mode = promote_mode (type, mode, &unsignedp, 1);
1221 #endif
1222
1223       args[i].unsignedp = unsignedp;
1224       args[i].mode = mode;
1225
1226       args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
1227                                   argpos < n_named_args);
1228 #ifdef FUNCTION_INCOMING_ARG
1229       /* If this is a sibling call and the machine has register windows, the
1230          register window has to be unwinded before calling the routine, so
1231          arguments have to go into the incoming registers.  */
1232       args[i].tail_call_reg = FUNCTION_INCOMING_ARG (*args_so_far, mode, type,
1233                                              argpos < n_named_args);
1234 #else
1235       args[i].tail_call_reg = args[i].reg;
1236 #endif
1237
1238 #ifdef FUNCTION_ARG_PARTIAL_NREGS
1239       if (args[i].reg)
1240         args[i].partial
1241           = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
1242                                         argpos < n_named_args);
1243 #endif
1244
1245       args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
1246
1247       /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
1248          it means that we are to pass this arg in the register(s) designated
1249          by the PARALLEL, but also to pass it in the stack.  */
1250       if (args[i].reg && GET_CODE (args[i].reg) == PARALLEL
1251           && XEXP (XVECEXP (args[i].reg, 0, 0), 0) == 0)
1252         args[i].pass_on_stack = 1;
1253
1254       /* If this is an addressable type, we must preallocate the stack
1255          since we must evaluate the object into its final location.
1256
1257          If this is to be passed in both registers and the stack, it is simpler
1258          to preallocate.  */
1259       if (TREE_ADDRESSABLE (type)
1260           || (args[i].pass_on_stack && args[i].reg != 0))
1261         *must_preallocate = 1;
1262
1263       /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
1264          we cannot consider this function call constant.  */
1265       if (TREE_ADDRESSABLE (type))
1266         *ecf_flags &= ~(ECF_CONST | ECF_PURE);
1267
1268       /* Compute the stack-size of this argument.  */
1269       if (args[i].reg == 0 || args[i].partial != 0
1270           || reg_parm_stack_space > 0
1271           || args[i].pass_on_stack)
1272         locate_and_pad_parm (mode, type,
1273 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1274                              1,
1275 #else
1276                              args[i].reg != 0,
1277 #endif
1278                              fndecl, args_size, &args[i].offset,
1279                              &args[i].size, &alignment_pad);
1280
1281 #ifndef ARGS_GROW_DOWNWARD
1282       args[i].slot_offset = *args_size;
1283 #endif
1284
1285       args[i].alignment_pad = alignment_pad;
1286
1287       /* If a part of the arg was put into registers,
1288          don't include that part in the amount pushed.  */
1289       if (reg_parm_stack_space == 0 && ! args[i].pass_on_stack)
1290         args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
1291                                   / (PARM_BOUNDARY / BITS_PER_UNIT)
1292                                   * (PARM_BOUNDARY / BITS_PER_UNIT));
1293       
1294       /* Update ARGS_SIZE, the total stack space for args so far.  */
1295
1296       args_size->constant += args[i].size.constant;
1297       if (args[i].size.var)
1298         {
1299           ADD_PARM_SIZE (*args_size, args[i].size.var);
1300         }
1301
1302       /* Since the slot offset points to the bottom of the slot,
1303          we must record it after incrementing if the args grow down.  */
1304 #ifdef ARGS_GROW_DOWNWARD
1305       args[i].slot_offset = *args_size;
1306
1307       args[i].slot_offset.constant = -args_size->constant;
1308       if (args_size->var)
1309         SUB_PARM_SIZE (args[i].slot_offset, args_size->var);
1310 #endif
1311
1312       /* Increment ARGS_SO_FAR, which has info about which arg-registers
1313          have been used, etc.  */
1314
1315       FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
1316                             argpos < n_named_args);
1317     }
1318 }
1319
1320 /* Update ARGS_SIZE to contain the total size for the argument block.
1321    Return the original constant component of the argument block's size.
1322
1323    REG_PARM_STACK_SPACE holds the number of bytes of stack space reserved
1324    for arguments passed in registers.  */
1325
1326 static int
1327 compute_argument_block_size (reg_parm_stack_space, args_size,
1328                              preferred_stack_boundary)
1329      int reg_parm_stack_space;
1330      struct args_size *args_size;
1331      int preferred_stack_boundary ATTRIBUTE_UNUSED;
1332 {
1333   int unadjusted_args_size = args_size->constant;
1334
1335   /* For accumulate outgoing args mode we don't need to align, since the frame
1336      will be already aligned.  Align to STACK_BOUNDARY in order to prevent
1337      backends from generating missaligned frame sizes.  */
1338 #ifdef STACK_BOUNDARY
1339   if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
1340     preferred_stack_boundary = STACK_BOUNDARY;
1341 #endif
1342
1343   /* Compute the actual size of the argument block required.  The variable
1344      and constant sizes must be combined, the size may have to be rounded,
1345      and there may be a minimum required size.  */
1346
1347   if (args_size->var)
1348     {
1349       args_size->var = ARGS_SIZE_TREE (*args_size);
1350       args_size->constant = 0;
1351
1352 #ifdef PREFERRED_STACK_BOUNDARY
1353       preferred_stack_boundary /= BITS_PER_UNIT;
1354       if (preferred_stack_boundary > 1)
1355         {
1356           /* We don't handle this case yet.  To handle it correctly we have
1357              to add the delta, round and substract the delta.  
1358              Currently no machine description requires this support.  */
1359           if (stack_pointer_delta & (preferred_stack_boundary - 1))
1360             abort();
1361           args_size->var = round_up (args_size->var, preferred_stack_boundary);
1362         }
1363 #endif
1364
1365       if (reg_parm_stack_space > 0)
1366         {
1367           args_size->var
1368             = size_binop (MAX_EXPR, args_size->var,
1369                           ssize_int (reg_parm_stack_space));
1370
1371 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1372           /* The area corresponding to register parameters is not to count in
1373              the size of the block we need.  So make the adjustment.  */
1374           args_size->var
1375             = size_binop (MINUS_EXPR, args_size->var,
1376                           ssize_int (reg_parm_stack_space));
1377 #endif
1378         }
1379     }
1380   else
1381     {
1382 #ifdef PREFERRED_STACK_BOUNDARY
1383       preferred_stack_boundary /= BITS_PER_UNIT;
1384       if (preferred_stack_boundary < 1)
1385         preferred_stack_boundary = 1;
1386       args_size->constant = (((args_size->constant
1387                                + stack_pointer_delta
1388                                + preferred_stack_boundary - 1)
1389                               / preferred_stack_boundary
1390                               * preferred_stack_boundary)
1391                              - stack_pointer_delta);
1392 #endif
1393
1394       args_size->constant = MAX (args_size->constant,
1395                                  reg_parm_stack_space);
1396
1397 #ifdef MAYBE_REG_PARM_STACK_SPACE
1398       if (reg_parm_stack_space == 0)
1399         args_size->constant = 0;
1400 #endif
1401
1402 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1403       args_size->constant -= reg_parm_stack_space;
1404 #endif
1405     }
1406   return unadjusted_args_size;
1407 }
1408
1409 /* Precompute parameters as needed for a function call.
1410
1411    FLAGS is mask of ECF_* constants.
1412
1413    NUM_ACTUALS is the number of arguments.
1414
1415    ARGS is an array containing information for each argument; this routine
1416    fills in the INITIAL_VALUE and VALUE fields for each precomputed argument.  
1417    */
1418
1419 static void
1420 precompute_arguments (flags, num_actuals, args)
1421      int flags;
1422      int num_actuals;
1423      struct arg_data *args;
1424 {
1425   int i;
1426
1427   /* If this function call is cse'able, precompute all the parameters.
1428      Note that if the parameter is constructed into a temporary, this will
1429      cause an additional copy because the parameter will be constructed
1430      into a temporary location and then copied into the outgoing arguments.
1431      If a parameter contains a call to alloca and this function uses the
1432      stack, precompute the parameter.  */
1433
1434   /* If we preallocated the stack space, and some arguments must be passed
1435      on the stack, then we must precompute any parameter which contains a
1436      function call which will store arguments on the stack.
1437      Otherwise, evaluating the parameter may clobber previous parameters
1438      which have already been stored into the stack.  (we have code to avoid
1439      such case by saving the ougoing stack arguments, but it results in
1440      worse code)  */
1441
1442   for (i = 0; i < num_actuals; i++)
1443     if ((flags & (ECF_CONST | ECF_PURE))
1444         || calls_function (args[i].tree_value, !ACCUMULATE_OUTGOING_ARGS))
1445       {
1446         /* If this is an addressable type, we cannot pre-evaluate it.  */
1447         if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)))
1448           abort ();
1449
1450         push_temp_slots ();
1451
1452         args[i].value
1453           = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
1454
1455         preserve_temp_slots (args[i].value);
1456         pop_temp_slots ();
1457
1458         /* ANSI doesn't require a sequence point here,
1459            but PCC has one, so this will avoid some problems.  */
1460         emit_queue ();
1461
1462         args[i].initial_value = args[i].value
1463           = protect_from_queue (args[i].value, 0);
1464
1465         if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) != args[i].mode)
1466           {
1467             args[i].value
1468               = convert_modes (args[i].mode, 
1469                                TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1470                                args[i].value, args[i].unsignedp);
1471 #ifdef PROMOTE_FOR_CALL_ONLY
1472             /* CSE will replace this only if it contains args[i].value
1473                pseudo, so convert it down to the declared mode using
1474                a SUBREG.  */
1475             if (GET_CODE (args[i].value) == REG
1476                 && GET_MODE_CLASS (args[i].mode) == MODE_INT)
1477               {
1478                 args[i].initial_value
1479                   = gen_rtx_SUBREG (TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1480                                     args[i].value, 0);
1481                 SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
1482                 SUBREG_PROMOTED_UNSIGNED_P (args[i].initial_value)
1483                   = args[i].unsignedp;
1484               }
1485 #endif
1486           }
1487       }
1488 }
1489
1490 /* Given the current state of MUST_PREALLOCATE and information about
1491    arguments to a function call in NUM_ACTUALS, ARGS and ARGS_SIZE,
1492    compute and return the final value for MUST_PREALLOCATE.  */
1493
1494 static int
1495 finalize_must_preallocate (must_preallocate, num_actuals, args, args_size)
1496      int must_preallocate;
1497      int num_actuals;
1498      struct arg_data *args;
1499      struct args_size *args_size;
1500 {
1501   /* See if we have or want to preallocate stack space.
1502
1503      If we would have to push a partially-in-regs parm
1504      before other stack parms, preallocate stack space instead.
1505
1506      If the size of some parm is not a multiple of the required stack
1507      alignment, we must preallocate.
1508
1509      If the total size of arguments that would otherwise create a copy in
1510      a temporary (such as a CALL) is more than half the total argument list
1511      size, preallocation is faster.
1512
1513      Another reason to preallocate is if we have a machine (like the m88k)
1514      where stack alignment is required to be maintained between every
1515      pair of insns, not just when the call is made.  However, we assume here
1516      that such machines either do not have push insns (and hence preallocation
1517      would occur anyway) or the problem is taken care of with
1518      PUSH_ROUNDING.  */
1519
1520   if (! must_preallocate)
1521     {
1522       int partial_seen = 0;
1523       int copy_to_evaluate_size = 0;
1524       int i;
1525
1526       for (i = 0; i < num_actuals && ! must_preallocate; i++)
1527         {
1528           if (args[i].partial > 0 && ! args[i].pass_on_stack)
1529             partial_seen = 1;
1530           else if (partial_seen && args[i].reg == 0)
1531             must_preallocate = 1;
1532
1533           if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1534               && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1535                   || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1536                   || TREE_CODE (args[i].tree_value) == COND_EXPR
1537                   || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1538             copy_to_evaluate_size
1539               += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1540         }
1541
1542       if (copy_to_evaluate_size * 2 >= args_size->constant
1543           && args_size->constant > 0)
1544         must_preallocate = 1;
1545     }
1546   return must_preallocate;
1547 }
1548
1549 /* If we preallocated stack space, compute the address of each argument
1550    and store it into the ARGS array.
1551
1552    We need not ensure it is a valid memory address here; it will be 
1553    validized when it is used.
1554
1555    ARGBLOCK is an rtx for the address of the outgoing arguments.  */
1556
1557 static void
1558 compute_argument_addresses (args, argblock, num_actuals)
1559      struct arg_data *args;
1560      rtx argblock;
1561      int num_actuals;
1562 {
1563   if (argblock)
1564     {
1565       rtx arg_reg = argblock;
1566       int i, arg_offset = 0;
1567
1568       if (GET_CODE (argblock) == PLUS)
1569         arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1570
1571       for (i = 0; i < num_actuals; i++)
1572         {
1573           rtx offset = ARGS_SIZE_RTX (args[i].offset);
1574           rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1575           rtx addr;
1576
1577           /* Skip this parm if it will not be passed on the stack.  */
1578           if (! args[i].pass_on_stack && args[i].reg != 0)
1579             continue;
1580
1581           if (GET_CODE (offset) == CONST_INT)
1582             addr = plus_constant (arg_reg, INTVAL (offset));
1583           else
1584             addr = gen_rtx_PLUS (Pmode, arg_reg, offset);
1585
1586           addr = plus_constant (addr, arg_offset);
1587           args[i].stack = gen_rtx_MEM (args[i].mode, addr);
1588           MEM_SET_IN_STRUCT_P 
1589             (args[i].stack,
1590              AGGREGATE_TYPE_P (TREE_TYPE (args[i].tree_value)));
1591
1592           if (GET_CODE (slot_offset) == CONST_INT)
1593             addr = plus_constant (arg_reg, INTVAL (slot_offset));
1594           else
1595             addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset);
1596
1597           addr = plus_constant (addr, arg_offset);
1598           args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
1599         }
1600     }
1601 }
1602                                                
1603 /* Given a FNDECL and EXP, return an rtx suitable for use as a target address
1604    in a call instruction.
1605
1606    FNDECL is the tree node for the target function.  For an indirect call
1607    FNDECL will be NULL_TREE.
1608
1609    EXP is the CALL_EXPR for this call.  */
1610
1611 static rtx
1612 rtx_for_function_call (fndecl, exp)
1613      tree fndecl;
1614      tree exp;
1615 {
1616   rtx funexp;
1617
1618   /* Get the function to call, in the form of RTL.  */
1619   if (fndecl)
1620     {
1621       /* If this is the first use of the function, see if we need to
1622          make an external definition for it.  */
1623       if (! TREE_USED (fndecl))
1624         {
1625           assemble_external (fndecl);
1626           TREE_USED (fndecl) = 1;
1627         }
1628
1629       /* Get a SYMBOL_REF rtx for the function address.  */
1630       funexp = XEXP (DECL_RTL (fndecl), 0);
1631     }
1632   else
1633     /* Generate an rtx (probably a pseudo-register) for the address.  */
1634     {
1635       rtx funaddr;
1636       push_temp_slots ();
1637       funaddr = funexp = 
1638           expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
1639       pop_temp_slots ();        /* FUNEXP can't be BLKmode */
1640
1641       /* Check the function is executable.  */
1642       if (current_function_check_memory_usage)
1643         {
1644 #ifdef POINTERS_EXTEND_UNSIGNED
1645           /* It might be OK to convert funexp in place, but there's
1646              a lot going on between here and when it happens naturally
1647              that this seems safer. */
1648           funaddr = convert_memory_address (Pmode, funexp);
1649 #endif
1650           emit_library_call (chkr_check_exec_libfunc, 1,
1651                              VOIDmode, 1,
1652                              funaddr, Pmode);
1653         }
1654       emit_queue ();
1655     }
1656   return funexp;
1657 }
1658
1659 /* Do the register loads required for any wholly-register parms or any
1660    parms which are passed both on the stack and in a register.  Their
1661    expressions were already evaluated. 
1662
1663    Mark all register-parms as living through the call, putting these USE
1664    insns in the CALL_INSN_FUNCTION_USAGE field.  */
1665
1666 static void
1667 load_register_parameters (args, num_actuals, call_fusage, flags)
1668      struct arg_data *args;
1669      int num_actuals;
1670      rtx *call_fusage;
1671      int flags;
1672 {
1673   int i, j;
1674
1675 #ifdef LOAD_ARGS_REVERSED
1676   for (i = num_actuals - 1; i >= 0; i--)
1677 #else
1678   for (i = 0; i < num_actuals; i++)
1679 #endif
1680     {
1681       rtx reg = ((flags & ECF_SIBCALL)
1682                  ? args[i].tail_call_reg : args[i].reg);
1683       int partial = args[i].partial;
1684       int nregs;
1685
1686       if (reg)
1687         {
1688           /* Set to non-negative if must move a word at a time, even if just
1689              one word (e.g, partial == 1 && mode == DFmode).  Set to -1 if
1690              we just use a normal move insn.  This value can be zero if the
1691              argument is a zero size structure with no fields.  */
1692           nregs = (partial ? partial
1693                    : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1694                       ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1695                           + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1696                       : -1));
1697
1698           /* Handle calls that pass values in multiple non-contiguous
1699              locations.  The Irix 6 ABI has examples of this.  */
1700
1701           if (GET_CODE (reg) == PARALLEL)
1702             emit_group_load (reg, args[i].value,
1703                              int_size_in_bytes (TREE_TYPE (args[i].tree_value)),
1704                              TYPE_ALIGN (TREE_TYPE (args[i].tree_value)));
1705
1706           /* If simple case, just do move.  If normal partial, store_one_arg
1707              has already loaded the register for us.  In all other cases,
1708              load the register(s) from memory.  */
1709
1710           else if (nregs == -1)
1711             emit_move_insn (reg, args[i].value);
1712
1713           /* If we have pre-computed the values to put in the registers in
1714              the case of non-aligned structures, copy them in now.  */
1715
1716           else if (args[i].n_aligned_regs != 0)
1717             for (j = 0; j < args[i].n_aligned_regs; j++)
1718               emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j),
1719                               args[i].aligned_regs[j]);
1720
1721           else if (partial == 0 || args[i].pass_on_stack)
1722             move_block_to_reg (REGNO (reg),
1723                                validize_mem (args[i].value), nregs,
1724                                args[i].mode);
1725
1726           /* Handle calls that pass values in multiple non-contiguous
1727              locations.  The Irix 6 ABI has examples of this.  */
1728           if (GET_CODE (reg) == PARALLEL)
1729             use_group_regs (call_fusage, reg);
1730           else if (nregs == -1)
1731             use_reg (call_fusage, reg);
1732           else
1733             use_regs (call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
1734         }
1735     }
1736 }
1737
1738 /* Try to integreate function.  See expand_inline_function for documentation
1739    about the parameters.  */
1740
1741 static rtx
1742 try_to_integrate (fndecl, actparms, target, ignore, type, structure_value_addr)
1743      tree fndecl;
1744      tree actparms;
1745      rtx target;
1746      int ignore;
1747      tree type;
1748      rtx structure_value_addr;
1749 {
1750   rtx temp;
1751   rtx before_call;
1752   int i;
1753   rtx old_stack_level = 0;
1754   int reg_parm_stack_space = 0;
1755
1756 #ifdef REG_PARM_STACK_SPACE
1757 #ifdef MAYBE_REG_PARM_STACK_SPACE
1758   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
1759 #else
1760   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
1761 #endif
1762 #endif
1763
1764   before_call = get_last_insn ();
1765
1766   temp = expand_inline_function (fndecl, actparms, target,
1767                                  ignore, type,
1768                                  structure_value_addr);
1769
1770   /* If inlining succeeded, return.  */
1771   if (temp != (rtx) (HOST_WIDE_INT) - 1)
1772     {
1773       if (ACCUMULATE_OUTGOING_ARGS)
1774         {
1775           /* If the outgoing argument list must be preserved, push
1776              the stack before executing the inlined function if it
1777              makes any calls.  */
1778
1779           for (i = reg_parm_stack_space - 1; i >= 0; i--)
1780             if (i < highest_outgoing_arg_in_use && stack_usage_map[i] != 0)
1781               break;
1782
1783           if (stack_arg_under_construction || i >= 0)
1784             {
1785               rtx first_insn
1786                 = before_call ? NEXT_INSN (before_call) : get_insns ();
1787               rtx insn = NULL_RTX, seq;
1788
1789               /* Look for a call in the inline function code.
1790                  If DECL_SAVED_INSNS (fndecl)->outgoing_args_size is
1791                  nonzero then there is a call and it is not necessary
1792                  to scan the insns.  */
1793
1794               if (DECL_SAVED_INSNS (fndecl)->outgoing_args_size == 0)
1795                 for (insn = first_insn; insn; insn = NEXT_INSN (insn))
1796                   if (GET_CODE (insn) == CALL_INSN)
1797                     break;
1798
1799               if (insn)
1800                 {
1801                   /* Reserve enough stack space so that the largest
1802                      argument list of any function call in the inline
1803                      function does not overlap the argument list being
1804                      evaluated.  This is usually an overestimate because
1805                      allocate_dynamic_stack_space reserves space for an
1806                      outgoing argument list in addition to the requested
1807                      space, but there is no way to ask for stack space such
1808                      that an argument list of a certain length can be
1809                      safely constructed. 
1810
1811                      Add the stack space reserved for register arguments, if
1812                      any, in the inline function.  What is really needed is the
1813                      largest value of reg_parm_stack_space in the inline
1814                      function, but that is not available.  Using the current
1815                      value of reg_parm_stack_space is wrong, but gives
1816                      correct results on all supported machines.  */
1817
1818                   int adjust = (DECL_SAVED_INSNS (fndecl)->outgoing_args_size
1819                                 + reg_parm_stack_space);
1820
1821                   start_sequence ();
1822                   emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
1823                   allocate_dynamic_stack_space (GEN_INT (adjust),
1824                                                 NULL_RTX, BITS_PER_UNIT);
1825                   seq = get_insns ();
1826                   end_sequence ();
1827                   emit_insns_before (seq, first_insn);
1828                   emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
1829                 }
1830             }
1831         }
1832
1833       /* If the result is equivalent to TARGET, return TARGET to simplify
1834          checks in store_expr.  They can be equivalent but not equal in the
1835          case of a function that returns BLKmode.  */
1836       if (temp != target && rtx_equal_p (temp, target))
1837         return target;
1838       return temp;
1839     }
1840
1841   /* If inlining failed, mark FNDECL as needing to be compiled
1842      separately after all.  If function was declared inline,
1843      give a warning.  */
1844   if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
1845       && optimize > 0 && !TREE_ADDRESSABLE (fndecl))
1846     {
1847       warning_with_decl (fndecl, "inlining failed in call to `%s'");
1848       warning ("called from here");
1849     }
1850   mark_addressable (fndecl);
1851   return (rtx) (HOST_WIDE_INT) - 1;
1852 }
1853
1854 /* We need to pop PENDING_STACK_ADJUST bytes.  But, if the arguments
1855    wouldn't fill up an even multiple of PREFERRED_UNIT_STACK_BOUNDARY
1856    bytes, then we would need to push some additional bytes to pad the
1857    arguments.  So, we compute an adjust to the stack pointer for an
1858    amount that will leave the stack under-aligned by UNADJUSTED_ARGS_SIZE
1859    bytes.  Then, when the arguments are pushed the stack will be perfectly
1860    aligned.  ARGS_SIZE->CONSTANT is set to the number of bytes that should
1861    be popped after the call.  Returns the adjustment.  */
1862
1863 static int
1864 combine_pending_stack_adjustment_and_call (unadjusted_args_size,
1865                                            args_size,
1866                                            preferred_unit_stack_boundary)
1867      int unadjusted_args_size;
1868      struct args_size *args_size;
1869      int preferred_unit_stack_boundary;
1870 {
1871   /* The number of bytes to pop so that the stack will be
1872      under-aligned by UNADJUSTED_ARGS_SIZE bytes.  */
1873   HOST_WIDE_INT adjustment;
1874   /* The alignment of the stack after the arguments are pushed, if we
1875      just pushed the arguments without adjust the stack here.  */
1876   HOST_WIDE_INT unadjusted_alignment;
1877
1878   unadjusted_alignment 
1879     = ((stack_pointer_delta + unadjusted_args_size)
1880        % preferred_unit_stack_boundary);
1881
1882   /* We want to get rid of as many of the PENDING_STACK_ADJUST bytes
1883      as possible -- leaving just enough left to cancel out the
1884      UNADJUSTED_ALIGNMENT.  In other words, we want to ensure that the
1885      PENDING_STACK_ADJUST is non-negative, and congruent to
1886      -UNADJUSTED_ALIGNMENT modulo the PREFERRED_UNIT_STACK_BOUNDARY.  */
1887
1888   /* Begin by trying to pop all the bytes.  */
1889   unadjusted_alignment 
1890     = (unadjusted_alignment 
1891        - (pending_stack_adjust % preferred_unit_stack_boundary));
1892   adjustment = pending_stack_adjust;
1893   /* Push enough additional bytes that the stack will be aligned
1894      after the arguments are pushed.  */
1895   if (unadjusted_alignment >= 0)
1896     adjustment -= preferred_unit_stack_boundary - unadjusted_alignment;
1897   else
1898     adjustment += unadjusted_alignment;
1899   
1900   /* Now, sets ARGS_SIZE->CONSTANT so that we pop the right number of
1901      bytes after the call.  The right number is the entire
1902      PENDING_STACK_ADJUST less our ADJUSTMENT plus the amount required
1903      by the arguments in the first place.  */
1904   args_size->constant 
1905     = pending_stack_adjust - adjustment + unadjusted_args_size;
1906
1907   return adjustment;
1908 }
1909
1910 /* Generate all the code for a function call
1911    and return an rtx for its value.
1912    Store the value in TARGET (specified as an rtx) if convenient.
1913    If the value is stored in TARGET then TARGET is returned.
1914    If IGNORE is nonzero, then we ignore the value of the function call.  */
1915
1916 rtx
1917 expand_call (exp, target, ignore)
1918      tree exp;
1919      rtx target;
1920      int ignore;
1921 {
1922   /* Nonzero if we are currently expanding a call.  */
1923   static int currently_expanding_call = 0;
1924
1925   /* List of actual parameters.  */
1926   tree actparms = TREE_OPERAND (exp, 1);
1927   /* RTX for the function to be called.  */
1928   rtx funexp;
1929   /* Sequence of insns to perform a tail recursive "call".  */
1930   rtx tail_recursion_insns = NULL_RTX;
1931   /* Sequence of insns to perform a normal "call".  */
1932   rtx normal_call_insns = NULL_RTX;
1933   /* Sequence of insns to perform a tail recursive "call".  */
1934   rtx tail_call_insns = NULL_RTX;
1935   /* Data type of the function.  */
1936   tree funtype;
1937   /* Declaration of the function being called,
1938      or 0 if the function is computed (not known by name).  */
1939   tree fndecl = 0;
1940   char *name = 0;
1941   rtx insn;
1942   int try_tail_call = 1;
1943   int try_tail_recursion = 1;
1944   int pass;
1945
1946   /* Register in which non-BLKmode value will be returned,
1947      or 0 if no value or if value is BLKmode.  */
1948   rtx valreg;
1949   /* Address where we should return a BLKmode value;
1950      0 if value not BLKmode.  */
1951   rtx structure_value_addr = 0;
1952   /* Nonzero if that address is being passed by treating it as
1953      an extra, implicit first parameter.  Otherwise,
1954      it is passed by being copied directly into struct_value_rtx.  */
1955   int structure_value_addr_parm = 0;
1956   /* Size of aggregate value wanted, or zero if none wanted
1957      or if we are using the non-reentrant PCC calling convention
1958      or expecting the value in registers.  */
1959   HOST_WIDE_INT struct_value_size = 0;
1960   /* Nonzero if called function returns an aggregate in memory PCC style,
1961      by returning the address of where to find it.  */
1962   int pcc_struct_value = 0;
1963
1964   /* Number of actual parameters in this call, including struct value addr.  */
1965   int num_actuals;
1966   /* Number of named args.  Args after this are anonymous ones
1967      and they must all go on the stack.  */
1968   int n_named_args;
1969
1970   /* Vector of information about each argument.
1971      Arguments are numbered in the order they will be pushed,
1972      not the order they are written.  */
1973   struct arg_data *args;
1974
1975   /* Total size in bytes of all the stack-parms scanned so far.  */
1976   struct args_size args_size;
1977   struct args_size adjusted_args_size;
1978   /* Size of arguments before any adjustments (such as rounding).  */
1979   int unadjusted_args_size;
1980   /* Data on reg parms scanned so far.  */
1981   CUMULATIVE_ARGS args_so_far;
1982   /* Nonzero if a reg parm has been scanned.  */
1983   int reg_parm_seen;
1984   /* Nonzero if this is an indirect function call.  */
1985
1986   /* Nonzero if we must avoid push-insns in the args for this call. 
1987      If stack space is allocated for register parameters, but not by the
1988      caller, then it is preallocated in the fixed part of the stack frame.
1989      So the entire argument block must then be preallocated (i.e., we
1990      ignore PUSH_ROUNDING in that case).  */
1991
1992   int must_preallocate = !PUSH_ARGS;
1993
1994   /* Size of the stack reserved for parameter registers.  */
1995   int reg_parm_stack_space = 0;
1996
1997   /* Address of space preallocated for stack parms
1998      (on machines that lack push insns), or 0 if space not preallocated.  */
1999   rtx argblock = 0;
2000
2001   /* Mask of ECF_ flags.  */
2002   int flags = 0;
2003   /* Nonzero if this is a call to an inline function.  */
2004   int is_integrable = 0;
2005 #ifdef REG_PARM_STACK_SPACE
2006   /* Define the boundary of the register parm stack space that needs to be
2007      save, if any.  */
2008   int low_to_save = -1, high_to_save;
2009   rtx save_area = 0;            /* Place that it is saved */
2010 #endif
2011
2012   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
2013   char *initial_stack_usage_map = stack_usage_map;
2014   int old_stack_arg_under_construction = 0;
2015
2016   rtx old_stack_level = 0;
2017   int old_pending_adj = 0;
2018   int old_inhibit_defer_pop = inhibit_defer_pop;
2019   int old_stack_allocated;
2020   rtx call_fusage;
2021   register tree p;
2022   register int i;
2023   /* The alignment of the stack, in bits.  */
2024   HOST_WIDE_INT preferred_stack_boundary;
2025   /* The alignment of the stack, in bytes.  */
2026   HOST_WIDE_INT preferred_unit_stack_boundary;
2027
2028   /* The value of the function call can be put in a hard register.  But
2029      if -fcheck-memory-usage, code which invokes functions (and thus
2030      damages some hard registers) can be inserted before using the value.
2031      So, target is always a pseudo-register in that case.  */
2032   if (current_function_check_memory_usage)
2033     target = 0;
2034
2035   /* See if this is "nothrow" function call.  */
2036   if (TREE_NOTHROW (exp))
2037     flags |= ECF_NOTHROW;
2038
2039   /* See if we can find a DECL-node for the actual function.
2040      As a result, decide whether this is a call to an integrable function.  */
2041
2042   fndecl = get_callee_fndecl (exp);
2043   if (fndecl)
2044     {
2045       if (!flag_no_inline
2046           && fndecl != current_function_decl
2047           && DECL_INLINE (fndecl)
2048           && DECL_SAVED_INSNS (fndecl)
2049           && DECL_SAVED_INSNS (fndecl)->inlinable)
2050         is_integrable = 1;
2051       else if (! TREE_ADDRESSABLE (fndecl))
2052         {
2053           /* In case this function later becomes inlinable,
2054              record that there was already a non-inline call to it.
2055
2056              Use abstraction instead of setting TREE_ADDRESSABLE
2057              directly.  */
2058           if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
2059               && optimize > 0)
2060             {
2061               warning_with_decl (fndecl, "can't inline call to `%s'");
2062               warning ("called from here");
2063             }
2064           mark_addressable (fndecl);
2065         }
2066
2067       flags |= flags_from_decl_or_type (fndecl);
2068     }
2069
2070   /* If we don't have specific function to call, see if we have a 
2071      attributes set in the type.  */
2072   else
2073     {
2074       p = TREE_OPERAND (exp, 0);
2075       flags |= flags_from_decl_or_type (TREE_TYPE (TREE_TYPE (p)));
2076     }
2077
2078 #ifdef REG_PARM_STACK_SPACE
2079 #ifdef MAYBE_REG_PARM_STACK_SPACE
2080   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
2081 #else
2082   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
2083 #endif
2084 #endif
2085
2086 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2087   if (reg_parm_stack_space > 0 && PUSH_ARGS)
2088     must_preallocate = 1;
2089 #endif
2090
2091   /* Warn if this value is an aggregate type,
2092      regardless of which calling convention we are using for it.  */
2093   if (warn_aggregate_return && AGGREGATE_TYPE_P (TREE_TYPE (exp)))
2094     warning ("function call has aggregate value");
2095
2096   /* Set up a place to return a structure.  */
2097
2098   /* Cater to broken compilers.  */
2099   if (aggregate_value_p (exp))
2100     {
2101       /* This call returns a big structure.  */
2102       flags &= ~(ECF_CONST | ECF_PURE);
2103
2104 #ifdef PCC_STATIC_STRUCT_RETURN
2105       {
2106         pcc_struct_value = 1;
2107         /* Easier than making that case work right.  */
2108         if (is_integrable)
2109           {
2110             /* In case this is a static function, note that it has been
2111                used.  */
2112             if (! TREE_ADDRESSABLE (fndecl))
2113               mark_addressable (fndecl);
2114             is_integrable = 0;
2115           }
2116       }
2117 #else /* not PCC_STATIC_STRUCT_RETURN */
2118       {
2119         struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
2120
2121         if (target && GET_CODE (target) == MEM)
2122           structure_value_addr = XEXP (target, 0);
2123         else
2124           {
2125             /* Assign a temporary to hold the value.  */
2126             tree d;
2127
2128             /* For variable-sized objects, we must be called with a target
2129                specified.  If we were to allocate space on the stack here,
2130                we would have no way of knowing when to free it.  */
2131
2132             if (struct_value_size < 0)
2133               abort ();
2134
2135             /* This DECL is just something to feed to mark_addressable;
2136                it doesn't get pushed.  */
2137             d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
2138             DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
2139             mark_addressable (d);
2140             mark_temp_addr_taken (DECL_RTL (d));
2141             structure_value_addr = XEXP (DECL_RTL (d), 0);
2142             TREE_USED (d) = 1;
2143             target = 0;
2144           }
2145       }
2146 #endif /* not PCC_STATIC_STRUCT_RETURN */
2147     }
2148
2149   /* If called function is inline, try to integrate it.  */
2150
2151   if (is_integrable)
2152     {
2153       rtx temp = try_to_integrate (fndecl, actparms, target,
2154                                    ignore, TREE_TYPE (exp),
2155                                    structure_value_addr);
2156       if (temp != (rtx) (HOST_WIDE_INT) - 1)
2157         return temp;
2158     }
2159
2160   if (fndecl && DECL_NAME (fndecl))
2161     name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
2162
2163   /* Figure out the amount to which the stack should be aligned.  */
2164 #ifdef PREFERRED_STACK_BOUNDARY
2165   preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
2166 #else
2167   preferred_stack_boundary = STACK_BOUNDARY;
2168 #endif
2169
2170   /* Operand 0 is a pointer-to-function; get the type of the function.  */
2171   funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
2172   if (! POINTER_TYPE_P (funtype))
2173     abort ();
2174   funtype = TREE_TYPE (funtype);
2175
2176   /* See if this is a call to a function that can return more than once
2177      or a call to longjmp or malloc.  */
2178   flags |= special_function_p (fndecl, flags);
2179
2180   if (flags & ECF_MAY_BE_ALLOCA)
2181     current_function_calls_alloca = 1;
2182
2183   /* If struct_value_rtx is 0, it means pass the address
2184      as if it were an extra parameter.  */
2185   if (structure_value_addr && struct_value_rtx == 0)
2186     {
2187       /* If structure_value_addr is a REG other than
2188          virtual_outgoing_args_rtx, we can use always use it.  If it
2189          is not a REG, we must always copy it into a register.
2190          If it is virtual_outgoing_args_rtx, we must copy it to another
2191          register in some cases.  */
2192       rtx temp = (GET_CODE (structure_value_addr) != REG
2193                   || (ACCUMULATE_OUTGOING_ARGS
2194                       && stack_arg_under_construction
2195                       && structure_value_addr == virtual_outgoing_args_rtx)
2196                   ? copy_addr_to_reg (structure_value_addr)
2197                   : structure_value_addr);
2198
2199       actparms
2200         = tree_cons (error_mark_node,
2201                      make_tree (build_pointer_type (TREE_TYPE (funtype)),
2202                                 temp),
2203                      actparms);
2204       structure_value_addr_parm = 1;
2205     }
2206
2207   /* Count the arguments and set NUM_ACTUALS.  */
2208   for (p = actparms, num_actuals = 0; p; p = TREE_CHAIN (p))
2209     num_actuals++;
2210
2211   /* Compute number of named args.
2212      Normally, don't include the last named arg if anonymous args follow.
2213      We do include the last named arg if STRICT_ARGUMENT_NAMING is nonzero.
2214      (If no anonymous args follow, the result of list_length is actually
2215      one too large.  This is harmless.)
2216
2217      If PRETEND_OUTGOING_VARARGS_NAMED is set and STRICT_ARGUMENT_NAMING is
2218      zero, this machine will be able to place unnamed args that were
2219      passed in registers into the stack.  So treat all args as named.
2220      This allows the insns emitting for a specific argument list to be
2221      independent of the function declaration.
2222
2223      If PRETEND_OUTGOING_VARARGS_NAMED is not set, we do not have any
2224      reliable way to pass unnamed args in registers, so we must force
2225      them into memory.  */
2226
2227   if ((STRICT_ARGUMENT_NAMING
2228        || ! PRETEND_OUTGOING_VARARGS_NAMED)
2229       && TYPE_ARG_TYPES (funtype) != 0)
2230     n_named_args
2231       = (list_length (TYPE_ARG_TYPES (funtype))
2232          /* Don't include the last named arg.  */
2233          - (STRICT_ARGUMENT_NAMING ? 0 : 1)
2234          /* Count the struct value address, if it is passed as a parm.  */
2235          + structure_value_addr_parm);
2236   else
2237     /* If we know nothing, treat all args as named.  */
2238     n_named_args = num_actuals;
2239
2240   /* Start updating where the next arg would go.
2241
2242      On some machines (such as the PA) indirect calls have a different
2243      calling convention than normal calls.  The last argument in
2244      INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
2245      or not.  */
2246   INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, (fndecl == 0));
2247
2248
2249   /* Make a vector to hold all the information about each arg.  */
2250   args = (struct arg_data *) alloca (num_actuals
2251                                      * sizeof (struct arg_data));
2252   bzero ((char *) args, num_actuals * sizeof (struct arg_data));
2253
2254   /* Build up entries inthe ARGS array, compute the size of the arguments
2255      into ARGS_SIZE, etc.  */
2256   initialize_argument_information (num_actuals, args, &args_size,
2257                                    n_named_args, actparms, fndecl,
2258                                    &args_so_far, reg_parm_stack_space,
2259                                    &old_stack_level, &old_pending_adj,
2260                                    &must_preallocate, &flags);
2261
2262   if (args_size.var)
2263     {
2264       /* If this function requires a variable-sized argument list, don't
2265          try to make a cse'able block for this call.  We may be able to
2266          do this eventually, but it is too complicated to keep track of
2267          what insns go in the cse'able block and which don't.   */
2268
2269       flags &= ~(ECF_CONST | ECF_PURE);
2270       must_preallocate = 1;
2271     }
2272
2273   /* Now make final decision about preallocating stack space.  */
2274   must_preallocate = finalize_must_preallocate (must_preallocate,
2275                                                 num_actuals, args,
2276                                                 &args_size);
2277
2278   /* If the structure value address will reference the stack pointer, we
2279      must stabilize it.  We don't need to do this if we know that we are
2280      not going to adjust the stack pointer in processing this call.  */
2281
2282   if (structure_value_addr
2283       && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
2284           || reg_mentioned_p (virtual_outgoing_args_rtx,
2285                               structure_value_addr))
2286       && (args_size.var
2287           || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
2288     structure_value_addr = copy_to_reg (structure_value_addr);
2289
2290   /* Tail calls can make things harder to debug, and we're traditionally
2291      pushed these optimizations into -O2.  Don't try if we're already
2292      expanding a call, as that means we're an argument.  Similarly, if
2293      there's pending loops or cleanups we know there's code to follow
2294      the call.
2295
2296      If rtx_equal_function_value_matters is false, that means we've 
2297      finished with regular parsing.  Which means that some of the
2298      machinery we use to generate tail-calls is no longer in place.
2299      This is most often true of sjlj-exceptions, which we couldn't
2300      tail-call to anyway.  */
2301
2302   if (currently_expanding_call++ != 0
2303       || !flag_optimize_sibling_calls
2304       || !rtx_equal_function_value_matters
2305       || !stmt_loop_nest_empty ()
2306       || any_pending_cleanups (1)
2307       || args_size.var)
2308     try_tail_call = try_tail_recursion = 0;
2309
2310   /* Tail recursion fails, when we are not dealing with recursive calls.  */
2311   if (!try_tail_recursion
2312       || TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
2313       || TREE_OPERAND (TREE_OPERAND (exp, 0), 0) != current_function_decl)
2314     try_tail_recursion = 0;
2315
2316   /*  Rest of purposes for tail call optimizations to fail.  */
2317   if (
2318 #ifdef HAVE_sibcall_epilogue
2319       !HAVE_sibcall_epilogue
2320 #else
2321       1
2322 #endif
2323       || !try_tail_call
2324       /* Doing sibling call optimization needs some work, since
2325          structure_value_addr can be allocated on the stack.
2326          It does not seem worth the effort since few optimizable
2327          sibling calls will return a structure.  */
2328       || structure_value_addr != NULL_RTX
2329       /* If the register holding the address is a callee saved
2330          register, then we lose.  We have no way to prevent that,
2331          so we only allow calls to named functions.  */
2332       /* ??? This could be done by having the insn constraints
2333          use a register class that is all call-clobbered.  Any
2334          reload insns generated to fix things up would appear
2335          before the sibcall_epilogue.  */
2336       || fndecl == NULL_TREE
2337       || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP))
2338       || !FUNCTION_OK_FOR_SIBCALL (fndecl)
2339       /* If this function requires more stack slots than the current
2340          function, we cannot change it into a sibling call.  */
2341       || args_size.constant > current_function_args_size
2342       /* If the callee pops its own arguments, then it must pop exactly
2343          the same number of arguments as the current function.  */
2344       || RETURN_POPS_ARGS (fndecl, funtype, args_size.constant)
2345          != RETURN_POPS_ARGS (current_function_decl,
2346                               TREE_TYPE (current_function_decl),
2347                               current_function_args_size))
2348   try_tail_call = 0;
2349
2350   if (try_tail_call || try_tail_recursion)
2351     {
2352       int end, inc;
2353       actparms = NULL_TREE;
2354       /* Ok, we're going to give the tail call the old college try.
2355          This means we're going to evaluate the function arguments
2356          up to three times.  There are two degrees of badness we can
2357          encounter, those that can be unsaved and those that can't.
2358          (See unsafe_for_reeval commentary for details.)
2359
2360          Generate a new argument list.  Pass safe arguments through
2361          unchanged.  For the easy badness wrap them in UNSAVE_EXPRs.  
2362          For hard badness, evaluate them now and put their resulting
2363          rtx in a temporary VAR_DECL.
2364
2365          initialize_argument_information has ordered the array for the
2366          order to be pushed, and we must remember this when reconstructing
2367          the original argument orde.  */
2368
2369       if (PUSH_ARGS_REVERSED)
2370         {
2371           inc = 1;
2372           i = 0;
2373           end = num_actuals;
2374         }
2375       else
2376           {
2377           inc = -1;
2378           i = num_actuals - 1;
2379           end = -1;
2380         }
2381
2382       for (; i != end; i += inc)
2383         {
2384           switch (unsafe_for_reeval (args[i].tree_value))
2385             {
2386           case 0: /* Safe.  */
2387             break;
2388
2389           case 1: /* Mildly unsafe.  */
2390             args[i].tree_value = unsave_expr (args[i].tree_value);
2391             break;
2392
2393           case 2: /* Wildly unsafe.  */
2394             {
2395               tree var = build_decl (VAR_DECL, NULL_TREE,
2396                                        TREE_TYPE (args[i].tree_value));
2397                 DECL_RTL (var) = expand_expr (args[i].tree_value, NULL_RTX,
2398                                             VOIDmode, EXPAND_NORMAL);
2399                 args[i].tree_value = var;
2400             }
2401             break;
2402
2403           default:
2404             abort ();
2405           }
2406           /* We need to build actparms for optimize_tail_recursion.  We can
2407              safely trash away TREE_PURPOSE, since it is unused by this
2408              function.  */
2409           if (try_tail_recursion)
2410             actparms = tree_cons (NULL_TREE, args[i].tree_value, actparms);
2411         }
2412       /* Expanding one of those dangerous arguments could have added
2413          cleanups, but otherwise give it a whirl.  */
2414       if (any_pending_cleanups (1))
2415         try_tail_call = try_tail_recursion = 0;
2416     }
2417
2418   /* Generate a tail recursion sequence when calling ourselves.  */
2419
2420   if (try_tail_recursion)
2421     {
2422       /* We want to emit any pending stack adjustments before the tail
2423          recursion "call".  That way we know any adjustment after the tail
2424          recursion call can be ignored if we indeed use the tail recursion
2425          call expansion.  */
2426       int save_pending_stack_adjust = pending_stack_adjust;
2427       int save_stack_pointer_delta = stack_pointer_delta;
2428
2429       /* Use a new sequence to hold any RTL we generate.  We do not even
2430          know if we will use this RTL yet.  The final decision can not be
2431          made until after RTL generation for the entire function is
2432          complete.  */
2433       start_sequence ();
2434       /* If expanding any of the arguments creates cleanups, we can't
2435          do a tailcall.  So, we'll need to pop the pending cleanups
2436          list.  If, however, all goes well, and there are no cleanups
2437          then the call to expand_start_target_temps will have no
2438          effect.  */
2439       expand_start_target_temps ();
2440       if (optimize_tail_recursion (actparms, get_last_insn ()))
2441         {
2442           if (any_pending_cleanups (1))
2443             try_tail_call = try_tail_recursion = 0;
2444           else
2445             tail_recursion_insns = get_insns ();
2446         }
2447       expand_end_target_temps ();
2448       end_sequence ();
2449
2450       /* Restore the original pending stack adjustment for the sibling and
2451          normal call cases below.  */
2452       pending_stack_adjust = save_pending_stack_adjust;
2453       stack_pointer_delta = save_stack_pointer_delta;
2454     }
2455
2456   if (profile_arc_flag && (flags & ECF_FORK_OR_EXEC))
2457     {
2458       /* A fork duplicates the profile information, and an exec discards
2459          it.  We can't rely on fork/exec to be paired.  So write out the
2460          profile information we have gathered so far, and clear it.  */
2461       /* ??? When Linux's __clone is called with CLONE_VM set, profiling
2462          is subject to race conditions, just as with multithreaded
2463          programs.  */
2464
2465       emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_fork_func"), 0,
2466                          VOIDmode, 0);
2467     }
2468
2469   /* Ensure current function's preferred stack boundary is at least
2470      what we need.  We don't have to increase alignment for recursive
2471      functions.  */
2472   if (cfun->preferred_stack_boundary < preferred_stack_boundary
2473       && fndecl != current_function_decl)
2474     cfun->preferred_stack_boundary = preferred_stack_boundary;
2475
2476   preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
2477
2478   function_call_count++;
2479
2480   /* We want to make two insn chains; one for a sibling call, the other
2481      for a normal call.  We will select one of the two chains after
2482      initial RTL generation is complete.  */
2483   for (pass = 0; pass < 2; pass++)
2484     {
2485       int sibcall_failure = 0;
2486       /* We want to emit ay pending stack adjustments before the tail
2487          recursion "call".  That way we know any adjustment after the tail
2488          recursion call can be ignored if we indeed use the tail recursion
2489          call expansion.  */
2490       int save_pending_stack_adjust;
2491       int save_stack_pointer_delta;
2492       rtx insns;
2493       rtx before_call, next_arg_reg;
2494
2495       if (pass == 0)
2496         {
2497           if (! try_tail_call)
2498             continue;
2499
2500           /* Emit any queued insns now; otherwise they would end up in
2501              only one of the alternates.  */
2502           emit_queue ();
2503
2504           /* State variables we need to save and restore between
2505              iterations.  */
2506           save_pending_stack_adjust = pending_stack_adjust;
2507           save_stack_pointer_delta = stack_pointer_delta;
2508         }
2509       if (pass)
2510         flags &= ~ECF_SIBCALL;
2511       else
2512         flags |= ECF_SIBCALL;
2513
2514       /* Other state variables that we must reinitialize each time
2515          through the loop (that are not initialized by the loop itself).  */
2516       argblock = 0;
2517       call_fusage = 0;
2518
2519       /* Start a new sequence for the normal call case. 
2520
2521          From this point on, if the sibling call fails, we want to set
2522          sibcall_failure instead of continuing the loop.  */
2523       start_sequence ();
2524
2525       if (pass == 0)
2526         {
2527           /* We know at this point that there are not currently any
2528              pending cleanups.  If, however, in the process of evaluating
2529              the arguments we were to create some, we'll need to be
2530              able to get rid of them.  */
2531           expand_start_target_temps ();
2532         }
2533
2534       /* When calling a const function, we must pop the stack args right away,
2535          so that the pop is deleted or moved with the call.  */
2536       if (flags & (ECF_CONST | ECF_PURE))
2537         NO_DEFER_POP;
2538
2539       /* Don't let pending stack adjusts add up to too much.
2540          Also, do all pending adjustments now if there is any chance
2541          this might be a call to alloca or if we are expanding a sibling
2542          call sequence.  */
2543       if (pending_stack_adjust >= 32
2544           || (pending_stack_adjust > 0 && (flags & ECF_MAY_BE_ALLOCA))
2545           || pass == 0)
2546         do_pending_stack_adjust ();
2547
2548       /* Push the temporary stack slot level so that we can free any
2549          temporaries we make.  */
2550       push_temp_slots ();
2551
2552
2553 #ifdef FINAL_REG_PARM_STACK_SPACE
2554       reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
2555                                                          args_size.var);
2556 #endif
2557       /* Precompute any arguments as needed.  */
2558       if (pass)
2559         precompute_arguments (flags, num_actuals, args);
2560
2561       /* Now we are about to start emitting insns that can be deleted
2562          if a libcall is deleted.  */
2563       if (flags & (ECF_CONST | ECF_PURE | ECF_MALLOC))
2564         start_sequence ();
2565
2566       adjusted_args_size = args_size;
2567       /* Compute the actual size of the argument block required.  The variable
2568          and constant sizes must be combined, the size may have to be rounded,
2569          and there may be a minimum required size.  When generating a sibcall
2570          pattern, do not round up, since we'll be re-using whatever space our
2571          caller provided.  */
2572       unadjusted_args_size
2573         = compute_argument_block_size (reg_parm_stack_space, &adjusted_args_size,
2574                                        (pass == 0 ? 0
2575                                         : preferred_stack_boundary));
2576
2577       old_stack_allocated =  stack_pointer_delta - pending_stack_adjust;
2578
2579       /* The argument block when performing a sibling call is the
2580          incoming argument block.  */
2581       if (pass == 0)
2582         argblock = virtual_incoming_args_rtx;
2583
2584       /* If we have no actual push instructions, or shouldn't use them,
2585          make space for all args right now.  */
2586       else if (adjusted_args_size.var != 0)
2587         {
2588           if (old_stack_level == 0)
2589             {
2590               emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2591               old_pending_adj = pending_stack_adjust;
2592               pending_stack_adjust = 0;
2593               /* stack_arg_under_construction says whether a stack arg is
2594                  being constructed at the old stack level.  Pushing the stack
2595                  gets a clean outgoing argument block.  */
2596               old_stack_arg_under_construction = stack_arg_under_construction;
2597               stack_arg_under_construction = 0;
2598             }
2599           argblock = push_block (ARGS_SIZE_RTX (adjusted_args_size), 0, 0);
2600         }
2601       else
2602         {
2603           /* Note that we must go through the motions of allocating an argument
2604              block even if the size is zero because we may be storing args
2605              in the area reserved for register arguments, which may be part of
2606              the stack frame.  */
2607
2608           int needed = adjusted_args_size.constant;
2609
2610           /* Store the maximum argument space used.  It will be pushed by
2611              the prologue (if ACCUMULATE_OUTGOING_ARGS, or stack overflow
2612              checking).  */
2613
2614           if (needed > current_function_outgoing_args_size)
2615             current_function_outgoing_args_size = needed;
2616
2617           if (must_preallocate)
2618             {
2619               if (ACCUMULATE_OUTGOING_ARGS)
2620                 {
2621                   /* Since the stack pointer will never be pushed, it is
2622                      possible for the evaluation of a parm to clobber
2623                      something we have already written to the stack.
2624                      Since most function calls on RISC machines do not use
2625                      the stack, this is uncommon, but must work correctly.
2626
2627                      Therefore, we save any area of the stack that was already
2628                      written and that we are using.  Here we set up to do this
2629                      by making a new stack usage map from the old one.  The
2630                      actual save will be done by store_one_arg. 
2631
2632                      Another approach might be to try to reorder the argument
2633                      evaluations to avoid this conflicting stack usage.  */
2634
2635 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2636                   /* Since we will be writing into the entire argument area,
2637                      the map must be allocated for its entire size, not just
2638                      the part that is the responsibility of the caller.  */
2639                   needed += reg_parm_stack_space;
2640 #endif
2641
2642 #ifdef ARGS_GROW_DOWNWARD
2643                   highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2644                                                      needed + 1);
2645 #else
2646                   highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2647                                                      needed);
2648 #endif
2649                   stack_usage_map
2650                     = (char *) alloca (highest_outgoing_arg_in_use);
2651
2652                   if (initial_highest_arg_in_use)
2653                     bcopy (initial_stack_usage_map, stack_usage_map,
2654                            initial_highest_arg_in_use);
2655
2656                   if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
2657                     bzero (&stack_usage_map[initial_highest_arg_in_use],
2658                            (highest_outgoing_arg_in_use
2659                             - initial_highest_arg_in_use));
2660                   needed = 0;
2661
2662                   /* The address of the outgoing argument list must not be
2663                      copied to a register here, because argblock would be left
2664                      pointing to the wrong place after the call to
2665                      allocate_dynamic_stack_space below. */
2666
2667                   argblock = virtual_outgoing_args_rtx;
2668                 }
2669               else
2670                 {
2671                   if (inhibit_defer_pop == 0)
2672                     {
2673                       /* Try to reuse some or all of the pending_stack_adjust
2674                          to get this space.  */
2675                       needed
2676                         = (combine_pending_stack_adjustment_and_call 
2677                            (unadjusted_args_size,
2678                             &adjusted_args_size,
2679                             preferred_unit_stack_boundary));
2680
2681                       /* combine_pending_stack_adjustment_and_call computes
2682                          an adjustment before the arguments are allocated.
2683                          Account for them and see whether or not the stack
2684                          needs to go up or down.  */
2685                       needed = unadjusted_args_size - needed;
2686
2687                       if (needed < 0)
2688                         {
2689                           /* We're releasing stack space.  */
2690                           /* ??? We can avoid any adjustment at all if we're
2691                              already aligned.  FIXME.  */
2692                           pending_stack_adjust = -needed;
2693                           do_pending_stack_adjust ();
2694                           needed = 0;
2695                         }
2696                       else 
2697                         /* We need to allocate space.  We'll do that in
2698                            push_block below.  */
2699                         pending_stack_adjust = 0;
2700                     }
2701
2702                   /* Special case this because overhead of `push_block' in
2703                      this case is non-trivial.  */
2704                   if (needed == 0)
2705                     argblock = virtual_outgoing_args_rtx;
2706                   else
2707                     argblock = push_block (GEN_INT (needed), 0, 0);
2708
2709                   /* We only really need to call `copy_to_reg' in the case
2710                      where push insns are going to be used to pass ARGBLOCK
2711                      to a function call in ARGS.  In that case, the stack
2712                      pointer changes value from the allocation point to the
2713                      call point, and hence the value of
2714                      VIRTUAL_OUTGOING_ARGS_RTX changes as well.  But might
2715                      as well always do it.  */
2716                   argblock = copy_to_reg (argblock);
2717
2718                   /* The save/restore code in store_one_arg handles all
2719                      cases except one: a constructor call (including a C
2720                      function returning a BLKmode struct) to initialize
2721                      an argument.  */
2722                   if (stack_arg_under_construction)
2723                     {
2724 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2725                       rtx push_size = GEN_INT (reg_parm_stack_space
2726                                                + adjusted_args_size.constant);
2727 #else
2728                       rtx push_size = GEN_INT (adjusted_args_size.constant);
2729 #endif
2730                       if (old_stack_level == 0)
2731                         {
2732                           emit_stack_save (SAVE_BLOCK, &old_stack_level,
2733                                            NULL_RTX);
2734                           old_pending_adj = pending_stack_adjust;
2735                           pending_stack_adjust = 0;
2736                           /* stack_arg_under_construction says whether a stack
2737                              arg is being constructed at the old stack level.
2738                              Pushing the stack gets a clean outgoing argument
2739                              block.  */
2740                           old_stack_arg_under_construction
2741                             = stack_arg_under_construction;
2742                           stack_arg_under_construction = 0;
2743                           /* Make a new map for the new argument list.  */
2744                           stack_usage_map = (char *)
2745                             alloca (highest_outgoing_arg_in_use);
2746                           bzero (stack_usage_map, highest_outgoing_arg_in_use);
2747                           highest_outgoing_arg_in_use = 0;
2748                         }
2749                       allocate_dynamic_stack_space (push_size, NULL_RTX,
2750                                                     BITS_PER_UNIT);
2751                     }
2752                   /* If argument evaluation might modify the stack pointer,
2753                      copy the address of the argument list to a register.  */
2754                   for (i = 0; i < num_actuals; i++)
2755                     if (args[i].pass_on_stack)
2756                       {
2757                         argblock = copy_addr_to_reg (argblock);
2758                         break;
2759                       }
2760                 }
2761             }
2762         }
2763
2764       compute_argument_addresses (args, argblock, num_actuals);
2765
2766 #ifdef PREFERRED_STACK_BOUNDARY
2767       /* If we push args individually in reverse order, perform stack alignment
2768          before the first push (the last arg).  */
2769       if (PUSH_ARGS_REVERSED && argblock == 0
2770           && adjusted_args_size.constant != unadjusted_args_size)
2771         {
2772           /* When the stack adjustment is pending, we get better code
2773              by combining the adjustments.  */
2774           if (pending_stack_adjust 
2775               && ! (flags & (ECF_CONST | ECF_PURE))
2776               && ! inhibit_defer_pop)
2777             {
2778               pending_stack_adjust
2779                 = (combine_pending_stack_adjustment_and_call 
2780                    (unadjusted_args_size,
2781                     &adjusted_args_size,
2782                     preferred_unit_stack_boundary));
2783               do_pending_stack_adjust ();
2784             }
2785           else if (argblock == 0)
2786             anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2787                                         - unadjusted_args_size));
2788         }
2789       /* Now that the stack is properly aligned, pops can't safely
2790          be deferred during the evaluation of the arguments.  */
2791       NO_DEFER_POP;
2792 #endif
2793
2794       /* Don't try to defer pops if preallocating, not even from the first arg,
2795          since ARGBLOCK probably refers to the SP.  */
2796       if (argblock)
2797         NO_DEFER_POP;
2798
2799       funexp = rtx_for_function_call (fndecl, exp);
2800
2801       /* Figure out the register where the value, if any, will come back.  */
2802       valreg = 0;
2803       if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
2804           && ! structure_value_addr)
2805         {
2806           if (pcc_struct_value)
2807             valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
2808                                           fndecl, (pass == 0));
2809           else
2810             valreg = hard_function_value (TREE_TYPE (exp), fndecl, (pass == 0));
2811         }
2812
2813       /* Precompute all register parameters.  It isn't safe to compute anything
2814          once we have started filling any specific hard regs.  */
2815       precompute_register_parameters (num_actuals, args, &reg_parm_seen);
2816
2817 #ifdef REG_PARM_STACK_SPACE
2818       /* Save the fixed argument area if it's part of the caller's frame and
2819          is clobbered by argument setup for this call.  */
2820       if (ACCUMULATE_OUTGOING_ARGS && pass)
2821         save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
2822                                               &low_to_save, &high_to_save);
2823 #endif
2824
2825       /* Now store (and compute if necessary) all non-register parms.
2826          These come before register parms, since they can require block-moves,
2827          which could clobber the registers used for register parms.
2828          Parms which have partial registers are not stored here,
2829          but we do preallocate space here if they want that.  */
2830
2831       for (i = 0; i < num_actuals; i++)
2832         if (args[i].reg == 0 || args[i].pass_on_stack)
2833           store_one_arg (&args[i], argblock, flags,
2834                          adjusted_args_size.var != 0, reg_parm_stack_space);
2835
2836       /* If we have a parm that is passed in registers but not in memory
2837          and whose alignment does not permit a direct copy into registers,
2838          make a group of pseudos that correspond to each register that we
2839          will later fill.  */
2840       if (STRICT_ALIGNMENT)
2841         store_unaligned_arguments_into_pseudos (args, num_actuals);
2842
2843       /* Now store any partially-in-registers parm.
2844          This is the last place a block-move can happen.  */
2845       if (reg_parm_seen)
2846         for (i = 0; i < num_actuals; i++)
2847           if (args[i].partial != 0 && ! args[i].pass_on_stack)
2848             store_one_arg (&args[i], argblock, flags,
2849                            adjusted_args_size.var != 0, reg_parm_stack_space);
2850
2851 #ifdef PREFERRED_STACK_BOUNDARY
2852       /* If we pushed args in forward order, perform stack alignment
2853          after pushing the last arg.  */
2854       if (!PUSH_ARGS_REVERSED && argblock == 0)
2855         anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2856                                     - unadjusted_args_size));
2857 #endif
2858
2859       /* If register arguments require space on the stack and stack space
2860          was not preallocated, allocate stack space here for arguments
2861          passed in registers.  */
2862 #ifdef OUTGOING_REG_PARM_STACK_SPACE
2863       if (!ACCUMULATE_OUTGOING_ARGS
2864            && must_preallocate == 0 && reg_parm_stack_space > 0)
2865         anti_adjust_stack (GEN_INT (reg_parm_stack_space));
2866 #endif
2867
2868       /* Pass the function the address in which to return a
2869          structure value.  */
2870       if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
2871         {
2872           emit_move_insn (struct_value_rtx,
2873                           force_reg (Pmode,
2874                                      force_operand (structure_value_addr,
2875                                                     NULL_RTX)));
2876
2877           /* Mark the memory for the aggregate as write-only.  */
2878           if (current_function_check_memory_usage)
2879             emit_library_call (chkr_set_right_libfunc, 1,
2880                                VOIDmode, 3,
2881                                structure_value_addr, ptr_mode, 
2882                                GEN_INT (struct_value_size),
2883                                TYPE_MODE (sizetype),
2884                                GEN_INT (MEMORY_USE_WO),
2885                                TYPE_MODE (integer_type_node));
2886
2887           if (GET_CODE (struct_value_rtx) == REG)
2888             use_reg (&call_fusage, struct_value_rtx);
2889         }
2890
2891       funexp = prepare_call_address (funexp, fndecl, &call_fusage,
2892                                      reg_parm_seen);
2893
2894       load_register_parameters (args, num_actuals, &call_fusage, flags);
2895      
2896       /* Perform postincrements before actually calling the function.  */
2897       emit_queue ();
2898
2899       /* Save a pointer to the last insn before the call, so that we can
2900          later safely search backwards to find the CALL_INSN.  */
2901       before_call = get_last_insn ();
2902
2903       /* Set up next argument register.  For sibling calls on machines
2904          with register windows this should be the incoming register.  */
2905 #ifdef FUNCTION_INCOMING_ARG
2906       if (pass == 0)
2907         next_arg_reg = FUNCTION_INCOMING_ARG (args_so_far, VOIDmode,
2908                                               void_type_node, 1);
2909       else
2910 #endif
2911         next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode,
2912                                      void_type_node, 1);
2913
2914       /* All arguments and registers used for the call must be set up by
2915          now!  */
2916
2917 #ifdef PREFERRED_STACK_BOUNDARY
2918       /* Stack must be properly aligned now.  */
2919       if (pass && stack_pointer_delta % preferred_unit_stack_boundary)
2920         abort ();
2921 #endif
2922
2923       /* Generate the actual call instruction.  */
2924       emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size,
2925                    adjusted_args_size.constant, struct_value_size,
2926                    next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
2927                    flags);
2928
2929       /* Verify that we've deallocated all the stack we used.  */
2930       if (pass
2931           && old_stack_allocated != stack_pointer_delta - pending_stack_adjust)
2932         abort();
2933
2934       /* If call is cse'able, make appropriate pair of reg-notes around it.
2935          Test valreg so we don't crash; may safely ignore `const'
2936          if return type is void.  Disable for PARALLEL return values, because
2937          we have no way to move such values into a pseudo register.  */
2938       if (pass
2939           && (flags & (ECF_CONST | ECF_PURE))
2940           && valreg != 0 && GET_CODE (valreg) != PARALLEL)
2941         {
2942           rtx note = 0;
2943           rtx temp = gen_reg_rtx (GET_MODE (valreg));
2944           rtx insns;
2945
2946           /* Mark the return value as a pointer if needed.  */
2947           if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2948             mark_reg_pointer (temp, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))));
2949
2950           /* Construct an "equal form" for the value which mentions all the
2951              arguments in order as well as the function name.  */
2952           for (i = 0; i < num_actuals; i++)
2953             note = gen_rtx_EXPR_LIST (VOIDmode, args[i].initial_value, note);
2954           note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
2955
2956           insns = get_insns ();
2957           end_sequence ();
2958
2959           if (flags & ECF_PURE)
2960             note = gen_rtx_EXPR_LIST (VOIDmode,
2961                gen_rtx_USE (VOIDmode,
2962                             gen_rtx_MEM (BLKmode,
2963                                          gen_rtx_SCRATCH (VOIDmode))), note);
2964
2965           emit_libcall_block (insns, temp, valreg, note);
2966   
2967           valreg = temp;
2968         }
2969       else if (flags & (ECF_CONST | ECF_PURE))
2970         {
2971           /* Otherwise, just write out the sequence without a note.  */
2972           rtx insns = get_insns ();
2973
2974           end_sequence ();
2975           emit_insns (insns);
2976         }
2977       else if (flags & ECF_MALLOC)
2978         {
2979           rtx temp = gen_reg_rtx (GET_MODE (valreg));
2980           rtx last, insns;
2981
2982           /* The return value from a malloc-like function is a pointer. */
2983           if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2984             mark_reg_pointer (temp, BIGGEST_ALIGNMENT);
2985
2986           emit_move_insn (temp, valreg);
2987
2988           /* The return value from a malloc-like function can not alias
2989              anything else.  */
2990           last = get_last_insn ();
2991           REG_NOTES (last) = 
2992             gen_rtx_EXPR_LIST (REG_NOALIAS, temp, REG_NOTES (last));
2993
2994           /* Write out the sequence.  */
2995           insns = get_insns ();
2996           end_sequence ();
2997           emit_insns (insns);
2998           valreg = temp;
2999         }
3000
3001       /* For calls to `setjmp', etc., inform flow.c it should complain
3002          if nonvolatile values are live.  For functions that cannot return,
3003          inform flow that control does not fall through.  */
3004
3005       if ((flags & (ECF_RETURNS_TWICE | ECF_NORETURN | ECF_LONGJMP)) || pass == 0)
3006         {
3007           /* The barrier or NOTE_INSN_SETJMP note must be emitted
3008              immediately after the CALL_INSN.  Some ports emit more
3009              than just a CALL_INSN above, so we must search for it here.  */
3010
3011           rtx last = get_last_insn ();
3012           while (GET_CODE (last) != CALL_INSN)
3013             {
3014               last = PREV_INSN (last);
3015               /* There was no CALL_INSN?  */
3016               if (last == before_call)
3017                 abort ();
3018             }
3019
3020           if (flags & ECF_RETURNS_TWICE)
3021             {
3022               emit_note_after (NOTE_INSN_SETJMP, last);
3023               current_function_calls_setjmp = 1;
3024             }
3025           else
3026             emit_barrier_after (last);
3027         }
3028
3029       if (flags & ECF_LONGJMP)
3030         current_function_calls_longjmp = 1;
3031
3032       /* If this function is returning into a memory location marked as
3033          readonly, it means it is initializing that location.  But we normally
3034          treat functions as not clobbering such locations, so we need to
3035          specify that this one does.  */
3036       if (target != 0 && GET_CODE (target) == MEM
3037           && structure_value_addr != 0 && RTX_UNCHANGING_P (target))
3038         emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
3039
3040       /* If value type not void, return an rtx for the value.  */
3041
3042       /* If there are cleanups to be called, don't use a hard reg as target.
3043          We need to double check this and see if it matters anymore.  */
3044       if (any_pending_cleanups (1))
3045         {
3046           if (target && REG_P (target)
3047               && REGNO (target) < FIRST_PSEUDO_REGISTER)
3048             target = 0;
3049           sibcall_failure = 1;
3050         }
3051
3052       if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
3053           || ignore)
3054         {
3055           target = const0_rtx;
3056         }
3057       else if (structure_value_addr)
3058         {
3059           if (target == 0 || GET_CODE (target) != MEM)
3060             {
3061               target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
3062                                     memory_address (TYPE_MODE (TREE_TYPE (exp)),
3063                                                     structure_value_addr));
3064               MEM_SET_IN_STRUCT_P (target,
3065                                    AGGREGATE_TYPE_P (TREE_TYPE (exp)));
3066             }
3067         }
3068       else if (pcc_struct_value)
3069         {
3070           /* This is the special C++ case where we need to
3071              know what the true target was.  We take care to
3072              never use this value more than once in one expression.  */
3073           target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
3074                                 copy_to_reg (valreg));
3075           MEM_SET_IN_STRUCT_P (target, AGGREGATE_TYPE_P (TREE_TYPE (exp)));
3076         }
3077       /* Handle calls that return values in multiple non-contiguous locations.
3078          The Irix 6 ABI has examples of this.  */
3079       else if (GET_CODE (valreg) == PARALLEL)
3080         {
3081           int bytes = int_size_in_bytes (TREE_TYPE (exp));
3082
3083           if (target == 0)
3084             {
3085               target = assign_stack_temp (TYPE_MODE (TREE_TYPE (exp)),
3086                                           bytes, 0);
3087               MEM_SET_IN_STRUCT_P (target, AGGREGATE_TYPE_P (TREE_TYPE (exp)));
3088               preserve_temp_slots (target);
3089             }
3090
3091           if (! rtx_equal_p (target, valreg))
3092             emit_group_store (target, valreg, bytes,
3093                               TYPE_ALIGN (TREE_TYPE (exp)));
3094
3095           /* We can not support sibling calls for this case.  */
3096           sibcall_failure = 1;
3097         }
3098       else if (target
3099                && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
3100                && GET_MODE (target) == GET_MODE (valreg))
3101         {
3102           /* TARGET and VALREG cannot be equal at this point because the
3103              latter would not have REG_FUNCTION_VALUE_P true, while the
3104              former would if it were referring to the same register.
3105
3106              If they refer to the same register, this move will be a no-op,
3107              except when function inlining is being done.  */
3108           emit_move_insn (target, valreg);
3109         }
3110       else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
3111         target = copy_blkmode_from_reg (target, valreg, TREE_TYPE (exp));
3112       else
3113         target = copy_to_reg (valreg);
3114
3115 #ifdef PROMOTE_FUNCTION_RETURN
3116       /* If we promoted this return value, make the proper SUBREG.  TARGET
3117          might be const0_rtx here, so be careful.  */
3118       if (GET_CODE (target) == REG
3119           && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
3120           && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
3121         {
3122           tree type = TREE_TYPE (exp);
3123           int unsignedp = TREE_UNSIGNED (type);
3124
3125           /* If we don't promote as expected, something is wrong.  */
3126           if (GET_MODE (target)
3127               != promote_mode (type, TYPE_MODE (type), &unsignedp, 1))
3128             abort ();
3129
3130           target = gen_rtx_SUBREG (TYPE_MODE (type), target, 0);
3131           SUBREG_PROMOTED_VAR_P (target) = 1;
3132           SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp;
3133         }
3134 #endif
3135
3136       /* If size of args is variable or this was a constructor call for a stack
3137          argument, restore saved stack-pointer value.  */
3138
3139       if (old_stack_level)
3140         {
3141           emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
3142           pending_stack_adjust = old_pending_adj;
3143           stack_arg_under_construction = old_stack_arg_under_construction;
3144           highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3145           stack_usage_map = initial_stack_usage_map;
3146           sibcall_failure = 1;
3147         }
3148       else if (ACCUMULATE_OUTGOING_ARGS && pass)
3149         {
3150 #ifdef REG_PARM_STACK_SPACE
3151           if (save_area)
3152             {
3153               restore_fixed_argument_area (save_area, argblock,
3154                                            high_to_save, low_to_save);
3155             }
3156 #endif
3157
3158           /* If we saved any argument areas, restore them.  */
3159           for (i = 0; i < num_actuals; i++)
3160             if (args[i].save_area)
3161               {
3162                 enum machine_mode save_mode = GET_MODE (args[i].save_area);
3163                 rtx stack_area
3164                   = gen_rtx_MEM (save_mode,
3165                                  memory_address (save_mode,
3166                                                  XEXP (args[i].stack_slot, 0)));
3167
3168                 if (save_mode != BLKmode)
3169                   emit_move_insn (stack_area, args[i].save_area);
3170                 else
3171                   emit_block_move (stack_area,
3172                                    validize_mem (args[i].save_area),
3173                                    GEN_INT (args[i].size.constant),
3174                                    PARM_BOUNDARY);
3175               }
3176
3177           highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3178           stack_usage_map = initial_stack_usage_map;
3179         }
3180
3181       /* If this was alloca, record the new stack level for nonlocal gotos.  
3182          Check for the handler slots since we might not have a save area
3183          for non-local gotos.  */
3184
3185       if ((flags & ECF_MAY_BE_ALLOCA) && nonlocal_goto_handler_slots != 0)
3186         emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX);
3187
3188       pop_temp_slots ();
3189
3190       /* Free up storage we no longer need.  */
3191       for (i = 0; i < num_actuals; ++i)
3192         if (args[i].aligned_regs)
3193           free (args[i].aligned_regs);
3194
3195       if (pass == 0)
3196         {
3197           /* Undo the fake expand_start_target_temps we did earlier.  If
3198              there had been any cleanups created, we've already set
3199              sibcall_failure.  */
3200           expand_end_target_temps ();
3201         }
3202
3203       insns = get_insns ();
3204       end_sequence ();
3205
3206       if (pass == 0)
3207         {
3208           tail_call_insns = insns;
3209
3210           /* If something prevents making this a sibling call,
3211              zero out the sequence.  */
3212           if (sibcall_failure)
3213             tail_call_insns = NULL_RTX;
3214           /* Restore the pending stack adjustment now that we have
3215              finished generating the sibling call sequence.  */
3216
3217           pending_stack_adjust = save_pending_stack_adjust;
3218           stack_pointer_delta = save_stack_pointer_delta;
3219
3220           /* Prepare arg structure for next iteration.  */
3221           for (i = 0 ; i < num_actuals ; i++)
3222             {
3223               args[i].value = 0;
3224               args[i].aligned_regs = 0;
3225               args[i].stack = 0;
3226             }
3227         }
3228       else
3229         normal_call_insns = insns;
3230     }
3231
3232   /* The function optimize_sibling_and_tail_recursive_calls doesn't
3233      handle CALL_PLACEHOLDERs inside other CALL_PLACEHOLDERs.  This
3234      can happen if the arguments to this function call an inline
3235      function who's expansion contains another CALL_PLACEHOLDER.
3236
3237      If there are any C_Ps in any of these sequences, replace them
3238      with their normal call. */
3239
3240   for (insn = normal_call_insns; insn; insn = NEXT_INSN (insn))
3241     if (GET_CODE (insn) == CALL_INSN
3242         && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3243       replace_call_placeholder (insn, sibcall_use_normal);
3244
3245   for (insn = tail_call_insns; insn; insn = NEXT_INSN (insn))
3246     if (GET_CODE (insn) == CALL_INSN
3247         && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3248       replace_call_placeholder (insn, sibcall_use_normal);
3249
3250   for (insn = tail_recursion_insns; insn; insn = NEXT_INSN (insn))
3251     if (GET_CODE (insn) == CALL_INSN
3252         && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3253       replace_call_placeholder (insn, sibcall_use_normal);
3254
3255   /* If this was a potential tail recursion site, then emit a
3256      CALL_PLACEHOLDER with the normal and the tail recursion streams.
3257      One of them will be selected later.  */
3258   if (tail_recursion_insns || tail_call_insns)
3259     {
3260       /* The tail recursion label must be kept around.  We could expose
3261          its use in the CALL_PLACEHOLDER, but that creates unwanted edges
3262          and makes determining true tail recursion sites difficult.
3263
3264          So we set LABEL_PRESERVE_P here, then clear it when we select
3265          one of the call sequences after rtl generation is complete.  */
3266       if (tail_recursion_insns)
3267         LABEL_PRESERVE_P (tail_recursion_label) = 1;
3268       emit_call_insn (gen_rtx_CALL_PLACEHOLDER (VOIDmode, normal_call_insns,
3269                                                 tail_call_insns,
3270                                                 tail_recursion_insns,
3271                                                 tail_recursion_label));
3272     }
3273   else
3274     emit_insns (normal_call_insns);
3275
3276   currently_expanding_call--;
3277
3278   return target;
3279 }
3280 \f
3281 /* Returns nonzero if FUN is the symbol for a library function which can
3282    not throw.  */
3283
3284 static int
3285 libfunc_nothrow (fun)
3286      rtx fun;
3287 {
3288   if (fun == throw_libfunc
3289       || fun == rethrow_libfunc
3290       || fun == sjthrow_libfunc
3291       || fun == sjpopnthrow_libfunc)
3292     return 0;
3293
3294   return 1;
3295 }
3296 \f
3297 /* Output a library call to function FUN (a SYMBOL_REF rtx).
3298    The RETVAL parameter specifies whether return value needs to be saved, other 
3299    parameters are documented in the emit_library_call function bellow.  */
3300 static rtx
3301 emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
3302      int retval;
3303      rtx orgfun;
3304      rtx value;
3305      int fn_type;
3306      enum machine_mode outmode;
3307      int nargs;
3308      va_list p;
3309 {
3310   /* Total size in bytes of all the stack-parms scanned so far.  */
3311   struct args_size args_size;
3312   /* Size of arguments before any adjustments (such as rounding).  */
3313   struct args_size original_args_size;
3314   register int argnum;
3315   rtx fun;
3316   int inc;
3317   int count;
3318   struct args_size alignment_pad;
3319   rtx argblock = 0;
3320   CUMULATIVE_ARGS args_so_far;
3321   struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
3322                struct args_size offset; struct args_size size; rtx save_area; };
3323   struct arg *argvec;
3324   int old_inhibit_defer_pop = inhibit_defer_pop;
3325   rtx call_fusage = 0;
3326   rtx mem_value = 0;
3327   rtx valreg;
3328   int pcc_struct_value = 0;
3329   int struct_value_size = 0;
3330   int flags = 0;
3331   int reg_parm_stack_space = 0;
3332   int needed;
3333
3334 #ifdef REG_PARM_STACK_SPACE
3335   /* Define the boundary of the register parm stack space that needs to be
3336      save, if any.  */
3337   int low_to_save = -1, high_to_save = 0;
3338   rtx save_area = 0;            /* Place that it is saved */
3339 #endif
3340
3341   /* Size of the stack reserved for parameter registers.  */
3342   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
3343   char *initial_stack_usage_map = stack_usage_map;
3344
3345 #ifdef REG_PARM_STACK_SPACE
3346 #ifdef MAYBE_REG_PARM_STACK_SPACE
3347   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
3348 #else
3349   reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
3350 #endif
3351 #endif
3352
3353   if (fn_type == 1)
3354     flags |= ECF_CONST;
3355   else if (fn_type == 2)
3356     flags |= ECF_PURE;
3357   fun = orgfun;
3358
3359   if (libfunc_nothrow (fun))
3360     flags |= ECF_NOTHROW;
3361
3362 #ifdef PREFERRED_STACK_BOUNDARY
3363   /* Ensure current function's preferred stack boundary is at least
3364      what we need.  */
3365   if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
3366     cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
3367 #endif
3368
3369   /* If this kind of value comes back in memory,
3370      decide where in memory it should come back.  */
3371   if (outmode != VOIDmode && aggregate_value_p (type_for_mode (outmode, 0)))
3372     {
3373 #ifdef PCC_STATIC_STRUCT_RETURN
3374       rtx pointer_reg
3375         = hard_function_value (build_pointer_type (type_for_mode (outmode, 0)),
3376                                0, 0);
3377       mem_value = gen_rtx_MEM (outmode, pointer_reg);
3378       pcc_struct_value = 1;
3379       if (value == 0)
3380         value = gen_reg_rtx (outmode);
3381 #else /* not PCC_STATIC_STRUCT_RETURN */
3382       struct_value_size = GET_MODE_SIZE (outmode);
3383       if (value != 0 && GET_CODE (value) == MEM)
3384         mem_value = value;
3385       else
3386         mem_value = assign_stack_temp (outmode, GET_MODE_SIZE (outmode), 0);
3387 #endif
3388
3389       /* This call returns a big structure.  */
3390       flags &= ~(ECF_CONST | ECF_PURE);
3391     }
3392
3393   /* ??? Unfinished: must pass the memory address as an argument.  */
3394
3395   /* Copy all the libcall-arguments out of the varargs data
3396      and into a vector ARGVEC.
3397
3398      Compute how to pass each argument.  We only support a very small subset
3399      of the full argument passing conventions to limit complexity here since
3400      library functions shouldn't have many args.  */
3401
3402   argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
3403   bzero ((char *) argvec, (nargs + 1) * sizeof (struct arg));
3404
3405   INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0);
3406
3407   args_size.constant = 0;
3408   args_size.var = 0;
3409
3410   count = 0;
3411
3412   /* Now we are about to start emitting insns that can be deleted
3413      if a libcall is deleted.  */
3414   if (flags & (ECF_CONST | ECF_PURE))
3415     start_sequence ();
3416
3417   push_temp_slots ();
3418
3419   /* If there's a structure value address to be passed,
3420      either pass it in the special place, or pass it as an extra argument.  */
3421   if (mem_value && struct_value_rtx == 0 && ! pcc_struct_value)
3422     {
3423       rtx addr = XEXP (mem_value, 0);
3424       nargs++;
3425
3426       /* Make sure it is a reasonable operand for a move or push insn.  */
3427       if (GET_CODE (addr) != REG && GET_CODE (addr) != MEM
3428           && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
3429         addr = force_operand (addr, NULL_RTX);
3430
3431       argvec[count].value = addr;
3432       argvec[count].mode = Pmode;
3433       argvec[count].partial = 0;
3434
3435       argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
3436 #ifdef FUNCTION_ARG_PARTIAL_NREGS
3437       if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
3438         abort ();
3439 #endif
3440
3441       locate_and_pad_parm (Pmode, NULL_TREE,
3442 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3443                            1,
3444 #else
3445                            argvec[count].reg != 0,
3446 #endif
3447                            NULL_TREE, &args_size, &argvec[count].offset,
3448                            &argvec[count].size, &alignment_pad);
3449
3450
3451       if (argvec[count].reg == 0 || argvec[count].partial != 0
3452           || reg_parm_stack_space > 0)
3453         args_size.constant += argvec[count].size.constant;
3454
3455       FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree) 0, 1);
3456
3457       count++;
3458     }
3459
3460   for (; count < nargs; count++)
3461     {
3462       rtx val = va_arg (p, rtx);
3463       enum machine_mode mode = va_arg (p, enum machine_mode);
3464
3465       /* We cannot convert the arg value to the mode the library wants here;
3466          must do it earlier where we know the signedness of the arg.  */
3467       if (mode == BLKmode
3468           || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
3469         abort ();
3470
3471       /* On some machines, there's no way to pass a float to a library fcn.
3472          Pass it as a double instead.  */
3473 #ifdef LIBGCC_NEEDS_DOUBLE
3474       if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
3475         val = convert_modes (DFmode, SFmode, val, 0), mode = DFmode;
3476 #endif
3477
3478       /* There's no need to call protect_from_queue, because
3479          either emit_move_insn or emit_push_insn will do that.  */
3480
3481       /* Make sure it is a reasonable operand for a move or push insn.  */
3482       if (GET_CODE (val) != REG && GET_CODE (val) != MEM
3483           && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
3484         val = force_operand (val, NULL_RTX);
3485
3486 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
3487       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
3488         {
3489           /* We do not support FUNCTION_ARG_CALLEE_COPIES here since it can
3490              be viewed as just an efficiency improvement.  */
3491           rtx slot = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
3492           emit_move_insn (slot, val);
3493           val = force_operand (XEXP (slot, 0), NULL_RTX);
3494           mode = Pmode;
3495         }
3496 #endif
3497
3498       argvec[count].value = val;
3499       argvec[count].mode = mode;
3500
3501       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
3502
3503 #ifdef FUNCTION_ARG_PARTIAL_NREGS
3504       argvec[count].partial
3505         = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
3506 #else
3507       argvec[count].partial = 0;
3508 #endif
3509
3510       locate_and_pad_parm (mode, NULL_TREE,
3511 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3512                            1,
3513 #else
3514                            argvec[count].reg != 0,
3515 #endif
3516                            NULL_TREE, &args_size, &argvec[count].offset,
3517                            &argvec[count].size, &alignment_pad);
3518
3519       if (argvec[count].size.var)
3520         abort ();
3521
3522       if (reg_parm_stack_space == 0 && argvec[count].partial)
3523         argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
3524
3525       if (argvec[count].reg == 0 || argvec[count].partial != 0
3526           || reg_parm_stack_space > 0)
3527         args_size.constant += argvec[count].size.constant;
3528
3529       FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
3530     }
3531
3532 #ifdef FINAL_REG_PARM_STACK_SPACE
3533   reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
3534                                                      args_size.var);
3535 #endif
3536   /* If this machine requires an external definition for library
3537      functions, write one out.  */
3538   assemble_external_libcall (fun);
3539
3540   original_args_size = args_size;
3541 #ifdef PREFERRED_STACK_BOUNDARY
3542   args_size.constant = (((args_size.constant
3543                           + stack_pointer_delta
3544                           + STACK_BYTES - 1)
3545                           / STACK_BYTES
3546                           * STACK_BYTES)
3547                          - stack_pointer_delta);
3548 #endif
3549
3550   args_size.constant = MAX (args_size.constant,
3551                             reg_parm_stack_space);
3552
3553 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3554   args_size.constant -= reg_parm_stack_space;
3555 #endif
3556
3557   if (args_size.constant > current_function_outgoing_args_size)
3558     current_function_outgoing_args_size = args_size.constant;
3559
3560   if (ACCUMULATE_OUTGOING_ARGS)
3561     {
3562       /* Since the stack pointer will never be pushed, it is possible for
3563          the evaluation of a parm to clobber something we have already
3564          written to the stack.  Since most function calls on RISC machines
3565          do not use the stack, this is uncommon, but must work correctly.
3566
3567          Therefore, we save any area of the stack that was already written
3568          and that we are using.  Here we set up to do this by making a new
3569          stack usage map from the old one.
3570
3571          Another approach might be to try to reorder the argument
3572          evaluations to avoid this conflicting stack usage.  */
3573
3574       needed = args_size.constant;
3575
3576 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3577       /* Since we will be writing into the entire argument area, the
3578          map must be allocated for its entire size, not just the part that
3579          is the responsibility of the caller.  */
3580       needed += reg_parm_stack_space;
3581 #endif
3582
3583 #ifdef ARGS_GROW_DOWNWARD
3584       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3585                                          needed + 1);
3586 #else
3587       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3588                                          needed);
3589 #endif
3590       stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
3591
3592       if (initial_highest_arg_in_use)
3593         bcopy (initial_stack_usage_map, stack_usage_map,
3594                initial_highest_arg_in_use);
3595
3596       if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
3597         bzero (&stack_usage_map[initial_highest_arg_in_use],
3598                highest_outgoing_arg_in_use - initial_highest_arg_in_use);
3599       needed = 0;
3600
3601       /* The address of the outgoing argument list must not be copied to a
3602          register here, because argblock would be left pointing to the
3603          wrong place after the call to allocate_dynamic_stack_space below.
3604          */
3605
3606       argblock = virtual_outgoing_args_rtx;
3607     }
3608   else
3609     {
3610       if (!PUSH_ARGS)
3611         argblock = push_block (GEN_INT (args_size.constant), 0, 0);
3612     }
3613
3614 #ifdef PREFERRED_STACK_BOUNDARY
3615   /* If we push args individually in reverse order, perform stack alignment
3616      before the first push (the last arg).  */
3617   if (argblock == 0 && PUSH_ARGS_REVERSED)
3618     anti_adjust_stack (GEN_INT (args_size.constant
3619                                 - original_args_size.constant));
3620 #endif
3621
3622   if (PUSH_ARGS_REVERSED)
3623     {
3624       inc = -1;
3625       argnum = nargs - 1;
3626     }
3627   else
3628     {
3629       inc = 1;
3630       argnum = 0;
3631     }
3632
3633 #ifdef REG_PARM_STACK_SPACE
3634   if (ACCUMULATE_OUTGOING_ARGS)
3635     {
3636       /* The argument list is the property of the called routine and it
3637          may clobber it.  If the fixed area has been used for previous
3638          parameters, we must save and restore it.
3639
3640          Here we compute the boundary of the that needs to be saved, if any.  */
3641
3642 #ifdef ARGS_GROW_DOWNWARD
3643       for (count = 0; count < reg_parm_stack_space + 1; count++)
3644 #else
3645       for (count = 0; count < reg_parm_stack_space; count++)
3646 #endif
3647         {
3648           if (count >=  highest_outgoing_arg_in_use
3649               || stack_usage_map[count] == 0)
3650             continue;
3651
3652           if (low_to_save == -1)
3653             low_to_save = count;
3654
3655           high_to_save = count;
3656         }
3657
3658       if (low_to_save >= 0)
3659         {
3660           int num_to_save = high_to_save - low_to_save + 1;
3661           enum machine_mode save_mode
3662             = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
3663           rtx stack_area;
3664
3665           /* If we don't have the required alignment, must do this in BLKmode.  */
3666           if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
3667                                    BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
3668             save_mode = BLKmode;
3669
3670 #ifdef ARGS_GROW_DOWNWARD
3671           stack_area = gen_rtx_MEM (save_mode,
3672                                     memory_address (save_mode,
3673                                                     plus_constant (argblock,
3674                                                                    - high_to_save)));
3675 #else
3676           stack_area = gen_rtx_MEM (save_mode,
3677                                     memory_address (save_mode,
3678                                                     plus_constant (argblock,
3679                                                                    low_to_save)));
3680 #endif
3681           if (save_mode == BLKmode)
3682             {
3683               save_area = assign_stack_temp (BLKmode, num_to_save, 0);
3684               emit_block_move (validize_mem (save_area), stack_area,
3685                                GEN_INT (num_to_save), PARM_BOUNDARY);
3686             }
3687           else
3688             {
3689               save_area = gen_reg_rtx (save_mode);
3690               emit_move_insn (save_area, stack_area);
3691             }
3692         }
3693     }
3694 #endif
3695           
3696   /* Push the args that need to be pushed.  */
3697
3698   /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3699      are to be pushed.  */
3700   for (count = 0; count < nargs; count++, argnum += inc)
3701     {
3702       register enum machine_mode mode = argvec[argnum].mode;
3703       register rtx val = argvec[argnum].value;
3704       rtx reg = argvec[argnum].reg;
3705       int partial = argvec[argnum].partial;
3706       int lower_bound = 0, upper_bound = 0, i;
3707
3708       if (! (reg != 0 && partial == 0))
3709         {
3710           if (ACCUMULATE_OUTGOING_ARGS)
3711             {
3712               /* If this is being stored into a pre-allocated, fixed-size,
3713                  stack area, save any previous data at that location.  */
3714
3715 #ifdef ARGS_GROW_DOWNWARD
3716               /* stack_slot is negative, but we want to index stack_usage_map
3717                  with positive values.  */
3718               upper_bound = -argvec[argnum].offset.constant + 1;
3719               lower_bound = upper_bound - argvec[argnum].size.constant;
3720 #else
3721               lower_bound = argvec[argnum].offset.constant;
3722               upper_bound = lower_bound + argvec[argnum].size.constant;
3723 #endif
3724
3725               for (i = lower_bound; i < upper_bound; i++)
3726                 if (stack_usage_map[i]
3727                     /* Don't store things in the fixed argument area at this
3728                        point; it has already been saved.  */
3729                     && i > reg_parm_stack_space)
3730                   break;
3731
3732               if (i != upper_bound)
3733                 {
3734                   /* We need to make a save area.  See what mode we can make
3735                      it. */
3736                   enum machine_mode save_mode
3737                     = mode_for_size (argvec[argnum].size.constant
3738                                      * BITS_PER_UNIT,
3739                                      MODE_INT, 1);
3740                   rtx stack_area
3741                     = gen_rtx_MEM
3742                       (save_mode,
3743                        memory_address
3744                        (save_mode,
3745                         plus_constant (argblock,
3746                                        argvec[argnum].offset.constant)));
3747                   argvec[argnum].save_area = gen_reg_rtx (save_mode);
3748
3749                   emit_move_insn (argvec[argnum].save_area, stack_area);
3750                 }
3751             }
3752
3753           emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
3754                           argblock, GEN_INT (argvec[argnum].offset.constant),
3755                           reg_parm_stack_space, ARGS_SIZE_RTX (alignment_pad));
3756
3757           /* Now mark the segment we just used.  */
3758           if (ACCUMULATE_OUTGOING_ARGS)
3759             for (i = lower_bound; i < upper_bound; i++)
3760               stack_usage_map[i] = 1;
3761
3762           NO_DEFER_POP;
3763         }
3764     }
3765
3766 #ifdef PREFERRED_STACK_BOUNDARY
3767   /* If we pushed args in forward order, perform stack alignment
3768      after pushing the last arg.  */
3769   if (argblock == 0 && !PUSH_ARGS_REVERSED)
3770     anti_adjust_stack (GEN_INT (args_size.constant
3771                                 - original_args_size.constant));
3772 #endif
3773
3774   if (PUSH_ARGS_REVERSED)
3775     argnum = nargs - 1;
3776   else
3777     argnum = 0;
3778
3779   fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0);
3780
3781   /* Now load any reg parms into their regs.  */
3782
3783   /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3784      are to be pushed.  */
3785   for (count = 0; count < nargs; count++, argnum += inc)
3786     {
3787       register rtx val = argvec[argnum].value;
3788       rtx reg = argvec[argnum].reg;
3789       int partial = argvec[argnum].partial;
3790
3791       /* Handle calls that pass values in multiple non-contiguous
3792          locations.  The PA64 has examples of this for library calls.  */
3793       if (reg != 0 && GET_CODE (reg) == PARALLEL)
3794         emit_group_load (reg, val,
3795                          GET_MODE_SIZE (GET_MODE (val)),
3796                          GET_MODE_ALIGNMENT (GET_MODE (val)));
3797       else if (reg != 0 && partial == 0)
3798         emit_move_insn (reg, val);
3799
3800       NO_DEFER_POP;
3801     }
3802
3803   /* Any regs containing parms remain in use through the call.  */
3804   for (count = 0; count < nargs; count++)
3805     {
3806       rtx reg = argvec[count].reg;
3807       if (reg != 0 && GET_CODE (reg) == PARALLEL)
3808         use_group_regs (&call_fusage, reg);
3809       else if (reg != 0)
3810         use_reg (&call_fusage, reg);
3811     }
3812
3813   /* Pass the function the address in which to return a structure value.  */
3814   if (mem_value != 0 && struct_value_rtx != 0 && ! pcc_struct_value)
3815     {
3816       emit_move_insn (struct_value_rtx,
3817                       force_reg (Pmode,
3818                                  force_operand (XEXP (mem_value, 0),
3819                                                 NULL_RTX)));
3820       if (GET_CODE (struct_value_rtx) == REG)
3821           use_reg (&call_fusage, struct_value_rtx);
3822     }
3823
3824   /* Don't allow popping to be deferred, since then
3825      cse'ing of library calls could delete a call and leave the pop.  */
3826   NO_DEFER_POP;
3827   valreg = (mem_value == 0 && outmode != VOIDmode
3828             ? hard_libcall_value (outmode) : NULL_RTX);
3829
3830 #ifdef PREFERRED_STACK_BOUNDARY
3831   /* Stack must be properly aligned now.  */
3832   if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1))
3833     abort();
3834 #endif
3835
3836   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
3837      will set inhibit_defer_pop to that value.  */
3838   /* The return type is needed to decide how many bytes the function pops.
3839      Signedness plays no role in that, so for simplicity, we pretend it's
3840      always signed.  We also assume that the list of arguments passed has
3841      no impact, so we pretend it is unknown.  */
3842
3843   emit_call_1 (fun, 
3844                get_identifier (XSTR (orgfun, 0)),
3845                build_function_type (outmode == VOIDmode ? void_type_node
3846                                     : type_for_mode (outmode, 0), NULL_TREE),
3847                original_args_size.constant, args_size.constant,
3848                struct_value_size,
3849                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
3850                valreg,
3851                old_inhibit_defer_pop + 1, call_fusage, flags);
3852
3853   /* Now restore inhibit_defer_pop to its actual original value.  */
3854   OK_DEFER_POP;
3855
3856   /* If call is cse'able, make appropriate pair of reg-notes around it.
3857      Test valreg so we don't crash; may safely ignore `const'
3858      if return type is void.  Disable for PARALLEL return values, because
3859      we have no way to move such values into a pseudo register.  */
3860   if ((flags & (ECF_CONST | ECF_PURE))
3861       && valreg != 0 && GET_CODE (valreg) != PARALLEL)
3862     {
3863       rtx note = 0;
3864       rtx temp = gen_reg_rtx (GET_MODE (valreg));
3865       rtx insns;
3866       int i;
3867
3868       /* Construct an "equal form" for the value which mentions all the
3869          arguments in order as well as the function name.  */
3870       for (i = 0; i < nargs; i++)
3871         note = gen_rtx_EXPR_LIST (VOIDmode, argvec[i].value, note);
3872       note = gen_rtx_EXPR_LIST (VOIDmode, fun, note);
3873
3874       insns = get_insns ();
3875       end_sequence ();
3876
3877       if (flags & ECF_PURE)
3878         note = gen_rtx_EXPR_LIST (VOIDmode,
3879            gen_rtx_USE (VOIDmode,
3880                         gen_rtx_MEM (BLKmode,
3881                                      gen_rtx_SCRATCH (VOIDmode))), note);
3882
3883       emit_libcall_block (insns, temp, valreg, note);
3884
3885       valreg = temp;
3886     }
3887   else if (flags & (ECF_CONST | ECF_PURE))
3888     {
3889       /* Otherwise, just write out the sequence without a note.  */
3890       rtx insns = get_insns ();
3891
3892       end_sequence ();
3893       emit_insns (insns);
3894     }
3895   pop_temp_slots ();
3896
3897   /* Copy the value to the right place.  */
3898   if (outmode != VOIDmode && retval)
3899     {
3900       if (mem_value)
3901         {
3902           if (value == 0)
3903             value = mem_value;
3904           if (value != mem_value)
3905             emit_move_insn (value, mem_value);
3906         }
3907       else if (value != 0)
3908         emit_move_insn (value, hard_libcall_value (outmode));
3909       else
3910         value = hard_libcall_value (outmode);
3911     }
3912
3913   if (ACCUMULATE_OUTGOING_ARGS)
3914     {
3915 #ifdef REG_PARM_STACK_SPACE
3916       if (save_area)
3917         {
3918           enum machine_mode save_mode = GET_MODE (save_area);
3919 #ifdef ARGS_GROW_DOWNWARD
3920           rtx stack_area
3921             = gen_rtx_MEM (save_mode,
3922                            memory_address (save_mode,
3923                                            plus_constant (argblock,
3924                                                           - high_to_save)));
3925 #else
3926           rtx stack_area
3927             = gen_rtx_MEM (save_mode,
3928                            memory_address (save_mode,
3929                                            plus_constant (argblock, low_to_save)));
3930 #endif
3931           if (save_mode != BLKmode)
3932             emit_move_insn (stack_area, save_area);
3933           else
3934             emit_block_move (stack_area, validize_mem (save_area),
3935                              GEN_INT (high_to_save - low_to_save + 1),
3936                              PARM_BOUNDARY);
3937         }
3938 #endif
3939               
3940       /* If we saved any argument areas, restore them.  */
3941       for (count = 0; count < nargs; count++)
3942         if (argvec[count].save_area)
3943           {
3944             enum machine_mode save_mode = GET_MODE (argvec[count].save_area);
3945             rtx stack_area
3946               = gen_rtx_MEM (save_mode,
3947                              memory_address
3948                              (save_mode,
3949                               plus_constant (argblock,
3950                                              argvec[count].offset.constant)));
3951
3952             emit_move_insn (stack_area, argvec[count].save_area);
3953           }
3954
3955       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3956       stack_usage_map = initial_stack_usage_map;
3957     }
3958
3959   return value;
3960
3961 }
3962 \f
3963 /* Output a library call to function FUN (a SYMBOL_REF rtx)
3964    (emitting the queue unless NO_QUEUE is nonzero),
3965    for a value of mode OUTMODE,
3966    with NARGS different arguments, passed as alternating rtx values
3967    and machine_modes to convert them to.
3968    The rtx values should have been passed through protect_from_queue already.
3969
3970    FN_TYPE will is zero for `normal' calls, one for `const' calls, wich
3971    which will be enclosed in REG_LIBCALL/REG_RETVAL notes and two for `pure'
3972    calls, that are handled like `const' calls with extra
3973    (use (memory (scratch)).  */
3974
3975 void
3976 emit_library_call VPARAMS((rtx orgfun, int fn_type, enum machine_mode outmode,
3977                            int nargs, ...))
3978 {
3979 #ifndef ANSI_PROTOTYPES
3980   rtx orgfun;
3981   int fn_type;
3982   enum machine_mode outmode;
3983   int nargs;
3984 #endif
3985   va_list p;
3986
3987   VA_START (p, nargs);
3988
3989 #ifndef ANSI_PROTOTYPES
3990   orgfun = va_arg (p, rtx);
3991   fn_type = va_arg (p, int);
3992   outmode = va_arg (p, enum machine_mode);
3993   nargs = va_arg (p, int);
3994 #endif
3995
3996   emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p);
3997
3998   va_end (p);
3999 }
4000 \f
4001 /* Like emit_library_call except that an extra argument, VALUE,
4002    comes second and says where to store the result.
4003    (If VALUE is zero, this function chooses a convenient way
4004    to return the value.
4005
4006    This function returns an rtx for where the value is to be found.
4007    If VALUE is nonzero, VALUE is returned.  */
4008
4009 rtx
4010 emit_library_call_value VPARAMS((rtx orgfun, rtx value, int fn_type,
4011                                  enum machine_mode outmode, int nargs, ...))
4012 {
4013 #ifndef ANSI_PROTOTYPES
4014   rtx orgfun;
4015   rtx value;
4016   int fn_type;
4017   enum machine_mode outmode;
4018   int nargs;
4019 #endif
4020   va_list p;
4021
4022   VA_START (p, nargs);
4023
4024 #ifndef ANSI_PROTOTYPES
4025   orgfun = va_arg (p, rtx);
4026   value = va_arg (p, rtx);
4027   fn_type = va_arg (p, int);
4028   outmode = va_arg (p, enum machine_mode);
4029   nargs = va_arg (p, int);
4030 #endif
4031
4032   value = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode, nargs, p);
4033
4034   va_end (p);
4035
4036   return value;
4037 }
4038 \f
4039 #if 0
4040 /* Return an rtx which represents a suitable home on the stack
4041    given TYPE, the type of the argument looking for a home.
4042    This is called only for BLKmode arguments.
4043
4044    SIZE is the size needed for this target.
4045    ARGS_ADDR is the address of the bottom of the argument block for this call.
4046    OFFSET describes this parameter's offset into ARGS_ADDR.  It is meaningless
4047    if this machine uses push insns.  */
4048
4049 static rtx
4050 target_for_arg (type, size, args_addr, offset)
4051      tree type;
4052      rtx size;
4053      rtx args_addr;
4054      struct args_size offset;
4055 {
4056   rtx target;
4057   rtx offset_rtx = ARGS_SIZE_RTX (offset);
4058
4059   /* We do not call memory_address if possible,
4060      because we want to address as close to the stack
4061      as possible.  For non-variable sized arguments,
4062      this will be stack-pointer relative addressing.  */
4063   if (GET_CODE (offset_rtx) == CONST_INT)
4064     target = plus_constant (args_addr, INTVAL (offset_rtx));
4065   else
4066     {
4067       /* I have no idea how to guarantee that this
4068          will work in the presence of register parameters.  */
4069       target = gen_rtx_PLUS (Pmode, args_addr, offset_rtx);
4070       target = memory_address (QImode, target);
4071     }
4072
4073   return gen_rtx_MEM (BLKmode, target);
4074 }
4075 #endif
4076 \f
4077 /* Store a single argument for a function call
4078    into the register or memory area where it must be passed.
4079    *ARG describes the argument value and where to pass it.
4080
4081    ARGBLOCK is the address of the stack-block for all the arguments,
4082    or 0 on a machine where arguments are pushed individually.
4083
4084    MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
4085    so must be careful about how the stack is used. 
4086
4087    VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
4088    argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
4089    that we need not worry about saving and restoring the stack.
4090
4091    FNDECL is the declaration of the function we are calling.  */
4092
4093 static void
4094 store_one_arg (arg, argblock, flags, variable_size,
4095                reg_parm_stack_space)
4096      struct arg_data *arg;
4097      rtx argblock;
4098      int flags;
4099      int variable_size ATTRIBUTE_UNUSED;
4100      int reg_parm_stack_space;
4101 {
4102   register tree pval = arg->tree_value;
4103   rtx reg = 0;
4104   int partial = 0;
4105   int used = 0;
4106   int i, lower_bound = 0, upper_bound = 0;
4107
4108   if (TREE_CODE (pval) == ERROR_MARK)
4109     return;
4110
4111   /* Push a new temporary level for any temporaries we make for
4112      this argument.  */
4113   push_temp_slots ();
4114
4115   if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL))
4116     {
4117       /* If this is being stored into a pre-allocated, fixed-size, stack area,
4118          save any previous data at that location.  */
4119       if (argblock && ! variable_size && arg->stack)
4120         {
4121 #ifdef ARGS_GROW_DOWNWARD
4122           /* stack_slot is negative, but we want to index stack_usage_map
4123              with positive values.  */
4124           if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4125             upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
4126           else
4127             upper_bound = 0;
4128
4129           lower_bound = upper_bound - arg->size.constant;
4130 #else
4131           if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4132             lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
4133           else
4134             lower_bound = 0;
4135
4136           upper_bound = lower_bound + arg->size.constant;
4137 #endif
4138
4139           for (i = lower_bound; i < upper_bound; i++)
4140             if (stack_usage_map[i]
4141                 /* Don't store things in the fixed argument area at this point;
4142                    it has already been saved.  */
4143                 && i > reg_parm_stack_space)
4144               break;
4145
4146           if (i != upper_bound)
4147             {
4148               /* We need to make a save area.  See what mode we can make it.  */
4149               enum machine_mode save_mode
4150                 = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
4151               rtx stack_area
4152                 = gen_rtx_MEM (save_mode,
4153                                memory_address (save_mode,
4154                                                XEXP (arg->stack_slot, 0)));
4155
4156               if (save_mode == BLKmode)
4157                 {
4158                   arg->save_area = assign_stack_temp (BLKmode,
4159                                                       arg->size.constant, 0);
4160                   MEM_SET_IN_STRUCT_P (arg->save_area,
4161                                        AGGREGATE_TYPE_P (TREE_TYPE
4162                                                          (arg->tree_value))); 
4163                   preserve_temp_slots (arg->save_area);
4164                   emit_block_move (validize_mem (arg->save_area), stack_area,
4165                                    GEN_INT (arg->size.constant),
4166                                    PARM_BOUNDARY);
4167                 }
4168               else
4169                 {
4170                   arg->save_area = gen_reg_rtx (save_mode);
4171                   emit_move_insn (arg->save_area, stack_area);
4172                 }
4173             }
4174         }
4175       /* Now that we have saved any slots that will be overwritten by this
4176          store, mark all slots this store will use.  We must do this before
4177          we actually expand the argument since the expansion itself may
4178          trigger library calls which might need to use the same stack slot.  */
4179       if (argblock && ! variable_size && arg->stack)
4180         for (i = lower_bound; i < upper_bound; i++)
4181           stack_usage_map[i] = 1;
4182     }
4183
4184   /* If this isn't going to be placed on both the stack and in registers,
4185      set up the register and number of words.  */
4186   if (! arg->pass_on_stack)
4187     reg = arg->reg, partial = arg->partial;
4188
4189   if (reg != 0 && partial == 0)
4190     /* Being passed entirely in a register.  We shouldn't be called in
4191        this case.   */
4192     abort ();
4193
4194   /* If this arg needs special alignment, don't load the registers
4195      here.  */
4196   if (arg->n_aligned_regs != 0)
4197     reg = 0;
4198   
4199   /* If this is being passed partially in a register, we can't evaluate
4200      it directly into its stack slot.  Otherwise, we can.  */
4201   if (arg->value == 0)
4202     {
4203       /* stack_arg_under_construction is nonzero if a function argument is
4204          being evaluated directly into the outgoing argument list and
4205          expand_call must take special action to preserve the argument list
4206          if it is called recursively.
4207
4208          For scalar function arguments stack_usage_map is sufficient to
4209          determine which stack slots must be saved and restored.  Scalar
4210          arguments in general have pass_on_stack == 0.
4211
4212          If this argument is initialized by a function which takes the
4213          address of the argument (a C++ constructor or a C function
4214          returning a BLKmode structure), then stack_usage_map is
4215          insufficient and expand_call must push the stack around the
4216          function call.  Such arguments have pass_on_stack == 1.
4217
4218          Note that it is always safe to set stack_arg_under_construction,
4219          but this generates suboptimal code if set when not needed.  */
4220
4221       if (arg->pass_on_stack)
4222         stack_arg_under_construction++;
4223
4224       arg->value = expand_expr (pval,
4225                                 (partial
4226                                  || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
4227                                 ? NULL_RTX : arg->stack,
4228                                 VOIDmode, 0);
4229
4230       /* If we are promoting object (or for any other reason) the mode
4231          doesn't agree, convert the mode.  */
4232
4233       if (arg->mode != TYPE_MODE (TREE_TYPE (pval)))
4234         arg->value = convert_modes (arg->mode, TYPE_MODE (TREE_TYPE (pval)),
4235                                     arg->value, arg->unsignedp);
4236
4237       if (arg->pass_on_stack)
4238         stack_arg_under_construction--;
4239     }
4240
4241   /* Don't allow anything left on stack from computation
4242      of argument to alloca.  */
4243   if (flags & ECF_MAY_BE_ALLOCA)
4244     do_pending_stack_adjust ();
4245
4246   if (arg->value == arg->stack)
4247     {
4248       /* If the value is already in the stack slot, we are done.  */
4249       if (current_function_check_memory_usage && GET_CODE (arg->stack) == MEM)
4250         {
4251           emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
4252                              XEXP (arg->stack, 0), Pmode, 
4253                              ARGS_SIZE_RTX (arg->size),
4254                              TYPE_MODE (sizetype),
4255                              GEN_INT (MEMORY_USE_RW),
4256                              TYPE_MODE (integer_type_node));
4257         }
4258     }
4259   else if (arg->mode != BLKmode)
4260     {
4261       register int size;
4262
4263       /* Argument is a scalar, not entirely passed in registers.
4264          (If part is passed in registers, arg->partial says how much
4265          and emit_push_insn will take care of putting it there.)
4266          
4267          Push it, and if its size is less than the
4268          amount of space allocated to it,
4269          also bump stack pointer by the additional space.
4270          Note that in C the default argument promotions
4271          will prevent such mismatches.  */
4272
4273       size = GET_MODE_SIZE (arg->mode);
4274       /* Compute how much space the push instruction will push.
4275          On many machines, pushing a byte will advance the stack
4276          pointer by a halfword.  */
4277 #ifdef PUSH_ROUNDING
4278       size = PUSH_ROUNDING (size);
4279 #endif
4280       used = size;
4281
4282       /* Compute how much space the argument should get:
4283          round up to a multiple of the alignment for arguments.  */
4284       if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
4285         used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
4286                  / (PARM_BOUNDARY / BITS_PER_UNIT))
4287                 * (PARM_BOUNDARY / BITS_PER_UNIT));
4288
4289       /* This isn't already where we want it on the stack, so put it there.
4290          This can either be done with push or copy insns.  */
4291       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX, 0,
4292                       partial, reg, used - size, argblock,
4293                       ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space,
4294                       ARGS_SIZE_RTX (arg->alignment_pad));
4295     }
4296   else
4297     {
4298       /* BLKmode, at least partly to be pushed.  */
4299
4300       register int excess;
4301       rtx size_rtx;
4302
4303       /* Pushing a nonscalar.
4304          If part is passed in registers, PARTIAL says how much
4305          and emit_push_insn will take care of putting it there.  */
4306
4307       /* Round its size up to a multiple
4308          of the allocation unit for arguments.  */
4309
4310       if (arg->size.var != 0)
4311         {
4312           excess = 0;
4313           size_rtx = ARGS_SIZE_RTX (arg->size);
4314         }
4315       else
4316         {
4317           /* PUSH_ROUNDING has no effect on us, because
4318              emit_push_insn for BLKmode is careful to avoid it.  */
4319           excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
4320                     + partial * UNITS_PER_WORD);
4321           size_rtx = expr_size (pval);
4322         }
4323
4324       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
4325                       TYPE_ALIGN (TREE_TYPE (pval)), partial, reg, excess,
4326                       argblock, ARGS_SIZE_RTX (arg->offset),
4327                       reg_parm_stack_space,
4328                       ARGS_SIZE_RTX (arg->alignment_pad));
4329     }
4330
4331
4332   /* Unless this is a partially-in-register argument, the argument is now
4333      in the stack. 
4334
4335      ??? Note that this can change arg->value from arg->stack to
4336      arg->stack_slot and it matters when they are not the same.
4337      It isn't totally clear that this is correct in all cases.  */
4338   if (partial == 0)
4339     arg->value = arg->stack_slot;
4340
4341   /* Once we have pushed something, pops can't safely
4342      be deferred during the rest of the arguments.  */
4343   NO_DEFER_POP;
4344
4345   /* ANSI doesn't require a sequence point here,
4346      but PCC has one, so this will avoid some problems.  */
4347   emit_queue ();
4348
4349   /* Free any temporary slots made in processing this argument.  Show
4350      that we might have taken the address of something and pushed that
4351      as an operand.  */
4352   preserve_temp_slots (NULL_RTX);
4353   free_temp_slots ();
4354   pop_temp_slots ();
4355 }