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