OSDN Git Service

(fold, COND_EXPR case): All simplified results
[pf3gnuchains/gcc-fork.git] / gcc / calls.c
1 /* Convert function calls to rtl insns, for GNU C compiler.
2    Copyright (C) 1989, 1992, 1993 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include "config.h"
21 #include "rtl.h"
22 #include "tree.h"
23 #include "flags.h"
24 #include "expr.h"
25 #include "gvarargs.h"
26 #include "insn-flags.h"
27
28 /* Decide whether a function's arguments should be processed
29    from first to last or from last to first.
30
31    They should if the stack and args grow in opposite directions, but
32    only if we have push insns.  */
33
34 #ifdef PUSH_ROUNDING
35
36 #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
37 #define PUSH_ARGS_REVERSED      /* If it's last to first */
38 #endif
39
40 #endif
41
42 /* Like STACK_BOUNDARY but in units of bytes, not bits.  */
43 #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT)
44
45 /* Data structure and subroutines used within expand_call.  */
46
47 struct arg_data
48 {
49   /* Tree node for this argument.  */
50   tree tree_value;
51   /* Mode for value; TYPE_MODE unless promoted.  */
52   enum machine_mode mode;
53   /* Current RTL value for argument, or 0 if it isn't precomputed.  */
54   rtx value;
55   /* Initially-compute RTL value for argument; only for const functions.  */
56   rtx initial_value;
57   /* Register to pass this argument in, 0 if passed on stack, or an
58      EXPR_LIST if the arg is to be copied into multiple different
59      registers.  */
60   rtx reg;
61   /* If REG was promoted from the actual mode of the argument expression,
62      indicates whether the promotion is sign- or zero-extended.  */
63   int unsignedp;
64   /* Number of registers to use.  0 means put the whole arg in registers.
65      Also 0 if not passed in registers.  */
66   int partial;
67   /* Non-zero if argument must be passed on stack.
68      Note that some arguments may be passed on the stack
69      even though pass_on_stack is zero, just because FUNCTION_ARG says so.
70      pass_on_stack identifies arguments that *cannot* go in registers.  */
71   int pass_on_stack;
72   /* Offset of this argument from beginning of stack-args.  */
73   struct args_size offset;
74   /* Similar, but offset to the start of the stack slot.  Different from
75      OFFSET if this arg pads downward.  */
76   struct args_size slot_offset;
77   /* Size of this argument on the stack, rounded up for any padding it gets,
78      parts of the argument passed in registers do not count.
79      If REG_PARM_STACK_SPACE is defined, then register parms
80      are counted here as well.  */
81   struct args_size size;
82   /* Location on the stack at which parameter should be stored.  The store
83      has already been done if STACK == VALUE.  */
84   rtx stack;
85   /* Location on the stack of the start of this argument slot.  This can
86      differ from STACK if this arg pads downward.  This location is known
87      to be aligned to FUNCTION_ARG_BOUNDARY.  */
88   rtx stack_slot;
89 #ifdef ACCUMULATE_OUTGOING_ARGS
90   /* Place that this stack area has been saved, if needed.  */
91   rtx save_area;
92 #endif
93 #ifdef STRICT_ALIGNMENT
94   /* If an argument's alignment does not permit direct copying into registers,
95      copy in smaller-sized pieces into pseudos.  These are stored in a
96      block pointed to by this field.  The next field says how many
97      word-sized pseudos we made.  */
98   rtx *aligned_regs;
99   int n_aligned_regs;
100 #endif
101 };
102
103 #ifdef ACCUMULATE_OUTGOING_ARGS
104 /* A vector of one char per byte of stack space.  A byte if non-zero if
105    the corresponding stack location has been used.
106    This vector is used to prevent a function call within an argument from
107    clobbering any stack already set up.  */
108 static char *stack_usage_map;
109
110 /* Size of STACK_USAGE_MAP.  */
111 static int highest_outgoing_arg_in_use;
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 #endif
120
121 static int calls_function       PROTO((tree, int));
122 static int calls_function_1     PROTO((tree, int));
123 static void emit_call_1         PROTO((rtx, tree, int, int, rtx, rtx, int,
124                                        rtx, int));
125 static void store_one_arg       PROTO ((struct arg_data *, rtx, int, int,
126                                         tree, int));
127 \f
128 /* If WHICH is 1, return 1 if EXP contains a call to the built-in function
129    `alloca'.
130
131    If WHICH is 0, return 1 if EXP contains a call to any function.
132    Actually, we only need return 1 if evaluating EXP would require pushing
133    arguments on the stack, but that is too difficult to compute, so we just
134    assume any function call might require the stack.  */
135
136 static tree calls_function_save_exprs;
137
138 static int
139 calls_function (exp, which)
140      tree exp;
141      int which;
142 {
143   int val;
144   calls_function_save_exprs = 0;
145   val = calls_function_1 (exp, which);
146   calls_function_save_exprs = 0;
147   return val;
148 }
149
150 static int
151 calls_function_1 (exp, which)
152      tree exp;
153      int which;
154 {
155   register int i;
156   int type = TREE_CODE_CLASS (TREE_CODE (exp));
157   int length = tree_code_length[(int) TREE_CODE (exp)];
158
159   /* Only expressions and references can contain calls.  */
160
161   if (type != 'e' && type != '<' && type != '1' && type != '2' && type != 'r'
162       && type != 'b')
163     return 0;
164
165   switch (TREE_CODE (exp))
166     {
167     case CALL_EXPR:
168       if (which == 0)
169         return 1;
170       else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
171                && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
172                    == FUNCTION_DECL)
173                && DECL_BUILT_IN (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
174                && (DECL_FUNCTION_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
175                    == BUILT_IN_ALLOCA))
176         return 1;
177
178       /* Third operand is RTL.  */
179       length = 2;
180       break;
181
182     case SAVE_EXPR:
183       if (SAVE_EXPR_RTL (exp) != 0)
184         return 0;
185       if (value_member (exp, calls_function_save_exprs))
186         return 0;
187       calls_function_save_exprs = tree_cons (NULL_TREE, exp,
188                                              calls_function_save_exprs);
189       return (TREE_OPERAND (exp, 0) != 0
190               && calls_function_1 (TREE_OPERAND (exp, 0), which));
191
192     case BLOCK:
193       {
194         register tree local;
195
196         for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local))
197           if (DECL_INITIAL (local) != 0
198               && calls_function_1 (DECL_INITIAL (local), which))
199             return 1;
200       }
201       {
202         register tree subblock;
203
204         for (subblock = BLOCK_SUBBLOCKS (exp);
205              subblock;
206              subblock = TREE_CHAIN (subblock))
207           if (calls_function_1 (subblock, which))
208             return 1;
209       }
210       return 0;
211
212     case METHOD_CALL_EXPR:
213       length = 3;
214       break;
215
216     case WITH_CLEANUP_EXPR:
217       length = 1;
218       break;
219
220     case RTL_EXPR:
221       return 0;
222     }
223
224   for (i = 0; i < length; i++)
225     if (TREE_OPERAND (exp, i) != 0
226         && calls_function_1 (TREE_OPERAND (exp, i), which))
227       return 1;
228
229   return 0;
230 }
231 \f
232 /* Force FUNEXP into a form suitable for the address of a CALL,
233    and return that as an rtx.  Also load the static chain register
234    if FNDECL is a nested function.
235
236    USE_INSNS points to a variable holding a chain of USE insns
237    to which a USE of the static chain
238    register should be added, if required.  */
239
240 rtx
241 prepare_call_address (funexp, fndecl, use_insns)
242      rtx funexp;
243      tree fndecl;
244      rtx *use_insns;
245 {
246   rtx static_chain_value = 0;
247
248   funexp = protect_from_queue (funexp, 0);
249
250   if (fndecl != 0)
251     /* Get possible static chain value for nested function in C. */
252     static_chain_value = lookup_static_chain (fndecl);
253
254   /* Make a valid memory address and copy constants thru pseudo-regs,
255      but not for a constant address if -fno-function-cse.  */
256   if (GET_CODE (funexp) != SYMBOL_REF)
257     funexp = memory_address (FUNCTION_MODE, funexp);
258   else
259     {
260 #ifndef NO_FUNCTION_CSE
261       if (optimize && ! flag_no_function_cse)
262 #ifdef NO_RECURSIVE_FUNCTION_CSE
263         if (fndecl != current_function_decl)
264 #endif
265           funexp = force_reg (Pmode, funexp);
266 #endif
267     }
268
269   if (static_chain_value != 0)
270     {
271       emit_move_insn (static_chain_rtx, static_chain_value);
272
273       /* Put the USE insn in the chain we were passed.  It will later be
274          output immediately in front of the CALL insn.  */
275       push_to_sequence (*use_insns);
276       emit_insn (gen_rtx (USE, VOIDmode, static_chain_rtx));
277       *use_insns = get_insns ();
278       end_sequence ();
279     }
280
281   return funexp;
282 }
283
284 /* Generate instructions to call function FUNEXP,
285    and optionally pop the results.
286    The CALL_INSN is the first insn generated.
287
288    FUNTYPE is the data type of the function, or, for a library call,
289    the identifier for the name of the call.  This is given to the
290    macro RETURN_POPS_ARGS to determine whether this function pops its own args.
291
292    STACK_SIZE is the number of bytes of arguments on the stack,
293    rounded up to STACK_BOUNDARY; zero if the size is variable.
294    This is both to put into the call insn and
295    to generate explicit popping code if necessary.
296
297    STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
298    It is zero if this call doesn't want a structure value.
299
300    NEXT_ARG_REG is the rtx that results from executing
301      FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
302    just after all the args have had their registers assigned.
303    This could be whatever you like, but normally it is the first
304    arg-register beyond those used for args in this call,
305    or 0 if all the arg-registers are used in this call.
306    It is passed on to `gen_call' so you can put this info in the call insn.
307
308    VALREG is a hard register in which a value is returned,
309    or 0 if the call does not return a value.
310
311    OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
312    the args to this call were processed.
313    We restore `inhibit_defer_pop' to that value.
314
315    USE_INSNS is a chain of USE insns to be emitted immediately before
316    the actual CALL insn.
317
318    IS_CONST is true if this is a `const' call.  */
319
320 static void
321 emit_call_1 (funexp, funtype, stack_size, struct_value_size, next_arg_reg,
322              valreg, old_inhibit_defer_pop, use_insns, is_const)
323      rtx funexp;
324      tree funtype;
325      int stack_size;
326      int struct_value_size;
327      rtx next_arg_reg;
328      rtx valreg;
329      int old_inhibit_defer_pop;
330      rtx use_insns;
331      int is_const;
332 {
333   rtx stack_size_rtx = GEN_INT (stack_size);
334   rtx struct_value_size_rtx = GEN_INT (struct_value_size);
335   rtx call_insn;
336   int already_popped = 0;
337
338   /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
339      and we don't want to load it into a register as an optimization,
340      because prepare_call_address already did it if it should be done.  */
341   if (GET_CODE (funexp) != SYMBOL_REF)
342     funexp = memory_address (FUNCTION_MODE, funexp);
343
344 #ifndef ACCUMULATE_OUTGOING_ARGS
345 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
346   if (HAVE_call_pop && HAVE_call_value_pop
347       && (RETURN_POPS_ARGS (funtype, stack_size) > 0 || stack_size == 0))
348     {
349       rtx n_pop = GEN_INT (RETURN_POPS_ARGS (funtype, stack_size));
350       rtx pat;
351
352       /* If this subroutine pops its own args, record that in the call insn
353          if possible, for the sake of frame pointer elimination.  */
354       if (valreg)
355         pat = gen_call_value_pop (valreg,
356                                   gen_rtx (MEM, FUNCTION_MODE, funexp),
357                                   stack_size_rtx, next_arg_reg, n_pop);
358       else
359         pat = gen_call_pop (gen_rtx (MEM, FUNCTION_MODE, funexp),
360                             stack_size_rtx, next_arg_reg, n_pop);
361
362       emit_call_insn (pat);
363       already_popped = 1;
364     }
365   else
366 #endif
367 #endif
368
369 #if defined (HAVE_call) && defined (HAVE_call_value)
370   if (HAVE_call && HAVE_call_value)
371     {
372       if (valreg)
373         emit_call_insn (gen_call_value (valreg,
374                                         gen_rtx (MEM, FUNCTION_MODE, funexp),
375                                         stack_size_rtx, next_arg_reg,
376                                         NULL_RTX));
377       else
378         emit_call_insn (gen_call (gen_rtx (MEM, FUNCTION_MODE, funexp),
379                                   stack_size_rtx, next_arg_reg,
380                                   struct_value_size_rtx));
381     }
382   else
383 #endif
384     abort ();
385
386   /* Find the CALL insn we just emitted and write the USE insns before it.  */
387   for (call_insn = get_last_insn ();
388        call_insn && GET_CODE (call_insn) != CALL_INSN;
389        call_insn = PREV_INSN (call_insn))
390     ;
391
392   if (! call_insn)
393     abort ();
394
395   /* Put the USE insns before the CALL.  */
396   emit_insns_before (use_insns, call_insn);
397
398   /* If this is a const call, then set the insn's unchanging bit.  */
399   if (is_const)
400     CONST_CALL_P (call_insn) = 1;
401
402   /* Restore this now, so that we do defer pops for this call's args
403      if the context of the call as a whole permits.  */
404   inhibit_defer_pop = old_inhibit_defer_pop;
405
406 #ifndef ACCUMULATE_OUTGOING_ARGS
407   /* If returning from the subroutine does not automatically pop the args,
408      we need an instruction to pop them sooner or later.
409      Perhaps do it now; perhaps just record how much space to pop later.
410
411      If returning from the subroutine does pop the args, indicate that the
412      stack pointer will be changed.  */
413
414   if (stack_size != 0 && RETURN_POPS_ARGS (funtype, stack_size) > 0)
415     {
416       if (!already_popped)
417         emit_insn (gen_rtx (CLOBBER, VOIDmode, stack_pointer_rtx));
418       stack_size -= RETURN_POPS_ARGS (funtype, stack_size);
419       stack_size_rtx = GEN_INT (stack_size);
420     }
421
422   if (stack_size != 0)
423     {
424       if (flag_defer_pop && inhibit_defer_pop == 0 && !is_const)
425         pending_stack_adjust += stack_size;
426       else
427         adjust_stack (stack_size_rtx);
428     }
429 #endif
430 }
431
432 /* Generate all the code for a function call
433    and return an rtx for its value.
434    Store the value in TARGET (specified as an rtx) if convenient.
435    If the value is stored in TARGET then TARGET is returned.
436    If IGNORE is nonzero, then we ignore the value of the function call.  */
437
438 rtx
439 expand_call (exp, target, ignore)
440      tree exp;
441      rtx target;
442      int ignore;
443 {
444   /* List of actual parameters.  */
445   tree actparms = TREE_OPERAND (exp, 1);
446   /* RTX for the function to be called.  */
447   rtx funexp;
448   /* Tree node for the function to be called (not the address!).  */
449   tree funtree;
450   /* Data type of the function.  */
451   tree funtype;
452   /* Declaration of the function being called,
453      or 0 if the function is computed (not known by name).  */
454   tree fndecl = 0;
455   char *name = 0;
456
457   /* Register in which non-BLKmode value will be returned,
458      or 0 if no value or if value is BLKmode.  */
459   rtx valreg;
460   /* Address where we should return a BLKmode value;
461      0 if value not BLKmode.  */
462   rtx structure_value_addr = 0;
463   /* Nonzero if that address is being passed by treating it as
464      an extra, implicit first parameter.  Otherwise,
465      it is passed by being copied directly into struct_value_rtx.  */
466   int structure_value_addr_parm = 0;
467   /* Size of aggregate value wanted, or zero if none wanted
468      or if we are using the non-reentrant PCC calling convention
469      or expecting the value in registers.  */
470   int struct_value_size = 0;
471   /* Nonzero if called function returns an aggregate in memory PCC style,
472      by returning the address of where to find it.  */
473   int pcc_struct_value = 0;
474
475   /* Number of actual parameters in this call, including struct value addr.  */
476   int num_actuals;
477   /* Number of named args.  Args after this are anonymous ones
478      and they must all go on the stack.  */
479   int n_named_args;
480   /* Count arg position in order args appear.  */
481   int argpos;
482
483   /* Vector of information about each argument.
484      Arguments are numbered in the order they will be pushed,
485      not the order they are written.  */
486   struct arg_data *args;
487
488   /* Total size in bytes of all the stack-parms scanned so far.  */
489   struct args_size args_size;
490   /* Size of arguments before any adjustments (such as rounding).  */
491   struct args_size original_args_size;
492   /* Data on reg parms scanned so far.  */
493   CUMULATIVE_ARGS args_so_far;
494   /* Nonzero if a reg parm has been scanned.  */
495   int reg_parm_seen;
496   /* Nonzero if this is an indirect function call.  */
497   int current_call_is_indirect = 0;
498
499   /* Nonzero if we must avoid push-insns in the args for this call. 
500      If stack space is allocated for register parameters, but not by the
501      caller, then it is preallocated in the fixed part of the stack frame.
502      So the entire argument block must then be preallocated (i.e., we
503      ignore PUSH_ROUNDING in that case).  */
504
505 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
506   int must_preallocate = 1;
507 #else
508 #ifdef PUSH_ROUNDING
509   int must_preallocate = 0;
510 #else
511   int must_preallocate = 1;
512 #endif
513 #endif
514
515   /* Size of the stack reserved for parameter registers.  */
516   int reg_parm_stack_space = 0;
517
518   /* 1 if scanning parms front to back, -1 if scanning back to front.  */
519   int inc;
520   /* Address of space preallocated for stack parms
521      (on machines that lack push insns), or 0 if space not preallocated.  */
522   rtx argblock = 0;
523
524   /* Nonzero if it is plausible that this is a call to alloca.  */
525   int may_be_alloca;
526   /* Nonzero if this is a call to setjmp or a related function.  */
527   int returns_twice;
528   /* Nonzero if this is a call to `longjmp'.  */
529   int is_longjmp;
530   /* Nonzero if this is a call to an inline function.  */
531   int is_integrable = 0;
532   /* Nonzero if this is a call to a `const' function.
533      Note that only explicitly named functions are handled as `const' here.  */
534   int is_const = 0;
535   /* Nonzero if this is a call to a `volatile' function.  */
536   int is_volatile = 0;
537 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
538   /* Define the boundary of the register parm stack space that needs to be
539      save, if any.  */
540   int low_to_save = -1, high_to_save;
541   rtx save_area = 0;            /* Place that it is saved */
542 #endif
543
544 #ifdef ACCUMULATE_OUTGOING_ARGS
545   int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
546   char *initial_stack_usage_map = stack_usage_map;
547 #endif
548
549   rtx old_stack_level = 0;
550   int old_pending_adj;
551   int old_stack_arg_under_construction;
552   int old_inhibit_defer_pop = inhibit_defer_pop;
553   tree old_cleanups = cleanups_this_call;
554
555   rtx use_insns = 0;
556
557   register tree p;
558   register int i, j;
559
560   /* See if we can find a DECL-node for the actual function.
561      As a result, decide whether this is a call to an integrable function.  */
562
563   p = TREE_OPERAND (exp, 0);
564   if (TREE_CODE (p) == ADDR_EXPR)
565     {
566       fndecl = TREE_OPERAND (p, 0);
567       if (TREE_CODE (fndecl) != FUNCTION_DECL)
568         {
569           /* May still be a `const' function if it is
570              a call through a pointer-to-const.
571              But we don't handle that.  */
572           fndecl = 0;
573         }
574       else
575         {
576           if (!flag_no_inline
577               && fndecl != current_function_decl
578               && DECL_SAVED_INSNS (fndecl))
579             is_integrable = 1;
580           else if (! TREE_ADDRESSABLE (fndecl))
581             {
582               /* In case this function later becomes inlinable,
583                  record that there was already a non-inline call to it.
584
585                  Use abstraction instead of setting TREE_ADDRESSABLE
586                  directly.  */
587               if (DECL_INLINE (fndecl) && extra_warnings && warn_inline
588                   && !flag_no_inline)
589                 warning_with_decl (fndecl, "can't inline call to `%s' which was declared inline");
590               mark_addressable (fndecl);
591             }
592
593           if (TREE_READONLY (fndecl) && ! TREE_THIS_VOLATILE (fndecl)
594               && TYPE_MODE (TREE_TYPE (exp)) != VOIDmode)
595             is_const = 1;
596         }
597     }
598
599   is_volatile = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (p)));
600
601 #ifdef REG_PARM_STACK_SPACE
602 #ifdef MAYBE_REG_PARM_STACK_SPACE
603   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
604 #else
605   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
606 #endif
607 #endif
608
609   /* Warn if this value is an aggregate type,
610      regardless of which calling convention we are using for it.  */
611   if (warn_aggregate_return
612       && (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
613           || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
614           || TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE
615           || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE))
616     warning ("function call has aggregate value");
617
618   /* Set up a place to return a structure.  */
619
620   /* Cater to broken compilers.  */
621   if (aggregate_value_p (exp))
622     {
623       /* This call returns a big structure.  */
624       is_const = 0;
625
626 #ifdef PCC_STATIC_STRUCT_RETURN
627       {
628         pcc_struct_value = 1;
629         is_integrable = 0;  /* Easier than making that case work right.  */
630       }
631 #else /* not PCC_STATIC_STRUCT_RETURN */
632       {
633         struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
634
635         if (struct_value_size < 0)
636           abort ();
637
638         if (target && GET_CODE (target) == MEM)
639           structure_value_addr = XEXP (target, 0);
640         else
641           {
642             /* Assign a temporary on the stack to hold the value.  */
643
644             /* For variable-sized objects, we must be called with a target
645                specified.  If we were to allocate space on the stack here,
646                we would have no way of knowing when to free it.  */
647
648             structure_value_addr
649               = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
650             target = 0;
651           }
652       }
653 #endif /* not PCC_STATIC_STRUCT_RETURN */
654     }
655
656   /* If called function is inline, try to integrate it.  */
657
658   if (is_integrable)
659     {
660       rtx temp;
661       rtx before_call = get_last_insn ();
662
663       temp = expand_inline_function (fndecl, actparms, target,
664                                      ignore, TREE_TYPE (exp),
665                                      structure_value_addr);
666
667       /* If inlining succeeded, return.  */
668       if ((HOST_WIDE_INT) temp != -1)
669         {
670           /* Perform all cleanups needed for the arguments of this call
671              (i.e. destructors in C++).  It is ok if these destructors
672              clobber RETURN_VALUE_REG, because the only time we care about
673              this is when TARGET is that register.  But in C++, we take
674              care to never return that register directly.  */
675           expand_cleanups_to (old_cleanups);
676
677 #ifdef ACCUMULATE_OUTGOING_ARGS
678           /* If the outgoing argument list must be preserved, push
679              the stack before executing the inlined function if it
680              makes any calls.  */
681
682           for (i = reg_parm_stack_space - 1; i >= 0; i--)
683             if (i < highest_outgoing_arg_in_use && stack_usage_map[i] != 0)
684               break;
685
686           if (stack_arg_under_construction || i >= 0)
687             {
688               rtx insn = NEXT_INSN (before_call), seq;
689
690               /* Look for a call in the inline function code.
691                  If OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) is
692                  nonzero then there is a call and it is not necessary
693                  to scan the insns.  */
694
695               if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
696                 for (; insn; insn = NEXT_INSN (insn))
697                   if (GET_CODE (insn) == CALL_INSN)
698                     break;
699
700               if (insn)
701                 {
702                   /* Reserve enough stack space so that the largest
703                      argument list of any function call in the inline
704                      function does not overlap the argument list being
705                      evaluated.  This is usually an overestimate because
706                      allocate_dynamic_stack_space reserves space for an
707                      outgoing argument list in addition to the requested
708                      space, but there is no way to ask for stack space such
709                      that an argument list of a certain length can be
710                      safely constructed.  */
711
712                   int adjust = OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl));
713 #ifdef REG_PARM_STACK_SPACE
714                   /* Add the stack space reserved for register arguments
715                      in the inline function.  What is really needed is the
716                      largest value of reg_parm_stack_space in the inline
717                      function, but that is not available.  Using the current
718                      value of reg_parm_stack_space is wrong, but gives
719                      correct results on all supported machines.  */
720                   adjust += reg_parm_stack_space;
721 #endif
722                   start_sequence ();
723                   emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
724                   allocate_dynamic_stack_space (GEN_INT (adjust),
725                                                 NULL_RTX, BITS_PER_UNIT);
726                   seq = get_insns ();
727                   end_sequence ();
728                   emit_insns_before (seq, NEXT_INSN (before_call));
729                   emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
730                 }
731             }
732 #endif
733
734           /* If the result is equivalent to TARGET, return TARGET to simplify
735              checks in store_expr.  They can be equivalent but not equal in the
736              case of a function that returns BLKmode.  */
737           if (temp != target && rtx_equal_p (temp, target))
738             return target;
739           return temp;
740         }
741
742       /* If inlining failed, mark FNDECL as needing to be compiled
743          separately after all.  */
744       mark_addressable (fndecl);
745     }
746
747   /* When calling a const function, we must pop the stack args right away,
748      so that the pop is deleted or moved with the call.  */
749   if (is_const)
750     NO_DEFER_POP;
751
752   function_call_count++;
753
754   if (fndecl && DECL_NAME (fndecl))
755     name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
756
757   /* On some machines (such as the PA) indirect calls have a different
758      calling convention than normal calls.  FUNCTION_ARG in the target
759      description can look at current_call_is_indirect to determine which
760      calling convention to use.  */
761   current_call_is_indirect = (fndecl == 0);
762 #if 0
763     = TREE_CODE (TREE_OPERAND (exp, 0)) == NON_LVALUE_EXPR ? 1 : 0;
764 #endif
765
766 #if 0
767   /* Unless it's a call to a specific function that isn't alloca,
768      if it has one argument, we must assume it might be alloca.  */
769
770   may_be_alloca =
771     (!(fndecl != 0 && strcmp (name, "alloca"))
772      && actparms != 0
773      && TREE_CHAIN (actparms) == 0);
774 #else
775   /* We assume that alloca will always be called by name.  It
776      makes no sense to pass it as a pointer-to-function to
777      anything that does not understand its behavior.  */
778   may_be_alloca =
779     (name && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
780                  && name[0] == 'a'
781                  && ! strcmp (name, "alloca"))
782                 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
783                     && name[0] == '_'
784                     && ! strcmp (name, "__builtin_alloca"))));
785 #endif
786
787   /* See if this is a call to a function that can return more than once
788      or a call to longjmp.  */
789
790   returns_twice = 0;
791   is_longjmp = 0;
792
793   if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
794     {
795       char *tname = name;
796
797       if (name[0] == '_')
798         tname += ((name[1] == '_' && name[2] == 'x') ? 3 : 1);
799
800       if (tname[0] == 's')
801         {
802           returns_twice
803             = ((tname[1] == 'e'
804                 && (! strcmp (tname, "setjmp")
805                     || ! strcmp (tname, "setjmp_syscall")))
806                || (tname[1] == 'i'
807                    && ! strcmp (tname, "sigsetjmp"))
808                || (tname[1] == 'a'
809                    && ! strcmp (tname, "savectx")));
810           if (tname[1] == 'i'
811               && ! strcmp (tname, "siglongjmp"))
812             is_longjmp = 1;
813         }
814       else if ((tname[0] == 'q' && tname[1] == 's'
815                 && ! strcmp (tname, "qsetjmp"))
816                || (tname[0] == 'v' && tname[1] == 'f'
817                    && ! strcmp (tname, "vfork")))
818         returns_twice = 1;
819
820       else if (tname[0] == 'l' && tname[1] == 'o'
821                && ! strcmp (tname, "longjmp"))
822         is_longjmp = 1;
823     }
824
825   if (may_be_alloca)
826     current_function_calls_alloca = 1;
827
828   /* Don't let pending stack adjusts add up to too much.
829      Also, do all pending adjustments now
830      if there is any chance this might be a call to alloca.  */
831
832   if (pending_stack_adjust >= 32
833       || (pending_stack_adjust > 0 && may_be_alloca))
834     do_pending_stack_adjust ();
835
836   /* Operand 0 is a pointer-to-function; get the type of the function.  */
837   funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
838   if (TREE_CODE (funtype) != POINTER_TYPE)
839     abort ();
840   funtype = TREE_TYPE (funtype);
841
842   /* Push the temporary stack slot level so that we can free temporaries used
843      by each of the arguments separately.  */
844   push_temp_slots ();
845
846   /* Start updating where the next arg would go.  */
847   INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX);
848
849   /* If struct_value_rtx is 0, it means pass the address
850      as if it were an extra parameter.  */
851   if (structure_value_addr && struct_value_rtx == 0)
852     {
853 #ifdef ACCUMULATE_OUTGOING_ARGS
854       /* If the stack will be adjusted, make sure the structure address
855          does not refer to virtual_outgoing_args_rtx.  */
856       rtx temp = (stack_arg_under_construction
857                   ? copy_addr_to_reg (structure_value_addr)
858                   : force_reg (Pmode, structure_value_addr));
859 #else
860       rtx temp = force_reg (Pmode, structure_value_addr);
861 #endif
862
863       actparms
864         = tree_cons (error_mark_node,
865                      make_tree (build_pointer_type (TREE_TYPE (funtype)),
866                                 temp),
867                      actparms);
868       structure_value_addr_parm = 1;
869     }
870
871   /* Count the arguments and set NUM_ACTUALS.  */
872   for (p = actparms, i = 0; p; p = TREE_CHAIN (p)) i++;
873   num_actuals = i;
874
875   /* Compute number of named args.
876      Normally, don't include the last named arg if anonymous args follow.
877      (If no anonymous args follow, the result of list_length
878      is actually one too large.)
879
880      If SETUP_INCOMING_VARARGS is defined, this machine will be able to
881      place unnamed args that were passed in registers into the stack.  So
882      treat all args as named.  This allows the insns emitting for a specific
883      argument list to be independent of the function declaration.
884
885      If SETUP_INCOMING_VARARGS is not defined, we do not have any reliable
886      way to pass unnamed args in registers, so we must force them into
887      memory.  */
888 #ifndef SETUP_INCOMING_VARARGS
889   if (TYPE_ARG_TYPES (funtype) != 0)
890     n_named_args
891       = list_length (TYPE_ARG_TYPES (funtype)) - 1
892         /* Count the struct value address, if it is passed as a parm.  */
893         + structure_value_addr_parm;
894   else
895 #endif
896     /* If we know nothing, treat all args as named.  */
897     n_named_args = num_actuals;
898
899   /* Make a vector to hold all the information about each arg.  */
900   args = (struct arg_data *) alloca (num_actuals * sizeof (struct arg_data));
901   bzero (args, num_actuals * sizeof (struct arg_data));
902
903   args_size.constant = 0;
904   args_size.var = 0;
905
906   /* In this loop, we consider args in the order they are written.
907      We fill up ARGS from the front of from the back if necessary
908      so that in any case the first arg to be pushed ends up at the front.  */
909
910 #ifdef PUSH_ARGS_REVERSED
911   i = num_actuals - 1, inc = -1;
912   /* In this case, must reverse order of args
913      so that we compute and push the last arg first.  */
914 #else
915   i = 0, inc = 1;
916 #endif
917
918   /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
919   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
920     {
921       tree type = TREE_TYPE (TREE_VALUE (p));
922       enum machine_mode mode;
923
924       args[i].tree_value = TREE_VALUE (p);
925
926       /* Replace erroneous argument with constant zero.  */
927       if (type == error_mark_node || TYPE_SIZE (type) == 0)
928         args[i].tree_value = integer_zero_node, type = integer_type_node;
929
930       /* Decide where to pass this arg.
931
932          args[i].reg is nonzero if all or part is passed in registers.
933
934          args[i].partial is nonzero if part but not all is passed in registers,
935          and the exact value says how many words are passed in registers.
936
937          args[i].pass_on_stack is nonzero if the argument must at least be
938          computed on the stack.  It may then be loaded back into registers
939          if args[i].reg is nonzero.
940
941          These decisions are driven by the FUNCTION_... macros and must agree
942          with those made by function.c.  */
943
944 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
945       /* See if this argument should be passed by invisible reference.  */
946       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, TYPE_MODE (type), type,
947                                           argpos < n_named_args))
948         {
949 #ifdef FUNCTION_ARG_CALLEE_COPIES
950           if (FUNCTION_ARG_CALLEE_COPIES (args_so_far, TYPE_MODE (type), type,
951                                           argpos < n_named_args)
952               /* If it's in a register, we must make a copy of it too.  */
953               /* ??? Is this a sufficient test?  Is there a better one? */
954               && !(TREE_CODE (args[i].tree_value) == VAR_DECL
955                    && REG_P (DECL_RTL (args[i].tree_value))))
956             {
957               args[i].tree_value = build1 (ADDR_EXPR,
958                                            build_pointer_type (type),
959                                            args[i].tree_value);
960               type = build_pointer_type (type);
961             }
962           else
963 #endif
964             {
965               /* We make a copy of the object and pass the address to the
966                  function being called.  */
967               rtx copy;
968
969               if (TYPE_SIZE (type) == 0
970                   || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
971                 {
972                   /* This is a variable-sized object.  Make space on the stack
973                      for it.  */
974                   rtx size_rtx = expr_size (TREE_VALUE (p));
975
976                   if (old_stack_level == 0)
977                     {
978                       emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
979                       old_pending_adj = pending_stack_adjust;
980                       pending_stack_adjust = 0;
981                     }
982
983                   copy = gen_rtx (MEM, BLKmode,
984                                   allocate_dynamic_stack_space (size_rtx,
985                                                                 NULL_RTX,
986                                                                 TYPE_ALIGN (type)));
987                 }
988               else
989                 {
990                   int size = int_size_in_bytes (type);
991                   copy = assign_stack_temp (TYPE_MODE (type), size, 1);
992                 }
993
994               store_expr (args[i].tree_value, copy, 0);
995
996               args[i].tree_value = build1 (ADDR_EXPR,
997                                            build_pointer_type (type),
998                                            make_tree (type, copy));
999               type = build_pointer_type (type);
1000             }
1001         }
1002 #endif /* FUNCTION_ARG_PASS_BY_REFERENCE */
1003
1004       mode = TYPE_MODE (type);
1005
1006 #ifdef PROMOTE_FUNCTION_ARGS
1007       /* Compute the mode in which the arg is actually to be extended to.  */
1008       if (TREE_CODE (type) == INTEGER_TYPE || TREE_CODE (type) == ENUMERAL_TYPE
1009           || TREE_CODE (type) == BOOLEAN_TYPE || TREE_CODE (type) == CHAR_TYPE
1010           || TREE_CODE (type) == REAL_TYPE || TREE_CODE (type) == POINTER_TYPE
1011           || TREE_CODE (type) == OFFSET_TYPE)
1012         {
1013           int unsignedp = TREE_UNSIGNED (type);
1014           PROMOTE_MODE (mode, unsignedp, type);
1015           args[i].unsignedp = unsignedp;
1016         }
1017 #endif
1018
1019       args[i].mode = mode;
1020       args[i].reg = FUNCTION_ARG (args_so_far, mode, type,
1021                                   argpos < n_named_args);
1022 #ifdef FUNCTION_ARG_PARTIAL_NREGS
1023       if (args[i].reg)
1024         args[i].partial
1025           = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, type,
1026                                         argpos < n_named_args);
1027 #endif
1028
1029       args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
1030
1031       /* If FUNCTION_ARG returned an (expr_list (nil) FOO), it means that
1032          we are to pass this arg in the register(s) designated by FOO, but
1033          also to pass it in the stack.  */
1034       if (args[i].reg && GET_CODE (args[i].reg) == EXPR_LIST
1035           && XEXP (args[i].reg, 0) == 0)
1036         args[i].pass_on_stack = 1, args[i].reg = XEXP (args[i].reg, 1);
1037
1038       /* If this is an addressable type, we must preallocate the stack
1039          since we must evaluate the object into its final location.
1040
1041          If this is to be passed in both registers and the stack, it is simpler
1042          to preallocate.  */
1043       if (TREE_ADDRESSABLE (type)
1044           || (args[i].pass_on_stack && args[i].reg != 0))
1045         must_preallocate = 1;
1046
1047       /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
1048          we cannot consider this function call constant.  */
1049       if (TREE_ADDRESSABLE (type))
1050         is_const = 0;
1051
1052       /* Compute the stack-size of this argument.  */
1053       if (args[i].reg == 0 || args[i].partial != 0
1054 #ifdef REG_PARM_STACK_SPACE
1055           || reg_parm_stack_space > 0
1056 #endif
1057           || args[i].pass_on_stack)
1058         locate_and_pad_parm (mode, type,
1059 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1060                              1,
1061 #else
1062                              args[i].reg != 0,
1063 #endif
1064                              fndecl, &args_size, &args[i].offset,
1065                              &args[i].size);
1066
1067 #ifndef ARGS_GROW_DOWNWARD
1068       args[i].slot_offset = args_size;
1069 #endif
1070
1071 #ifndef REG_PARM_STACK_SPACE
1072       /* If a part of the arg was put into registers,
1073          don't include that part in the amount pushed.  */
1074       if (! args[i].pass_on_stack)
1075         args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
1076                                   / (PARM_BOUNDARY / BITS_PER_UNIT)
1077                                   * (PARM_BOUNDARY / BITS_PER_UNIT));
1078 #endif
1079       
1080       /* Update ARGS_SIZE, the total stack space for args so far.  */
1081
1082       args_size.constant += args[i].size.constant;
1083       if (args[i].size.var)
1084         {
1085           ADD_PARM_SIZE (args_size, args[i].size.var);
1086         }
1087
1088       /* Since the slot offset points to the bottom of the slot,
1089          we must record it after incrementing if the args grow down.  */
1090 #ifdef ARGS_GROW_DOWNWARD
1091       args[i].slot_offset = args_size;
1092
1093       args[i].slot_offset.constant = -args_size.constant;
1094       if (args_size.var)
1095         {
1096           SUB_PARM_SIZE (args[i].slot_offset, args_size.var);
1097         }
1098 #endif
1099
1100       /* Increment ARGS_SO_FAR, which has info about which arg-registers
1101          have been used, etc.  */
1102
1103       FUNCTION_ARG_ADVANCE (args_so_far, TYPE_MODE (type), type,
1104                             argpos < n_named_args);
1105     }
1106
1107 #ifdef FINAL_REG_PARM_STACK_SPACE
1108   reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
1109                                                      args_size.var);
1110 #endif
1111       
1112   /* Compute the actual size of the argument block required.  The variable
1113      and constant sizes must be combined, the size may have to be rounded,
1114      and there may be a minimum required size.  */
1115
1116   original_args_size = args_size;
1117   if (args_size.var)
1118     {
1119       /* If this function requires a variable-sized argument list, don't try to
1120          make a cse'able block for this call.  We may be able to do this
1121          eventually, but it is too complicated to keep track of what insns go
1122          in the cse'able block and which don't.  */
1123
1124       is_const = 0;
1125       must_preallocate = 1;
1126
1127       args_size.var = ARGS_SIZE_TREE (args_size);
1128       args_size.constant = 0;
1129
1130 #ifdef STACK_BOUNDARY
1131       if (STACK_BOUNDARY != BITS_PER_UNIT)
1132         args_size.var = round_up (args_size.var, STACK_BYTES);
1133 #endif
1134
1135 #ifdef REG_PARM_STACK_SPACE
1136       if (reg_parm_stack_space > 0)
1137         {
1138           args_size.var
1139             = size_binop (MAX_EXPR, args_size.var,
1140                           size_int (REG_PARM_STACK_SPACE (fndecl)));
1141
1142 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1143           /* The area corresponding to register parameters is not to count in
1144              the size of the block we need.  So make the adjustment.  */
1145           args_size.var
1146             = size_binop (MINUS_EXPR, args_size.var,
1147                           size_int (reg_parm_stack_space));
1148 #endif
1149         }
1150 #endif
1151     }
1152   else
1153     {
1154 #ifdef STACK_BOUNDARY
1155       args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
1156                              / STACK_BYTES) * STACK_BYTES);
1157 #endif
1158
1159 #ifdef REG_PARM_STACK_SPACE
1160       args_size.constant = MAX (args_size.constant,
1161                                 reg_parm_stack_space);
1162 #ifdef MAYBE_REG_PARM_STACK_SPACE
1163       if (reg_parm_stack_space == 0)
1164         args_size.constant = 0;
1165 #endif
1166 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1167       args_size.constant -= reg_parm_stack_space;
1168 #endif
1169 #endif
1170     }
1171
1172   /* See if we have or want to preallocate stack space.
1173
1174      If we would have to push a partially-in-regs parm
1175      before other stack parms, preallocate stack space instead.
1176
1177      If the size of some parm is not a multiple of the required stack
1178      alignment, we must preallocate.
1179
1180      If the total size of arguments that would otherwise create a copy in
1181      a temporary (such as a CALL) is more than half the total argument list
1182      size, preallocation is faster.
1183
1184      Another reason to preallocate is if we have a machine (like the m88k)
1185      where stack alignment is required to be maintained between every
1186      pair of insns, not just when the call is made.  However, we assume here
1187      that such machines either do not have push insns (and hence preallocation
1188      would occur anyway) or the problem is taken care of with
1189      PUSH_ROUNDING.  */
1190
1191   if (! must_preallocate)
1192     {
1193       int partial_seen = 0;
1194       int copy_to_evaluate_size = 0;
1195
1196       for (i = 0; i < num_actuals && ! must_preallocate; i++)
1197         {
1198           if (args[i].partial > 0 && ! args[i].pass_on_stack)
1199             partial_seen = 1;
1200           else if (partial_seen && args[i].reg == 0)
1201             must_preallocate = 1;
1202
1203           if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1204               && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1205                   || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1206                   || TREE_CODE (args[i].tree_value) == COND_EXPR
1207                   || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1208             copy_to_evaluate_size
1209               += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1210         }
1211
1212       if (copy_to_evaluate_size * 2 >= args_size.constant
1213           && args_size.constant > 0)
1214         must_preallocate = 1;
1215     }
1216
1217   /* If the structure value address will reference the stack pointer, we must
1218      stabilize it.  We don't need to do this if we know that we are not going
1219      to adjust the stack pointer in processing this call.  */
1220
1221   if (structure_value_addr
1222       && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
1223        || reg_mentioned_p (virtual_outgoing_args_rtx, structure_value_addr))
1224       && (args_size.var
1225 #ifndef ACCUMULATE_OUTGOING_ARGS
1226           || args_size.constant
1227 #endif
1228           ))
1229     structure_value_addr = copy_to_reg (structure_value_addr);
1230
1231   /* If this function call is cse'able, precompute all the parameters.
1232      Note that if the parameter is constructed into a temporary, this will
1233      cause an additional copy because the parameter will be constructed
1234      into a temporary location and then copied into the outgoing arguments.
1235      If a parameter contains a call to alloca and this function uses the
1236      stack, precompute the parameter.  */
1237
1238   /* If we preallocated the stack space, and some arguments must be passed
1239      on the stack, then we must precompute any parameter which contains a
1240      function call which will store arguments on the stack.
1241      Otherwise, evaluating the parameter may clobber previous parameters
1242      which have already been stored into the stack.  */
1243
1244   for (i = 0; i < num_actuals; i++)
1245     if (is_const
1246         || ((args_size.var != 0 || args_size.constant != 0)
1247             && calls_function (args[i].tree_value, 1))
1248         || (must_preallocate && (args_size.var != 0 || args_size.constant != 0)
1249             && calls_function (args[i].tree_value, 0)))
1250       {
1251         args[i].initial_value = args[i].value
1252           = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
1253
1254         if (GET_MODE (args[i].value ) != VOIDmode
1255             && GET_MODE (args[i].value) != args[i].mode)
1256           args[i].value = convert_to_mode (args[i].mode, args[i].value,
1257                                            args[i].unsignedp);
1258         preserve_temp_slots (args[i].value);
1259
1260         free_temp_slots ();
1261
1262         /* ANSI doesn't require a sequence point here,
1263            but PCC has one, so this will avoid some problems.  */
1264         emit_queue ();
1265       }
1266
1267   /* Now we are about to start emitting insns that can be deleted
1268      if a libcall is deleted.  */
1269   if (is_const)
1270     start_sequence ();
1271
1272   /* If we have no actual push instructions, or shouldn't use them,
1273      make space for all args right now.  */
1274
1275   if (args_size.var != 0)
1276     {
1277       if (old_stack_level == 0)
1278         {
1279           emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
1280           old_pending_adj = pending_stack_adjust;
1281           pending_stack_adjust = 0;
1282 #ifdef ACCUMULATE_OUTGOING_ARGS
1283           /* stack_arg_under_construction says whether a stack arg is
1284              being constructed at the old stack level.  Pushing the stack
1285              gets a clean outgoing argument block.  */
1286           old_stack_arg_under_construction = stack_arg_under_construction;
1287           stack_arg_under_construction = 0;
1288 #endif
1289         }
1290       argblock = push_block (ARGS_SIZE_RTX (args_size), 0, 0);
1291     }
1292   else if (must_preallocate)
1293     {
1294       /* Note that we must go through the motions of allocating an argument
1295          block even if the size is zero because we may be storing args
1296          in the area reserved for register arguments, which may be part of
1297          the stack frame.  */
1298       int needed = args_size.constant;
1299
1300 #ifdef ACCUMULATE_OUTGOING_ARGS
1301       /* Store the maximum argument space used.  It will be pushed by the
1302          prologue.
1303
1304          Since the stack pointer will never be pushed, it is possible for
1305          the evaluation of a parm to clobber something we have already
1306          written to the stack.  Since most function calls on RISC machines
1307          do not use the stack, this is uncommon, but must work correctly.
1308          
1309          Therefore, we save any area of the stack that was already written
1310          and that we are using.  Here we set up to do this by making a new
1311          stack usage map from the old one.  The actual save will be done
1312          by store_one_arg. 
1313
1314          Another approach might be to try to reorder the argument
1315          evaluations to avoid this conflicting stack usage.  */
1316
1317       if (needed > current_function_outgoing_args_size)
1318         current_function_outgoing_args_size = needed;
1319
1320 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
1321       /* Since we will be writing into the entire argument area, the
1322          map must be allocated for its entire size, not just the part that
1323          is the responsibility of the caller.  */
1324       needed += reg_parm_stack_space;
1325 #endif
1326
1327 #ifdef ARGS_GROW_DOWNWARD
1328       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
1329                                          needed + 1);
1330 #else
1331       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, needed);
1332 #endif
1333       stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
1334
1335       if (initial_highest_arg_in_use)
1336         bcopy (initial_stack_usage_map, stack_usage_map,
1337                initial_highest_arg_in_use);
1338
1339       if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
1340         bzero (&stack_usage_map[initial_highest_arg_in_use],
1341                highest_outgoing_arg_in_use - initial_highest_arg_in_use);
1342       needed = 0;
1343
1344       /* The address of the outgoing argument list must not be copied to a
1345          register here, because argblock would be left pointing to the
1346          wrong place after the call to allocate_dynamic_stack_space below. */
1347
1348       argblock = virtual_outgoing_args_rtx;
1349
1350 #else /* not ACCUMULATE_OUTGOING_ARGS */
1351       if (inhibit_defer_pop == 0)
1352         {
1353           /* Try to reuse some or all of the pending_stack_adjust
1354              to get this space.  Maybe we can avoid any pushing.  */
1355           if (needed > pending_stack_adjust)
1356             {
1357               needed -= pending_stack_adjust;
1358               pending_stack_adjust = 0;
1359             }
1360           else
1361             {
1362               pending_stack_adjust -= needed;
1363               needed = 0;
1364             }
1365         }
1366       /* Special case this because overhead of `push_block' in this
1367          case is non-trivial.  */
1368       if (needed == 0)
1369         argblock = virtual_outgoing_args_rtx;
1370       else
1371         argblock = push_block (GEN_INT (needed), 0, 0);
1372
1373       /* We only really need to call `copy_to_reg' in the case where push
1374          insns are going to be used to pass ARGBLOCK to a function
1375          call in ARGS.  In that case, the stack pointer changes value
1376          from the allocation point to the call point, and hence
1377          the value of VIRTUAL_OUTGOING_ARGS_RTX changes as well.
1378          But might as well always do it.  */
1379       argblock = copy_to_reg (argblock);
1380 #endif /* not ACCUMULATE_OUTGOING_ARGS */
1381     }
1382
1383
1384 #ifdef ACCUMULATE_OUTGOING_ARGS
1385   /* The save/restore code in store_one_arg handles all cases except one:
1386      a constructor call (including a C function returning a BLKmode struct)
1387      to initialize an argument.  */
1388   if (stack_arg_under_construction)
1389     {
1390 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
1391       rtx push_size = GEN_INT (reg_parm_stack_space + args_size.constant);
1392 #else
1393       rtx push_size = GEN_INT (args_size.constant);
1394 #endif
1395       if (old_stack_level == 0)
1396         {
1397           emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
1398           old_pending_adj = pending_stack_adjust;
1399           pending_stack_adjust = 0;
1400           /* stack_arg_under_construction says whether a stack arg is
1401              being constructed at the old stack level.  Pushing the stack
1402              gets a clean outgoing argument block.  */
1403           old_stack_arg_under_construction = stack_arg_under_construction;
1404           stack_arg_under_construction = 0;
1405           /* Make a new map for the new argument list.  */
1406           stack_usage_map = (char *)alloca (highest_outgoing_arg_in_use);
1407           bzero (stack_usage_map, highest_outgoing_arg_in_use);
1408           highest_outgoing_arg_in_use = 0;
1409         }
1410       allocate_dynamic_stack_space (push_size, NULL_RTX, BITS_PER_UNIT);
1411     }
1412   /* If argument evaluation might modify the stack pointer, copy the
1413      address of the argument list to a register.  */
1414   for (i = 0; i < num_actuals; i++)
1415     if (args[i].pass_on_stack)
1416       {
1417         argblock = copy_addr_to_reg (argblock);
1418         break;
1419       }
1420 #endif
1421
1422
1423   /* If we preallocated stack space, compute the address of each argument.
1424      We need not ensure it is a valid memory address here; it will be 
1425      validized when it is used.  */
1426   if (argblock)
1427     {
1428       rtx arg_reg = argblock;
1429       int arg_offset = 0;
1430
1431       if (GET_CODE (argblock) == PLUS)
1432         arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1433
1434       for (i = 0; i < num_actuals; i++)
1435         {
1436           rtx offset = ARGS_SIZE_RTX (args[i].offset);
1437           rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1438           rtx addr;
1439
1440           /* Skip this parm if it will not be passed on the stack.  */
1441           if (! args[i].pass_on_stack && args[i].reg != 0)
1442             continue;
1443
1444           if (GET_CODE (offset) == CONST_INT)
1445             addr = plus_constant (arg_reg, INTVAL (offset));
1446           else
1447             addr = gen_rtx (PLUS, Pmode, arg_reg, offset);
1448
1449           addr = plus_constant (addr, arg_offset);
1450           args[i].stack = gen_rtx (MEM, args[i].mode, addr);
1451
1452           if (GET_CODE (slot_offset) == CONST_INT)
1453             addr = plus_constant (arg_reg, INTVAL (slot_offset));
1454           else
1455             addr = gen_rtx (PLUS, Pmode, arg_reg, slot_offset);
1456
1457           addr = plus_constant (addr, arg_offset);
1458           args[i].stack_slot = gen_rtx (MEM, args[i].mode, addr);
1459         }
1460     }
1461                                                
1462 #ifdef PUSH_ARGS_REVERSED
1463 #ifdef STACK_BOUNDARY
1464   /* If we push args individually in reverse order, perform stack alignment
1465      before the first push (the last arg).  */
1466   if (argblock == 0)
1467     anti_adjust_stack (GEN_INT (args_size.constant
1468                                 - original_args_size.constant));
1469 #endif
1470 #endif
1471
1472   /* Don't try to defer pops if preallocating, not even from the first arg,
1473      since ARGBLOCK probably refers to the SP.  */
1474   if (argblock)
1475     NO_DEFER_POP;
1476
1477   /* Get the function to call, in the form of RTL.  */
1478   if (fndecl)
1479     {
1480       /* If this is the first use of the function, see if we need to
1481          make an external definition for it.  */
1482       if (! TREE_USED (fndecl))
1483         {
1484           assemble_external (fndecl);
1485           TREE_USED (fndecl) = 1;
1486         }
1487
1488       /* Get a SYMBOL_REF rtx for the function address.  */
1489       funexp = XEXP (DECL_RTL (fndecl), 0);
1490     }
1491   else
1492     /* Generate an rtx (probably a pseudo-register) for the address.  */
1493     {
1494       funexp = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
1495       free_temp_slots ();       /* FUNEXP can't be BLKmode */
1496       emit_queue ();
1497     }
1498
1499   /* Figure out the register where the value, if any, will come back.  */
1500   valreg = 0;
1501   if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
1502       && ! structure_value_addr)
1503     {
1504       if (pcc_struct_value)
1505         valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
1506                                       fndecl);
1507       else
1508         valreg = hard_function_value (TREE_TYPE (exp), fndecl);
1509     }
1510
1511   /* Precompute all register parameters.  It isn't safe to compute anything
1512      once we have started filling any specific hard regs. */
1513   reg_parm_seen = 0;
1514   for (i = 0; i < num_actuals; i++)
1515     if (args[i].reg != 0 && ! args[i].pass_on_stack)
1516       {
1517         reg_parm_seen = 1;
1518
1519         if (args[i].value == 0)
1520           {
1521             args[i].value = expand_expr (args[i].tree_value, NULL_RTX,
1522                                          VOIDmode, 0);
1523             preserve_temp_slots (args[i].value);
1524             free_temp_slots ();
1525
1526             /* ANSI doesn't require a sequence point here,
1527                but PCC has one, so this will avoid some problems.  */
1528             emit_queue ();
1529           }
1530
1531         /* If we are to promote the function arg to a wider mode,
1532            do it now.  */
1533
1534         if (GET_MODE (args[i].value) != VOIDmode
1535             && GET_MODE (args[i].value) != args[i].mode)
1536           args[i].value = convert_to_mode (args[i].mode, args[i].value,
1537                                            args[i].unsignedp);
1538       }
1539
1540 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
1541   /* The argument list is the property of the called routine and it
1542      may clobber it.  If the fixed area has been used for previous
1543      parameters, we must save and restore it.
1544
1545      Here we compute the boundary of the that needs to be saved, if any.  */
1546
1547 #ifdef ARGS_GROW_DOWNWARD
1548   for (i = 0; i < reg_parm_stack_space + 1; i++)
1549 #else
1550   for (i = 0; i < reg_parm_stack_space; i++)
1551 #endif
1552     {
1553       if (i >=  highest_outgoing_arg_in_use
1554           || stack_usage_map[i] == 0)
1555         continue;
1556
1557       if (low_to_save == -1)
1558         low_to_save = i;
1559
1560       high_to_save = i;
1561     }
1562
1563   if (low_to_save >= 0)
1564     {
1565       int num_to_save = high_to_save - low_to_save + 1;
1566       enum machine_mode save_mode
1567         = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
1568       rtx stack_area;
1569
1570       /* If we don't have the required alignment, must do this in BLKmode.  */
1571       if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
1572                                BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
1573         save_mode = BLKmode;
1574
1575       stack_area = gen_rtx (MEM, save_mode,
1576                             memory_address (save_mode,
1577                                             
1578 #ifdef ARGS_GROW_DOWNWARD
1579                                             plus_constant (argblock,
1580                                                            - high_to_save)
1581 #else
1582                                             plus_constant (argblock,
1583                                                            low_to_save)
1584 #endif
1585                                             ));
1586       if (save_mode == BLKmode)
1587         {
1588           save_area = assign_stack_temp (BLKmode, num_to_save, 1);
1589           emit_block_move (validize_mem (save_area), stack_area,
1590                            GEN_INT (num_to_save),
1591                            PARM_BOUNDARY / BITS_PER_UNIT);
1592         }
1593       else
1594         {
1595           save_area = gen_reg_rtx (save_mode);
1596           emit_move_insn (save_area, stack_area);
1597         }
1598     }
1599 #endif
1600           
1601
1602   /* Now store (and compute if necessary) all non-register parms.
1603      These come before register parms, since they can require block-moves,
1604      which could clobber the registers used for register parms.
1605      Parms which have partial registers are not stored here,
1606      but we do preallocate space here if they want that.  */
1607
1608   for (i = 0; i < num_actuals; i++)
1609     if (args[i].reg == 0 || args[i].pass_on_stack)
1610       store_one_arg (&args[i], argblock, may_be_alloca,
1611                      args_size.var != 0, fndecl, reg_parm_stack_space);
1612
1613 #ifdef STRICT_ALIGNMENT
1614   /* If we have a parm that is passed in registers but not in memory
1615      and whose alignment does not permit a direct copy into registers,
1616      make a group of pseudos that correspond to each register that we
1617      will later fill.  */
1618
1619   for (i = 0; i < num_actuals; i++)
1620     if (args[i].reg != 0 && ! args[i].pass_on_stack
1621         && args[i].mode == BLKmode
1622         && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
1623             < MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
1624       {
1625         int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1626
1627         args[i].n_aligned_regs
1628           = args[i].partial ? args[i].partial
1629             : (bytes + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
1630
1631         args[i].aligned_regs = (rtx *) alloca (sizeof (rtx)
1632                                                * args[i].n_aligned_regs);
1633
1634         for (j = 0; j < args[i].n_aligned_regs; j++)
1635           {
1636             rtx reg = gen_reg_rtx (word_mode);
1637             rtx word = operand_subword_force (args[i].value, j, BLKmode);
1638             int bitsize = TYPE_ALIGN (TREE_TYPE (args[i].tree_value));
1639             int bitpos;
1640
1641             args[i].aligned_regs[j] = reg;
1642
1643             /* Clobber REG and move each partword into it.  Ensure we don't
1644                go past the end of the structure.  Note that the loop below
1645                works because we've already verified that padding
1646                and endianness are compatible.  */
1647
1648             emit_insn (gen_rtx (CLOBBER, VOIDmode, reg));
1649
1650             for (bitpos = 0;
1651                  bitpos < BITS_PER_WORD && bytes > 0;
1652                  bitpos += bitsize, bytes -= bitsize / BITS_PER_UNIT)
1653               {
1654                 int xbitpos = (BYTES_BIG_ENDIAN
1655                                ? BITS_PER_WORD - bitpos - bitsize
1656                                : bitpos);
1657
1658                 store_bit_field (reg, bitsize, xbitpos, word_mode,
1659                                  extract_bit_field (word, bitsize, xbitpos, 1,
1660                                                     NULL_RTX, word_mode,
1661                                                     word_mode,
1662                                                     bitsize / BITS_PER_UNIT,
1663                                                     BITS_PER_WORD),
1664                                  bitsize / BITS_PER_UNIT, BITS_PER_WORD);
1665               }
1666           }
1667       }
1668 #endif
1669
1670   /* Now store any partially-in-registers parm.
1671      This is the last place a block-move can happen.  */
1672   if (reg_parm_seen)
1673     for (i = 0; i < num_actuals; i++)
1674       if (args[i].partial != 0 && ! args[i].pass_on_stack)
1675         store_one_arg (&args[i], argblock, may_be_alloca,
1676                        args_size.var != 0, fndecl, reg_parm_stack_space);
1677
1678 #ifndef PUSH_ARGS_REVERSED
1679 #ifdef STACK_BOUNDARY
1680   /* If we pushed args in forward order, perform stack alignment
1681      after pushing the last arg.  */
1682   if (argblock == 0)
1683     anti_adjust_stack (GEN_INT (args_size.constant
1684                                 - original_args_size.constant));
1685 #endif
1686 #endif
1687
1688   /* If register arguments require space on the stack and stack space
1689      was not preallocated, allocate stack space here for arguments
1690      passed in registers.  */
1691 #if ! defined(ACCUMULATE_OUTGOING_ARGS) && defined(OUTGOING_REG_PARM_STACK_SPACE)
1692   if (must_preallocate == 0 && reg_parm_stack_space > 0)
1693     anti_adjust_stack (GEN_INT (reg_parm_stack_space));
1694 #endif
1695
1696   /* Pass the function the address in which to return a structure value.  */
1697   if (structure_value_addr && ! structure_value_addr_parm)
1698     {
1699       emit_move_insn (struct_value_rtx,
1700                       force_reg (Pmode,
1701                                  force_operand (structure_value_addr,
1702                                                 NULL_RTX)));
1703       if (GET_CODE (struct_value_rtx) == REG)
1704         {
1705           push_to_sequence (use_insns);
1706           emit_insn (gen_rtx (USE, VOIDmode, struct_value_rtx));
1707           use_insns = get_insns ();
1708           end_sequence ();
1709         }
1710     }
1711
1712   /* Now do the register loads required for any wholly-register parms or any
1713      parms which are passed both on the stack and in a register.  Their
1714      expressions were already evaluated. 
1715
1716      Mark all register-parms as living through the call, putting these USE
1717      insns in a list headed by USE_INSNS.  */
1718
1719   for (i = 0; i < num_actuals; i++)
1720     {
1721       rtx list = args[i].reg;
1722       int partial = args[i].partial;
1723
1724       while (list)
1725         {
1726           rtx reg;
1727           int nregs;
1728
1729           /* Process each register that needs to get this arg.  */
1730           if (GET_CODE (list) == EXPR_LIST)
1731             reg = XEXP (list, 0), list = XEXP (list, 1);
1732           else
1733             reg = list, list = 0;
1734
1735           /* Set to non-zero if must move a word at a time, even if just one
1736              word (e.g, partial == 1 && mode == DFmode).  Set to zero if
1737              we just use a normal move insn.  */
1738           nregs = (partial ? partial
1739                    : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1740                       ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1741                           + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1742                       : 0));
1743
1744           /* If simple case, just do move.  If normal partial, store_one_arg
1745              has already loaded the register for us.  In all other cases,
1746              load the register(s) from memory.  */
1747
1748           if (nregs == 0)
1749             emit_move_insn (reg, args[i].value);
1750
1751 #ifdef STRICT_ALIGNMENT
1752           /* If we have pre-computed the values to put in the registers in
1753              the case of non-aligned structures, copy them in now.  */
1754
1755           else if (args[i].n_aligned_regs != 0)
1756             for (j = 0; j < args[i].n_aligned_regs; j++)
1757               emit_move_insn (gen_rtx (REG, word_mode, REGNO (reg) + j),
1758                               args[i].aligned_regs[j]);
1759 #endif
1760
1761           else if (args[i].partial == 0 || args[i].pass_on_stack)
1762             move_block_to_reg (REGNO (reg),
1763                                validize_mem (args[i].value), nregs,
1764                                args[i].mode);
1765         
1766           push_to_sequence (use_insns);
1767           if (nregs == 0)
1768             emit_insn (gen_rtx (USE, VOIDmode, reg));
1769           else
1770             use_regs (REGNO (reg), nregs);
1771           use_insns = get_insns ();
1772           end_sequence ();
1773
1774           /* PARTIAL referred only to the first register, so clear it for the
1775              next time.  */
1776           partial = 0;
1777         }
1778     }
1779
1780   /* Perform postincrements before actually calling the function.  */
1781   emit_queue ();
1782
1783   /* All arguments and registers used for the call must be set up by now!  */
1784
1785   funexp = prepare_call_address (funexp, fndecl, &use_insns);
1786
1787   /* Generate the actual call instruction.  */
1788   emit_call_1 (funexp, funtype, args_size.constant, struct_value_size,
1789                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
1790                valreg, old_inhibit_defer_pop, use_insns, is_const);
1791
1792   /* If call is cse'able, make appropriate pair of reg-notes around it.
1793      Test valreg so we don't crash; may safely ignore `const'
1794      if return type is void.  */
1795   if (is_const && valreg != 0)
1796     {
1797       rtx note = 0;
1798       rtx temp = gen_reg_rtx (GET_MODE (valreg));
1799       rtx insns;
1800
1801       /* Construct an "equal form" for the value which mentions all the
1802          arguments in order as well as the function name.  */
1803 #ifdef PUSH_ARGS_REVERSED
1804       for (i = 0; i < num_actuals; i++)
1805         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1806 #else
1807       for (i = num_actuals - 1; i >= 0; i--)
1808         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1809 #endif
1810       note = gen_rtx (EXPR_LIST, VOIDmode, funexp, note);
1811
1812       insns = get_insns ();
1813       end_sequence ();
1814
1815       emit_libcall_block (insns, temp, valreg, note);
1816
1817       valreg = temp;
1818     }
1819
1820   /* For calls to `setjmp', etc., inform flow.c it should complain
1821      if nonvolatile values are live.  */
1822
1823   if (returns_twice)
1824     {
1825       emit_note (name, NOTE_INSN_SETJMP);
1826       current_function_calls_setjmp = 1;
1827     }
1828
1829   if (is_longjmp)
1830     current_function_calls_longjmp = 1;
1831
1832   /* Notice functions that cannot return.
1833      If optimizing, insns emitted below will be dead.
1834      If not optimizing, they will exist, which is useful
1835      if the user uses the `return' command in the debugger.  */
1836
1837   if (is_volatile || is_longjmp)
1838     emit_barrier ();
1839
1840   /* If value type not void, return an rtx for the value.  */
1841
1842   /* If there are cleanups to be called, don't use a hard reg as target.  */
1843   if (cleanups_this_call != old_cleanups
1844       && target && REG_P (target)
1845       && REGNO (target) < FIRST_PSEUDO_REGISTER)
1846     target = 0;
1847
1848   if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
1849       || ignore)
1850     {
1851       target = const0_rtx;
1852     }
1853   else if (structure_value_addr)
1854     {
1855       if (target == 0 || GET_CODE (target) != MEM)
1856         {
1857           target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1858                             memory_address (TYPE_MODE (TREE_TYPE (exp)),
1859                                             structure_value_addr));
1860           MEM_IN_STRUCT_P (target)
1861             = (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1862                || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
1863                || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
1864                || TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE);
1865         }
1866     }
1867   else if (pcc_struct_value)
1868     {
1869       if (target == 0)
1870         {
1871           /* We used leave the value in the location that it is
1872              returned in, but that causes problems if it is used more
1873              than once in one expression.  Rather than trying to track
1874              when a copy is required, we always copy when TARGET is
1875              not specified.  This calling sequence is only used on
1876              a few machines and TARGET is usually nonzero.  */
1877           if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
1878             {
1879               target = assign_stack_temp (BLKmode,
1880                                           int_size_in_bytes (TREE_TYPE (exp)),
1881                                           0);
1882
1883               /* Save this temp slot around the pop below.  */
1884               preserve_temp_slots (target);
1885             }
1886           else
1887             target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
1888         }
1889
1890       if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
1891         emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1892                                          copy_to_reg (valreg)));
1893       else
1894         emit_block_move (target, gen_rtx (MEM, BLKmode, copy_to_reg (valreg)),
1895                          expr_size (exp),
1896                          TYPE_ALIGN (TREE_TYPE (exp)) / BITS_PER_UNIT);
1897     }
1898   else if (target && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
1899            && GET_MODE (target) == GET_MODE (valreg))
1900     /* TARGET and VALREG cannot be equal at this point because the latter
1901        would not have REG_FUNCTION_VALUE_P true, while the former would if
1902        it were referring to the same register.
1903
1904        If they refer to the same register, this move will be a no-op, except
1905        when function inlining is being done.  */
1906     emit_move_insn (target, valreg);
1907   else
1908     target = copy_to_reg (valreg);
1909
1910 #ifdef PROMOTE_FUNCTION_RETURN
1911   /* If we promoted this return value, make the proper SUBREG.  TARGET
1912      might be const0_rtx here, so be careful.  */
1913   if (GET_CODE (target) == REG
1914       && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
1915     {
1916       enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
1917       int unsignedp = TREE_UNSIGNED (TREE_TYPE (exp));
1918
1919       if (TREE_CODE (TREE_TYPE (exp)) == INTEGER_TYPE
1920           || TREE_CODE (TREE_TYPE (exp)) == ENUMERAL_TYPE
1921           || TREE_CODE (TREE_TYPE (exp)) == BOOLEAN_TYPE
1922           || TREE_CODE (TREE_TYPE (exp)) == CHAR_TYPE
1923           || TREE_CODE (TREE_TYPE (exp)) == REAL_TYPE
1924           || TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE
1925           || TREE_CODE (TREE_TYPE (exp)) == OFFSET_TYPE)
1926         {
1927           PROMOTE_MODE (mode, unsignedp, TREE_TYPE (exp));
1928         }
1929
1930       /* If we didn't promote as expected, something is wrong.  */
1931       if (mode != GET_MODE (target))
1932         abort ();
1933
1934       target = gen_rtx (SUBREG, TYPE_MODE (TREE_TYPE (exp)), target, 0);
1935       SUBREG_PROMOTED_VAR_P (target) = 1;
1936       SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp;
1937     }
1938 #endif
1939
1940   /* Perform all cleanups needed for the arguments of this call
1941      (i.e. destructors in C++).  */
1942   expand_cleanups_to (old_cleanups);
1943
1944   /* If size of args is variable or this was a constructor call for a stack
1945      argument, restore saved stack-pointer value.  */
1946
1947   if (old_stack_level)
1948     {
1949       emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
1950       pending_stack_adjust = old_pending_adj;
1951 #ifdef ACCUMULATE_OUTGOING_ARGS
1952       stack_arg_under_construction = old_stack_arg_under_construction;
1953       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
1954       stack_usage_map = initial_stack_usage_map;
1955 #endif
1956     }
1957 #ifdef ACCUMULATE_OUTGOING_ARGS
1958   else
1959     {
1960 #ifdef REG_PARM_STACK_SPACE
1961       if (save_area)
1962         {
1963           enum machine_mode save_mode = GET_MODE (save_area);
1964           rtx stack_area
1965             = gen_rtx (MEM, save_mode,
1966                        memory_address (save_mode,
1967 #ifdef ARGS_GROW_DOWNWARD
1968                                        plus_constant (argblock, - high_to_save)
1969 #else
1970                                        plus_constant (argblock, low_to_save)
1971 #endif
1972                                        ));
1973
1974           if (save_mode != BLKmode)
1975             emit_move_insn (stack_area, save_area);
1976           else
1977             emit_block_move (stack_area, validize_mem (save_area),
1978                              GEN_INT (high_to_save - low_to_save + 1),
1979                              PARM_BOUNDARY / BITS_PER_UNIT);
1980         }
1981 #endif
1982           
1983       /* If we saved any argument areas, restore them.  */
1984       for (i = 0; i < num_actuals; i++)
1985         if (args[i].save_area)
1986           {
1987             enum machine_mode save_mode = GET_MODE (args[i].save_area);
1988             rtx stack_area
1989               = gen_rtx (MEM, save_mode,
1990                          memory_address (save_mode,
1991                                          XEXP (args[i].stack_slot, 0)));
1992
1993             if (save_mode != BLKmode)
1994               emit_move_insn (stack_area, args[i].save_area);
1995             else
1996               emit_block_move (stack_area, validize_mem (args[i].save_area),
1997                                GEN_INT (args[i].size.constant),
1998                                PARM_BOUNDARY / BITS_PER_UNIT);
1999           }
2000
2001       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
2002       stack_usage_map = initial_stack_usage_map;
2003     }
2004 #endif
2005
2006   /* If this was alloca, record the new stack level for nonlocal gotos.  
2007      Check for the handler slots since we might not have a save area
2008      for non-local gotos. */
2009
2010   if (may_be_alloca && nonlocal_goto_handler_slot != 0)
2011     emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX);
2012
2013   pop_temp_slots ();
2014
2015   return target;
2016 }
2017 \f
2018 /* Output a library call to function FUN (a SYMBOL_REF rtx)
2019    (emitting the queue unless NO_QUEUE is nonzero),
2020    for a value of mode OUTMODE,
2021    with NARGS different arguments, passed as alternating rtx values
2022    and machine_modes to convert them to.
2023    The rtx values should have been passed through protect_from_queue already.
2024
2025    NO_QUEUE will be true if and only if the library call is a `const' call
2026    which will be enclosed in REG_LIBCALL/REG_RETVAL notes; it is equivalent
2027    to the variable is_const in expand_call.
2028
2029    NO_QUEUE must be true for const calls, because if it isn't, then
2030    any pending increment will be emitted between REG_LIBCALL/REG_RETVAL notes,
2031    and will be lost if the libcall sequence is optimized away.
2032
2033    NO_QUEUE must be false for non-const calls, because if it isn't, the
2034    call insn will have its CONST_CALL_P bit set, and it will be incorrectly
2035    optimized.  For instance, the instruction scheduler may incorrectly
2036    move memory references across the non-const call.  */
2037
2038 void
2039 emit_library_call (va_alist)
2040      va_dcl
2041 {
2042   va_list p;
2043   /* Total size in bytes of all the stack-parms scanned so far.  */
2044   struct args_size args_size;
2045   /* Size of arguments before any adjustments (such as rounding).  */
2046   struct args_size original_args_size;
2047   register int argnum;
2048   enum machine_mode outmode;
2049   int nargs;
2050   rtx fun;
2051   rtx orgfun;
2052   int inc;
2053   int count;
2054   rtx argblock = 0;
2055   CUMULATIVE_ARGS args_so_far;
2056   struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
2057                struct args_size offset; struct args_size size; };
2058   struct arg *argvec;
2059   int old_inhibit_defer_pop = inhibit_defer_pop;
2060   int no_queue = 0;
2061   rtx use_insns;
2062   /* library calls are never indirect calls.  */
2063   int current_call_is_indirect = 0;
2064
2065   va_start (p);
2066   orgfun = fun = va_arg (p, rtx);
2067   no_queue = va_arg (p, int);
2068   outmode = va_arg (p, enum machine_mode);
2069   nargs = va_arg (p, int);
2070
2071   /* Copy all the libcall-arguments out of the varargs data
2072      and into a vector ARGVEC.
2073
2074      Compute how to pass each argument.  We only support a very small subset
2075      of the full argument passing conventions to limit complexity here since
2076      library functions shouldn't have many args.  */
2077
2078   argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
2079
2080   INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
2081
2082   args_size.constant = 0;
2083   args_size.var = 0;
2084
2085   for (count = 0; count < nargs; count++)
2086     {
2087       rtx val = va_arg (p, rtx);
2088       enum machine_mode mode = va_arg (p, enum machine_mode);
2089
2090       /* We cannot convert the arg value to the mode the library wants here;
2091          must do it earlier where we know the signedness of the arg.  */
2092       if (mode == BLKmode
2093           || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
2094         abort ();
2095
2096       /* On some machines, there's no way to pass a float to a library fcn.
2097          Pass it as a double instead.  */
2098 #ifdef LIBGCC_NEEDS_DOUBLE
2099       if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
2100         val = convert_to_mode (DFmode, val, 0), mode = DFmode;
2101 #endif
2102
2103       /* There's no need to call protect_from_queue, because
2104          either emit_move_insn or emit_push_insn will do that.  */
2105
2106       /* Make sure it is a reasonable operand for a move or push insn.  */
2107       if (GET_CODE (val) != REG && GET_CODE (val) != MEM
2108           && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
2109         val = force_operand (val, NULL_RTX);
2110
2111       argvec[count].value = val;
2112       argvec[count].mode = mode;
2113
2114 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
2115       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
2116         abort ();
2117 #endif
2118
2119       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
2120       if (argvec[count].reg && GET_CODE (argvec[count].reg) == EXPR_LIST)
2121         abort ();
2122 #ifdef FUNCTION_ARG_PARTIAL_NREGS
2123       argvec[count].partial
2124         = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
2125 #else
2126       argvec[count].partial = 0;
2127 #endif
2128
2129       locate_and_pad_parm (mode, NULL_TREE,
2130                            argvec[count].reg && argvec[count].partial == 0,
2131                            NULL_TREE, &args_size, &argvec[count].offset,
2132                            &argvec[count].size);
2133
2134       if (argvec[count].size.var)
2135         abort ();
2136
2137 #ifndef REG_PARM_STACK_SPACE
2138       if (argvec[count].partial)
2139         argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
2140 #endif
2141
2142       if (argvec[count].reg == 0 || argvec[count].partial != 0
2143 #ifdef REG_PARM_STACK_SPACE
2144           || 1
2145 #endif
2146           )
2147         args_size.constant += argvec[count].size.constant;
2148
2149 #ifdef ACCUMULATE_OUTGOING_ARGS
2150       /* If this arg is actually passed on the stack, it might be
2151          clobbering something we already put there (this library call might
2152          be inside the evaluation of an argument to a function whose call
2153          requires the stack).  This will only occur when the library call
2154          has sufficient args to run out of argument registers.  Abort in
2155          this case; if this ever occurs, code must be added to save and
2156          restore the arg slot.  */
2157
2158       if (argvec[count].reg == 0 || argvec[count].partial != 0)
2159         abort ();
2160 #endif
2161
2162       FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree)0, 1);
2163     }
2164   va_end (p);
2165
2166   /* If this machine requires an external definition for library
2167      functions, write one out.  */
2168   assemble_external_libcall (fun);
2169
2170   original_args_size = args_size;
2171 #ifdef STACK_BOUNDARY
2172   args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
2173                          / STACK_BYTES) * STACK_BYTES);
2174 #endif
2175
2176 #ifdef REG_PARM_STACK_SPACE
2177   args_size.constant = MAX (args_size.constant,
2178                             REG_PARM_STACK_SPACE (NULL_TREE));
2179 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2180   args_size.constant -= REG_PARM_STACK_SPACE (NULL_TREE);
2181 #endif
2182 #endif
2183
2184 #ifdef ACCUMULATE_OUTGOING_ARGS
2185   if (args_size.constant > current_function_outgoing_args_size)
2186     current_function_outgoing_args_size = args_size.constant;
2187   args_size.constant = 0;
2188 #endif
2189
2190 #ifndef PUSH_ROUNDING
2191   argblock = push_block (GEN_INT (args_size.constant), 0, 0);
2192 #endif
2193
2194 #ifdef PUSH_ARGS_REVERSED
2195 #ifdef STACK_BOUNDARY
2196   /* If we push args individually in reverse order, perform stack alignment
2197      before the first push (the last arg).  */
2198   if (argblock == 0)
2199     anti_adjust_stack (GEN_INT (args_size.constant
2200                                 - original_args_size.constant));
2201 #endif
2202 #endif
2203
2204 #ifdef PUSH_ARGS_REVERSED
2205   inc = -1;
2206   argnum = nargs - 1;
2207 #else
2208   inc = 1;
2209   argnum = 0;
2210 #endif
2211
2212   /* Push the args that need to be pushed.  */
2213
2214   for (count = 0; count < nargs; count++, argnum += inc)
2215     {
2216       register enum machine_mode mode = argvec[argnum].mode;
2217       register rtx val = argvec[argnum].value;
2218       rtx reg = argvec[argnum].reg;
2219       int partial = argvec[argnum].partial;
2220
2221       if (! (reg != 0 && partial == 0))
2222         emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
2223                         argblock, GEN_INT (argvec[count].offset.constant));
2224       NO_DEFER_POP;
2225     }
2226
2227 #ifndef PUSH_ARGS_REVERSED
2228 #ifdef STACK_BOUNDARY
2229   /* If we pushed args in forward order, perform stack alignment
2230      after pushing the last arg.  */
2231   if (argblock == 0)
2232     anti_adjust_stack (GEN_INT (args_size.constant
2233                                 - original_args_size.constant));
2234 #endif
2235 #endif
2236
2237 #ifdef PUSH_ARGS_REVERSED
2238   argnum = nargs - 1;
2239 #else
2240   argnum = 0;
2241 #endif
2242
2243   /* Now load any reg parms into their regs.  */
2244
2245   for (count = 0; count < nargs; count++, argnum += inc)
2246     {
2247       register enum machine_mode mode = argvec[argnum].mode;
2248       register rtx val = argvec[argnum].value;
2249       rtx reg = argvec[argnum].reg;
2250       int partial = argvec[argnum].partial;
2251
2252       if (reg != 0 && partial == 0)
2253         emit_move_insn (reg, val);
2254       NO_DEFER_POP;
2255     }
2256
2257   /* For version 1.37, try deleting this entirely.  */
2258   if (! no_queue)
2259     emit_queue ();
2260
2261   /* Any regs containing parms remain in use through the call.  */
2262   start_sequence ();
2263   for (count = 0; count < nargs; count++)
2264     if (argvec[count].reg != 0)
2265       emit_insn (gen_rtx (USE, VOIDmode, argvec[count].reg));
2266
2267   use_insns = get_insns ();
2268   end_sequence ();
2269
2270   fun = prepare_call_address (fun, NULL_TREE, &use_insns);
2271
2272   /* Don't allow popping to be deferred, since then
2273      cse'ing of library calls could delete a call and leave the pop.  */
2274   NO_DEFER_POP;
2275
2276   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
2277      will set inhibit_defer_pop to that value.  */
2278
2279   emit_call_1 (fun, get_identifier (XSTR (orgfun, 0)), args_size.constant, 0,
2280                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
2281                outmode != VOIDmode ? hard_libcall_value (outmode) : NULL_RTX,
2282                old_inhibit_defer_pop + 1, use_insns, no_queue);
2283
2284   /* Now restore inhibit_defer_pop to its actual original value.  */
2285   OK_DEFER_POP;
2286 }
2287 \f
2288 /* Like emit_library_call except that an extra argument, VALUE,
2289    comes second and says where to store the result.
2290    (If VALUE is zero, the result comes in the function value register.)  */
2291
2292 void
2293 emit_library_call_value (va_alist)
2294      va_dcl
2295 {
2296   va_list p;
2297   /* Total size in bytes of all the stack-parms scanned so far.  */
2298   struct args_size args_size;
2299   /* Size of arguments before any adjustments (such as rounding).  */
2300   struct args_size original_args_size;
2301   register int argnum;
2302   enum machine_mode outmode;
2303   int nargs;
2304   rtx fun;
2305   rtx orgfun;
2306   int inc;
2307   int count;
2308   rtx argblock = 0;
2309   CUMULATIVE_ARGS args_so_far;
2310   struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
2311                struct args_size offset; struct args_size size; };
2312   struct arg *argvec;
2313   int old_inhibit_defer_pop = inhibit_defer_pop;
2314   int no_queue = 0;
2315   rtx use_insns;
2316   rtx value;
2317   rtx mem_value = 0;
2318   /* library calls are never indirect calls.  */
2319   int current_call_is_indirect = 0;
2320
2321   va_start (p);
2322   orgfun = fun = va_arg (p, rtx);
2323   value = va_arg (p, rtx);
2324   no_queue = va_arg (p, int);
2325   outmode = va_arg (p, enum machine_mode);
2326   nargs = va_arg (p, int);
2327
2328   /* If this kind of value comes back in memory,
2329      decide where in memory it should come back.  */
2330   if (RETURN_IN_MEMORY (type_for_mode (outmode, 0)))
2331     {
2332       if (GET_CODE (value) == MEM)
2333         mem_value = value;
2334       else
2335         mem_value = assign_stack_temp (outmode, GET_MODE_SIZE (outmode), 0);
2336     }
2337
2338   /* ??? Unfinished: must pass the memory address as an argument.  */
2339
2340   /* Copy all the libcall-arguments out of the varargs data
2341      and into a vector ARGVEC.
2342
2343      Compute how to pass each argument.  We only support a very small subset
2344      of the full argument passing conventions to limit complexity here since
2345      library functions shouldn't have many args.  */
2346
2347   argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
2348
2349   INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
2350
2351   args_size.constant = 0;
2352   args_size.var = 0;
2353
2354   count = 0;
2355
2356   /* If there's a structure value address to be passed,
2357      either pass it in the special place, or pass it as an extra argument.  */
2358   if (mem_value)
2359     {
2360       rtx addr = XEXP (mem_value, 0);
2361
2362       if (! struct_value_rtx)
2363         {
2364           nargs++;
2365
2366           /* Make sure it is a reasonable operand for a move or push insn.  */
2367           if (GET_CODE (addr) != REG && GET_CODE (addr) != MEM
2368               && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
2369             addr = force_operand (addr, NULL_RTX);
2370
2371           argvec[count].value = addr;
2372           argvec[count].mode = outmode;
2373           argvec[count].partial = 0;
2374
2375           argvec[count].reg = FUNCTION_ARG (args_so_far, outmode, NULL_TREE, 1);
2376 #ifdef FUNCTION_ARG_PARTIAL_NREGS
2377           if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, outmode, NULL_TREE, 1))
2378             abort ();
2379 #endif
2380
2381           locate_and_pad_parm (outmode, NULL_TREE,
2382                                argvec[count].reg && argvec[count].partial == 0,
2383                                NULL_TREE, &args_size, &argvec[count].offset,
2384                                &argvec[count].size);
2385
2386
2387           if (argvec[count].reg == 0 || argvec[count].partial != 0
2388 #ifdef REG_PARM_STACK_SPACE
2389               || 1
2390 #endif
2391               )
2392             args_size.constant += argvec[count].size.constant;
2393
2394           FUNCTION_ARG_ADVANCE (args_so_far, outmode, (tree)0, 1);
2395         }
2396     }
2397
2398   for (; count < nargs; count++)
2399     {
2400       rtx val = va_arg (p, rtx);
2401       enum machine_mode mode = va_arg (p, enum machine_mode);
2402
2403       /* We cannot convert the arg value to the mode the library wants here;
2404          must do it earlier where we know the signedness of the arg.  */
2405       if (mode == BLKmode
2406           || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
2407         abort ();
2408
2409       /* On some machines, there's no way to pass a float to a library fcn.
2410          Pass it as a double instead.  */
2411 #ifdef LIBGCC_NEEDS_DOUBLE
2412       if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
2413         val = convert_to_mode (DFmode, val, 0), mode = DFmode;
2414 #endif
2415
2416       /* There's no need to call protect_from_queue, because
2417          either emit_move_insn or emit_push_insn will do that.  */
2418
2419       /* Make sure it is a reasonable operand for a move or push insn.  */
2420       if (GET_CODE (val) != REG && GET_CODE (val) != MEM
2421           && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
2422         val = force_operand (val, NULL_RTX);
2423
2424       argvec[count].value = val;
2425       argvec[count].mode = mode;
2426
2427 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
2428       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
2429         abort ();
2430 #endif
2431
2432       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
2433       if (argvec[count].reg && GET_CODE (argvec[count].reg) == EXPR_LIST)
2434         abort ();
2435 #ifdef FUNCTION_ARG_PARTIAL_NREGS
2436       argvec[count].partial
2437         = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
2438 #else
2439       argvec[count].partial = 0;
2440 #endif
2441
2442       locate_and_pad_parm (mode, NULL_TREE,
2443                            argvec[count].reg && argvec[count].partial == 0,
2444                            NULL_TREE, &args_size, &argvec[count].offset,
2445                            &argvec[count].size);
2446
2447       if (argvec[count].size.var)
2448         abort ();
2449
2450 #ifndef REG_PARM_STACK_SPACE
2451       if (argvec[count].partial)
2452         argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
2453 #endif
2454
2455       if (argvec[count].reg == 0 || argvec[count].partial != 0
2456 #ifdef REG_PARM_STACK_SPACE
2457           || 1
2458 #endif
2459           )
2460         args_size.constant += argvec[count].size.constant;
2461
2462 #ifdef ACCUMULATE_OUTGOING_ARGS
2463       /* If this arg is actually passed on the stack, it might be
2464          clobbering something we already put there (this library call might
2465          be inside the evaluation of an argument to a function whose call
2466          requires the stack).  This will only occur when the library call
2467          has sufficient args to run out of argument registers.  Abort in
2468          this case; if this ever occurs, code must be added to save and
2469          restore the arg slot.  */
2470
2471       if (argvec[count].reg == 0 || argvec[count].partial != 0)
2472         abort ();
2473 #endif
2474
2475       FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree)0, 1);
2476     }
2477   va_end (p);
2478
2479   /* If this machine requires an external definition for library
2480      functions, write one out.  */
2481   assemble_external_libcall (fun);
2482
2483   original_args_size = args_size;
2484 #ifdef STACK_BOUNDARY
2485   args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
2486                          / STACK_BYTES) * STACK_BYTES);
2487 #endif
2488
2489 #ifdef REG_PARM_STACK_SPACE
2490   args_size.constant = MAX (args_size.constant,
2491                             REG_PARM_STACK_SPACE (NULL_TREE));
2492 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2493   args_size.constant -= REG_PARM_STACK_SPACE (NULL_TREE);
2494 #endif
2495 #endif
2496
2497 #ifdef ACCUMULATE_OUTGOING_ARGS
2498   if (args_size.constant > current_function_outgoing_args_size)
2499     current_function_outgoing_args_size = args_size.constant;
2500   args_size.constant = 0;
2501 #endif
2502
2503 #ifndef PUSH_ROUNDING
2504   argblock = push_block (GEN_INT (args_size.constant), 0, 0);
2505 #endif
2506
2507 #ifdef PUSH_ARGS_REVERSED
2508 #ifdef STACK_BOUNDARY
2509   /* If we push args individually in reverse order, perform stack alignment
2510      before the first push (the last arg).  */
2511   if (argblock == 0)
2512     anti_adjust_stack (GEN_INT (args_size.constant
2513                                 - original_args_size.constant));
2514 #endif
2515 #endif
2516
2517 #ifdef PUSH_ARGS_REVERSED
2518   inc = -1;
2519   argnum = nargs - 1;
2520 #else
2521   inc = 1;
2522   argnum = 0;
2523 #endif
2524
2525   /* Push the args that need to be pushed.  */
2526
2527   for (count = 0; count < nargs; count++, argnum += inc)
2528     {
2529       register enum machine_mode mode = argvec[argnum].mode;
2530       register rtx val = argvec[argnum].value;
2531       rtx reg = argvec[argnum].reg;
2532       int partial = argvec[argnum].partial;
2533
2534       if (! (reg != 0 && partial == 0))
2535         emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
2536                         argblock, GEN_INT (argvec[count].offset.constant));
2537       NO_DEFER_POP;
2538     }
2539
2540 #ifndef PUSH_ARGS_REVERSED
2541 #ifdef STACK_BOUNDARY
2542   /* If we pushed args in forward order, perform stack alignment
2543      after pushing the last arg.  */
2544   if (argblock == 0)
2545     anti_adjust_stack (GEN_INT (args_size.constant
2546                                 - original_args_size.constant));
2547 #endif
2548 #endif
2549
2550 #ifdef PUSH_ARGS_REVERSED
2551   argnum = nargs - 1;
2552 #else
2553   argnum = 0;
2554 #endif
2555
2556   /* Now load any reg parms into their regs.  */
2557
2558   if (mem_value != 0 && struct_value_rtx != 0)
2559     emit_move_insn (struct_value_rtx, XEXP (mem_value, 0));
2560
2561   for (count = 0; count < nargs; count++, argnum += inc)
2562     {
2563       register enum machine_mode mode = argvec[argnum].mode;
2564       register rtx val = argvec[argnum].value;
2565       rtx reg = argvec[argnum].reg;
2566       int partial = argvec[argnum].partial;
2567
2568       if (reg != 0 && partial == 0)
2569         emit_move_insn (reg, val);
2570       NO_DEFER_POP;
2571     }
2572
2573 #if 0
2574   /* For version 1.37, try deleting this entirely.  */
2575   if (! no_queue)
2576     emit_queue ();
2577 #endif
2578
2579   /* Any regs containing parms remain in use through the call.  */
2580   start_sequence ();
2581   for (count = 0; count < nargs; count++)
2582     if (argvec[count].reg != 0)
2583       emit_insn (gen_rtx (USE, VOIDmode, argvec[count].reg));
2584
2585   use_insns = get_insns ();
2586   end_sequence ();
2587
2588   fun = prepare_call_address (fun, NULL_TREE, &use_insns);
2589
2590   /* Don't allow popping to be deferred, since then
2591      cse'ing of library calls could delete a call and leave the pop.  */
2592   NO_DEFER_POP;
2593
2594   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
2595      will set inhibit_defer_pop to that value.  */
2596
2597   emit_call_1 (fun, get_identifier (XSTR (orgfun, 0)), args_size.constant, 0,
2598                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
2599                outmode != VOIDmode ? hard_libcall_value (outmode) : NULL_RTX,
2600                old_inhibit_defer_pop + 1, use_insns, no_queue);
2601
2602   /* Now restore inhibit_defer_pop to its actual original value.  */
2603   OK_DEFER_POP;
2604
2605   /* Copy the value to the right place.  */
2606   if (outmode != VOIDmode)
2607     {
2608       if (mem_value)
2609         {
2610           if (value == 0)
2611             value = hard_libcall_value (outmode);
2612           if (value != mem_value)
2613             emit_move_insn (value, mem_value);
2614         }
2615       else if (value != 0)
2616         emit_move_insn (value, hard_libcall_value (outmode));
2617     }
2618 }
2619 \f
2620 #if 0
2621 /* Return an rtx which represents a suitable home on the stack
2622    given TYPE, the type of the argument looking for a home.
2623    This is called only for BLKmode arguments.
2624
2625    SIZE is the size needed for this target.
2626    ARGS_ADDR is the address of the bottom of the argument block for this call.
2627    OFFSET describes this parameter's offset into ARGS_ADDR.  It is meaningless
2628    if this machine uses push insns.  */
2629
2630 static rtx
2631 target_for_arg (type, size, args_addr, offset)
2632      tree type;
2633      rtx size;
2634      rtx args_addr;
2635      struct args_size offset;
2636 {
2637   rtx target;
2638   rtx offset_rtx = ARGS_SIZE_RTX (offset);
2639
2640   /* We do not call memory_address if possible,
2641      because we want to address as close to the stack
2642      as possible.  For non-variable sized arguments,
2643      this will be stack-pointer relative addressing.  */
2644   if (GET_CODE (offset_rtx) == CONST_INT)
2645     target = plus_constant (args_addr, INTVAL (offset_rtx));
2646   else
2647     {
2648       /* I have no idea how to guarantee that this
2649          will work in the presence of register parameters.  */
2650       target = gen_rtx (PLUS, Pmode, args_addr, offset_rtx);
2651       target = memory_address (QImode, target);
2652     }
2653
2654   return gen_rtx (MEM, BLKmode, target);
2655 }
2656 #endif
2657 \f
2658 /* Store a single argument for a function call
2659    into the register or memory area where it must be passed.
2660    *ARG describes the argument value and where to pass it.
2661
2662    ARGBLOCK is the address of the stack-block for all the arguments,
2663    or 0 on a machine where arguments are pushed individually.
2664
2665    MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
2666    so must be careful about how the stack is used. 
2667
2668    VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
2669    argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
2670    that we need not worry about saving and restoring the stack.
2671
2672    FNDECL is the declaration of the function we are calling.  */
2673
2674 static void
2675 store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl,
2676                reg_parm_stack_space)
2677      struct arg_data *arg;
2678      rtx argblock;
2679      int may_be_alloca;
2680      int variable_size;
2681      tree fndecl;
2682      int reg_parm_stack_space;
2683 {
2684   register tree pval = arg->tree_value;
2685   rtx reg = 0;
2686   int partial = 0;
2687   int used = 0;
2688   int i, lower_bound, upper_bound;
2689
2690   if (TREE_CODE (pval) == ERROR_MARK)
2691     return;
2692
2693 #ifdef ACCUMULATE_OUTGOING_ARGS
2694   /* If this is being stored into a pre-allocated, fixed-size, stack area,
2695      save any previous data at that location.  */
2696   if (argblock && ! variable_size && arg->stack)
2697     {
2698 #ifdef ARGS_GROW_DOWNWARD
2699       /* stack_slot is negative, but we want to index stack_usage_map */
2700       /* with positive values. */
2701       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
2702         upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
2703       else
2704         abort ();
2705
2706       lower_bound = upper_bound - arg->size.constant;
2707 #else
2708       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
2709         lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
2710       else
2711         lower_bound = 0;
2712
2713       upper_bound = lower_bound + arg->size.constant;
2714 #endif
2715
2716       for (i = lower_bound; i < upper_bound; i++)
2717         if (stack_usage_map[i]
2718 #ifdef REG_PARM_STACK_SPACE
2719             /* Don't store things in the fixed argument area at this point;
2720                it has already been saved.  */
2721             && i > reg_parm_stack_space
2722 #endif
2723             )
2724           break;
2725
2726       if (i != upper_bound)
2727         {
2728           /* We need to make a save area.  See what mode we can make it.  */
2729           enum machine_mode save_mode
2730             = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
2731           rtx stack_area
2732             = gen_rtx (MEM, save_mode,
2733                        memory_address (save_mode, XEXP (arg->stack_slot, 0)));
2734
2735           if (save_mode == BLKmode)
2736             {
2737               arg->save_area = assign_stack_temp (BLKmode,
2738                                                   arg->size.constant, 1);
2739               emit_block_move (validize_mem (arg->save_area), stack_area,
2740                                GEN_INT (arg->size.constant),
2741                                PARM_BOUNDARY / BITS_PER_UNIT);
2742             }
2743           else
2744             {
2745               arg->save_area = gen_reg_rtx (save_mode);
2746               emit_move_insn (arg->save_area, stack_area);
2747             }
2748         }
2749     }
2750 #endif
2751
2752   /* If this isn't going to be placed on both the stack and in registers,
2753      set up the register and number of words.  */
2754   if (! arg->pass_on_stack)
2755     reg = arg->reg, partial = arg->partial;
2756
2757   if (reg != 0 && partial == 0)
2758     /* Being passed entirely in a register.  We shouldn't be called in
2759        this case.   */
2760     abort ();
2761
2762 #ifdef STRICT_ALIGNMENT
2763   /* If this arg needs special alignment, don't load the registers
2764      here.  */
2765   if (arg->n_aligned_regs != 0)
2766     reg = 0;
2767 #endif
2768   
2769   /* If this is being partially passed in a register, but multiple locations
2770      are specified, we assume that the one partially used is the one that is
2771      listed first.  */
2772   if (reg && GET_CODE (reg) == EXPR_LIST)
2773     reg = XEXP (reg, 0);
2774
2775   /* If this is being passed partially in a register, we can't evaluate
2776      it directly into its stack slot.  Otherwise, we can.  */
2777   if (arg->value == 0)
2778     {
2779 #ifdef ACCUMULATE_OUTGOING_ARGS
2780       /* stack_arg_under_construction is nonzero if a function argument is
2781          being evaluated directly into the outgoing argument list and
2782          expand_call must take special action to preserve the argument list
2783          if it is called recursively.
2784
2785          For scalar function arguments stack_usage_map is sufficient to
2786          determine which stack slots must be saved and restored.  Scalar
2787          arguments in general have pass_on_stack == 0.
2788
2789          If this argument is initialized by a function which takes the
2790          address of the argument (a C++ constructor or a C function
2791          returning a BLKmode structure), then stack_usage_map is
2792          insufficient and expand_call must push the stack around the
2793          function call.  Such arguments have pass_on_stack == 1.
2794
2795          Note that it is always safe to set stack_arg_under_construction,
2796          but this generates suboptimal code if set when not needed.  */
2797
2798       if (arg->pass_on_stack)
2799         stack_arg_under_construction++;
2800 #endif
2801       arg->value = expand_expr (pval, partial ? NULL_RTX : arg->stack,
2802                                 VOIDmode, 0);
2803
2804       /* If we are promoting object (or for any other reason) the mode
2805          doesn't agree, convert the mode.  */
2806
2807       if (GET_MODE (arg->value) != VOIDmode
2808           && GET_MODE (arg->value) != arg->mode)
2809         arg->value = convert_to_mode (arg->mode, arg->value, arg->unsignedp);
2810
2811 #ifdef ACCUMULATE_OUTGOING_ARGS
2812       if (arg->pass_on_stack)
2813         stack_arg_under_construction--;
2814 #endif
2815     }
2816
2817   /* Don't allow anything left on stack from computation
2818      of argument to alloca.  */
2819   if (may_be_alloca)
2820     do_pending_stack_adjust ();
2821
2822   if (arg->value == arg->stack)
2823     /* If the value is already in the stack slot, we are done.  */
2824     ;
2825   else if (arg->mode != BLKmode)
2826     {
2827       register int size;
2828
2829       /* Argument is a scalar, not entirely passed in registers.
2830          (If part is passed in registers, arg->partial says how much
2831          and emit_push_insn will take care of putting it there.)
2832          
2833          Push it, and if its size is less than the
2834          amount of space allocated to it,
2835          also bump stack pointer by the additional space.
2836          Note that in C the default argument promotions
2837          will prevent such mismatches.  */
2838
2839       size = GET_MODE_SIZE (arg->mode);
2840       /* Compute how much space the push instruction will push.
2841          On many machines, pushing a byte will advance the stack
2842          pointer by a halfword.  */
2843 #ifdef PUSH_ROUNDING
2844       size = PUSH_ROUNDING (size);
2845 #endif
2846       used = size;
2847
2848       /* Compute how much space the argument should get:
2849          round up to a multiple of the alignment for arguments.  */
2850       if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
2851         used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
2852                  / (PARM_BOUNDARY / BITS_PER_UNIT))
2853                 * (PARM_BOUNDARY / BITS_PER_UNIT));
2854
2855       /* This isn't already where we want it on the stack, so put it there.
2856          This can either be done with push or copy insns.  */
2857       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX,
2858                       0, partial, reg, used - size,
2859                       argblock, ARGS_SIZE_RTX (arg->offset));
2860     }
2861   else
2862     {
2863       /* BLKmode, at least partly to be pushed.  */
2864
2865       register int excess;
2866       rtx size_rtx;
2867
2868       /* Pushing a nonscalar.
2869          If part is passed in registers, PARTIAL says how much
2870          and emit_push_insn will take care of putting it there.  */
2871
2872       /* Round its size up to a multiple
2873          of the allocation unit for arguments.  */
2874
2875       if (arg->size.var != 0)
2876         {
2877           excess = 0;
2878           size_rtx = ARGS_SIZE_RTX (arg->size);
2879         }
2880       else
2881         {
2882           /* PUSH_ROUNDING has no effect on us, because
2883              emit_push_insn for BLKmode is careful to avoid it.  */
2884           excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
2885                     + partial * UNITS_PER_WORD);
2886           size_rtx = expr_size (pval);
2887         }
2888
2889       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
2890                       TYPE_ALIGN (TREE_TYPE (pval)) / BITS_PER_UNIT, partial,
2891                       reg, excess, argblock, ARGS_SIZE_RTX (arg->offset));
2892     }
2893
2894
2895   /* Unless this is a partially-in-register argument, the argument is now
2896      in the stack. 
2897
2898      ??? Note that this can change arg->value from arg->stack to
2899      arg->stack_slot and it matters when they are not the same.
2900      It isn't totally clear that this is correct in all cases.  */
2901   if (partial == 0)
2902     arg->value = arg->stack_slot;
2903
2904   /* Once we have pushed something, pops can't safely
2905      be deferred during the rest of the arguments.  */
2906   NO_DEFER_POP;
2907
2908   /* ANSI doesn't require a sequence point here,
2909      but PCC has one, so this will avoid some problems.  */
2910   emit_queue ();
2911
2912   /* Free any temporary slots made in processing this argument.  */
2913   free_temp_slots ();
2914
2915 #ifdef ACCUMULATE_OUTGOING_ARGS
2916   /* Now mark the segment we just used.  */
2917   if (argblock && ! variable_size && arg->stack)
2918     for (i = lower_bound; i < upper_bound; i++)
2919       stack_usage_map[i] = 1;
2920 #endif
2921 }