OSDN Git Service

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