(substitute_expr): Don't abort for RTL_EXPR and SAVE_EXPR; just do
[platform/upstream/gcc.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           if (TREE_THIS_VOLATILE (fndecl))
598             is_volatile = 1;
599         }
600     }
601
602 #ifdef REG_PARM_STACK_SPACE
603 #ifdef MAYBE_REG_PARM_STACK_SPACE
604   reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
605 #else
606   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
607 #endif
608 #endif
609
610   /* Warn if this value is an aggregate type,
611      regardless of which calling convention we are using for it.  */
612   if (warn_aggregate_return
613       && (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
614           || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
615           || TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE
616           || TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE))
617     warning ("function call has aggregate value");
618
619   /* Set up a place to return a structure.  */
620
621   /* Cater to broken compilers.  */
622   if (aggregate_value_p (exp))
623     {
624       /* This call returns a big structure.  */
625       is_const = 0;
626
627 #ifdef PCC_STATIC_STRUCT_RETURN
628       {
629         pcc_struct_value = 1;
630         is_integrable = 0;  /* Easier than making that case work right.  */
631       }
632 #else /* not PCC_STATIC_STRUCT_RETURN */
633       {
634         struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
635
636         if (struct_value_size < 0)
637           abort ();
638
639         if (target && GET_CODE (target) == MEM)
640           structure_value_addr = XEXP (target, 0);
641         else
642           {
643             /* Assign a temporary on the stack to hold the value.  */
644
645             /* For variable-sized objects, we must be called with a target
646                specified.  If we were to allocate space on the stack here,
647                we would have no way of knowing when to free it.  */
648
649             structure_value_addr
650               = XEXP (assign_stack_temp (BLKmode, struct_value_size, 1), 0);
651             target = 0;
652           }
653       }
654 #endif /* not PCC_STATIC_STRUCT_RETURN */
655     }
656
657   /* If called function is inline, try to integrate it.  */
658
659   if (is_integrable)
660     {
661       rtx temp;
662       rtx before_call = get_last_insn ();
663
664       temp = expand_inline_function (fndecl, actparms, target,
665                                      ignore, TREE_TYPE (exp),
666                                      structure_value_addr);
667
668       /* If inlining succeeded, return.  */
669       if ((HOST_WIDE_INT) temp != -1)
670         {
671           /* Perform all cleanups needed for the arguments of this call
672              (i.e. destructors in C++).  It is ok if these destructors
673              clobber RETURN_VALUE_REG, because the only time we care about
674              this is when TARGET is that register.  But in C++, we take
675              care to never return that register directly.  */
676           expand_cleanups_to (old_cleanups);
677
678 #ifdef ACCUMULATE_OUTGOING_ARGS
679           /* If the outgoing argument list must be preserved, push
680              the stack before executing the inlined function if it
681              makes any calls.  */
682
683           for (i = reg_parm_stack_space - 1; i >= 0; i--)
684             if (i < highest_outgoing_arg_in_use && stack_usage_map[i] != 0)
685               break;
686
687           if (stack_arg_under_construction || i >= 0)
688             {
689               rtx insn = NEXT_INSN (before_call), seq;
690
691               /* Look for a call in the inline function code.
692                  If OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) is
693                  nonzero then there is a call and it is not necessary
694                  to scan the insns.  */
695
696               if (OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl)) == 0)
697                 for (; insn; insn = NEXT_INSN (insn))
698                   if (GET_CODE (insn) == CALL_INSN)
699                     break;
700
701               if (insn)
702                 {
703                   /* Reserve enough stack space so that the largest
704                      argument list of any function call in the inline
705                      function does not overlap the argument list being
706                      evaluated.  This is usually an overestimate because
707                      allocate_dynamic_stack_space reserves space for an
708                      outgoing argument list in addition to the requested
709                      space, but there is no way to ask for stack space such
710                      that an argument list of a certain length can be
711                      safely constructed.  */
712
713                   int adjust = OUTGOING_ARGS_SIZE (DECL_SAVED_INSNS (fndecl));
714 #ifdef REG_PARM_STACK_SPACE
715                   /* Add the stack space reserved for register arguments
716                      in the inline function.  What is really needed is the
717                      largest value of reg_parm_stack_space in the inline
718                      function, but that is not available.  Using the current
719                      value of reg_parm_stack_space is wrong, but gives
720                      correct results on all supported machines.  */
721                   adjust += reg_parm_stack_space;
722 #endif
723                   start_sequence ();
724                   emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
725                   allocate_dynamic_stack_space (GEN_INT (adjust),
726                                                 NULL_RTX, BITS_PER_UNIT);
727                   seq = get_insns ();
728                   end_sequence ();
729                   emit_insns_before (seq, NEXT_INSN (before_call));
730                   emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
731                 }
732             }
733 #endif
734
735           /* If the result is equivalent to TARGET, return TARGET to simplify
736              checks in store_expr.  They can be equivalent but not equal in the
737              case of a function that returns BLKmode.  */
738           if (temp != target && rtx_equal_p (temp, target))
739             return target;
740           return temp;
741         }
742
743       /* If inlining failed, mark FNDECL as needing to be compiled
744          separately after all.  */
745       mark_addressable (fndecl);
746     }
747
748   /* When calling a const function, we must pop the stack args right away,
749      so that the pop is deleted or moved with the call.  */
750   if (is_const)
751     NO_DEFER_POP;
752
753   function_call_count++;
754
755   if (fndecl && DECL_NAME (fndecl))
756     name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
757
758   /* On some machines (such as the PA) indirect calls have a different
759      calling convention than normal calls.  FUNCTION_ARG in the target
760      description can look at current_call_is_indirect to determine which
761      calling convention to use.  */
762   current_call_is_indirect = (fndecl == 0);
763 #if 0
764     = TREE_CODE (TREE_OPERAND (exp, 0)) == NON_LVALUE_EXPR ? 1 : 0;
765 #endif
766
767 #if 0
768   /* Unless it's a call to a specific function that isn't alloca,
769      if it has one argument, we must assume it might be alloca.  */
770
771   may_be_alloca =
772     (!(fndecl != 0 && strcmp (name, "alloca"))
773      && actparms != 0
774      && TREE_CHAIN (actparms) == 0);
775 #else
776   /* We assume that alloca will always be called by name.  It
777      makes no sense to pass it as a pointer-to-function to
778      anything that does not understand its behavior.  */
779   may_be_alloca =
780     (name && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
781                  && name[0] == 'a'
782                  && ! strcmp (name, "alloca"))
783                 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
784                     && name[0] == '_'
785                     && ! strcmp (name, "__builtin_alloca"))));
786 #endif
787
788   /* See if this is a call to a function that can return more than once
789      or a call to longjmp.  */
790
791   returns_twice = 0;
792   is_longjmp = 0;
793
794   if (name != 0 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 15)
795     {
796       char *tname = name;
797
798       /* Disregard prefix _, __ or __x.  */
799       if (name[0] == '_')
800         {
801           if (name[1] == '_' && name[2] == 'x')
802             tname += 3;
803           else if (name[1] == '_')
804             tname += 2;
805           else
806             tname += 1;
807         }
808
809       if (tname[0] == 's')
810         {
811           returns_twice
812             = ((tname[1] == 'e'
813                 && (! strcmp (tname, "setjmp")
814                     || ! strcmp (tname, "setjmp_syscall")))
815                || (tname[1] == 'i'
816                    && ! strcmp (tname, "sigsetjmp"))
817                || (tname[1] == 'a'
818                    && ! strcmp (tname, "savectx")));
819           if (tname[1] == 'i'
820               && ! strcmp (tname, "siglongjmp"))
821             is_longjmp = 1;
822         }
823       else if ((tname[0] == 'q' && tname[1] == 's'
824                 && ! strcmp (tname, "qsetjmp"))
825                || (tname[0] == 'v' && tname[1] == 'f'
826                    && ! strcmp (tname, "vfork")))
827         returns_twice = 1;
828
829       else if (tname[0] == 'l' && tname[1] == 'o'
830                && ! strcmp (tname, "longjmp"))
831         is_longjmp = 1;
832     }
833
834   if (may_be_alloca)
835     current_function_calls_alloca = 1;
836
837   /* Don't let pending stack adjusts add up to too much.
838      Also, do all pending adjustments now
839      if there is any chance this might be a call to alloca.  */
840
841   if (pending_stack_adjust >= 32
842       || (pending_stack_adjust > 0 && may_be_alloca))
843     do_pending_stack_adjust ();
844
845   /* Operand 0 is a pointer-to-function; get the type of the function.  */
846   funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
847   if (TREE_CODE (funtype) != POINTER_TYPE)
848     abort ();
849   funtype = TREE_TYPE (funtype);
850
851   /* Push the temporary stack slot level so that we can free any temporaries
852      we make.  */
853   push_temp_slots ();
854
855   /* Start updating where the next arg would go.  */
856   INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX);
857
858   /* If struct_value_rtx is 0, it means pass the address
859      as if it were an extra parameter.  */
860   if (structure_value_addr && struct_value_rtx == 0)
861     {
862 #ifdef ACCUMULATE_OUTGOING_ARGS
863       /* If the stack will be adjusted, make sure the structure address
864          does not refer to virtual_outgoing_args_rtx.  */
865       rtx temp = (stack_arg_under_construction
866                   ? copy_addr_to_reg (structure_value_addr)
867                   : force_reg (Pmode, structure_value_addr));
868 #else
869       rtx temp = force_reg (Pmode, structure_value_addr);
870 #endif
871
872       actparms
873         = tree_cons (error_mark_node,
874                      make_tree (build_pointer_type (TREE_TYPE (funtype)),
875                                 temp),
876                      actparms);
877       structure_value_addr_parm = 1;
878     }
879
880   /* Count the arguments and set NUM_ACTUALS.  */
881   for (p = actparms, i = 0; p; p = TREE_CHAIN (p)) i++;
882   num_actuals = i;
883
884   /* Compute number of named args.
885      Normally, don't include the last named arg if anonymous args follow.
886      (If no anonymous args follow, the result of list_length
887      is actually one too large.)
888
889      If SETUP_INCOMING_VARARGS is defined, this machine will be able to
890      place unnamed args that were passed in registers into the stack.  So
891      treat all args as named.  This allows the insns emitting for a specific
892      argument list to be independent of the function declaration.
893
894      If SETUP_INCOMING_VARARGS is not defined, we do not have any reliable
895      way to pass unnamed args in registers, so we must force them into
896      memory.  */
897 #ifndef SETUP_INCOMING_VARARGS
898   if (TYPE_ARG_TYPES (funtype) != 0)
899     n_named_args
900       = list_length (TYPE_ARG_TYPES (funtype)) - 1
901         /* Count the struct value address, if it is passed as a parm.  */
902         + structure_value_addr_parm;
903   else
904 #endif
905     /* If we know nothing, treat all args as named.  */
906     n_named_args = num_actuals;
907
908   /* Make a vector to hold all the information about each arg.  */
909   args = (struct arg_data *) alloca (num_actuals * sizeof (struct arg_data));
910   bzero (args, num_actuals * sizeof (struct arg_data));
911
912   args_size.constant = 0;
913   args_size.var = 0;
914
915   /* In this loop, we consider args in the order they are written.
916      We fill up ARGS from the front of from the back if necessary
917      so that in any case the first arg to be pushed ends up at the front.  */
918
919 #ifdef PUSH_ARGS_REVERSED
920   i = num_actuals - 1, inc = -1;
921   /* In this case, must reverse order of args
922      so that we compute and push the last arg first.  */
923 #else
924   i = 0, inc = 1;
925 #endif
926
927   /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
928   for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
929     {
930       tree type = TREE_TYPE (TREE_VALUE (p));
931       enum machine_mode mode;
932
933       args[i].tree_value = TREE_VALUE (p);
934
935       /* Replace erroneous argument with constant zero.  */
936       if (type == error_mark_node || TYPE_SIZE (type) == 0)
937         args[i].tree_value = integer_zero_node, type = integer_type_node;
938
939       /* Decide where to pass this arg.
940
941          args[i].reg is nonzero if all or part is passed in registers.
942
943          args[i].partial is nonzero if part but not all is passed in registers,
944          and the exact value says how many words are passed in registers.
945
946          args[i].pass_on_stack is nonzero if the argument must at least be
947          computed on the stack.  It may then be loaded back into registers
948          if args[i].reg is nonzero.
949
950          These decisions are driven by the FUNCTION_... macros and must agree
951          with those made by function.c.  */
952
953       /* See if this argument should be passed by invisible reference.  */
954       if ((TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
955            && contains_placeholder_p (TYPE_SIZE (type)))
956 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
957           || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, TYPE_MODE (type),
958                                              type, argpos < n_named_args)
959 #endif
960           )
961         {
962 #ifdef FUNCTION_ARG_CALLEE_COPIES
963           if (FUNCTION_ARG_CALLEE_COPIES (args_so_far, TYPE_MODE (type), type,
964                                           argpos < n_named_args)
965               /* If it's in a register, we must make a copy of it too.  */
966               /* ??? Is this a sufficient test?  Is there a better one? */
967               && !(TREE_CODE (args[i].tree_value) == VAR_DECL
968                    && REG_P (DECL_RTL (args[i].tree_value))))
969             {
970               args[i].tree_value = build1 (ADDR_EXPR,
971                                            build_pointer_type (type),
972                                            args[i].tree_value);
973               type = build_pointer_type (type);
974             }
975           else
976 #endif
977             {
978               /* We make a copy of the object and pass the address to the
979                  function being called.  */
980               rtx copy;
981
982               if (TYPE_SIZE (type) == 0
983                   || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
984                 {
985                   /* This is a variable-sized object.  Make space on the stack
986                      for it.  */
987                   rtx size_rtx = expr_size (TREE_VALUE (p));
988
989                   if (old_stack_level == 0)
990                     {
991                       emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
992                       old_pending_adj = pending_stack_adjust;
993                       pending_stack_adjust = 0;
994                     }
995
996                   copy = gen_rtx (MEM, BLKmode,
997                                   allocate_dynamic_stack_space (size_rtx,
998                                                                 NULL_RTX,
999                                                                 TYPE_ALIGN (type)));
1000                 }
1001               else
1002                 {
1003                   int size = int_size_in_bytes (type);
1004                   copy = assign_stack_temp (TYPE_MODE (type), size, 1);
1005                 }
1006
1007               MEM_IN_STRUCT_P (copy)
1008                 = (TREE_CODE (type) == RECORD_TYPE
1009                    || TREE_CODE (type) == UNION_TYPE
1010                    || TREE_CODE (type) == QUAL_UNION_TYPE
1011                    || TREE_CODE (type) == ARRAY_TYPE);
1012
1013               store_expr (args[i].tree_value, copy, 0);
1014
1015               args[i].tree_value = build1 (ADDR_EXPR,
1016                                            build_pointer_type (type),
1017                                            make_tree (type, copy));
1018               type = build_pointer_type (type);
1019             }
1020         }
1021
1022       mode = TYPE_MODE (type);
1023
1024 #ifdef PROMOTE_FUNCTION_ARGS
1025       /* Compute the mode in which the arg is actually to be extended to.  */
1026       if (TREE_CODE (type) == INTEGER_TYPE || TREE_CODE (type) == ENUMERAL_TYPE
1027           || TREE_CODE (type) == BOOLEAN_TYPE || TREE_CODE (type) == CHAR_TYPE
1028           || TREE_CODE (type) == REAL_TYPE || TREE_CODE (type) == POINTER_TYPE
1029           || TREE_CODE (type) == OFFSET_TYPE)
1030         {
1031           int unsignedp = TREE_UNSIGNED (type);
1032           PROMOTE_MODE (mode, unsignedp, type);
1033           args[i].unsignedp = unsignedp;
1034         }
1035 #endif
1036
1037       args[i].mode = mode;
1038       args[i].reg = FUNCTION_ARG (args_so_far, mode, type,
1039                                   argpos < n_named_args);
1040 #ifdef FUNCTION_ARG_PARTIAL_NREGS
1041       if (args[i].reg)
1042         args[i].partial
1043           = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, type,
1044                                         argpos < n_named_args);
1045 #endif
1046
1047       args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
1048
1049       /* If FUNCTION_ARG returned an (expr_list (nil) FOO), it means that
1050          we are to pass this arg in the register(s) designated by FOO, but
1051          also to pass it in the stack.  */
1052       if (args[i].reg && GET_CODE (args[i].reg) == EXPR_LIST
1053           && XEXP (args[i].reg, 0) == 0)
1054         args[i].pass_on_stack = 1, args[i].reg = XEXP (args[i].reg, 1);
1055
1056       /* If this is an addressable type, we must preallocate the stack
1057          since we must evaluate the object into its final location.
1058
1059          If this is to be passed in both registers and the stack, it is simpler
1060          to preallocate.  */
1061       if (TREE_ADDRESSABLE (type)
1062           || (args[i].pass_on_stack && args[i].reg != 0))
1063         must_preallocate = 1;
1064
1065       /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
1066          we cannot consider this function call constant.  */
1067       if (TREE_ADDRESSABLE (type))
1068         is_const = 0;
1069
1070       /* Compute the stack-size of this argument.  */
1071       if (args[i].reg == 0 || args[i].partial != 0
1072 #ifdef REG_PARM_STACK_SPACE
1073           || reg_parm_stack_space > 0
1074 #endif
1075           || args[i].pass_on_stack)
1076         locate_and_pad_parm (mode, type,
1077 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1078                              1,
1079 #else
1080                              args[i].reg != 0,
1081 #endif
1082                              fndecl, &args_size, &args[i].offset,
1083                              &args[i].size);
1084
1085 #ifndef ARGS_GROW_DOWNWARD
1086       args[i].slot_offset = args_size;
1087 #endif
1088
1089 #ifndef REG_PARM_STACK_SPACE
1090       /* If a part of the arg was put into registers,
1091          don't include that part in the amount pushed.  */
1092       if (! args[i].pass_on_stack)
1093         args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
1094                                   / (PARM_BOUNDARY / BITS_PER_UNIT)
1095                                   * (PARM_BOUNDARY / BITS_PER_UNIT));
1096 #endif
1097       
1098       /* Update ARGS_SIZE, the total stack space for args so far.  */
1099
1100       args_size.constant += args[i].size.constant;
1101       if (args[i].size.var)
1102         {
1103           ADD_PARM_SIZE (args_size, args[i].size.var);
1104         }
1105
1106       /* Since the slot offset points to the bottom of the slot,
1107          we must record it after incrementing if the args grow down.  */
1108 #ifdef ARGS_GROW_DOWNWARD
1109       args[i].slot_offset = args_size;
1110
1111       args[i].slot_offset.constant = -args_size.constant;
1112       if (args_size.var)
1113         {
1114           SUB_PARM_SIZE (args[i].slot_offset, args_size.var);
1115         }
1116 #endif
1117
1118       /* Increment ARGS_SO_FAR, which has info about which arg-registers
1119          have been used, etc.  */
1120
1121       FUNCTION_ARG_ADVANCE (args_so_far, TYPE_MODE (type), type,
1122                             argpos < n_named_args);
1123     }
1124
1125 #ifdef FINAL_REG_PARM_STACK_SPACE
1126   reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
1127                                                      args_size.var);
1128 #endif
1129       
1130   /* Compute the actual size of the argument block required.  The variable
1131      and constant sizes must be combined, the size may have to be rounded,
1132      and there may be a minimum required size.  */
1133
1134   original_args_size = args_size;
1135   if (args_size.var)
1136     {
1137       /* If this function requires a variable-sized argument list, don't try to
1138          make a cse'able block for this call.  We may be able to do this
1139          eventually, but it is too complicated to keep track of what insns go
1140          in the cse'able block and which don't.  */
1141
1142       is_const = 0;
1143       must_preallocate = 1;
1144
1145       args_size.var = ARGS_SIZE_TREE (args_size);
1146       args_size.constant = 0;
1147
1148 #ifdef STACK_BOUNDARY
1149       if (STACK_BOUNDARY != BITS_PER_UNIT)
1150         args_size.var = round_up (args_size.var, STACK_BYTES);
1151 #endif
1152
1153 #ifdef REG_PARM_STACK_SPACE
1154       if (reg_parm_stack_space > 0)
1155         {
1156           args_size.var
1157             = size_binop (MAX_EXPR, args_size.var,
1158                           size_int (REG_PARM_STACK_SPACE (fndecl)));
1159
1160 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1161           /* The area corresponding to register parameters is not to count in
1162              the size of the block we need.  So make the adjustment.  */
1163           args_size.var
1164             = size_binop (MINUS_EXPR, args_size.var,
1165                           size_int (reg_parm_stack_space));
1166 #endif
1167         }
1168 #endif
1169     }
1170   else
1171     {
1172 #ifdef STACK_BOUNDARY
1173       args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
1174                              / STACK_BYTES) * STACK_BYTES);
1175 #endif
1176
1177 #ifdef REG_PARM_STACK_SPACE
1178       args_size.constant = MAX (args_size.constant,
1179                                 reg_parm_stack_space);
1180 #ifdef MAYBE_REG_PARM_STACK_SPACE
1181       if (reg_parm_stack_space == 0)
1182         args_size.constant = 0;
1183 #endif
1184 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1185       args_size.constant -= reg_parm_stack_space;
1186 #endif
1187 #endif
1188     }
1189
1190   /* See if we have or want to preallocate stack space.
1191
1192      If we would have to push a partially-in-regs parm
1193      before other stack parms, preallocate stack space instead.
1194
1195      If the size of some parm is not a multiple of the required stack
1196      alignment, we must preallocate.
1197
1198      If the total size of arguments that would otherwise create a copy in
1199      a temporary (such as a CALL) is more than half the total argument list
1200      size, preallocation is faster.
1201
1202      Another reason to preallocate is if we have a machine (like the m88k)
1203      where stack alignment is required to be maintained between every
1204      pair of insns, not just when the call is made.  However, we assume here
1205      that such machines either do not have push insns (and hence preallocation
1206      would occur anyway) or the problem is taken care of with
1207      PUSH_ROUNDING.  */
1208
1209   if (! must_preallocate)
1210     {
1211       int partial_seen = 0;
1212       int copy_to_evaluate_size = 0;
1213
1214       for (i = 0; i < num_actuals && ! must_preallocate; i++)
1215         {
1216           if (args[i].partial > 0 && ! args[i].pass_on_stack)
1217             partial_seen = 1;
1218           else if (partial_seen && args[i].reg == 0)
1219             must_preallocate = 1;
1220
1221           if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1222               && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1223                   || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1224                   || TREE_CODE (args[i].tree_value) == COND_EXPR
1225                   || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1226             copy_to_evaluate_size
1227               += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1228         }
1229
1230       if (copy_to_evaluate_size * 2 >= args_size.constant
1231           && args_size.constant > 0)
1232         must_preallocate = 1;
1233     }
1234
1235   /* If the structure value address will reference the stack pointer, we must
1236      stabilize it.  We don't need to do this if we know that we are not going
1237      to adjust the stack pointer in processing this call.  */
1238
1239   if (structure_value_addr
1240       && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
1241        || reg_mentioned_p (virtual_outgoing_args_rtx, structure_value_addr))
1242       && (args_size.var
1243 #ifndef ACCUMULATE_OUTGOING_ARGS
1244           || args_size.constant
1245 #endif
1246           ))
1247     structure_value_addr = copy_to_reg (structure_value_addr);
1248
1249   /* If this function call is cse'able, precompute all the parameters.
1250      Note that if the parameter is constructed into a temporary, this will
1251      cause an additional copy because the parameter will be constructed
1252      into a temporary location and then copied into the outgoing arguments.
1253      If a parameter contains a call to alloca and this function uses the
1254      stack, precompute the parameter.  */
1255
1256   /* If we preallocated the stack space, and some arguments must be passed
1257      on the stack, then we must precompute any parameter which contains a
1258      function call which will store arguments on the stack.
1259      Otherwise, evaluating the parameter may clobber previous parameters
1260      which have already been stored into the stack.  */
1261
1262   for (i = 0; i < num_actuals; i++)
1263     if (is_const
1264         || ((args_size.var != 0 || args_size.constant != 0)
1265             && calls_function (args[i].tree_value, 1))
1266         || (must_preallocate && (args_size.var != 0 || args_size.constant != 0)
1267             && calls_function (args[i].tree_value, 0)))
1268       {
1269         push_temp_slots ();
1270
1271         args[i].initial_value = args[i].value
1272           = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
1273
1274         if (GET_MODE (args[i].value ) != VOIDmode
1275             && GET_MODE (args[i].value) != args[i].mode)
1276           args[i].value = convert_to_mode (args[i].mode, args[i].value,
1277                                            args[i].unsignedp);
1278         preserve_temp_slots (args[i].value);
1279         pop_temp_slots ();
1280
1281         /* ANSI doesn't require a sequence point here,
1282            but PCC has one, so this will avoid some problems.  */
1283         emit_queue ();
1284       }
1285
1286   /* Now we are about to start emitting insns that can be deleted
1287      if a libcall is deleted.  */
1288   if (is_const)
1289     start_sequence ();
1290
1291   /* If we have no actual push instructions, or shouldn't use them,
1292      make space for all args right now.  */
1293
1294   if (args_size.var != 0)
1295     {
1296       if (old_stack_level == 0)
1297         {
1298           emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
1299           old_pending_adj = pending_stack_adjust;
1300           pending_stack_adjust = 0;
1301 #ifdef ACCUMULATE_OUTGOING_ARGS
1302           /* stack_arg_under_construction says whether a stack arg is
1303              being constructed at the old stack level.  Pushing the stack
1304              gets a clean outgoing argument block.  */
1305           old_stack_arg_under_construction = stack_arg_under_construction;
1306           stack_arg_under_construction = 0;
1307 #endif
1308         }
1309       argblock = push_block (ARGS_SIZE_RTX (args_size), 0, 0);
1310     }
1311   else if (must_preallocate)
1312     {
1313       /* Note that we must go through the motions of allocating an argument
1314          block even if the size is zero because we may be storing args
1315          in the area reserved for register arguments, which may be part of
1316          the stack frame.  */
1317       int needed = args_size.constant;
1318
1319 #ifdef ACCUMULATE_OUTGOING_ARGS
1320       /* Store the maximum argument space used.  It will be pushed by the
1321          prologue.
1322
1323          Since the stack pointer will never be pushed, it is possible for
1324          the evaluation of a parm to clobber something we have already
1325          written to the stack.  Since most function calls on RISC machines
1326          do not use the stack, this is uncommon, but must work correctly.
1327          
1328          Therefore, we save any area of the stack that was already written
1329          and that we are using.  Here we set up to do this by making a new
1330          stack usage map from the old one.  The actual save will be done
1331          by store_one_arg. 
1332
1333          Another approach might be to try to reorder the argument
1334          evaluations to avoid this conflicting stack usage.  */
1335
1336       if (needed > current_function_outgoing_args_size)
1337         current_function_outgoing_args_size = needed;
1338
1339 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
1340       /* Since we will be writing into the entire argument area, the
1341          map must be allocated for its entire size, not just the part that
1342          is the responsibility of the caller.  */
1343       needed += reg_parm_stack_space;
1344 #endif
1345
1346 #ifdef ARGS_GROW_DOWNWARD
1347       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
1348                                          needed + 1);
1349 #else
1350       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, needed);
1351 #endif
1352       stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
1353
1354       if (initial_highest_arg_in_use)
1355         bcopy (initial_stack_usage_map, stack_usage_map,
1356                initial_highest_arg_in_use);
1357
1358       if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
1359         bzero (&stack_usage_map[initial_highest_arg_in_use],
1360                highest_outgoing_arg_in_use - initial_highest_arg_in_use);
1361       needed = 0;
1362
1363       /* The address of the outgoing argument list must not be copied to a
1364          register here, because argblock would be left pointing to the
1365          wrong place after the call to allocate_dynamic_stack_space below. */
1366
1367       argblock = virtual_outgoing_args_rtx;
1368
1369 #else /* not ACCUMULATE_OUTGOING_ARGS */
1370       if (inhibit_defer_pop == 0)
1371         {
1372           /* Try to reuse some or all of the pending_stack_adjust
1373              to get this space.  Maybe we can avoid any pushing.  */
1374           if (needed > pending_stack_adjust)
1375             {
1376               needed -= pending_stack_adjust;
1377               pending_stack_adjust = 0;
1378             }
1379           else
1380             {
1381               pending_stack_adjust -= needed;
1382               needed = 0;
1383             }
1384         }
1385       /* Special case this because overhead of `push_block' in this
1386          case is non-trivial.  */
1387       if (needed == 0)
1388         argblock = virtual_outgoing_args_rtx;
1389       else
1390         argblock = push_block (GEN_INT (needed), 0, 0);
1391
1392       /* We only really need to call `copy_to_reg' in the case where push
1393          insns are going to be used to pass ARGBLOCK to a function
1394          call in ARGS.  In that case, the stack pointer changes value
1395          from the allocation point to the call point, and hence
1396          the value of VIRTUAL_OUTGOING_ARGS_RTX changes as well.
1397          But might as well always do it.  */
1398       argblock = copy_to_reg (argblock);
1399 #endif /* not ACCUMULATE_OUTGOING_ARGS */
1400     }
1401
1402
1403 #ifdef ACCUMULATE_OUTGOING_ARGS
1404   /* The save/restore code in store_one_arg handles all cases except one:
1405      a constructor call (including a C function returning a BLKmode struct)
1406      to initialize an argument.  */
1407   if (stack_arg_under_construction)
1408     {
1409 #if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
1410       rtx push_size = GEN_INT (reg_parm_stack_space + args_size.constant);
1411 #else
1412       rtx push_size = GEN_INT (args_size.constant);
1413 #endif
1414       if (old_stack_level == 0)
1415         {
1416           emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
1417           old_pending_adj = pending_stack_adjust;
1418           pending_stack_adjust = 0;
1419           /* stack_arg_under_construction says whether a stack arg is
1420              being constructed at the old stack level.  Pushing the stack
1421              gets a clean outgoing argument block.  */
1422           old_stack_arg_under_construction = stack_arg_under_construction;
1423           stack_arg_under_construction = 0;
1424           /* Make a new map for the new argument list.  */
1425           stack_usage_map = (char *)alloca (highest_outgoing_arg_in_use);
1426           bzero (stack_usage_map, highest_outgoing_arg_in_use);
1427           highest_outgoing_arg_in_use = 0;
1428         }
1429       allocate_dynamic_stack_space (push_size, NULL_RTX, BITS_PER_UNIT);
1430     }
1431   /* If argument evaluation might modify the stack pointer, copy the
1432      address of the argument list to a register.  */
1433   for (i = 0; i < num_actuals; i++)
1434     if (args[i].pass_on_stack)
1435       {
1436         argblock = copy_addr_to_reg (argblock);
1437         break;
1438       }
1439 #endif
1440
1441
1442   /* If we preallocated stack space, compute the address of each argument.
1443      We need not ensure it is a valid memory address here; it will be 
1444      validized when it is used.  */
1445   if (argblock)
1446     {
1447       rtx arg_reg = argblock;
1448       int arg_offset = 0;
1449
1450       if (GET_CODE (argblock) == PLUS)
1451         arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1452
1453       for (i = 0; i < num_actuals; i++)
1454         {
1455           rtx offset = ARGS_SIZE_RTX (args[i].offset);
1456           rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1457           rtx addr;
1458
1459           /* Skip this parm if it will not be passed on the stack.  */
1460           if (! args[i].pass_on_stack && args[i].reg != 0)
1461             continue;
1462
1463           if (GET_CODE (offset) == CONST_INT)
1464             addr = plus_constant (arg_reg, INTVAL (offset));
1465           else
1466             addr = gen_rtx (PLUS, Pmode, arg_reg, offset);
1467
1468           addr = plus_constant (addr, arg_offset);
1469           args[i].stack = gen_rtx (MEM, args[i].mode, addr);
1470           MEM_IN_STRUCT_P (args[i].stack)
1471             = (TREE_CODE (TREE_TYPE (args[i].tree_value)) == RECORD_TYPE
1472                || TREE_CODE (TREE_TYPE (args[i].tree_value)) == UNION_TYPE
1473                || TREE_CODE (TREE_TYPE (args[i].tree_value)) == QUAL_UNION_TYPE
1474                || TREE_CODE (TREE_TYPE (args[i].tree_value)) == ARRAY_TYPE);
1475
1476           if (GET_CODE (slot_offset) == CONST_INT)
1477             addr = plus_constant (arg_reg, INTVAL (slot_offset));
1478           else
1479             addr = gen_rtx (PLUS, Pmode, arg_reg, slot_offset);
1480
1481           addr = plus_constant (addr, arg_offset);
1482           args[i].stack_slot = gen_rtx (MEM, args[i].mode, addr);
1483         }
1484     }
1485                                                
1486 #ifdef PUSH_ARGS_REVERSED
1487 #ifdef STACK_BOUNDARY
1488   /* If we push args individually in reverse order, perform stack alignment
1489      before the first push (the last arg).  */
1490   if (argblock == 0)
1491     anti_adjust_stack (GEN_INT (args_size.constant
1492                                 - original_args_size.constant));
1493 #endif
1494 #endif
1495
1496   /* Don't try to defer pops if preallocating, not even from the first arg,
1497      since ARGBLOCK probably refers to the SP.  */
1498   if (argblock)
1499     NO_DEFER_POP;
1500
1501   /* Get the function to call, in the form of RTL.  */
1502   if (fndecl)
1503     {
1504       /* If this is the first use of the function, see if we need to
1505          make an external definition for it.  */
1506       if (! TREE_USED (fndecl))
1507         {
1508           assemble_external (fndecl);
1509           TREE_USED (fndecl) = 1;
1510         }
1511
1512       /* Get a SYMBOL_REF rtx for the function address.  */
1513       funexp = XEXP (DECL_RTL (fndecl), 0);
1514     }
1515   else
1516     /* Generate an rtx (probably a pseudo-register) for the address.  */
1517     {
1518       push_temp_slots ();
1519       funexp = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
1520       pop_temp_slots ();        /* FUNEXP can't be BLKmode */
1521       emit_queue ();
1522     }
1523
1524   /* Figure out the register where the value, if any, will come back.  */
1525   valreg = 0;
1526   if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
1527       && ! structure_value_addr)
1528     {
1529       if (pcc_struct_value)
1530         valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
1531                                       fndecl);
1532       else
1533         valreg = hard_function_value (TREE_TYPE (exp), fndecl);
1534     }
1535
1536   /* Precompute all register parameters.  It isn't safe to compute anything
1537      once we have started filling any specific hard regs. */
1538   reg_parm_seen = 0;
1539   for (i = 0; i < num_actuals; i++)
1540     if (args[i].reg != 0 && ! args[i].pass_on_stack)
1541       {
1542         reg_parm_seen = 1;
1543
1544         if (args[i].value == 0)
1545           {
1546             push_temp_slots ();
1547             args[i].value = expand_expr (args[i].tree_value, NULL_RTX,
1548                                          VOIDmode, 0);
1549             preserve_temp_slots (args[i].value);
1550             pop_temp_slots ();
1551
1552             /* ANSI doesn't require a sequence point here,
1553                but PCC has one, so this will avoid some problems.  */
1554             emit_queue ();
1555           }
1556
1557         /* If we are to promote the function arg to a wider mode,
1558            do it now.  */
1559
1560         if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
1561           args[i].value
1562             = convert_modes (args[i].mode,
1563                              TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1564                              args[i].value, args[i].unsignedp);
1565       }
1566
1567 #if defined(ACCUMULATE_OUTGOING_ARGS) && defined(REG_PARM_STACK_SPACE)
1568   /* The argument list is the property of the called routine and it
1569      may clobber it.  If the fixed area has been used for previous
1570      parameters, we must save and restore it.
1571
1572      Here we compute the boundary of the that needs to be saved, if any.  */
1573
1574 #ifdef ARGS_GROW_DOWNWARD
1575   for (i = 0; i < reg_parm_stack_space + 1; i++)
1576 #else
1577   for (i = 0; i < reg_parm_stack_space; i++)
1578 #endif
1579     {
1580       if (i >=  highest_outgoing_arg_in_use
1581           || stack_usage_map[i] == 0)
1582         continue;
1583
1584       if (low_to_save == -1)
1585         low_to_save = i;
1586
1587       high_to_save = i;
1588     }
1589
1590   if (low_to_save >= 0)
1591     {
1592       int num_to_save = high_to_save - low_to_save + 1;
1593       enum machine_mode save_mode
1594         = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
1595       rtx stack_area;
1596
1597       /* If we don't have the required alignment, must do this in BLKmode.  */
1598       if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
1599                                BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
1600         save_mode = BLKmode;
1601
1602       stack_area = gen_rtx (MEM, save_mode,
1603                             memory_address (save_mode,
1604                                             
1605 #ifdef ARGS_GROW_DOWNWARD
1606                                             plus_constant (argblock,
1607                                                            - high_to_save)
1608 #else
1609                                             plus_constant (argblock,
1610                                                            low_to_save)
1611 #endif
1612                                             ));
1613       if (save_mode == BLKmode)
1614         {
1615           save_area = assign_stack_temp (BLKmode, num_to_save, 1);
1616           emit_block_move (validize_mem (save_area), stack_area,
1617                            GEN_INT (num_to_save),
1618                            PARM_BOUNDARY / BITS_PER_UNIT);
1619         }
1620       else
1621         {
1622           save_area = gen_reg_rtx (save_mode);
1623           emit_move_insn (save_area, stack_area);
1624         }
1625     }
1626 #endif
1627           
1628
1629   /* Now store (and compute if necessary) all non-register parms.
1630      These come before register parms, since they can require block-moves,
1631      which could clobber the registers used for register parms.
1632      Parms which have partial registers are not stored here,
1633      but we do preallocate space here if they want that.  */
1634
1635   for (i = 0; i < num_actuals; i++)
1636     if (args[i].reg == 0 || args[i].pass_on_stack)
1637       store_one_arg (&args[i], argblock, may_be_alloca,
1638                      args_size.var != 0, fndecl, reg_parm_stack_space);
1639
1640 #ifdef STRICT_ALIGNMENT
1641   /* If we have a parm that is passed in registers but not in memory
1642      and whose alignment does not permit a direct copy into registers,
1643      make a group of pseudos that correspond to each register that we
1644      will later fill.  */
1645
1646   for (i = 0; i < num_actuals; i++)
1647     if (args[i].reg != 0 && ! args[i].pass_on_stack
1648         && args[i].mode == BLKmode
1649         && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
1650             < MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
1651       {
1652         int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1653         int big_endian_correction = 0;
1654
1655         args[i].n_aligned_regs
1656           = args[i].partial ? args[i].partial
1657             : (bytes + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
1658
1659         args[i].aligned_regs = (rtx *) alloca (sizeof (rtx)
1660                                                * args[i].n_aligned_regs);
1661
1662         /* Structures smaller than a word are aligned to the least signifcant
1663            byte (to the right).  On a BYTES_BIG_ENDIAN machine, this means we
1664            must skip the empty high order bytes when calculating the bit
1665            offset.  */
1666         if (BYTES_BIG_ENDIAN && bytes < UNITS_PER_WORD)
1667           big_endian_correction = (BITS_PER_WORD  - (bytes * BITS_PER_UNIT));
1668
1669         for (j = 0; j < args[i].n_aligned_regs; j++)
1670           {
1671             rtx reg = gen_reg_rtx (word_mode);
1672             rtx word = operand_subword_force (args[i].value, j, BLKmode);
1673             int bitsize = TYPE_ALIGN (TREE_TYPE (args[i].tree_value));
1674             int bitpos;
1675
1676             args[i].aligned_regs[j] = reg;
1677
1678             /* Clobber REG and move each partword into it.  Ensure we don't
1679                go past the end of the structure.  Note that the loop below
1680                works because we've already verified that padding
1681                and endianness are compatible.  */
1682
1683             emit_insn (gen_rtx (CLOBBER, VOIDmode, reg));
1684
1685             for (bitpos = 0;
1686                  bitpos < BITS_PER_WORD && bytes > 0;
1687                  bitpos += bitsize, bytes -= bitsize / BITS_PER_UNIT)
1688               {
1689                 int xbitpos = bitpos + big_endian_correction;
1690
1691                 store_bit_field (reg, bitsize, xbitpos, word_mode,
1692                                  extract_bit_field (word, bitsize, bitpos, 1,
1693                                                     NULL_RTX, word_mode,
1694                                                     word_mode,
1695                                                     bitsize / BITS_PER_UNIT,
1696                                                     BITS_PER_WORD),
1697                                  bitsize / BITS_PER_UNIT, BITS_PER_WORD);
1698               }
1699           }
1700       }
1701 #endif
1702
1703   /* Now store any partially-in-registers parm.
1704      This is the last place a block-move can happen.  */
1705   if (reg_parm_seen)
1706     for (i = 0; i < num_actuals; i++)
1707       if (args[i].partial != 0 && ! args[i].pass_on_stack)
1708         store_one_arg (&args[i], argblock, may_be_alloca,
1709                        args_size.var != 0, fndecl, reg_parm_stack_space);
1710
1711 #ifndef PUSH_ARGS_REVERSED
1712 #ifdef STACK_BOUNDARY
1713   /* If we pushed args in forward order, perform stack alignment
1714      after pushing the last arg.  */
1715   if (argblock == 0)
1716     anti_adjust_stack (GEN_INT (args_size.constant
1717                                 - original_args_size.constant));
1718 #endif
1719 #endif
1720
1721   /* If register arguments require space on the stack and stack space
1722      was not preallocated, allocate stack space here for arguments
1723      passed in registers.  */
1724 #if ! defined(ACCUMULATE_OUTGOING_ARGS) && defined(OUTGOING_REG_PARM_STACK_SPACE)
1725   if (must_preallocate == 0 && reg_parm_stack_space > 0)
1726     anti_adjust_stack (GEN_INT (reg_parm_stack_space));
1727 #endif
1728
1729   /* Pass the function the address in which to return a structure value.  */
1730   if (structure_value_addr && ! structure_value_addr_parm)
1731     {
1732       emit_move_insn (struct_value_rtx,
1733                       force_reg (Pmode,
1734                                  force_operand (structure_value_addr,
1735                                                 NULL_RTX)));
1736       if (GET_CODE (struct_value_rtx) == REG)
1737         {
1738           push_to_sequence (use_insns);
1739           emit_insn (gen_rtx (USE, VOIDmode, struct_value_rtx));
1740           use_insns = get_insns ();
1741           end_sequence ();
1742         }
1743     }
1744
1745   /* Now do the register loads required for any wholly-register parms or any
1746      parms which are passed both on the stack and in a register.  Their
1747      expressions were already evaluated. 
1748
1749      Mark all register-parms as living through the call, putting these USE
1750      insns in a list headed by USE_INSNS.  */
1751
1752   for (i = 0; i < num_actuals; i++)
1753     {
1754       rtx list = args[i].reg;
1755       int partial = args[i].partial;
1756
1757       while (list)
1758         {
1759           rtx reg;
1760           int nregs;
1761
1762           /* Process each register that needs to get this arg.  */
1763           if (GET_CODE (list) == EXPR_LIST)
1764             reg = XEXP (list, 0), list = XEXP (list, 1);
1765           else
1766             reg = list, list = 0;
1767
1768           /* Set to non-zero if must move a word at a time, even if just one
1769              word (e.g, partial == 1 && mode == DFmode).  Set to zero if
1770              we just use a normal move insn.  */
1771           nregs = (partial ? partial
1772                    : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1773                       ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1774                           + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1775                       : 0));
1776
1777           /* If simple case, just do move.  If normal partial, store_one_arg
1778              has already loaded the register for us.  In all other cases,
1779              load the register(s) from memory.  */
1780
1781           if (nregs == 0)
1782             emit_move_insn (reg, args[i].value);
1783
1784 #ifdef STRICT_ALIGNMENT
1785           /* If we have pre-computed the values to put in the registers in
1786              the case of non-aligned structures, copy them in now.  */
1787
1788           else if (args[i].n_aligned_regs != 0)
1789             for (j = 0; j < args[i].n_aligned_regs; j++)
1790               emit_move_insn (gen_rtx (REG, word_mode, REGNO (reg) + j),
1791                               args[i].aligned_regs[j]);
1792 #endif
1793
1794           else if (args[i].partial == 0 || args[i].pass_on_stack)
1795             move_block_to_reg (REGNO (reg),
1796                                validize_mem (args[i].value), nregs,
1797                                args[i].mode);
1798         
1799           push_to_sequence (use_insns);
1800           if (nregs == 0)
1801             emit_insn (gen_rtx (USE, VOIDmode, reg));
1802           else
1803             use_regs (REGNO (reg), nregs);
1804           use_insns = get_insns ();
1805           end_sequence ();
1806
1807           /* PARTIAL referred only to the first register, so clear it for the
1808              next time.  */
1809           partial = 0;
1810         }
1811     }
1812
1813   /* Perform postincrements before actually calling the function.  */
1814   emit_queue ();
1815
1816   /* All arguments and registers used for the call must be set up by now!  */
1817
1818   funexp = prepare_call_address (funexp, fndecl, &use_insns);
1819
1820   /* Generate the actual call instruction.  */
1821   emit_call_1 (funexp, funtype, args_size.constant, struct_value_size,
1822                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
1823                valreg, old_inhibit_defer_pop, use_insns, is_const);
1824
1825   /* If call is cse'able, make appropriate pair of reg-notes around it.
1826      Test valreg so we don't crash; may safely ignore `const'
1827      if return type is void.  */
1828   if (is_const && valreg != 0)
1829     {
1830       rtx note = 0;
1831       rtx temp = gen_reg_rtx (GET_MODE (valreg));
1832       rtx insns;
1833
1834       /* Construct an "equal form" for the value which mentions all the
1835          arguments in order as well as the function name.  */
1836 #ifdef PUSH_ARGS_REVERSED
1837       for (i = 0; i < num_actuals; i++)
1838         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1839 #else
1840       for (i = num_actuals - 1; i >= 0; i--)
1841         note = gen_rtx (EXPR_LIST, VOIDmode, args[i].initial_value, note);
1842 #endif
1843       note = gen_rtx (EXPR_LIST, VOIDmode, funexp, note);
1844
1845       insns = get_insns ();
1846       end_sequence ();
1847
1848       emit_libcall_block (insns, temp, valreg, note);
1849
1850       valreg = temp;
1851     }
1852
1853   /* For calls to `setjmp', etc., inform flow.c it should complain
1854      if nonvolatile values are live.  */
1855
1856   if (returns_twice)
1857     {
1858       emit_note (name, NOTE_INSN_SETJMP);
1859       current_function_calls_setjmp = 1;
1860     }
1861
1862   if (is_longjmp)
1863     current_function_calls_longjmp = 1;
1864
1865   /* Notice functions that cannot return.
1866      If optimizing, insns emitted below will be dead.
1867      If not optimizing, they will exist, which is useful
1868      if the user uses the `return' command in the debugger.  */
1869
1870   if (is_volatile || is_longjmp)
1871     emit_barrier ();
1872
1873   /* If value type not void, return an rtx for the value.  */
1874
1875   /* If there are cleanups to be called, don't use a hard reg as target.  */
1876   if (cleanups_this_call != old_cleanups
1877       && target && REG_P (target)
1878       && REGNO (target) < FIRST_PSEUDO_REGISTER)
1879     target = 0;
1880
1881   if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
1882       || ignore)
1883     {
1884       target = const0_rtx;
1885     }
1886   else if (structure_value_addr)
1887     {
1888       if (target == 0 || GET_CODE (target) != MEM)
1889         {
1890           target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1891                             memory_address (TYPE_MODE (TREE_TYPE (exp)),
1892                                             structure_value_addr));
1893           MEM_IN_STRUCT_P (target)
1894             = (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE
1895                || TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
1896                || TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE
1897                || TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE);
1898         }
1899     }
1900   else if (pcc_struct_value)
1901     {
1902       if (target == 0)
1903         {
1904           /* We used leave the value in the location that it is
1905              returned in, but that causes problems if it is used more
1906              than once in one expression.  Rather than trying to track
1907              when a copy is required, we always copy when TARGET is
1908              not specified.  This calling sequence is only used on
1909              a few machines and TARGET is usually nonzero.  */
1910           if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
1911             {
1912               target = assign_stack_temp (BLKmode,
1913                                           int_size_in_bytes (TREE_TYPE (exp)),
1914                                           0);
1915
1916               /* Save this temp slot around the pop below.  */
1917               preserve_temp_slots (target);
1918             }
1919           else
1920             target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
1921         }
1922
1923       if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
1924         emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
1925                                          copy_to_reg (valreg)));
1926       else
1927         emit_block_move (target, gen_rtx (MEM, BLKmode, copy_to_reg (valreg)),
1928                          expr_size (exp),
1929                          TYPE_ALIGN (TREE_TYPE (exp)) / BITS_PER_UNIT);
1930     }
1931   else if (target && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
1932            && GET_MODE (target) == GET_MODE (valreg))
1933     /* TARGET and VALREG cannot be equal at this point because the latter
1934        would not have REG_FUNCTION_VALUE_P true, while the former would if
1935        it were referring to the same register.
1936
1937        If they refer to the same register, this move will be a no-op, except
1938        when function inlining is being done.  */
1939     emit_move_insn (target, valreg);
1940   else
1941     target = copy_to_reg (valreg);
1942
1943 #ifdef PROMOTE_FUNCTION_RETURN
1944   /* If we promoted this return value, make the proper SUBREG.  TARGET
1945      might be const0_rtx here, so be careful.  */
1946   if (GET_CODE (target) == REG
1947       && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
1948     {
1949       enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
1950       int unsignedp = TREE_UNSIGNED (TREE_TYPE (exp));
1951
1952       if (TREE_CODE (TREE_TYPE (exp)) == INTEGER_TYPE
1953           || TREE_CODE (TREE_TYPE (exp)) == ENUMERAL_TYPE
1954           || TREE_CODE (TREE_TYPE (exp)) == BOOLEAN_TYPE
1955           || TREE_CODE (TREE_TYPE (exp)) == CHAR_TYPE
1956           || TREE_CODE (TREE_TYPE (exp)) == REAL_TYPE
1957           || TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE
1958           || TREE_CODE (TREE_TYPE (exp)) == OFFSET_TYPE)
1959         {
1960           PROMOTE_MODE (mode, unsignedp, TREE_TYPE (exp));
1961         }
1962
1963       /* If we didn't promote as expected, something is wrong.  */
1964       if (mode != GET_MODE (target))
1965         abort ();
1966
1967       target = gen_rtx (SUBREG, TYPE_MODE (TREE_TYPE (exp)), target, 0);
1968       SUBREG_PROMOTED_VAR_P (target) = 1;
1969       SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp;
1970     }
1971 #endif
1972
1973   /* Perform all cleanups needed for the arguments of this call
1974      (i.e. destructors in C++).  */
1975   expand_cleanups_to (old_cleanups);
1976
1977   /* If size of args is variable or this was a constructor call for a stack
1978      argument, restore saved stack-pointer value.  */
1979
1980   if (old_stack_level)
1981     {
1982       emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
1983       pending_stack_adjust = old_pending_adj;
1984 #ifdef ACCUMULATE_OUTGOING_ARGS
1985       stack_arg_under_construction = old_stack_arg_under_construction;
1986       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
1987       stack_usage_map = initial_stack_usage_map;
1988 #endif
1989     }
1990 #ifdef ACCUMULATE_OUTGOING_ARGS
1991   else
1992     {
1993 #ifdef REG_PARM_STACK_SPACE
1994       if (save_area)
1995         {
1996           enum machine_mode save_mode = GET_MODE (save_area);
1997           rtx stack_area
1998             = gen_rtx (MEM, save_mode,
1999                        memory_address (save_mode,
2000 #ifdef ARGS_GROW_DOWNWARD
2001                                        plus_constant (argblock, - high_to_save)
2002 #else
2003                                        plus_constant (argblock, low_to_save)
2004 #endif
2005                                        ));
2006
2007           if (save_mode != BLKmode)
2008             emit_move_insn (stack_area, save_area);
2009           else
2010             emit_block_move (stack_area, validize_mem (save_area),
2011                              GEN_INT (high_to_save - low_to_save + 1),
2012                              PARM_BOUNDARY / BITS_PER_UNIT);
2013         }
2014 #endif
2015           
2016       /* If we saved any argument areas, restore them.  */
2017       for (i = 0; i < num_actuals; i++)
2018         if (args[i].save_area)
2019           {
2020             enum machine_mode save_mode = GET_MODE (args[i].save_area);
2021             rtx stack_area
2022               = gen_rtx (MEM, save_mode,
2023                          memory_address (save_mode,
2024                                          XEXP (args[i].stack_slot, 0)));
2025
2026             if (save_mode != BLKmode)
2027               emit_move_insn (stack_area, args[i].save_area);
2028             else
2029               emit_block_move (stack_area, validize_mem (args[i].save_area),
2030                                GEN_INT (args[i].size.constant),
2031                                PARM_BOUNDARY / BITS_PER_UNIT);
2032           }
2033
2034       highest_outgoing_arg_in_use = initial_highest_arg_in_use;
2035       stack_usage_map = initial_stack_usage_map;
2036     }
2037 #endif
2038
2039   /* If this was alloca, record the new stack level for nonlocal gotos.  
2040      Check for the handler slots since we might not have a save area
2041      for non-local gotos. */
2042
2043   if (may_be_alloca && nonlocal_goto_handler_slot != 0)
2044     emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX);
2045
2046   pop_temp_slots ();
2047
2048   return target;
2049 }
2050 \f
2051 /* Output a library call to function FUN (a SYMBOL_REF rtx)
2052    (emitting the queue unless NO_QUEUE is nonzero),
2053    for a value of mode OUTMODE,
2054    with NARGS different arguments, passed as alternating rtx values
2055    and machine_modes to convert them to.
2056    The rtx values should have been passed through protect_from_queue already.
2057
2058    NO_QUEUE will be true if and only if the library call is a `const' call
2059    which will be enclosed in REG_LIBCALL/REG_RETVAL notes; it is equivalent
2060    to the variable is_const in expand_call.
2061
2062    NO_QUEUE must be true for const calls, because if it isn't, then
2063    any pending increment will be emitted between REG_LIBCALL/REG_RETVAL notes,
2064    and will be lost if the libcall sequence is optimized away.
2065
2066    NO_QUEUE must be false for non-const calls, because if it isn't, the
2067    call insn will have its CONST_CALL_P bit set, and it will be incorrectly
2068    optimized.  For instance, the instruction scheduler may incorrectly
2069    move memory references across the non-const call.  */
2070
2071 void
2072 emit_library_call (va_alist)
2073      va_dcl
2074 {
2075   va_list p;
2076   /* Total size in bytes of all the stack-parms scanned so far.  */
2077   struct args_size args_size;
2078   /* Size of arguments before any adjustments (such as rounding).  */
2079   struct args_size original_args_size;
2080   register int argnum;
2081   enum machine_mode outmode;
2082   int nargs;
2083   rtx fun;
2084   rtx orgfun;
2085   int inc;
2086   int count;
2087   rtx argblock = 0;
2088   CUMULATIVE_ARGS args_so_far;
2089   struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
2090                struct args_size offset; struct args_size size; };
2091   struct arg *argvec;
2092   int old_inhibit_defer_pop = inhibit_defer_pop;
2093   int no_queue = 0;
2094   rtx use_insns;
2095   /* library calls are never indirect calls.  */
2096   int current_call_is_indirect = 0;
2097
2098   va_start (p);
2099   orgfun = fun = va_arg (p, rtx);
2100   no_queue = va_arg (p, int);
2101   outmode = va_arg (p, enum machine_mode);
2102   nargs = va_arg (p, int);
2103
2104   /* Copy all the libcall-arguments out of the varargs data
2105      and into a vector ARGVEC.
2106
2107      Compute how to pass each argument.  We only support a very small subset
2108      of the full argument passing conventions to limit complexity here since
2109      library functions shouldn't have many args.  */
2110
2111   argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
2112
2113   INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
2114
2115   args_size.constant = 0;
2116   args_size.var = 0;
2117
2118   push_temp_slots ();
2119
2120   for (count = 0; count < nargs; count++)
2121     {
2122       rtx val = va_arg (p, rtx);
2123       enum machine_mode mode = va_arg (p, enum machine_mode);
2124
2125       /* We cannot convert the arg value to the mode the library wants here;
2126          must do it earlier where we know the signedness of the arg.  */
2127       if (mode == BLKmode
2128           || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
2129         abort ();
2130
2131       /* On some machines, there's no way to pass a float to a library fcn.
2132          Pass it as a double instead.  */
2133 #ifdef LIBGCC_NEEDS_DOUBLE
2134       if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
2135         val = convert_to_mode (DFmode, val, 0), mode = DFmode;
2136 #endif
2137
2138       /* There's no need to call protect_from_queue, because
2139          either emit_move_insn or emit_push_insn will do that.  */
2140
2141       /* Make sure it is a reasonable operand for a move or push insn.  */
2142       if (GET_CODE (val) != REG && GET_CODE (val) != MEM
2143           && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
2144         val = force_operand (val, NULL_RTX);
2145
2146 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
2147       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
2148         {
2149           /* We do not support FUNCTION_ARG_CALLEE_COPIES here since it can
2150              be viewed as just an efficiency improvement.  */
2151           rtx slot = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
2152           emit_move_insn (slot, val);
2153           val = XEXP (slot, 0);
2154           mode = Pmode;
2155         }
2156 #endif
2157
2158       argvec[count].value = val;
2159       argvec[count].mode = mode;
2160
2161       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
2162       if (argvec[count].reg && GET_CODE (argvec[count].reg) == EXPR_LIST)
2163         abort ();
2164 #ifdef FUNCTION_ARG_PARTIAL_NREGS
2165       argvec[count].partial
2166         = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
2167 #else
2168       argvec[count].partial = 0;
2169 #endif
2170
2171       locate_and_pad_parm (mode, NULL_TREE,
2172                            argvec[count].reg && argvec[count].partial == 0,
2173                            NULL_TREE, &args_size, &argvec[count].offset,
2174                            &argvec[count].size);
2175
2176       if (argvec[count].size.var)
2177         abort ();
2178
2179 #ifndef REG_PARM_STACK_SPACE
2180       if (argvec[count].partial)
2181         argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
2182 #endif
2183
2184       if (argvec[count].reg == 0 || argvec[count].partial != 0
2185 #ifdef REG_PARM_STACK_SPACE
2186           || 1
2187 #endif
2188           )
2189         args_size.constant += argvec[count].size.constant;
2190
2191 #ifdef ACCUMULATE_OUTGOING_ARGS
2192       /* If this arg is actually passed on the stack, it might be
2193          clobbering something we already put there (this library call might
2194          be inside the evaluation of an argument to a function whose call
2195          requires the stack).  This will only occur when the library call
2196          has sufficient args to run out of argument registers.  Abort in
2197          this case; if this ever occurs, code must be added to save and
2198          restore the arg slot.  */
2199
2200       if (argvec[count].reg == 0 || argvec[count].partial != 0)
2201         abort ();
2202 #endif
2203
2204       FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree)0, 1);
2205     }
2206   va_end (p);
2207
2208   /* If this machine requires an external definition for library
2209      functions, write one out.  */
2210   assemble_external_libcall (fun);
2211
2212   original_args_size = args_size;
2213 #ifdef STACK_BOUNDARY
2214   args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
2215                          / STACK_BYTES) * STACK_BYTES);
2216 #endif
2217
2218 #ifdef REG_PARM_STACK_SPACE
2219   args_size.constant = MAX (args_size.constant,
2220                             REG_PARM_STACK_SPACE (NULL_TREE));
2221 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2222   args_size.constant -= REG_PARM_STACK_SPACE (NULL_TREE);
2223 #endif
2224 #endif
2225
2226 #ifdef ACCUMULATE_OUTGOING_ARGS
2227   if (args_size.constant > current_function_outgoing_args_size)
2228     current_function_outgoing_args_size = args_size.constant;
2229   args_size.constant = 0;
2230 #endif
2231
2232 #ifndef PUSH_ROUNDING
2233   argblock = push_block (GEN_INT (args_size.constant), 0, 0);
2234 #endif
2235
2236 #ifdef PUSH_ARGS_REVERSED
2237 #ifdef STACK_BOUNDARY
2238   /* If we push args individually in reverse order, perform stack alignment
2239      before the first push (the last arg).  */
2240   if (argblock == 0)
2241     anti_adjust_stack (GEN_INT (args_size.constant
2242                                 - original_args_size.constant));
2243 #endif
2244 #endif
2245
2246 #ifdef PUSH_ARGS_REVERSED
2247   inc = -1;
2248   argnum = nargs - 1;
2249 #else
2250   inc = 1;
2251   argnum = 0;
2252 #endif
2253
2254   /* Push the args that need to be pushed.  */
2255
2256   for (count = 0; count < nargs; count++, argnum += inc)
2257     {
2258       register enum machine_mode mode = argvec[argnum].mode;
2259       register rtx val = argvec[argnum].value;
2260       rtx reg = argvec[argnum].reg;
2261       int partial = argvec[argnum].partial;
2262
2263       if (! (reg != 0 && partial == 0))
2264         emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
2265                         argblock, GEN_INT (argvec[count].offset.constant));
2266       NO_DEFER_POP;
2267     }
2268
2269 #ifndef PUSH_ARGS_REVERSED
2270 #ifdef STACK_BOUNDARY
2271   /* If we pushed args in forward order, perform stack alignment
2272      after pushing the last arg.  */
2273   if (argblock == 0)
2274     anti_adjust_stack (GEN_INT (args_size.constant
2275                                 - original_args_size.constant));
2276 #endif
2277 #endif
2278
2279 #ifdef PUSH_ARGS_REVERSED
2280   argnum = nargs - 1;
2281 #else
2282   argnum = 0;
2283 #endif
2284
2285   /* Now load any reg parms into their regs.  */
2286
2287   for (count = 0; count < nargs; count++, argnum += inc)
2288     {
2289       register enum machine_mode mode = argvec[argnum].mode;
2290       register rtx val = argvec[argnum].value;
2291       rtx reg = argvec[argnum].reg;
2292       int partial = argvec[argnum].partial;
2293
2294       if (reg != 0 && partial == 0)
2295         emit_move_insn (reg, val);
2296       NO_DEFER_POP;
2297     }
2298
2299   /* For version 1.37, try deleting this entirely.  */
2300   if (! no_queue)
2301     emit_queue ();
2302
2303   /* Any regs containing parms remain in use through the call.  */
2304   start_sequence ();
2305   for (count = 0; count < nargs; count++)
2306     if (argvec[count].reg != 0)
2307       emit_insn (gen_rtx (USE, VOIDmode, argvec[count].reg));
2308
2309   use_insns = get_insns ();
2310   end_sequence ();
2311
2312   fun = prepare_call_address (fun, NULL_TREE, &use_insns);
2313
2314   /* Don't allow popping to be deferred, since then
2315      cse'ing of library calls could delete a call and leave the pop.  */
2316   NO_DEFER_POP;
2317
2318   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
2319      will set inhibit_defer_pop to that value.  */
2320
2321   emit_call_1 (fun, get_identifier (XSTR (orgfun, 0)), args_size.constant, 0,
2322                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
2323                outmode != VOIDmode ? hard_libcall_value (outmode) : NULL_RTX,
2324                old_inhibit_defer_pop + 1, use_insns, no_queue);
2325
2326   pop_temp_slots ();
2327
2328   /* Now restore inhibit_defer_pop to its actual original value.  */
2329   OK_DEFER_POP;
2330 }
2331 \f
2332 /* Like emit_library_call except that an extra argument, VALUE,
2333    comes second and says where to store the result.
2334    (If VALUE is zero, this function chooses a convenient way
2335    to return the value.
2336
2337    This function returns an rtx for where the value is to be found.
2338    If VALUE is nonzero, VALUE is returned.  */
2339
2340 rtx
2341 emit_library_call_value (va_alist)
2342      va_dcl
2343 {
2344   va_list p;
2345   /* Total size in bytes of all the stack-parms scanned so far.  */
2346   struct args_size args_size;
2347   /* Size of arguments before any adjustments (such as rounding).  */
2348   struct args_size original_args_size;
2349   register int argnum;
2350   enum machine_mode outmode;
2351   int nargs;
2352   rtx fun;
2353   rtx orgfun;
2354   int inc;
2355   int count;
2356   rtx argblock = 0;
2357   CUMULATIVE_ARGS args_so_far;
2358   struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
2359                struct args_size offset; struct args_size size; };
2360   struct arg *argvec;
2361   int old_inhibit_defer_pop = inhibit_defer_pop;
2362   int no_queue = 0;
2363   rtx use_insns;
2364   rtx value;
2365   rtx mem_value = 0;
2366   int pcc_struct_value = 0;
2367   int struct_value_size = 0;
2368   /* library calls are never indirect calls.  */
2369   int current_call_is_indirect = 0;
2370
2371   va_start (p);
2372   orgfun = fun = va_arg (p, rtx);
2373   value = va_arg (p, rtx);
2374   no_queue = va_arg (p, int);
2375   outmode = va_arg (p, enum machine_mode);
2376   nargs = va_arg (p, int);
2377
2378   /* If this kind of value comes back in memory,
2379      decide where in memory it should come back.  */
2380   if (aggregate_value_p (type_for_mode (outmode, 0)))
2381     {
2382 #ifdef PCC_STATIC_STRUCT_RETURN
2383       rtx pointer_reg
2384         = hard_function_value (build_pointer_type (type_for_mode (outmode, 0)),
2385                                0);
2386       mem_value = gen_rtx (MEM, outmode, pointer_reg);
2387       pcc_struct_value = 1;
2388       if (value == 0)
2389         value = gen_reg_rtx (outmode);
2390 #else /* not PCC_STATIC_STRUCT_RETURN */
2391       struct_value_size = GET_MODE_SIZE (outmode);
2392       if (value != 0 && GET_CODE (value) == MEM)
2393         mem_value = value;
2394       else
2395         mem_value = assign_stack_temp (outmode, GET_MODE_SIZE (outmode), 0);
2396 #endif
2397     }
2398
2399   /* ??? Unfinished: must pass the memory address as an argument.  */
2400
2401   /* Copy all the libcall-arguments out of the varargs data
2402      and into a vector ARGVEC.
2403
2404      Compute how to pass each argument.  We only support a very small subset
2405      of the full argument passing conventions to limit complexity here since
2406      library functions shouldn't have many args.  */
2407
2408   argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
2409
2410   INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
2411
2412   args_size.constant = 0;
2413   args_size.var = 0;
2414
2415   count = 0;
2416
2417   push_temp_slots ();
2418
2419   /* If there's a structure value address to be passed,
2420      either pass it in the special place, or pass it as an extra argument.  */
2421   if (mem_value && struct_value_rtx == 0 && ! pcc_struct_value)
2422     {
2423       rtx addr = XEXP (mem_value, 0);
2424       nargs++;
2425
2426       /* Make sure it is a reasonable operand for a move or push insn.  */
2427       if (GET_CODE (addr) != REG && GET_CODE (addr) != MEM
2428           && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
2429         addr = force_operand (addr, NULL_RTX);
2430
2431       argvec[count].value = addr;
2432       argvec[count].mode = Pmode;
2433       argvec[count].partial = 0;
2434
2435       argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
2436 #ifdef FUNCTION_ARG_PARTIAL_NREGS
2437       if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
2438         abort ();
2439 #endif
2440
2441       locate_and_pad_parm (Pmode, NULL_TREE,
2442                            argvec[count].reg && argvec[count].partial == 0,
2443                            NULL_TREE, &args_size, &argvec[count].offset,
2444                            &argvec[count].size);
2445
2446
2447       if (argvec[count].reg == 0 || argvec[count].partial != 0
2448 #ifdef REG_PARM_STACK_SPACE
2449           || 1
2450 #endif
2451           )
2452         args_size.constant += argvec[count].size.constant;
2453
2454       FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree)0, 1);
2455
2456       count++;
2457     }
2458
2459   for (; count < nargs; count++)
2460     {
2461       rtx val = va_arg (p, rtx);
2462       enum machine_mode mode = va_arg (p, enum machine_mode);
2463
2464       /* We cannot convert the arg value to the mode the library wants here;
2465          must do it earlier where we know the signedness of the arg.  */
2466       if (mode == BLKmode
2467           || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
2468         abort ();
2469
2470       /* On some machines, there's no way to pass a float to a library fcn.
2471          Pass it as a double instead.  */
2472 #ifdef LIBGCC_NEEDS_DOUBLE
2473       if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
2474         val = convert_to_mode (DFmode, val, 0), mode = DFmode;
2475 #endif
2476
2477       /* There's no need to call protect_from_queue, because
2478          either emit_move_insn or emit_push_insn will do that.  */
2479
2480       /* Make sure it is a reasonable operand for a move or push insn.  */
2481       if (GET_CODE (val) != REG && GET_CODE (val) != MEM
2482           && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
2483         val = force_operand (val, NULL_RTX);
2484
2485 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
2486       if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
2487         {
2488           /* We do not support FUNCTION_ARG_CALLEE_COPIES here since it can
2489              be viewed as just an efficiency improvement.  */
2490           rtx slot = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
2491           emit_move_insn (slot, val);
2492           val = XEXP (slot, 0);
2493           mode = Pmode;
2494         }
2495 #endif
2496
2497       argvec[count].value = val;
2498       argvec[count].mode = mode;
2499
2500       argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
2501       if (argvec[count].reg && GET_CODE (argvec[count].reg) == EXPR_LIST)
2502         abort ();
2503 #ifdef FUNCTION_ARG_PARTIAL_NREGS
2504       argvec[count].partial
2505         = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
2506 #else
2507       argvec[count].partial = 0;
2508 #endif
2509
2510       locate_and_pad_parm (mode, NULL_TREE,
2511                            argvec[count].reg && argvec[count].partial == 0,
2512                            NULL_TREE, &args_size, &argvec[count].offset,
2513                            &argvec[count].size);
2514
2515       if (argvec[count].size.var)
2516         abort ();
2517
2518 #ifndef REG_PARM_STACK_SPACE
2519       if (argvec[count].partial)
2520         argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
2521 #endif
2522
2523       if (argvec[count].reg == 0 || argvec[count].partial != 0
2524 #ifdef REG_PARM_STACK_SPACE
2525           || 1
2526 #endif
2527           )
2528         args_size.constant += argvec[count].size.constant;
2529
2530 #ifdef ACCUMULATE_OUTGOING_ARGS
2531       /* If this arg is actually passed on the stack, it might be
2532          clobbering something we already put there (this library call might
2533          be inside the evaluation of an argument to a function whose call
2534          requires the stack).  This will only occur when the library call
2535          has sufficient args to run out of argument registers.  Abort in
2536          this case; if this ever occurs, code must be added to save and
2537          restore the arg slot.  */
2538
2539       if (argvec[count].reg == 0 || argvec[count].partial != 0)
2540         abort ();
2541 #endif
2542
2543       FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree)0, 1);
2544     }
2545   va_end (p);
2546
2547   /* If this machine requires an external definition for library
2548      functions, write one out.  */
2549   assemble_external_libcall (fun);
2550
2551   original_args_size = args_size;
2552 #ifdef STACK_BOUNDARY
2553   args_size.constant = (((args_size.constant + (STACK_BYTES - 1))
2554                          / STACK_BYTES) * STACK_BYTES);
2555 #endif
2556
2557 #ifdef REG_PARM_STACK_SPACE
2558   args_size.constant = MAX (args_size.constant,
2559                             REG_PARM_STACK_SPACE (NULL_TREE));
2560 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2561   args_size.constant -= REG_PARM_STACK_SPACE (NULL_TREE);
2562 #endif
2563 #endif
2564
2565 #ifdef ACCUMULATE_OUTGOING_ARGS
2566   if (args_size.constant > current_function_outgoing_args_size)
2567     current_function_outgoing_args_size = args_size.constant;
2568   args_size.constant = 0;
2569 #endif
2570
2571 #ifndef PUSH_ROUNDING
2572   argblock = push_block (GEN_INT (args_size.constant), 0, 0);
2573 #endif
2574
2575 #ifdef PUSH_ARGS_REVERSED
2576 #ifdef STACK_BOUNDARY
2577   /* If we push args individually in reverse order, perform stack alignment
2578      before the first push (the last arg).  */
2579   if (argblock == 0)
2580     anti_adjust_stack (GEN_INT (args_size.constant
2581                                 - original_args_size.constant));
2582 #endif
2583 #endif
2584
2585 #ifdef PUSH_ARGS_REVERSED
2586   inc = -1;
2587   argnum = nargs - 1;
2588 #else
2589   inc = 1;
2590   argnum = 0;
2591 #endif
2592
2593   /* Push the args that need to be pushed.  */
2594
2595   for (count = 0; count < nargs; count++, argnum += inc)
2596     {
2597       register enum machine_mode mode = argvec[argnum].mode;
2598       register rtx val = argvec[argnum].value;
2599       rtx reg = argvec[argnum].reg;
2600       int partial = argvec[argnum].partial;
2601
2602       if (! (reg != 0 && partial == 0))
2603         emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
2604                         argblock, GEN_INT (argvec[count].offset.constant));
2605       NO_DEFER_POP;
2606     }
2607
2608 #ifndef PUSH_ARGS_REVERSED
2609 #ifdef STACK_BOUNDARY
2610   /* If we pushed args in forward order, perform stack alignment
2611      after pushing the last arg.  */
2612   if (argblock == 0)
2613     anti_adjust_stack (GEN_INT (args_size.constant
2614                                 - original_args_size.constant));
2615 #endif
2616 #endif
2617
2618 #ifdef PUSH_ARGS_REVERSED
2619   argnum = nargs - 1;
2620 #else
2621   argnum = 0;
2622 #endif
2623
2624   /* Now load any reg parms into their regs.  */
2625
2626   for (count = 0; count < nargs; count++, argnum += inc)
2627     {
2628       register enum machine_mode mode = argvec[argnum].mode;
2629       register rtx val = argvec[argnum].value;
2630       rtx reg = argvec[argnum].reg;
2631       int partial = argvec[argnum].partial;
2632
2633       if (reg != 0 && partial == 0)
2634         emit_move_insn (reg, val);
2635       NO_DEFER_POP;
2636     }
2637
2638 #if 0
2639   /* For version 1.37, try deleting this entirely.  */
2640   if (! no_queue)
2641     emit_queue ();
2642 #endif
2643
2644   /* Any regs containing parms remain in use through the call.  */
2645   start_sequence ();
2646   for (count = 0; count < nargs; count++)
2647     if (argvec[count].reg != 0)
2648       emit_insn (gen_rtx (USE, VOIDmode, argvec[count].reg));
2649
2650   use_insns = get_insns ();
2651   end_sequence ();
2652
2653   /* Pass the function the address in which to return a structure value.  */
2654   if (mem_value != 0 && struct_value_rtx != 0 && ! pcc_struct_value)
2655     {
2656       emit_move_insn (struct_value_rtx,
2657                       force_reg (Pmode,
2658                                  force_operand (XEXP (mem_value, 0),
2659                                                 NULL_RTX)));
2660       if (GET_CODE (struct_value_rtx) == REG)
2661         {
2662           push_to_sequence (use_insns);
2663           emit_insn (gen_rtx (USE, VOIDmode, struct_value_rtx));
2664           use_insns = get_insns ();
2665           end_sequence ();
2666         }
2667     }
2668
2669   fun = prepare_call_address (fun, NULL_TREE, &use_insns);
2670
2671   /* Don't allow popping to be deferred, since then
2672      cse'ing of library calls could delete a call and leave the pop.  */
2673   NO_DEFER_POP;
2674
2675   /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
2676      will set inhibit_defer_pop to that value.  */
2677
2678   emit_call_1 (fun, get_identifier (XSTR (orgfun, 0)), args_size.constant,
2679                struct_value_size,
2680                FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
2681                (outmode != VOIDmode && mem_value == 0
2682                 ? hard_libcall_value (outmode) : NULL_RTX),
2683                old_inhibit_defer_pop + 1, use_insns, no_queue);
2684
2685   /* Now restore inhibit_defer_pop to its actual original value.  */
2686   OK_DEFER_POP;
2687
2688   pop_temp_slots ();
2689
2690   /* Copy the value to the right place.  */
2691   if (outmode != VOIDmode)
2692     {
2693       if (mem_value)
2694         {
2695           if (value == 0)
2696             value = mem_value;
2697           if (value != mem_value)
2698             emit_move_insn (value, mem_value);
2699         }
2700       else if (value != 0)
2701         emit_move_insn (value, hard_libcall_value (outmode));
2702       else
2703         value = hard_libcall_value (outmode);
2704     }
2705
2706   return value;
2707 }
2708 \f
2709 #if 0
2710 /* Return an rtx which represents a suitable home on the stack
2711    given TYPE, the type of the argument looking for a home.
2712    This is called only for BLKmode arguments.
2713
2714    SIZE is the size needed for this target.
2715    ARGS_ADDR is the address of the bottom of the argument block for this call.
2716    OFFSET describes this parameter's offset into ARGS_ADDR.  It is meaningless
2717    if this machine uses push insns.  */
2718
2719 static rtx
2720 target_for_arg (type, size, args_addr, offset)
2721      tree type;
2722      rtx size;
2723      rtx args_addr;
2724      struct args_size offset;
2725 {
2726   rtx target;
2727   rtx offset_rtx = ARGS_SIZE_RTX (offset);
2728
2729   /* We do not call memory_address if possible,
2730      because we want to address as close to the stack
2731      as possible.  For non-variable sized arguments,
2732      this will be stack-pointer relative addressing.  */
2733   if (GET_CODE (offset_rtx) == CONST_INT)
2734     target = plus_constant (args_addr, INTVAL (offset_rtx));
2735   else
2736     {
2737       /* I have no idea how to guarantee that this
2738          will work in the presence of register parameters.  */
2739       target = gen_rtx (PLUS, Pmode, args_addr, offset_rtx);
2740       target = memory_address (QImode, target);
2741     }
2742
2743   return gen_rtx (MEM, BLKmode, target);
2744 }
2745 #endif
2746 \f
2747 /* Store a single argument for a function call
2748    into the register or memory area where it must be passed.
2749    *ARG describes the argument value and where to pass it.
2750
2751    ARGBLOCK is the address of the stack-block for all the arguments,
2752    or 0 on a machine where arguments are pushed individually.
2753
2754    MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
2755    so must be careful about how the stack is used. 
2756
2757    VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
2758    argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
2759    that we need not worry about saving and restoring the stack.
2760
2761    FNDECL is the declaration of the function we are calling.  */
2762
2763 static void
2764 store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl,
2765                reg_parm_stack_space)
2766      struct arg_data *arg;
2767      rtx argblock;
2768      int may_be_alloca;
2769      int variable_size;
2770      tree fndecl;
2771      int reg_parm_stack_space;
2772 {
2773   register tree pval = arg->tree_value;
2774   rtx reg = 0;
2775   int partial = 0;
2776   int used = 0;
2777   int i, lower_bound, upper_bound;
2778
2779   if (TREE_CODE (pval) == ERROR_MARK)
2780     return;
2781
2782   /* Push a new temporary level for any temporaries we make for
2783      this argument.  */
2784   push_temp_slots ();
2785
2786 #ifdef ACCUMULATE_OUTGOING_ARGS
2787   /* If this is being stored into a pre-allocated, fixed-size, stack area,
2788      save any previous data at that location.  */
2789   if (argblock && ! variable_size && arg->stack)
2790     {
2791 #ifdef ARGS_GROW_DOWNWARD
2792       /* stack_slot is negative, but we want to index stack_usage_map */
2793       /* with positive values. */
2794       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
2795         upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
2796       else
2797         abort ();
2798
2799       lower_bound = upper_bound - arg->size.constant;
2800 #else
2801       if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
2802         lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
2803       else
2804         lower_bound = 0;
2805
2806       upper_bound = lower_bound + arg->size.constant;
2807 #endif
2808
2809       for (i = lower_bound; i < upper_bound; i++)
2810         if (stack_usage_map[i]
2811 #ifdef REG_PARM_STACK_SPACE
2812             /* Don't store things in the fixed argument area at this point;
2813                it has already been saved.  */
2814             && i > reg_parm_stack_space
2815 #endif
2816             )
2817           break;
2818
2819       if (i != upper_bound)
2820         {
2821           /* We need to make a save area.  See what mode we can make it.  */
2822           enum machine_mode save_mode
2823             = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
2824           rtx stack_area
2825             = gen_rtx (MEM, save_mode,
2826                        memory_address (save_mode, XEXP (arg->stack_slot, 0)));
2827
2828           if (save_mode == BLKmode)
2829             {
2830               arg->save_area = assign_stack_temp (BLKmode,
2831                                                   arg->size.constant, 1);
2832               preserve_temp_slots (arg->save_area);
2833               emit_block_move (validize_mem (arg->save_area), stack_area,
2834                                GEN_INT (arg->size.constant),
2835                                PARM_BOUNDARY / BITS_PER_UNIT);
2836             }
2837           else
2838             {
2839               arg->save_area = gen_reg_rtx (save_mode);
2840               emit_move_insn (arg->save_area, stack_area);
2841             }
2842         }
2843     }
2844 #endif
2845
2846   /* If this isn't going to be placed on both the stack and in registers,
2847      set up the register and number of words.  */
2848   if (! arg->pass_on_stack)
2849     reg = arg->reg, partial = arg->partial;
2850
2851   if (reg != 0 && partial == 0)
2852     /* Being passed entirely in a register.  We shouldn't be called in
2853        this case.   */
2854     abort ();
2855
2856 #ifdef STRICT_ALIGNMENT
2857   /* If this arg needs special alignment, don't load the registers
2858      here.  */
2859   if (arg->n_aligned_regs != 0)
2860     reg = 0;
2861 #endif
2862   
2863   /* If this is being partially passed in a register, but multiple locations
2864      are specified, we assume that the one partially used is the one that is
2865      listed first.  */
2866   if (reg && GET_CODE (reg) == EXPR_LIST)
2867     reg = XEXP (reg, 0);
2868
2869   /* If this is being passed partially in a register, we can't evaluate
2870      it directly into its stack slot.  Otherwise, we can.  */
2871   if (arg->value == 0)
2872     {
2873 #ifdef ACCUMULATE_OUTGOING_ARGS
2874       /* stack_arg_under_construction is nonzero if a function argument is
2875          being evaluated directly into the outgoing argument list and
2876          expand_call must take special action to preserve the argument list
2877          if it is called recursively.
2878
2879          For scalar function arguments stack_usage_map is sufficient to
2880          determine which stack slots must be saved and restored.  Scalar
2881          arguments in general have pass_on_stack == 0.
2882
2883          If this argument is initialized by a function which takes the
2884          address of the argument (a C++ constructor or a C function
2885          returning a BLKmode structure), then stack_usage_map is
2886          insufficient and expand_call must push the stack around the
2887          function call.  Such arguments have pass_on_stack == 1.
2888
2889          Note that it is always safe to set stack_arg_under_construction,
2890          but this generates suboptimal code if set when not needed.  */
2891
2892       if (arg->pass_on_stack)
2893         stack_arg_under_construction++;
2894 #endif
2895       arg->value = expand_expr (pval,
2896                                 (partial
2897                                  || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
2898                                 ? NULL_RTX : arg->stack,
2899                                 VOIDmode, 0);
2900
2901       /* If we are promoting object (or for any other reason) the mode
2902          doesn't agree, convert the mode.  */
2903
2904       if (GET_MODE (arg->value) != VOIDmode
2905           && GET_MODE (arg->value) != arg->mode)
2906         arg->value = convert_to_mode (arg->mode, arg->value, arg->unsignedp);
2907
2908 #ifdef ACCUMULATE_OUTGOING_ARGS
2909       if (arg->pass_on_stack)
2910         stack_arg_under_construction--;
2911 #endif
2912     }
2913
2914   /* Don't allow anything left on stack from computation
2915      of argument to alloca.  */
2916   if (may_be_alloca)
2917     do_pending_stack_adjust ();
2918
2919   if (arg->value == arg->stack)
2920     /* If the value is already in the stack slot, we are done.  */
2921     ;
2922   else if (arg->mode != BLKmode)
2923     {
2924       register int size;
2925
2926       /* Argument is a scalar, not entirely passed in registers.
2927          (If part is passed in registers, arg->partial says how much
2928          and emit_push_insn will take care of putting it there.)
2929          
2930          Push it, and if its size is less than the
2931          amount of space allocated to it,
2932          also bump stack pointer by the additional space.
2933          Note that in C the default argument promotions
2934          will prevent such mismatches.  */
2935
2936       size = GET_MODE_SIZE (arg->mode);
2937       /* Compute how much space the push instruction will push.
2938          On many machines, pushing a byte will advance the stack
2939          pointer by a halfword.  */
2940 #ifdef PUSH_ROUNDING
2941       size = PUSH_ROUNDING (size);
2942 #endif
2943       used = size;
2944
2945       /* Compute how much space the argument should get:
2946          round up to a multiple of the alignment for arguments.  */
2947       if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
2948         used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
2949                  / (PARM_BOUNDARY / BITS_PER_UNIT))
2950                 * (PARM_BOUNDARY / BITS_PER_UNIT));
2951
2952       /* This isn't already where we want it on the stack, so put it there.
2953          This can either be done with push or copy insns.  */
2954       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX,
2955                       0, partial, reg, used - size,
2956                       argblock, ARGS_SIZE_RTX (arg->offset));
2957     }
2958   else
2959     {
2960       /* BLKmode, at least partly to be pushed.  */
2961
2962       register int excess;
2963       rtx size_rtx;
2964
2965       /* Pushing a nonscalar.
2966          If part is passed in registers, PARTIAL says how much
2967          and emit_push_insn will take care of putting it there.  */
2968
2969       /* Round its size up to a multiple
2970          of the allocation unit for arguments.  */
2971
2972       if (arg->size.var != 0)
2973         {
2974           excess = 0;
2975           size_rtx = ARGS_SIZE_RTX (arg->size);
2976         }
2977       else
2978         {
2979           /* PUSH_ROUNDING has no effect on us, because
2980              emit_push_insn for BLKmode is careful to avoid it.  */
2981           excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
2982                     + partial * UNITS_PER_WORD);
2983           size_rtx = expr_size (pval);
2984         }
2985
2986       emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
2987                       TYPE_ALIGN (TREE_TYPE (pval)) / BITS_PER_UNIT, partial,
2988                       reg, excess, argblock, ARGS_SIZE_RTX (arg->offset));
2989     }
2990
2991
2992   /* Unless this is a partially-in-register argument, the argument is now
2993      in the stack. 
2994
2995      ??? Note that this can change arg->value from arg->stack to
2996      arg->stack_slot and it matters when they are not the same.
2997      It isn't totally clear that this is correct in all cases.  */
2998   if (partial == 0)
2999     arg->value = arg->stack_slot;
3000
3001   /* Once we have pushed something, pops can't safely
3002      be deferred during the rest of the arguments.  */
3003   NO_DEFER_POP;
3004
3005   /* ANSI doesn't require a sequence point here,
3006      but PCC has one, so this will avoid some problems.  */
3007   emit_queue ();
3008
3009   /* Free any temporary slots made in processing this argument.  */
3010   free_temp_slots ();
3011   pop_temp_slots ();
3012
3013 #ifdef ACCUMULATE_OUTGOING_ARGS
3014   /* Now mark the segment we just used.  */
3015   if (argblock && ! variable_size && arg->stack)
3016     for (i = lower_bound; i < upper_bound; i++)
3017       stack_usage_map[i] = 1;
3018 #endif
3019 }