OSDN Git Service

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