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