OSDN Git Service

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