OSDN Git Service

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