1 /* Convert function calls to rtl insns, for GNU C compiler.
2 Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
3 1999, 2000 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
30 #include "insn-flags.h"
35 #ifndef ACCUMULATE_OUTGOING_ARGS
36 #define ACCUMULATE_OUTGOING_ARGS 0
39 /* Supply a default definition for PUSH_ARGS. */
42 #define PUSH_ARGS !ACCUMULATE_OUTGOING_ARGS
48 #if !defined FUNCTION_OK_FOR_SIBCALL
49 #define FUNCTION_OK_FOR_SIBCALL(DECL) 1
52 #if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY
53 #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
56 /* Decide whether a function's arguments should be processed
57 from first to last or from last to first.
59 They should if the stack and args grow in opposite directions, but
60 only if we have push insns. */
64 #if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
65 #define PUSH_ARGS_REVERSED PUSH_ARGS
70 #ifndef PUSH_ARGS_REVERSED
71 #define PUSH_ARGS_REVERSED 0
74 /* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits. */
75 #define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
77 /* Data structure and subroutines used within expand_call. */
81 /* Tree node for this argument. */
83 /* Mode for value; TYPE_MODE unless promoted. */
84 enum machine_mode mode;
85 /* Current RTL value for argument, or 0 if it isn't precomputed. */
87 /* Initially-compute RTL value for argument; only for const functions. */
89 /* Register to pass this argument in, 0 if passed on stack, or an
90 PARALLEL if the arg is to be copied into multiple non-contiguous
93 /* Register to pass this argument in when generating tail call sequence.
94 This is not the same register as for normal calls on machines with
97 /* If REG was promoted from the actual mode of the argument expression,
98 indicates whether the promotion is sign- or zero-extended. */
100 /* Number of registers to use. 0 means put the whole arg in registers.
101 Also 0 if not passed in registers. */
103 /* Non-zero if argument must be passed on stack.
104 Note that some arguments may be passed on the stack
105 even though pass_on_stack is zero, just because FUNCTION_ARG says so.
106 pass_on_stack identifies arguments that *cannot* go in registers. */
108 /* Offset of this argument from beginning of stack-args. */
109 struct args_size offset;
110 /* Similar, but offset to the start of the stack slot. Different from
111 OFFSET if this arg pads downward. */
112 struct args_size slot_offset;
113 /* Size of this argument on the stack, rounded up for any padding it gets,
114 parts of the argument passed in registers do not count.
115 If REG_PARM_STACK_SPACE is defined, then register parms
116 are counted here as well. */
117 struct args_size size;
118 /* Location on the stack at which parameter should be stored. The store
119 has already been done if STACK == VALUE. */
121 /* Location on the stack of the start of this argument slot. This can
122 differ from STACK if this arg pads downward. This location is known
123 to be aligned to FUNCTION_ARG_BOUNDARY. */
125 /* Place that this stack area has been saved, if needed. */
127 /* If an argument's alignment does not permit direct copying into registers,
128 copy in smaller-sized pieces into pseudos. These are stored in a
129 block pointed to by this field. The next field says how many
130 word-sized pseudos we made. */
133 /* The amount that the stack pointer needs to be adjusted to
134 force alignment for the next argument. */
135 struct args_size alignment_pad;
138 /* A vector of one char per byte of stack space. A byte if non-zero if
139 the corresponding stack location has been used.
140 This vector is used to prevent a function call within an argument from
141 clobbering any stack already set up. */
142 static char *stack_usage_map;
144 /* Size of STACK_USAGE_MAP. */
145 static int highest_outgoing_arg_in_use;
147 /* stack_arg_under_construction is nonzero when an argument may be
148 initialized with a constructor call (including a C function that
149 returns a BLKmode struct) and expand_call must take special action
150 to make sure the object being constructed does not overlap the
151 argument list for the constructor call. */
152 int stack_arg_under_construction;
154 static int calls_function PARAMS ((tree, int));
155 static int calls_function_1 PARAMS ((tree, int));
157 /* Nonzero if this is a call to a `const' function. */
159 /* Nonzero if this is a call to a `volatile' function. */
160 #define ECF_NORETURN 2
161 /* Nonzero if this is a call to malloc or a related function. */
163 /* Nonzero if it is plausible that this is a call to alloca. */
164 #define ECF_MAY_BE_ALLOCA 8
165 /* Nonzero if this is a call to a function that won't throw an exception. */
166 #define ECF_NOTHROW 16
167 /* Nonzero if this is a call to setjmp or a related function. */
168 #define ECF_RETURNS_TWICE 32
169 /* Nonzero if this is a call to `longjmp'. */
170 #define ECF_LONGJMP 64
171 /* Nonzero if this is a syscall that makes a new process in the image of
173 #define ECF_FORK_OR_EXEC 128
174 #define ECF_SIBCALL 256
175 /* Nonzero if this is a call to "pure" function (like const function,
176 but may read memory. */
179 static void emit_call_1 PARAMS ((rtx, tree, tree, HOST_WIDE_INT,
180 HOST_WIDE_INT, HOST_WIDE_INT, rtx,
181 rtx, int, rtx, int));
182 static void precompute_register_parameters PARAMS ((int,
185 static void store_one_arg PARAMS ((struct arg_data *, rtx, int, int,
187 static void store_unaligned_arguments_into_pseudos PARAMS ((struct arg_data *,
189 static int finalize_must_preallocate PARAMS ((int, int,
191 struct args_size *));
192 static void precompute_arguments PARAMS ((int, int,
194 static int compute_argument_block_size PARAMS ((int,
197 static void initialize_argument_information PARAMS ((int,
204 static void compute_argument_addresses PARAMS ((struct arg_data *,
206 static rtx rtx_for_function_call PARAMS ((tree, tree));
207 static void load_register_parameters PARAMS ((struct arg_data *,
209 static int libfunc_nothrow PARAMS ((rtx));
210 static rtx emit_library_call_value_1 PARAMS ((int, rtx, rtx, int,
213 static int special_function_p PARAMS ((tree, int));
214 static int flags_from_decl_or_type PARAMS ((tree));
215 static rtx try_to_integrate PARAMS ((tree, tree, rtx,
217 static int combine_pending_stack_adjustment_and_call
218 PARAMS ((int, struct args_size *, int));
220 #ifdef REG_PARM_STACK_SPACE
221 static rtx save_fixed_argument_area PARAMS ((int, rtx, int *, int *));
222 static void restore_fixed_argument_area PARAMS ((rtx, rtx, int, int));
225 /* If WHICH is 1, return 1 if EXP contains a call to the built-in function
228 If WHICH is 0, return 1 if EXP contains a call to any function.
229 Actually, we only need return 1 if evaluating EXP would require pushing
230 arguments on the stack, but that is too difficult to compute, so we just
231 assume any function call might require the stack. */
233 static tree calls_function_save_exprs;
236 calls_function (exp, which)
242 calls_function_save_exprs = 0;
243 val = calls_function_1 (exp, which);
244 calls_function_save_exprs = 0;
248 /* Recursive function to do the work of above function. */
251 calls_function_1 (exp, which)
256 enum tree_code code = TREE_CODE (exp);
257 int class = TREE_CODE_CLASS (code);
258 int length = first_rtl_op (code);
260 /* If this code is language-specific, we don't know what it will do. */
261 if ((int) code >= NUM_TREE_CODES)
269 else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
270 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
272 && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
274 & ECF_MAY_BE_ALLOCA))
280 if (SAVE_EXPR_RTL (exp) != 0)
282 if (value_member (exp, calls_function_save_exprs))
284 calls_function_save_exprs = tree_cons (NULL_TREE, exp,
285 calls_function_save_exprs);
286 return (TREE_OPERAND (exp, 0) != 0
287 && calls_function_1 (TREE_OPERAND (exp, 0), which));
292 register tree subblock;
294 for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local))
295 if (DECL_INITIAL (local) != 0
296 && calls_function_1 (DECL_INITIAL (local), which))
299 for (subblock = BLOCK_SUBBLOCKS (exp);
301 subblock = TREE_CHAIN (subblock))
302 if (calls_function_1 (subblock, which))
308 for (; exp != 0; exp = TREE_CHAIN (exp))
309 if (calls_function_1 (TREE_VALUE (exp), which))
317 /* Only expressions, references, and blocks can contain calls. */
318 if (! IS_EXPR_CODE_CLASS (class) && class != 'r' && class != 'b')
321 for (i = 0; i < length; i++)
322 if (TREE_OPERAND (exp, i) != 0
323 && calls_function_1 (TREE_OPERAND (exp, i), which))
329 /* Force FUNEXP into a form suitable for the address of a CALL,
330 and return that as an rtx. Also load the static chain register
331 if FNDECL is a nested function.
333 CALL_FUSAGE points to a variable holding the prospective
334 CALL_INSN_FUNCTION_USAGE information. */
337 prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
343 rtx static_chain_value = 0;
345 funexp = protect_from_queue (funexp, 0);
348 /* Get possible static chain value for nested function in C. */
349 static_chain_value = lookup_static_chain (fndecl);
351 /* Make a valid memory address and copy constants thru pseudo-regs,
352 but not for a constant address if -fno-function-cse. */
353 if (GET_CODE (funexp) != SYMBOL_REF)
354 /* If we are using registers for parameters, force the
355 function address into a register now. */
356 funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
357 ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
358 : memory_address (FUNCTION_MODE, funexp));
361 #ifndef NO_FUNCTION_CSE
362 if (optimize && ! flag_no_function_cse)
363 #ifdef NO_RECURSIVE_FUNCTION_CSE
364 if (fndecl != current_function_decl)
366 funexp = force_reg (Pmode, funexp);
370 if (static_chain_value != 0)
372 emit_move_insn (static_chain_rtx, static_chain_value);
374 if (GET_CODE (static_chain_rtx) == REG)
375 use_reg (call_fusage, static_chain_rtx);
381 /* Generate instructions to call function FUNEXP,
382 and optionally pop the results.
383 The CALL_INSN is the first insn generated.
385 FNDECL is the declaration node of the function. This is given to the
386 macro RETURN_POPS_ARGS to determine whether this function pops its own args.
388 FUNTYPE is the data type of the function. This is given to the macro
389 RETURN_POPS_ARGS to determine whether this function pops its own args.
390 We used to allow an identifier for library functions, but that doesn't
391 work when the return type is an aggregate type and the calling convention
392 says that the pointer to this aggregate is to be popped by the callee.
394 STACK_SIZE is the number of bytes of arguments on the stack,
395 ROUNDED_STACK_SIZE is that number rounded up to
396 PREFERRED_STACK_BOUNDARY; zero if the size is variable. This is
397 both to put into the call insn and to generate explicit popping
400 STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
401 It is zero if this call doesn't want a structure value.
403 NEXT_ARG_REG is the rtx that results from executing
404 FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
405 just after all the args have had their registers assigned.
406 This could be whatever you like, but normally it is the first
407 arg-register beyond those used for args in this call,
408 or 0 if all the arg-registers are used in this call.
409 It is passed on to `gen_call' so you can put this info in the call insn.
411 VALREG is a hard register in which a value is returned,
412 or 0 if the call does not return a value.
414 OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
415 the args to this call were processed.
416 We restore `inhibit_defer_pop' to that value.
418 CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that
419 denote registers used by the called function. */
422 emit_call_1 (funexp, fndecl, funtype, stack_size, rounded_stack_size,
423 struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop,
424 call_fusage, ecf_flags)
426 tree fndecl ATTRIBUTE_UNUSED;
427 tree funtype ATTRIBUTE_UNUSED;
428 HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED;
429 HOST_WIDE_INT rounded_stack_size;
430 HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED;
433 int old_inhibit_defer_pop;
437 rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
439 int already_popped = 0;
440 HOST_WIDE_INT n_popped = RETURN_POPS_ARGS (fndecl, funtype, stack_size);
441 #if defined (HAVE_call) && defined (HAVE_call_value)
442 rtx struct_value_size_rtx;
443 struct_value_size_rtx = GEN_INT (struct_value_size);
446 /* Ensure address is valid. SYMBOL_REF is already valid, so no need,
447 and we don't want to load it into a register as an optimization,
448 because prepare_call_address already did it if it should be done. */
449 if (GET_CODE (funexp) != SYMBOL_REF)
450 funexp = memory_address (FUNCTION_MODE, funexp);
452 #if defined (HAVE_sibcall_pop) && defined (HAVE_sibcall_value_pop)
453 if ((ecf_flags & ECF_SIBCALL)
454 && HAVE_sibcall_pop && HAVE_sibcall_value_pop
455 && (RETURN_POPS_ARGS (fndecl, funtype, stack_size) > 0
458 rtx n_pop = GEN_INT (RETURN_POPS_ARGS (fndecl, funtype, stack_size));
461 /* If this subroutine pops its own args, record that in the call insn
462 if possible, for the sake of frame pointer elimination. */
465 pat = GEN_SIBCALL_VALUE_POP (valreg,
466 gen_rtx_MEM (FUNCTION_MODE, funexp),
467 rounded_stack_size_rtx, next_arg_reg,
470 pat = GEN_SIBCALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
471 rounded_stack_size_rtx, next_arg_reg, n_pop);
473 emit_call_insn (pat);
479 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
480 /* If the target has "call" or "call_value" insns, then prefer them
481 if no arguments are actually popped. If the target does not have
482 "call" or "call_value" insns, then we must use the popping versions
483 even if the call has no arguments to pop. */
484 #if defined (HAVE_call) && defined (HAVE_call_value)
485 if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop
488 if (HAVE_call_pop && HAVE_call_value_pop)
491 rtx n_pop = GEN_INT (n_popped);
494 /* If this subroutine pops its own args, record that in the call insn
495 if possible, for the sake of frame pointer elimination. */
498 pat = GEN_CALL_VALUE_POP (valreg,
499 gen_rtx_MEM (FUNCTION_MODE, funexp),
500 rounded_stack_size_rtx, next_arg_reg, n_pop);
502 pat = GEN_CALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
503 rounded_stack_size_rtx, next_arg_reg, n_pop);
505 emit_call_insn (pat);
511 #if defined (HAVE_sibcall) && defined (HAVE_sibcall_value)
512 if ((ecf_flags & ECF_SIBCALL)
513 && HAVE_sibcall && HAVE_sibcall_value)
516 emit_call_insn (GEN_SIBCALL_VALUE (valreg,
517 gen_rtx_MEM (FUNCTION_MODE, funexp),
518 rounded_stack_size_rtx,
519 next_arg_reg, NULL_RTX));
521 emit_call_insn (GEN_SIBCALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
522 rounded_stack_size_rtx, next_arg_reg,
523 struct_value_size_rtx));
528 #if defined (HAVE_call) && defined (HAVE_call_value)
529 if (HAVE_call && HAVE_call_value)
532 emit_call_insn (GEN_CALL_VALUE (valreg,
533 gen_rtx_MEM (FUNCTION_MODE, funexp),
534 rounded_stack_size_rtx, next_arg_reg,
537 emit_call_insn (GEN_CALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
538 rounded_stack_size_rtx, next_arg_reg,
539 struct_value_size_rtx));
545 /* Find the CALL insn we just emitted. */
546 for (call_insn = get_last_insn ();
547 call_insn && GET_CODE (call_insn) != CALL_INSN;
548 call_insn = PREV_INSN (call_insn))
554 /* Mark memory as used for "pure" function call. */
555 if (ecf_flags & ECF_PURE)
557 call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
558 gen_rtx_USE (VOIDmode,
559 gen_rtx_MEM (BLKmode,
560 gen_rtx_SCRATCH (VOIDmode))), call_fusage);
563 /* Put the register usage information on the CALL. If there is already
564 some usage information, put ours at the end. */
565 if (CALL_INSN_FUNCTION_USAGE (call_insn))
569 for (link = CALL_INSN_FUNCTION_USAGE (call_insn); XEXP (link, 1) != 0;
570 link = XEXP (link, 1))
573 XEXP (link, 1) = call_fusage;
576 CALL_INSN_FUNCTION_USAGE (call_insn) = call_fusage;
578 /* If this is a const call, then set the insn's unchanging bit. */
579 if (ecf_flags & (ECF_CONST | ECF_PURE))
580 CONST_CALL_P (call_insn) = 1;
582 /* If this call can't throw, attach a REG_EH_REGION reg note to that
584 if (ecf_flags & ECF_NOTHROW)
585 REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
586 REG_NOTES (call_insn));
588 SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0);
590 /* Restore this now, so that we do defer pops for this call's args
591 if the context of the call as a whole permits. */
592 inhibit_defer_pop = old_inhibit_defer_pop;
597 CALL_INSN_FUNCTION_USAGE (call_insn)
598 = gen_rtx_EXPR_LIST (VOIDmode,
599 gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx),
600 CALL_INSN_FUNCTION_USAGE (call_insn));
601 rounded_stack_size -= n_popped;
602 rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
603 stack_pointer_delta -= n_popped;
606 if (!ACCUMULATE_OUTGOING_ARGS)
608 /* If returning from the subroutine does not automatically pop the args,
609 we need an instruction to pop them sooner or later.
610 Perhaps do it now; perhaps just record how much space to pop later.
612 If returning from the subroutine does pop the args, indicate that the
613 stack pointer will be changed. */
615 if (rounded_stack_size != 0)
617 if (flag_defer_pop && inhibit_defer_pop == 0
618 && !(ecf_flags & (ECF_CONST | ECF_PURE)))
619 pending_stack_adjust += rounded_stack_size;
621 adjust_stack (rounded_stack_size_rtx);
624 /* When we accumulate outgoing args, we must avoid any stack manipulations.
625 Restore the stack pointer to its original value now. Usually
626 ACCUMULATE_OUTGOING_ARGS targets don't get here, but there are exceptions.
627 On i386 ACCUMULATE_OUTGOING_ARGS can be enabled on demand, and
628 popping variants of functions exist as well.
630 ??? We may optimize similar to defer_pop above, but it is
631 probably not worthwhile.
633 ??? It will be worthwhile to enable combine_stack_adjustments even for
636 anti_adjust_stack (GEN_INT (n_popped));
639 /* Determine if the function identified by NAME and FNDECL is one with
640 special properties we wish to know about.
642 For example, if the function might return more than one time (setjmp), then
643 set RETURNS_TWICE to a nonzero value.
645 Similarly set LONGJMP for if the function is in the longjmp family.
647 Set MALLOC for any of the standard memory allocation functions which
648 allocate from the heap.
650 Set MAY_BE_ALLOCA for any memory allocation function that might allocate
651 space from the stack such as alloca. */
654 special_function_p (fndecl, flags)
658 if (! (flags & ECF_MALLOC)
659 && fndecl && DECL_NAME (fndecl)
660 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
661 /* Exclude functions not at the file scope, or not `extern',
662 since they are not the magic functions we would otherwise
664 && DECL_CONTEXT (fndecl) == NULL_TREE && TREE_PUBLIC (fndecl))
666 char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
669 /* We assume that alloca will always be called by name. It
670 makes no sense to pass it as a pointer-to-function to
671 anything that does not understand its behavior. */
672 if (((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
674 && ! strcmp (name, "alloca"))
675 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
677 && ! strcmp (name, "__builtin_alloca"))))
678 flags |= ECF_MAY_BE_ALLOCA;
680 /* Disregard prefix _, __ or __x. */
683 if (name[1] == '_' && name[2] == 'x')
685 else if (name[1] == '_')
694 && (! strcmp (tname, "setjmp")
695 || ! strcmp (tname, "setjmp_syscall")))
697 && ! strcmp (tname, "sigsetjmp"))
699 && ! strcmp (tname, "savectx")))
700 flags |= ECF_RETURNS_TWICE;
703 && ! strcmp (tname, "siglongjmp"))
704 flags |= ECF_LONGJMP;
706 else if ((tname[0] == 'q' && tname[1] == 's'
707 && ! strcmp (tname, "qsetjmp"))
708 || (tname[0] == 'v' && tname[1] == 'f'
709 && ! strcmp (tname, "vfork")))
710 flags |= ECF_RETURNS_TWICE;
712 else if (tname[0] == 'l' && tname[1] == 'o'
713 && ! strcmp (tname, "longjmp"))
714 flags |= ECF_LONGJMP;
716 else if ((tname[0] == 'f' && tname[1] == 'o'
717 && ! strcmp (tname, "fork"))
718 /* Linux specific: __clone. check NAME to insist on the
719 leading underscores, to avoid polluting the ISO / POSIX
721 || (name[0] == '_' && name[1] == '_'
722 && ! strcmp (tname, "clone"))
723 || (tname[0] == 'e' && tname[1] == 'x' && tname[2] == 'e'
724 && tname[3] == 'c' && (tname[4] == 'l' || tname[4] == 'v')
726 || ((tname[5] == 'p' || tname[5] == 'e')
727 && tname[6] == '\0'))))
728 flags |= ECF_FORK_OR_EXEC;
730 /* Do not add any more malloc-like functions to this list,
731 instead mark them as malloc functions using the malloc attribute.
732 Note, realloc is not suitable for attribute malloc since
733 it may return the same address across multiple calls.
734 C++ operator new is not suitable because it is not required
735 to return a unique pointer; indeed, the standard placement new
736 just returns its argument. */
737 else if (TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl))) == Pmode
738 && (! strcmp (tname, "malloc")
739 || ! strcmp (tname, "calloc")
740 || ! strcmp (tname, "strdup")))
746 /* Return nonzero when tree represent call to longjmp. */
748 setjmp_call_p (fndecl)
751 return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE;
754 /* Detect flags (function attributes) from the function type node. */
756 flags_from_decl_or_type (exp)
760 /* ??? We can't set IS_MALLOC for function types? */
763 /* The function exp may have the `malloc' attribute. */
764 if (DECL_P (exp) && DECL_IS_MALLOC (exp))
767 /* The function exp may have the `pure' attribute. */
768 if (DECL_P (exp) && DECL_IS_PURE (exp))
771 if (TREE_NOTHROW (exp))
772 flags |= ECF_NOTHROW;
775 if (TREE_READONLY (exp) && !TREE_THIS_VOLATILE (exp))
778 if (TREE_THIS_VOLATILE (exp))
779 flags |= ECF_NORETURN;
785 /* Precompute all register parameters as described by ARGS, storing values
786 into fields within the ARGS array.
788 NUM_ACTUALS indicates the total number elements in the ARGS array.
790 Set REG_PARM_SEEN if we encounter a register parameter. */
793 precompute_register_parameters (num_actuals, args, reg_parm_seen)
795 struct arg_data *args;
802 for (i = 0; i < num_actuals; i++)
803 if (args[i].reg != 0 && ! args[i].pass_on_stack)
807 if (args[i].value == 0)
810 args[i].value = expand_expr (args[i].tree_value, NULL_RTX,
812 preserve_temp_slots (args[i].value);
815 /* ANSI doesn't require a sequence point here,
816 but PCC has one, so this will avoid some problems. */
820 /* If we are to promote the function arg to a wider mode,
823 if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
825 = convert_modes (args[i].mode,
826 TYPE_MODE (TREE_TYPE (args[i].tree_value)),
827 args[i].value, args[i].unsignedp);
829 /* If the value is expensive, and we are inside an appropriately
830 short loop, put the value into a pseudo and then put the pseudo
833 For small register classes, also do this if this call uses
834 register parameters. This is to avoid reload conflicts while
835 loading the parameters registers. */
837 if ((! (GET_CODE (args[i].value) == REG
838 || (GET_CODE (args[i].value) == SUBREG
839 && GET_CODE (SUBREG_REG (args[i].value)) == REG)))
840 && args[i].mode != BLKmode
841 && rtx_cost (args[i].value, SET) > 2
842 && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
843 || preserve_subexpressions_p ()))
844 args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
848 #ifdef REG_PARM_STACK_SPACE
850 /* The argument list is the property of the called routine and it
851 may clobber it. If the fixed area has been used for previous
852 parameters, we must save and restore it. */
855 save_fixed_argument_area (reg_parm_stack_space, argblock,
856 low_to_save, high_to_save)
857 int reg_parm_stack_space;
863 rtx save_area = NULL_RTX;
865 /* Compute the boundary of the that needs to be saved, if any. */
866 #ifdef ARGS_GROW_DOWNWARD
867 for (i = 0; i < reg_parm_stack_space + 1; i++)
869 for (i = 0; i < reg_parm_stack_space; i++)
872 if (i >= highest_outgoing_arg_in_use
873 || stack_usage_map[i] == 0)
876 if (*low_to_save == -1)
882 if (*low_to_save >= 0)
884 int num_to_save = *high_to_save - *low_to_save + 1;
885 enum machine_mode save_mode
886 = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
889 /* If we don't have the required alignment, must do this in BLKmode. */
890 if ((*low_to_save & (MIN (GET_MODE_SIZE (save_mode),
891 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
894 #ifdef ARGS_GROW_DOWNWARD
896 = gen_rtx_MEM (save_mode,
897 memory_address (save_mode,
898 plus_constant (argblock,
901 stack_area = gen_rtx_MEM (save_mode,
902 memory_address (save_mode,
903 plus_constant (argblock,
906 if (save_mode == BLKmode)
908 save_area = assign_stack_temp (BLKmode, num_to_save, 0);
909 /* Cannot use emit_block_move here because it can be done by a
910 library call which in turn gets into this place again and deadly
911 infinite recursion happens. */
912 move_by_pieces (validize_mem (save_area), stack_area, num_to_save,
917 save_area = gen_reg_rtx (save_mode);
918 emit_move_insn (save_area, stack_area);
925 restore_fixed_argument_area (save_area, argblock, high_to_save, low_to_save)
931 enum machine_mode save_mode = GET_MODE (save_area);
932 #ifdef ARGS_GROW_DOWNWARD
934 = gen_rtx_MEM (save_mode,
935 memory_address (save_mode,
936 plus_constant (argblock,
940 = gen_rtx_MEM (save_mode,
941 memory_address (save_mode,
942 plus_constant (argblock,
946 if (save_mode != BLKmode)
947 emit_move_insn (stack_area, save_area);
949 /* Cannot use emit_block_move here because it can be done by a library
950 call which in turn gets into this place again and deadly infinite
951 recursion happens. */
952 move_by_pieces (stack_area, validize_mem (save_area),
953 high_to_save - low_to_save + 1, PARM_BOUNDARY);
957 /* If any elements in ARGS refer to parameters that are to be passed in
958 registers, but not in memory, and whose alignment does not permit a
959 direct copy into registers. Copy the values into a group of pseudos
960 which we will later copy into the appropriate hard registers.
962 Pseudos for each unaligned argument will be stored into the array
963 args[argnum].aligned_regs. The caller is responsible for deallocating
964 the aligned_regs array if it is nonzero. */
967 store_unaligned_arguments_into_pseudos (args, num_actuals)
968 struct arg_data *args;
973 for (i = 0; i < num_actuals; i++)
974 if (args[i].reg != 0 && ! args[i].pass_on_stack
975 && args[i].mode == BLKmode
976 && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
977 < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
979 int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
980 int big_endian_correction = 0;
982 args[i].n_aligned_regs
983 = args[i].partial ? args[i].partial
984 : (bytes + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
986 args[i].aligned_regs = (rtx *) xmalloc (sizeof (rtx)
987 * args[i].n_aligned_regs);
989 /* Structures smaller than a word are aligned to the least
990 significant byte (to the right). On a BYTES_BIG_ENDIAN machine,
991 this means we must skip the empty high order bytes when
992 calculating the bit offset. */
993 if (BYTES_BIG_ENDIAN && bytes < UNITS_PER_WORD)
994 big_endian_correction = (BITS_PER_WORD - (bytes * BITS_PER_UNIT));
996 for (j = 0; j < args[i].n_aligned_regs; j++)
998 rtx reg = gen_reg_rtx (word_mode);
999 rtx word = operand_subword_force (args[i].value, j, BLKmode);
1000 int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD);
1001 int bitalign = TYPE_ALIGN (TREE_TYPE (args[i].tree_value));
1003 args[i].aligned_regs[j] = reg;
1005 /* There is no need to restrict this code to loading items
1006 in TYPE_ALIGN sized hunks. The bitfield instructions can
1007 load up entire word sized registers efficiently.
1009 ??? This may not be needed anymore.
1010 We use to emit a clobber here but that doesn't let later
1011 passes optimize the instructions we emit. By storing 0 into
1012 the register later passes know the first AND to zero out the
1013 bitfield being set in the register is unnecessary. The store
1014 of 0 will be deleted as will at least the first AND. */
1016 emit_move_insn (reg, const0_rtx);
1018 bytes -= bitsize / BITS_PER_UNIT;
1019 store_bit_field (reg, bitsize, big_endian_correction, word_mode,
1020 extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
1021 word_mode, word_mode, bitalign,
1023 bitalign, BITS_PER_WORD);
1028 /* Fill in ARGS_SIZE and ARGS array based on the parameters found in
1031 NUM_ACTUALS is the total number of parameters.
1033 N_NAMED_ARGS is the total number of named arguments.
1035 FNDECL is the tree code for the target of this call (if known)
1037 ARGS_SO_FAR holds state needed by the target to know where to place
1040 REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
1041 for arguments which are passed in registers.
1043 OLD_STACK_LEVEL is a pointer to an rtx which olds the old stack level
1044 and may be modified by this routine.
1046 OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
1047 flags which may may be modified by this routine. */
1050 initialize_argument_information (num_actuals, args, args_size, n_named_args,
1051 actparms, fndecl, args_so_far,
1052 reg_parm_stack_space, old_stack_level,
1053 old_pending_adj, must_preallocate,
1055 int num_actuals ATTRIBUTE_UNUSED;
1056 struct arg_data *args;
1057 struct args_size *args_size;
1058 int n_named_args ATTRIBUTE_UNUSED;
1061 CUMULATIVE_ARGS *args_so_far;
1062 int reg_parm_stack_space;
1063 rtx *old_stack_level;
1064 int *old_pending_adj;
1065 int *must_preallocate;
1068 /* 1 if scanning parms front to back, -1 if scanning back to front. */
1071 /* Count arg position in order args appear. */
1074 struct args_size alignment_pad;
1078 args_size->constant = 0;
1081 /* In this loop, we consider args in the order they are written.
1082 We fill up ARGS from the front or from the back if necessary
1083 so that in any case the first arg to be pushed ends up at the front. */
1085 if (PUSH_ARGS_REVERSED)
1087 i = num_actuals - 1, inc = -1;
1088 /* In this case, must reverse order of args
1089 so that we compute and push the last arg first. */
1096 /* I counts args in order (to be) pushed; ARGPOS counts in order written. */
1097 for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
1099 tree type = TREE_TYPE (TREE_VALUE (p));
1101 enum machine_mode mode;
1103 args[i].tree_value = TREE_VALUE (p);
1105 /* Replace erroneous argument with constant zero. */
1106 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
1107 args[i].tree_value = integer_zero_node, type = integer_type_node;
1109 /* If TYPE is a transparent union, pass things the way we would
1110 pass the first field of the union. We have already verified that
1111 the modes are the same. */
1112 if (TREE_CODE (type) == UNION_TYPE && TYPE_TRANSPARENT_UNION (type))
1113 type = TREE_TYPE (TYPE_FIELDS (type));
1115 /* Decide where to pass this arg.
1117 args[i].reg is nonzero if all or part is passed in registers.
1119 args[i].partial is nonzero if part but not all is passed in registers,
1120 and the exact value says how many words are passed in registers.
1122 args[i].pass_on_stack is nonzero if the argument must at least be
1123 computed on the stack. It may then be loaded back into registers
1124 if args[i].reg is nonzero.
1126 These decisions are driven by the FUNCTION_... macros and must agree
1127 with those made by function.c. */
1129 /* See if this argument should be passed by invisible reference. */
1130 if ((TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1131 && contains_placeholder_p (TYPE_SIZE (type)))
1132 || TREE_ADDRESSABLE (type)
1133 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
1134 || FUNCTION_ARG_PASS_BY_REFERENCE (*args_so_far, TYPE_MODE (type),
1135 type, argpos < n_named_args)
1139 /* If we're compiling a thunk, pass through invisible
1140 references instead of making a copy. */
1141 if (current_function_is_thunk
1142 #ifdef FUNCTION_ARG_CALLEE_COPIES
1143 || (FUNCTION_ARG_CALLEE_COPIES (*args_so_far, TYPE_MODE (type),
1144 type, argpos < n_named_args)
1145 /* If it's in a register, we must make a copy of it too. */
1146 /* ??? Is this a sufficient test? Is there a better one? */
1147 && !(TREE_CODE (args[i].tree_value) == VAR_DECL
1148 && REG_P (DECL_RTL (args[i].tree_value)))
1149 && ! TREE_ADDRESSABLE (type))
1153 /* C++ uses a TARGET_EXPR to indicate that we want to make a
1154 new object from the argument. If we are passing by
1155 invisible reference, the callee will do that for us, so we
1156 can strip off the TARGET_EXPR. This is not always safe,
1157 but it is safe in the only case where this is a useful
1158 optimization; namely, when the argument is a plain object.
1159 In that case, the frontend is just asking the backend to
1160 make a bitwise copy of the argument. */
1162 if (TREE_CODE (args[i].tree_value) == TARGET_EXPR
1163 && (DECL_P (TREE_OPERAND (args[i].tree_value, 1)))
1164 && ! REG_P (DECL_RTL (TREE_OPERAND (args[i].tree_value, 1))))
1165 args[i].tree_value = TREE_OPERAND (args[i].tree_value, 1);
1167 args[i].tree_value = build1 (ADDR_EXPR,
1168 build_pointer_type (type),
1169 args[i].tree_value);
1170 type = build_pointer_type (type);
1174 /* We make a copy of the object and pass the address to the
1175 function being called. */
1178 if (!COMPLETE_TYPE_P (type)
1179 || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1180 || (flag_stack_check && ! STACK_CHECK_BUILTIN
1181 && (0 < compare_tree_int (TYPE_SIZE_UNIT (type),
1182 STACK_CHECK_MAX_VAR_SIZE))))
1184 /* This is a variable-sized object. Make space on the stack
1186 rtx size_rtx = expr_size (TREE_VALUE (p));
1188 if (*old_stack_level == 0)
1190 emit_stack_save (SAVE_BLOCK, old_stack_level, NULL_RTX);
1191 *old_pending_adj = pending_stack_adjust;
1192 pending_stack_adjust = 0;
1195 copy = gen_rtx_MEM (BLKmode,
1196 allocate_dynamic_stack_space
1197 (size_rtx, NULL_RTX, TYPE_ALIGN (type)));
1198 set_mem_attributes (copy, type, 1);
1201 copy = assign_temp (type, 0, 1, 0);
1203 store_expr (args[i].tree_value, copy, 0);
1204 *ecf_flags &= ~(ECF_CONST | ECF_PURE);
1206 args[i].tree_value = build1 (ADDR_EXPR,
1207 build_pointer_type (type),
1208 make_tree (type, copy));
1209 type = build_pointer_type (type);
1213 mode = TYPE_MODE (type);
1214 unsignedp = TREE_UNSIGNED (type);
1216 #ifdef PROMOTE_FUNCTION_ARGS
1217 mode = promote_mode (type, mode, &unsignedp, 1);
1220 args[i].unsignedp = unsignedp;
1221 args[i].mode = mode;
1223 args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
1224 argpos < n_named_args);
1225 #ifdef FUNCTION_INCOMING_ARG
1226 /* If this is a sibling call and the machine has register windows, the
1227 register window has to be unwinded before calling the routine, so
1228 arguments have to go into the incoming registers. */
1229 args[i].tail_call_reg = FUNCTION_INCOMING_ARG (*args_so_far, mode, type,
1230 argpos < n_named_args);
1232 args[i].tail_call_reg = args[i].reg;
1235 #ifdef FUNCTION_ARG_PARTIAL_NREGS
1238 = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
1239 argpos < n_named_args);
1242 args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
1244 /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
1245 it means that we are to pass this arg in the register(s) designated
1246 by the PARALLEL, but also to pass it in the stack. */
1247 if (args[i].reg && GET_CODE (args[i].reg) == PARALLEL
1248 && XEXP (XVECEXP (args[i].reg, 0, 0), 0) == 0)
1249 args[i].pass_on_stack = 1;
1251 /* If this is an addressable type, we must preallocate the stack
1252 since we must evaluate the object into its final location.
1254 If this is to be passed in both registers and the stack, it is simpler
1256 if (TREE_ADDRESSABLE (type)
1257 || (args[i].pass_on_stack && args[i].reg != 0))
1258 *must_preallocate = 1;
1260 /* If this is an addressable type, we cannot pre-evaluate it. Thus,
1261 we cannot consider this function call constant. */
1262 if (TREE_ADDRESSABLE (type))
1263 *ecf_flags &= ~(ECF_CONST | ECF_PURE);
1265 /* Compute the stack-size of this argument. */
1266 if (args[i].reg == 0 || args[i].partial != 0
1267 || reg_parm_stack_space > 0
1268 || args[i].pass_on_stack)
1269 locate_and_pad_parm (mode, type,
1270 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1275 fndecl, args_size, &args[i].offset,
1276 &args[i].size, &alignment_pad);
1278 #ifndef ARGS_GROW_DOWNWARD
1279 args[i].slot_offset = *args_size;
1282 args[i].alignment_pad = alignment_pad;
1284 /* If a part of the arg was put into registers,
1285 don't include that part in the amount pushed. */
1286 if (reg_parm_stack_space == 0 && ! args[i].pass_on_stack)
1287 args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
1288 / (PARM_BOUNDARY / BITS_PER_UNIT)
1289 * (PARM_BOUNDARY / BITS_PER_UNIT));
1291 /* Update ARGS_SIZE, the total stack space for args so far. */
1293 args_size->constant += args[i].size.constant;
1294 if (args[i].size.var)
1296 ADD_PARM_SIZE (*args_size, args[i].size.var);
1299 /* Since the slot offset points to the bottom of the slot,
1300 we must record it after incrementing if the args grow down. */
1301 #ifdef ARGS_GROW_DOWNWARD
1302 args[i].slot_offset = *args_size;
1304 args[i].slot_offset.constant = -args_size->constant;
1306 SUB_PARM_SIZE (args[i].slot_offset, args_size->var);
1309 /* Increment ARGS_SO_FAR, which has info about which arg-registers
1310 have been used, etc. */
1312 FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
1313 argpos < n_named_args);
1317 /* Update ARGS_SIZE to contain the total size for the argument block.
1318 Return the original constant component of the argument block's size.
1320 REG_PARM_STACK_SPACE holds the number of bytes of stack space reserved
1321 for arguments passed in registers. */
1324 compute_argument_block_size (reg_parm_stack_space, args_size,
1325 preferred_stack_boundary)
1326 int reg_parm_stack_space;
1327 struct args_size *args_size;
1328 int preferred_stack_boundary ATTRIBUTE_UNUSED;
1330 int unadjusted_args_size = args_size->constant;
1332 /* For accumulate outgoing args mode we don't need to align, since the frame
1333 will be already aligned. Align to STACK_BOUNDARY in order to prevent
1334 backends from generating missaligned frame sizes. */
1335 #ifdef STACK_BOUNDARY
1336 if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
1337 preferred_stack_boundary = STACK_BOUNDARY;
1340 /* Compute the actual size of the argument block required. The variable
1341 and constant sizes must be combined, the size may have to be rounded,
1342 and there may be a minimum required size. */
1346 args_size->var = ARGS_SIZE_TREE (*args_size);
1347 args_size->constant = 0;
1349 #ifdef PREFERRED_STACK_BOUNDARY
1350 preferred_stack_boundary /= BITS_PER_UNIT;
1351 if (preferred_stack_boundary > 1)
1353 /* We don't handle this case yet. To handle it correctly we have
1354 to add the delta, round and substract the delta.
1355 Currently no machine description requires this support. */
1356 if (stack_pointer_delta & (preferred_stack_boundary - 1))
1358 args_size->var = round_up (args_size->var, preferred_stack_boundary);
1362 if (reg_parm_stack_space > 0)
1365 = size_binop (MAX_EXPR, args_size->var,
1366 ssize_int (reg_parm_stack_space));
1368 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1369 /* The area corresponding to register parameters is not to count in
1370 the size of the block we need. So make the adjustment. */
1372 = size_binop (MINUS_EXPR, args_size->var,
1373 ssize_int (reg_parm_stack_space));
1379 #ifdef PREFERRED_STACK_BOUNDARY
1380 preferred_stack_boundary /= BITS_PER_UNIT;
1381 if (preferred_stack_boundary < 1)
1382 preferred_stack_boundary = 1;
1383 args_size->constant = (((args_size->constant
1384 + stack_pointer_delta
1385 + preferred_stack_boundary - 1)
1386 / preferred_stack_boundary
1387 * preferred_stack_boundary)
1388 - stack_pointer_delta);
1391 args_size->constant = MAX (args_size->constant,
1392 reg_parm_stack_space);
1394 #ifdef MAYBE_REG_PARM_STACK_SPACE
1395 if (reg_parm_stack_space == 0)
1396 args_size->constant = 0;
1399 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1400 args_size->constant -= reg_parm_stack_space;
1403 return unadjusted_args_size;
1406 /* Precompute parameters as needed for a function call.
1408 FLAGS is mask of ECF_* constants.
1410 NUM_ACTUALS is the number of arguments.
1412 ARGS is an array containing information for each argument; this routine
1413 fills in the INITIAL_VALUE and VALUE fields for each precomputed argument.
1417 precompute_arguments (flags, num_actuals, args)
1420 struct arg_data *args;
1424 /* If this function call is cse'able, precompute all the parameters.
1425 Note that if the parameter is constructed into a temporary, this will
1426 cause an additional copy because the parameter will be constructed
1427 into a temporary location and then copied into the outgoing arguments.
1428 If a parameter contains a call to alloca and this function uses the
1429 stack, precompute the parameter. */
1431 /* If we preallocated the stack space, and some arguments must be passed
1432 on the stack, then we must precompute any parameter which contains a
1433 function call which will store arguments on the stack.
1434 Otherwise, evaluating the parameter may clobber previous parameters
1435 which have already been stored into the stack. (we have code to avoid
1436 such case by saving the ougoing stack arguments, but it results in
1439 for (i = 0; i < num_actuals; i++)
1440 if ((flags & (ECF_CONST | ECF_PURE))
1441 || calls_function (args[i].tree_value, !ACCUMULATE_OUTGOING_ARGS))
1443 /* If this is an addressable type, we cannot pre-evaluate it. */
1444 if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)))
1450 = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
1452 preserve_temp_slots (args[i].value);
1455 /* ANSI doesn't require a sequence point here,
1456 but PCC has one, so this will avoid some problems. */
1459 args[i].initial_value = args[i].value
1460 = protect_from_queue (args[i].value, 0);
1462 if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) != args[i].mode)
1465 = convert_modes (args[i].mode,
1466 TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1467 args[i].value, args[i].unsignedp);
1468 #ifdef PROMOTE_FOR_CALL_ONLY
1469 /* CSE will replace this only if it contains args[i].value
1470 pseudo, so convert it down to the declared mode using
1472 if (GET_CODE (args[i].value) == REG
1473 && GET_MODE_CLASS (args[i].mode) == MODE_INT)
1475 args[i].initial_value
1476 = gen_rtx_SUBREG (TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1478 SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
1479 SUBREG_PROMOTED_UNSIGNED_P (args[i].initial_value)
1480 = args[i].unsignedp;
1487 /* Given the current state of MUST_PREALLOCATE and information about
1488 arguments to a function call in NUM_ACTUALS, ARGS and ARGS_SIZE,
1489 compute and return the final value for MUST_PREALLOCATE. */
1492 finalize_must_preallocate (must_preallocate, num_actuals, args, args_size)
1493 int must_preallocate;
1495 struct arg_data *args;
1496 struct args_size *args_size;
1498 /* See if we have or want to preallocate stack space.
1500 If we would have to push a partially-in-regs parm
1501 before other stack parms, preallocate stack space instead.
1503 If the size of some parm is not a multiple of the required stack
1504 alignment, we must preallocate.
1506 If the total size of arguments that would otherwise create a copy in
1507 a temporary (such as a CALL) is more than half the total argument list
1508 size, preallocation is faster.
1510 Another reason to preallocate is if we have a machine (like the m88k)
1511 where stack alignment is required to be maintained between every
1512 pair of insns, not just when the call is made. However, we assume here
1513 that such machines either do not have push insns (and hence preallocation
1514 would occur anyway) or the problem is taken care of with
1517 if (! must_preallocate)
1519 int partial_seen = 0;
1520 int copy_to_evaluate_size = 0;
1523 for (i = 0; i < num_actuals && ! must_preallocate; i++)
1525 if (args[i].partial > 0 && ! args[i].pass_on_stack)
1527 else if (partial_seen && args[i].reg == 0)
1528 must_preallocate = 1;
1530 if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1531 && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1532 || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1533 || TREE_CODE (args[i].tree_value) == COND_EXPR
1534 || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1535 copy_to_evaluate_size
1536 += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1539 if (copy_to_evaluate_size * 2 >= args_size->constant
1540 && args_size->constant > 0)
1541 must_preallocate = 1;
1543 return must_preallocate;
1546 /* If we preallocated stack space, compute the address of each argument
1547 and store it into the ARGS array.
1549 We need not ensure it is a valid memory address here; it will be
1550 validized when it is used.
1552 ARGBLOCK is an rtx for the address of the outgoing arguments. */
1555 compute_argument_addresses (args, argblock, num_actuals)
1556 struct arg_data *args;
1562 rtx arg_reg = argblock;
1563 int i, arg_offset = 0;
1565 if (GET_CODE (argblock) == PLUS)
1566 arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1568 for (i = 0; i < num_actuals; i++)
1570 rtx offset = ARGS_SIZE_RTX (args[i].offset);
1571 rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1574 /* Skip this parm if it will not be passed on the stack. */
1575 if (! args[i].pass_on_stack && args[i].reg != 0)
1578 if (GET_CODE (offset) == CONST_INT)
1579 addr = plus_constant (arg_reg, INTVAL (offset));
1581 addr = gen_rtx_PLUS (Pmode, arg_reg, offset);
1583 addr = plus_constant (addr, arg_offset);
1584 args[i].stack = gen_rtx_MEM (args[i].mode, addr);
1585 set_mem_attributes (args[i].stack,
1586 TREE_TYPE (args[i].tree_value), 1);
1588 if (GET_CODE (slot_offset) == CONST_INT)
1589 addr = plus_constant (arg_reg, INTVAL (slot_offset));
1591 addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset);
1593 addr = plus_constant (addr, arg_offset);
1594 args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
1595 set_mem_attributes (args[i].stack_slot,
1596 TREE_TYPE (args[i].tree_value), 1);
1601 /* Given a FNDECL and EXP, return an rtx suitable for use as a target address
1602 in a call instruction.
1604 FNDECL is the tree node for the target function. For an indirect call
1605 FNDECL will be NULL_TREE.
1607 EXP is the CALL_EXPR for this call. */
1610 rtx_for_function_call (fndecl, exp)
1616 /* Get the function to call, in the form of RTL. */
1619 /* If this is the first use of the function, see if we need to
1620 make an external definition for it. */
1621 if (! TREE_USED (fndecl))
1623 assemble_external (fndecl);
1624 TREE_USED (fndecl) = 1;
1627 /* Get a SYMBOL_REF rtx for the function address. */
1628 funexp = XEXP (DECL_RTL (fndecl), 0);
1631 /* Generate an rtx (probably a pseudo-register) for the address. */
1636 expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
1637 pop_temp_slots (); /* FUNEXP can't be BLKmode */
1639 /* Check the function is executable. */
1640 if (current_function_check_memory_usage)
1642 #ifdef POINTERS_EXTEND_UNSIGNED
1643 /* It might be OK to convert funexp in place, but there's
1644 a lot going on between here and when it happens naturally
1645 that this seems safer. */
1646 funaddr = convert_memory_address (Pmode, funexp);
1648 emit_library_call (chkr_check_exec_libfunc, 1,
1657 /* Do the register loads required for any wholly-register parms or any
1658 parms which are passed both on the stack and in a register. Their
1659 expressions were already evaluated.
1661 Mark all register-parms as living through the call, putting these USE
1662 insns in the CALL_INSN_FUNCTION_USAGE field. */
1665 load_register_parameters (args, num_actuals, call_fusage, flags)
1666 struct arg_data *args;
1673 #ifdef LOAD_ARGS_REVERSED
1674 for (i = num_actuals - 1; i >= 0; i--)
1676 for (i = 0; i < num_actuals; i++)
1679 rtx reg = ((flags & ECF_SIBCALL)
1680 ? args[i].tail_call_reg : args[i].reg);
1681 int partial = args[i].partial;
1686 /* Set to non-negative if must move a word at a time, even if just
1687 one word (e.g, partial == 1 && mode == DFmode). Set to -1 if
1688 we just use a normal move insn. This value can be zero if the
1689 argument is a zero size structure with no fields. */
1690 nregs = (partial ? partial
1691 : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1692 ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1693 + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1696 /* Handle calls that pass values in multiple non-contiguous
1697 locations. The Irix 6 ABI has examples of this. */
1699 if (GET_CODE (reg) == PARALLEL)
1700 emit_group_load (reg, args[i].value,
1701 int_size_in_bytes (TREE_TYPE (args[i].tree_value)),
1702 TYPE_ALIGN (TREE_TYPE (args[i].tree_value)));
1704 /* If simple case, just do move. If normal partial, store_one_arg
1705 has already loaded the register for us. In all other cases,
1706 load the register(s) from memory. */
1708 else if (nregs == -1)
1709 emit_move_insn (reg, args[i].value);
1711 /* If we have pre-computed the values to put in the registers in
1712 the case of non-aligned structures, copy them in now. */
1714 else if (args[i].n_aligned_regs != 0)
1715 for (j = 0; j < args[i].n_aligned_regs; j++)
1716 emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j),
1717 args[i].aligned_regs[j]);
1719 else if (partial == 0 || args[i].pass_on_stack)
1720 move_block_to_reg (REGNO (reg),
1721 validize_mem (args[i].value), nregs,
1724 /* Handle calls that pass values in multiple non-contiguous
1725 locations. The Irix 6 ABI has examples of this. */
1726 if (GET_CODE (reg) == PARALLEL)
1727 use_group_regs (call_fusage, reg);
1728 else if (nregs == -1)
1729 use_reg (call_fusage, reg);
1731 use_regs (call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
1736 /* Try to integreate function. See expand_inline_function for documentation
1737 about the parameters. */
1740 try_to_integrate (fndecl, actparms, target, ignore, type, structure_value_addr)
1746 rtx structure_value_addr;
1751 rtx old_stack_level = 0;
1752 int reg_parm_stack_space = 0;
1754 #ifdef REG_PARM_STACK_SPACE
1755 #ifdef MAYBE_REG_PARM_STACK_SPACE
1756 reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
1758 reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
1762 before_call = get_last_insn ();
1764 temp = expand_inline_function (fndecl, actparms, target,
1766 structure_value_addr);
1768 /* If inlining succeeded, return. */
1769 if (temp != (rtx) (HOST_WIDE_INT) - 1)
1771 if (ACCUMULATE_OUTGOING_ARGS)
1773 /* If the outgoing argument list must be preserved, push
1774 the stack before executing the inlined function if it
1777 for (i = reg_parm_stack_space - 1; i >= 0; i--)
1778 if (i < highest_outgoing_arg_in_use && stack_usage_map[i] != 0)
1781 if (stack_arg_under_construction || i >= 0)
1784 = before_call ? NEXT_INSN (before_call) : get_insns ();
1785 rtx insn = NULL_RTX, seq;
1787 /* Look for a call in the inline function code.
1788 If DECL_SAVED_INSNS (fndecl)->outgoing_args_size is
1789 nonzero then there is a call and it is not necessary
1790 to scan the insns. */
1792 if (DECL_SAVED_INSNS (fndecl)->outgoing_args_size == 0)
1793 for (insn = first_insn; insn; insn = NEXT_INSN (insn))
1794 if (GET_CODE (insn) == CALL_INSN)
1799 /* Reserve enough stack space so that the largest
1800 argument list of any function call in the inline
1801 function does not overlap the argument list being
1802 evaluated. This is usually an overestimate because
1803 allocate_dynamic_stack_space reserves space for an
1804 outgoing argument list in addition to the requested
1805 space, but there is no way to ask for stack space such
1806 that an argument list of a certain length can be
1809 Add the stack space reserved for register arguments, if
1810 any, in the inline function. What is really needed is the
1811 largest value of reg_parm_stack_space in the inline
1812 function, but that is not available. Using the current
1813 value of reg_parm_stack_space is wrong, but gives
1814 correct results on all supported machines. */
1816 int adjust = (DECL_SAVED_INSNS (fndecl)->outgoing_args_size
1817 + reg_parm_stack_space);
1820 emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
1821 allocate_dynamic_stack_space (GEN_INT (adjust),
1822 NULL_RTX, BITS_PER_UNIT);
1825 emit_insns_before (seq, first_insn);
1826 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
1831 /* If the result is equivalent to TARGET, return TARGET to simplify
1832 checks in store_expr. They can be equivalent but not equal in the
1833 case of a function that returns BLKmode. */
1834 if (temp != target && rtx_equal_p (temp, target))
1839 /* If inlining failed, mark FNDECL as needing to be compiled
1840 separately after all. If function was declared inline,
1842 if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
1843 && optimize > 0 && !TREE_ADDRESSABLE (fndecl))
1845 warning_with_decl (fndecl, "inlining failed in call to `%s'");
1846 warning ("called from here");
1848 mark_addressable (fndecl);
1849 return (rtx) (HOST_WIDE_INT) - 1;
1852 /* We need to pop PENDING_STACK_ADJUST bytes. But, if the arguments
1853 wouldn't fill up an even multiple of PREFERRED_UNIT_STACK_BOUNDARY
1854 bytes, then we would need to push some additional bytes to pad the
1855 arguments. So, we compute an adjust to the stack pointer for an
1856 amount that will leave the stack under-aligned by UNADJUSTED_ARGS_SIZE
1857 bytes. Then, when the arguments are pushed the stack will be perfectly
1858 aligned. ARGS_SIZE->CONSTANT is set to the number of bytes that should
1859 be popped after the call. Returns the adjustment. */
1862 combine_pending_stack_adjustment_and_call (unadjusted_args_size,
1864 preferred_unit_stack_boundary)
1865 int unadjusted_args_size;
1866 struct args_size *args_size;
1867 int preferred_unit_stack_boundary;
1869 /* The number of bytes to pop so that the stack will be
1870 under-aligned by UNADJUSTED_ARGS_SIZE bytes. */
1871 HOST_WIDE_INT adjustment;
1872 /* The alignment of the stack after the arguments are pushed, if we
1873 just pushed the arguments without adjust the stack here. */
1874 HOST_WIDE_INT unadjusted_alignment;
1876 unadjusted_alignment
1877 = ((stack_pointer_delta + unadjusted_args_size)
1878 % preferred_unit_stack_boundary);
1880 /* We want to get rid of as many of the PENDING_STACK_ADJUST bytes
1881 as possible -- leaving just enough left to cancel out the
1882 UNADJUSTED_ALIGNMENT. In other words, we want to ensure that the
1883 PENDING_STACK_ADJUST is non-negative, and congruent to
1884 -UNADJUSTED_ALIGNMENT modulo the PREFERRED_UNIT_STACK_BOUNDARY. */
1886 /* Begin by trying to pop all the bytes. */
1887 unadjusted_alignment
1888 = (unadjusted_alignment
1889 - (pending_stack_adjust % preferred_unit_stack_boundary));
1890 adjustment = pending_stack_adjust;
1891 /* Push enough additional bytes that the stack will be aligned
1892 after the arguments are pushed. */
1893 if (unadjusted_alignment >= 0)
1894 adjustment -= preferred_unit_stack_boundary - unadjusted_alignment;
1896 adjustment += unadjusted_alignment;
1898 /* Now, sets ARGS_SIZE->CONSTANT so that we pop the right number of
1899 bytes after the call. The right number is the entire
1900 PENDING_STACK_ADJUST less our ADJUSTMENT plus the amount required
1901 by the arguments in the first place. */
1903 = pending_stack_adjust - adjustment + unadjusted_args_size;
1908 /* Generate all the code for a function call
1909 and return an rtx for its value.
1910 Store the value in TARGET (specified as an rtx) if convenient.
1911 If the value is stored in TARGET then TARGET is returned.
1912 If IGNORE is nonzero, then we ignore the value of the function call. */
1915 expand_call (exp, target, ignore)
1920 /* Nonzero if we are currently expanding a call. */
1921 static int currently_expanding_call = 0;
1923 /* List of actual parameters. */
1924 tree actparms = TREE_OPERAND (exp, 1);
1925 /* RTX for the function to be called. */
1927 /* Sequence of insns to perform a tail recursive "call". */
1928 rtx tail_recursion_insns = NULL_RTX;
1929 /* Sequence of insns to perform a normal "call". */
1930 rtx normal_call_insns = NULL_RTX;
1931 /* Sequence of insns to perform a tail recursive "call". */
1932 rtx tail_call_insns = NULL_RTX;
1933 /* Data type of the function. */
1935 /* Declaration of the function being called,
1936 or 0 if the function is computed (not known by name). */
1940 int try_tail_call = 1;
1941 int try_tail_recursion = 1;
1944 /* Register in which non-BLKmode value will be returned,
1945 or 0 if no value or if value is BLKmode. */
1947 /* Address where we should return a BLKmode value;
1948 0 if value not BLKmode. */
1949 rtx structure_value_addr = 0;
1950 /* Nonzero if that address is being passed by treating it as
1951 an extra, implicit first parameter. Otherwise,
1952 it is passed by being copied directly into struct_value_rtx. */
1953 int structure_value_addr_parm = 0;
1954 /* Size of aggregate value wanted, or zero if none wanted
1955 or if we are using the non-reentrant PCC calling convention
1956 or expecting the value in registers. */
1957 HOST_WIDE_INT struct_value_size = 0;
1958 /* Nonzero if called function returns an aggregate in memory PCC style,
1959 by returning the address of where to find it. */
1960 int pcc_struct_value = 0;
1962 /* Number of actual parameters in this call, including struct value addr. */
1964 /* Number of named args. Args after this are anonymous ones
1965 and they must all go on the stack. */
1968 /* Vector of information about each argument.
1969 Arguments are numbered in the order they will be pushed,
1970 not the order they are written. */
1971 struct arg_data *args;
1973 /* Total size in bytes of all the stack-parms scanned so far. */
1974 struct args_size args_size;
1975 struct args_size adjusted_args_size;
1976 /* Size of arguments before any adjustments (such as rounding). */
1977 int unadjusted_args_size;
1978 /* Data on reg parms scanned so far. */
1979 CUMULATIVE_ARGS args_so_far;
1980 /* Nonzero if a reg parm has been scanned. */
1982 /* Nonzero if this is an indirect function call. */
1984 /* Nonzero if we must avoid push-insns in the args for this call.
1985 If stack space is allocated for register parameters, but not by the
1986 caller, then it is preallocated in the fixed part of the stack frame.
1987 So the entire argument block must then be preallocated (i.e., we
1988 ignore PUSH_ROUNDING in that case). */
1990 int must_preallocate = !PUSH_ARGS;
1992 /* Size of the stack reserved for parameter registers. */
1993 int reg_parm_stack_space = 0;
1995 /* Address of space preallocated for stack parms
1996 (on machines that lack push insns), or 0 if space not preallocated. */
1999 /* Mask of ECF_ flags. */
2001 /* Nonzero if this is a call to an inline function. */
2002 int is_integrable = 0;
2003 #ifdef REG_PARM_STACK_SPACE
2004 /* Define the boundary of the register parm stack space that needs to be
2006 int low_to_save = -1, high_to_save;
2007 rtx save_area = 0; /* Place that it is saved */
2010 int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
2011 char *initial_stack_usage_map = stack_usage_map;
2012 int old_stack_arg_under_construction = 0;
2014 rtx old_stack_level = 0;
2015 int old_pending_adj = 0;
2016 int old_inhibit_defer_pop = inhibit_defer_pop;
2017 int old_stack_allocated;
2021 /* The alignment of the stack, in bits. */
2022 HOST_WIDE_INT preferred_stack_boundary;
2023 /* The alignment of the stack, in bytes. */
2024 HOST_WIDE_INT preferred_unit_stack_boundary;
2026 /* The value of the function call can be put in a hard register. But
2027 if -fcheck-memory-usage, code which invokes functions (and thus
2028 damages some hard registers) can be inserted before using the value.
2029 So, target is always a pseudo-register in that case. */
2030 if (current_function_check_memory_usage)
2033 /* See if this is "nothrow" function call. */
2034 if (TREE_NOTHROW (exp))
2035 flags |= ECF_NOTHROW;
2037 /* See if we can find a DECL-node for the actual function.
2038 As a result, decide whether this is a call to an integrable function. */
2040 fndecl = get_callee_fndecl (exp);
2044 && fndecl != current_function_decl
2045 && DECL_INLINE (fndecl)
2046 && DECL_SAVED_INSNS (fndecl)
2047 && DECL_SAVED_INSNS (fndecl)->inlinable)
2049 else if (! TREE_ADDRESSABLE (fndecl))
2051 /* In case this function later becomes inlinable,
2052 record that there was already a non-inline call to it.
2054 Use abstraction instead of setting TREE_ADDRESSABLE
2056 if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
2059 warning_with_decl (fndecl, "can't inline call to `%s'");
2060 warning ("called from here");
2062 mark_addressable (fndecl);
2065 flags |= flags_from_decl_or_type (fndecl);
2068 /* If we don't have specific function to call, see if we have a
2069 attributes set in the type. */
2072 p = TREE_OPERAND (exp, 0);
2073 flags |= flags_from_decl_or_type (TREE_TYPE (TREE_TYPE (p)));
2076 #ifdef REG_PARM_STACK_SPACE
2077 #ifdef MAYBE_REG_PARM_STACK_SPACE
2078 reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
2080 reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
2084 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2085 if (reg_parm_stack_space > 0 && PUSH_ARGS)
2086 must_preallocate = 1;
2089 /* Warn if this value is an aggregate type,
2090 regardless of which calling convention we are using for it. */
2091 if (warn_aggregate_return && AGGREGATE_TYPE_P (TREE_TYPE (exp)))
2092 warning ("function call has aggregate value");
2094 /* Set up a place to return a structure. */
2096 /* Cater to broken compilers. */
2097 if (aggregate_value_p (exp))
2099 /* This call returns a big structure. */
2100 flags &= ~(ECF_CONST | ECF_PURE);
2102 #ifdef PCC_STATIC_STRUCT_RETURN
2104 pcc_struct_value = 1;
2105 /* Easier than making that case work right. */
2108 /* In case this is a static function, note that it has been
2110 if (! TREE_ADDRESSABLE (fndecl))
2111 mark_addressable (fndecl);
2115 #else /* not PCC_STATIC_STRUCT_RETURN */
2117 struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
2119 if (target && GET_CODE (target) == MEM)
2120 structure_value_addr = XEXP (target, 0);
2123 /* Assign a temporary to hold the value. */
2126 /* For variable-sized objects, we must be called with a target
2127 specified. If we were to allocate space on the stack here,
2128 we would have no way of knowing when to free it. */
2130 if (struct_value_size < 0)
2133 /* This DECL is just something to feed to mark_addressable;
2134 it doesn't get pushed. */
2135 d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
2136 DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
2137 mark_addressable (d);
2138 mark_temp_addr_taken (DECL_RTL (d));
2139 structure_value_addr = XEXP (DECL_RTL (d), 0);
2144 #endif /* not PCC_STATIC_STRUCT_RETURN */
2147 /* If called function is inline, try to integrate it. */
2151 rtx temp = try_to_integrate (fndecl, actparms, target,
2152 ignore, TREE_TYPE (exp),
2153 structure_value_addr);
2154 if (temp != (rtx) (HOST_WIDE_INT) - 1)
2158 if (fndecl && DECL_NAME (fndecl))
2159 name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
2161 /* Figure out the amount to which the stack should be aligned. */
2162 #ifdef PREFERRED_STACK_BOUNDARY
2163 preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
2165 preferred_stack_boundary = STACK_BOUNDARY;
2168 /* Operand 0 is a pointer-to-function; get the type of the function. */
2169 funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
2170 if (! POINTER_TYPE_P (funtype))
2172 funtype = TREE_TYPE (funtype);
2174 /* See if this is a call to a function that can return more than once
2175 or a call to longjmp or malloc. */
2176 flags |= special_function_p (fndecl, flags);
2178 if (flags & ECF_MAY_BE_ALLOCA)
2179 current_function_calls_alloca = 1;
2181 /* If struct_value_rtx is 0, it means pass the address
2182 as if it were an extra parameter. */
2183 if (structure_value_addr && struct_value_rtx == 0)
2185 /* If structure_value_addr is a REG other than
2186 virtual_outgoing_args_rtx, we can use always use it. If it
2187 is not a REG, we must always copy it into a register.
2188 If it is virtual_outgoing_args_rtx, we must copy it to another
2189 register in some cases. */
2190 rtx temp = (GET_CODE (structure_value_addr) != REG
2191 || (ACCUMULATE_OUTGOING_ARGS
2192 && stack_arg_under_construction
2193 && structure_value_addr == virtual_outgoing_args_rtx)
2194 ? copy_addr_to_reg (structure_value_addr)
2195 : structure_value_addr);
2198 = tree_cons (error_mark_node,
2199 make_tree (build_pointer_type (TREE_TYPE (funtype)),
2202 structure_value_addr_parm = 1;
2205 /* Count the arguments and set NUM_ACTUALS. */
2206 for (p = actparms, num_actuals = 0; p; p = TREE_CHAIN (p))
2209 /* Compute number of named args.
2210 Normally, don't include the last named arg if anonymous args follow.
2211 We do include the last named arg if STRICT_ARGUMENT_NAMING is nonzero.
2212 (If no anonymous args follow, the result of list_length is actually
2213 one too large. This is harmless.)
2215 If PRETEND_OUTGOING_VARARGS_NAMED is set and STRICT_ARGUMENT_NAMING is
2216 zero, this machine will be able to place unnamed args that were
2217 passed in registers into the stack. So treat all args as named.
2218 This allows the insns emitting for a specific argument list to be
2219 independent of the function declaration.
2221 If PRETEND_OUTGOING_VARARGS_NAMED is not set, we do not have any
2222 reliable way to pass unnamed args in registers, so we must force
2223 them into memory. */
2225 if ((STRICT_ARGUMENT_NAMING
2226 || ! PRETEND_OUTGOING_VARARGS_NAMED)
2227 && TYPE_ARG_TYPES (funtype) != 0)
2229 = (list_length (TYPE_ARG_TYPES (funtype))
2230 /* Don't include the last named arg. */
2231 - (STRICT_ARGUMENT_NAMING ? 0 : 1)
2232 /* Count the struct value address, if it is passed as a parm. */
2233 + structure_value_addr_parm);
2235 /* If we know nothing, treat all args as named. */
2236 n_named_args = num_actuals;
2238 /* Start updating where the next arg would go.
2240 On some machines (such as the PA) indirect calls have a different
2241 calling convention than normal calls. The last argument in
2242 INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
2244 INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, (fndecl == 0));
2247 /* Make a vector to hold all the information about each arg. */
2248 args = (struct arg_data *) alloca (num_actuals
2249 * sizeof (struct arg_data));
2250 bzero ((char *) args, num_actuals * sizeof (struct arg_data));
2252 /* Build up entries inthe ARGS array, compute the size of the arguments
2253 into ARGS_SIZE, etc. */
2254 initialize_argument_information (num_actuals, args, &args_size,
2255 n_named_args, actparms, fndecl,
2256 &args_so_far, reg_parm_stack_space,
2257 &old_stack_level, &old_pending_adj,
2258 &must_preallocate, &flags);
2262 /* If this function requires a variable-sized argument list, don't
2263 try to make a cse'able block for this call. We may be able to
2264 do this eventually, but it is too complicated to keep track of
2265 what insns go in the cse'able block and which don't. */
2267 flags &= ~(ECF_CONST | ECF_PURE);
2268 must_preallocate = 1;
2271 /* Now make final decision about preallocating stack space. */
2272 must_preallocate = finalize_must_preallocate (must_preallocate,
2276 /* If the structure value address will reference the stack pointer, we
2277 must stabilize it. We don't need to do this if we know that we are
2278 not going to adjust the stack pointer in processing this call. */
2280 if (structure_value_addr
2281 && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
2282 || reg_mentioned_p (virtual_outgoing_args_rtx,
2283 structure_value_addr))
2285 || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
2286 structure_value_addr = copy_to_reg (structure_value_addr);
2288 /* Tail calls can make things harder to debug, and we're traditionally
2289 pushed these optimizations into -O2. Don't try if we're already
2290 expanding a call, as that means we're an argument. Similarly, if
2291 there's pending loops or cleanups we know there's code to follow
2294 If rtx_equal_function_value_matters is false, that means we've
2295 finished with regular parsing. Which means that some of the
2296 machinery we use to generate tail-calls is no longer in place.
2297 This is most often true of sjlj-exceptions, which we couldn't
2298 tail-call to anyway. */
2300 if (currently_expanding_call++ != 0
2301 || !flag_optimize_sibling_calls
2302 || !rtx_equal_function_value_matters
2303 || !stmt_loop_nest_empty ()
2304 || any_pending_cleanups (1)
2306 try_tail_call = try_tail_recursion = 0;
2308 /* Tail recursion fails, when we are not dealing with recursive calls. */
2309 if (!try_tail_recursion
2310 || TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
2311 || TREE_OPERAND (TREE_OPERAND (exp, 0), 0) != current_function_decl)
2312 try_tail_recursion = 0;
2314 /* Rest of purposes for tail call optimizations to fail. */
2316 #ifdef HAVE_sibcall_epilogue
2317 !HAVE_sibcall_epilogue
2322 /* Doing sibling call optimization needs some work, since
2323 structure_value_addr can be allocated on the stack.
2324 It does not seem worth the effort since few optimizable
2325 sibling calls will return a structure. */
2326 || structure_value_addr != NULL_RTX
2327 /* If the register holding the address is a callee saved
2328 register, then we lose. We have no way to prevent that,
2329 so we only allow calls to named functions. */
2330 /* ??? This could be done by having the insn constraints
2331 use a register class that is all call-clobbered. Any
2332 reload insns generated to fix things up would appear
2333 before the sibcall_epilogue. */
2334 || fndecl == NULL_TREE
2335 || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP))
2336 || !FUNCTION_OK_FOR_SIBCALL (fndecl)
2337 /* If this function requires more stack slots than the current
2338 function, we cannot change it into a sibling call. */
2339 || args_size.constant > current_function_args_size
2340 /* If the callee pops its own arguments, then it must pop exactly
2341 the same number of arguments as the current function. */
2342 || RETURN_POPS_ARGS (fndecl, funtype, args_size.constant)
2343 != RETURN_POPS_ARGS (current_function_decl,
2344 TREE_TYPE (current_function_decl),
2345 current_function_args_size))
2348 if (try_tail_call || try_tail_recursion)
2351 actparms = NULL_TREE;
2352 /* Ok, we're going to give the tail call the old college try.
2353 This means we're going to evaluate the function arguments
2354 up to three times. There are two degrees of badness we can
2355 encounter, those that can be unsaved and those that can't.
2356 (See unsafe_for_reeval commentary for details.)
2358 Generate a new argument list. Pass safe arguments through
2359 unchanged. For the easy badness wrap them in UNSAVE_EXPRs.
2360 For hard badness, evaluate them now and put their resulting
2361 rtx in a temporary VAR_DECL.
2363 initialize_argument_information has ordered the array for the
2364 order to be pushed, and we must remember this when reconstructing
2365 the original argument orde. */
2367 if (PUSH_ARGS_REVERSED)
2376 i = num_actuals - 1;
2380 for (; i != end; i += inc)
2382 switch (unsafe_for_reeval (args[i].tree_value))
2387 case 1: /* Mildly unsafe. */
2388 args[i].tree_value = unsave_expr (args[i].tree_value);
2391 case 2: /* Wildly unsafe. */
2393 tree var = build_decl (VAR_DECL, NULL_TREE,
2394 TREE_TYPE (args[i].tree_value));
2395 DECL_RTL (var) = expand_expr (args[i].tree_value, NULL_RTX,
2396 VOIDmode, EXPAND_NORMAL);
2397 args[i].tree_value = var;
2404 /* We need to build actparms for optimize_tail_recursion. We can
2405 safely trash away TREE_PURPOSE, since it is unused by this
2407 if (try_tail_recursion)
2408 actparms = tree_cons (NULL_TREE, args[i].tree_value, actparms);
2410 /* Expanding one of those dangerous arguments could have added
2411 cleanups, but otherwise give it a whirl. */
2412 if (any_pending_cleanups (1))
2413 try_tail_call = try_tail_recursion = 0;
2416 /* Generate a tail recursion sequence when calling ourselves. */
2418 if (try_tail_recursion)
2420 /* We want to emit any pending stack adjustments before the tail
2421 recursion "call". That way we know any adjustment after the tail
2422 recursion call can be ignored if we indeed use the tail recursion
2424 int save_pending_stack_adjust = pending_stack_adjust;
2425 int save_stack_pointer_delta = stack_pointer_delta;
2427 /* Use a new sequence to hold any RTL we generate. We do not even
2428 know if we will use this RTL yet. The final decision can not be
2429 made until after RTL generation for the entire function is
2432 /* If expanding any of the arguments creates cleanups, we can't
2433 do a tailcall. So, we'll need to pop the pending cleanups
2434 list. If, however, all goes well, and there are no cleanups
2435 then the call to expand_start_target_temps will have no
2437 expand_start_target_temps ();
2438 if (optimize_tail_recursion (actparms, get_last_insn ()))
2440 if (any_pending_cleanups (1))
2441 try_tail_call = try_tail_recursion = 0;
2443 tail_recursion_insns = get_insns ();
2445 expand_end_target_temps ();
2448 /* Restore the original pending stack adjustment for the sibling and
2449 normal call cases below. */
2450 pending_stack_adjust = save_pending_stack_adjust;
2451 stack_pointer_delta = save_stack_pointer_delta;
2454 if (profile_arc_flag && (flags & ECF_FORK_OR_EXEC))
2456 /* A fork duplicates the profile information, and an exec discards
2457 it. We can't rely on fork/exec to be paired. So write out the
2458 profile information we have gathered so far, and clear it. */
2459 /* ??? When Linux's __clone is called with CLONE_VM set, profiling
2460 is subject to race conditions, just as with multithreaded
2463 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_fork_func"), 0,
2467 /* Ensure current function's preferred stack boundary is at least
2468 what we need. We don't have to increase alignment for recursive
2470 if (cfun->preferred_stack_boundary < preferred_stack_boundary
2471 && fndecl != current_function_decl)
2472 cfun->preferred_stack_boundary = preferred_stack_boundary;
2474 preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
2476 function_call_count++;
2478 /* We want to make two insn chains; one for a sibling call, the other
2479 for a normal call. We will select one of the two chains after
2480 initial RTL generation is complete. */
2481 for (pass = 0; pass < 2; pass++)
2483 int sibcall_failure = 0;
2484 /* We want to emit ay pending stack adjustments before the tail
2485 recursion "call". That way we know any adjustment after the tail
2486 recursion call can be ignored if we indeed use the tail recursion
2488 int save_pending_stack_adjust;
2489 int save_stack_pointer_delta;
2491 rtx before_call, next_arg_reg;
2495 if (! try_tail_call)
2498 /* Emit any queued insns now; otherwise they would end up in
2499 only one of the alternates. */
2502 /* State variables we need to save and restore between
2504 save_pending_stack_adjust = pending_stack_adjust;
2505 save_stack_pointer_delta = stack_pointer_delta;
2508 flags &= ~ECF_SIBCALL;
2510 flags |= ECF_SIBCALL;
2512 /* Other state variables that we must reinitialize each time
2513 through the loop (that are not initialized by the loop itself). */
2517 /* Start a new sequence for the normal call case.
2519 From this point on, if the sibling call fails, we want to set
2520 sibcall_failure instead of continuing the loop. */
2525 /* We know at this point that there are not currently any
2526 pending cleanups. If, however, in the process of evaluating
2527 the arguments we were to create some, we'll need to be
2528 able to get rid of them. */
2529 expand_start_target_temps ();
2532 /* When calling a const function, we must pop the stack args right away,
2533 so that the pop is deleted or moved with the call. */
2534 if (flags & (ECF_CONST | ECF_PURE))
2537 /* Don't let pending stack adjusts add up to too much.
2538 Also, do all pending adjustments now if there is any chance
2539 this might be a call to alloca or if we are expanding a sibling
2541 if (pending_stack_adjust >= 32
2542 || (pending_stack_adjust > 0 && (flags & ECF_MAY_BE_ALLOCA))
2544 do_pending_stack_adjust ();
2546 /* Push the temporary stack slot level so that we can free any
2547 temporaries we make. */
2551 #ifdef FINAL_REG_PARM_STACK_SPACE
2552 reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
2555 /* Precompute any arguments as needed. */
2557 precompute_arguments (flags, num_actuals, args);
2559 /* Now we are about to start emitting insns that can be deleted
2560 if a libcall is deleted. */
2561 if (flags & (ECF_CONST | ECF_PURE | ECF_MALLOC))
2564 adjusted_args_size = args_size;
2565 /* Compute the actual size of the argument block required. The variable
2566 and constant sizes must be combined, the size may have to be rounded,
2567 and there may be a minimum required size. When generating a sibcall
2568 pattern, do not round up, since we'll be re-using whatever space our
2570 unadjusted_args_size
2571 = compute_argument_block_size (reg_parm_stack_space, &adjusted_args_size,
2573 : preferred_stack_boundary));
2575 old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2577 /* The argument block when performing a sibling call is the
2578 incoming argument block. */
2580 argblock = virtual_incoming_args_rtx;
2582 /* If we have no actual push instructions, or shouldn't use them,
2583 make space for all args right now. */
2584 else if (adjusted_args_size.var != 0)
2586 if (old_stack_level == 0)
2588 emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2589 old_pending_adj = pending_stack_adjust;
2590 pending_stack_adjust = 0;
2591 /* stack_arg_under_construction says whether a stack arg is
2592 being constructed at the old stack level. Pushing the stack
2593 gets a clean outgoing argument block. */
2594 old_stack_arg_under_construction = stack_arg_under_construction;
2595 stack_arg_under_construction = 0;
2597 argblock = push_block (ARGS_SIZE_RTX (adjusted_args_size), 0, 0);
2601 /* Note that we must go through the motions of allocating an argument
2602 block even if the size is zero because we may be storing args
2603 in the area reserved for register arguments, which may be part of
2606 int needed = adjusted_args_size.constant;
2608 /* Store the maximum argument space used. It will be pushed by
2609 the prologue (if ACCUMULATE_OUTGOING_ARGS, or stack overflow
2612 if (needed > current_function_outgoing_args_size)
2613 current_function_outgoing_args_size = needed;
2615 if (must_preallocate)
2617 if (ACCUMULATE_OUTGOING_ARGS)
2619 /* Since the stack pointer will never be pushed, it is
2620 possible for the evaluation of a parm to clobber
2621 something we have already written to the stack.
2622 Since most function calls on RISC machines do not use
2623 the stack, this is uncommon, but must work correctly.
2625 Therefore, we save any area of the stack that was already
2626 written and that we are using. Here we set up to do this
2627 by making a new stack usage map from the old one. The
2628 actual save will be done by store_one_arg.
2630 Another approach might be to try to reorder the argument
2631 evaluations to avoid this conflicting stack usage. */
2633 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2634 /* Since we will be writing into the entire argument area,
2635 the map must be allocated for its entire size, not just
2636 the part that is the responsibility of the caller. */
2637 needed += reg_parm_stack_space;
2640 #ifdef ARGS_GROW_DOWNWARD
2641 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2644 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2648 = (char *) alloca (highest_outgoing_arg_in_use);
2650 if (initial_highest_arg_in_use)
2651 bcopy (initial_stack_usage_map, stack_usage_map,
2652 initial_highest_arg_in_use);
2654 if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
2655 bzero (&stack_usage_map[initial_highest_arg_in_use],
2656 (highest_outgoing_arg_in_use
2657 - initial_highest_arg_in_use));
2660 /* The address of the outgoing argument list must not be
2661 copied to a register here, because argblock would be left
2662 pointing to the wrong place after the call to
2663 allocate_dynamic_stack_space below. */
2665 argblock = virtual_outgoing_args_rtx;
2669 if (inhibit_defer_pop == 0)
2671 /* Try to reuse some or all of the pending_stack_adjust
2672 to get this space. */
2674 = (combine_pending_stack_adjustment_and_call
2675 (unadjusted_args_size,
2676 &adjusted_args_size,
2677 preferred_unit_stack_boundary));
2679 /* combine_pending_stack_adjustment_and_call computes
2680 an adjustment before the arguments are allocated.
2681 Account for them and see whether or not the stack
2682 needs to go up or down. */
2683 needed = unadjusted_args_size - needed;
2687 /* We're releasing stack space. */
2688 /* ??? We can avoid any adjustment at all if we're
2689 already aligned. FIXME. */
2690 pending_stack_adjust = -needed;
2691 do_pending_stack_adjust ();
2695 /* We need to allocate space. We'll do that in
2696 push_block below. */
2697 pending_stack_adjust = 0;
2700 /* Special case this because overhead of `push_block' in
2701 this case is non-trivial. */
2703 argblock = virtual_outgoing_args_rtx;
2705 argblock = push_block (GEN_INT (needed), 0, 0);
2707 /* We only really need to call `copy_to_reg' in the case
2708 where push insns are going to be used to pass ARGBLOCK
2709 to a function call in ARGS. In that case, the stack
2710 pointer changes value from the allocation point to the
2711 call point, and hence the value of
2712 VIRTUAL_OUTGOING_ARGS_RTX changes as well. But might
2713 as well always do it. */
2714 argblock = copy_to_reg (argblock);
2716 /* The save/restore code in store_one_arg handles all
2717 cases except one: a constructor call (including a C
2718 function returning a BLKmode struct) to initialize
2720 if (stack_arg_under_construction)
2722 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2723 rtx push_size = GEN_INT (reg_parm_stack_space
2724 + adjusted_args_size.constant);
2726 rtx push_size = GEN_INT (adjusted_args_size.constant);
2728 if (old_stack_level == 0)
2730 emit_stack_save (SAVE_BLOCK, &old_stack_level,
2732 old_pending_adj = pending_stack_adjust;
2733 pending_stack_adjust = 0;
2734 /* stack_arg_under_construction says whether a stack
2735 arg is being constructed at the old stack level.
2736 Pushing the stack gets a clean outgoing argument
2738 old_stack_arg_under_construction
2739 = stack_arg_under_construction;
2740 stack_arg_under_construction = 0;
2741 /* Make a new map for the new argument list. */
2742 stack_usage_map = (char *)
2743 alloca (highest_outgoing_arg_in_use);
2744 bzero (stack_usage_map, highest_outgoing_arg_in_use);
2745 highest_outgoing_arg_in_use = 0;
2747 allocate_dynamic_stack_space (push_size, NULL_RTX,
2750 /* If argument evaluation might modify the stack pointer,
2751 copy the address of the argument list to a register. */
2752 for (i = 0; i < num_actuals; i++)
2753 if (args[i].pass_on_stack)
2755 argblock = copy_addr_to_reg (argblock);
2762 compute_argument_addresses (args, argblock, num_actuals);
2764 #ifdef PREFERRED_STACK_BOUNDARY
2765 /* If we push args individually in reverse order, perform stack alignment
2766 before the first push (the last arg). */
2767 if (PUSH_ARGS_REVERSED && argblock == 0
2768 && adjusted_args_size.constant != unadjusted_args_size)
2770 /* When the stack adjustment is pending, we get better code
2771 by combining the adjustments. */
2772 if (pending_stack_adjust
2773 && ! (flags & (ECF_CONST | ECF_PURE))
2774 && ! inhibit_defer_pop)
2776 pending_stack_adjust
2777 = (combine_pending_stack_adjustment_and_call
2778 (unadjusted_args_size,
2779 &adjusted_args_size,
2780 preferred_unit_stack_boundary));
2781 do_pending_stack_adjust ();
2783 else if (argblock == 0)
2784 anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2785 - unadjusted_args_size));
2787 /* Now that the stack is properly aligned, pops can't safely
2788 be deferred during the evaluation of the arguments. */
2792 /* Don't try to defer pops if preallocating, not even from the first arg,
2793 since ARGBLOCK probably refers to the SP. */
2797 funexp = rtx_for_function_call (fndecl, exp);
2799 /* Figure out the register where the value, if any, will come back. */
2801 if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
2802 && ! structure_value_addr)
2804 if (pcc_struct_value)
2805 valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
2806 fndecl, (pass == 0));
2808 valreg = hard_function_value (TREE_TYPE (exp), fndecl, (pass == 0));
2811 /* Precompute all register parameters. It isn't safe to compute anything
2812 once we have started filling any specific hard regs. */
2813 precompute_register_parameters (num_actuals, args, ®_parm_seen);
2815 #ifdef REG_PARM_STACK_SPACE
2816 /* Save the fixed argument area if it's part of the caller's frame and
2817 is clobbered by argument setup for this call. */
2818 if (ACCUMULATE_OUTGOING_ARGS && pass)
2819 save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
2820 &low_to_save, &high_to_save);
2823 /* Now store (and compute if necessary) all non-register parms.
2824 These come before register parms, since they can require block-moves,
2825 which could clobber the registers used for register parms.
2826 Parms which have partial registers are not stored here,
2827 but we do preallocate space here if they want that. */
2829 for (i = 0; i < num_actuals; i++)
2830 if (args[i].reg == 0 || args[i].pass_on_stack)
2831 store_one_arg (&args[i], argblock, flags,
2832 adjusted_args_size.var != 0, reg_parm_stack_space);
2834 /* If we have a parm that is passed in registers but not in memory
2835 and whose alignment does not permit a direct copy into registers,
2836 make a group of pseudos that correspond to each register that we
2838 if (STRICT_ALIGNMENT)
2839 store_unaligned_arguments_into_pseudos (args, num_actuals);
2841 /* Now store any partially-in-registers parm.
2842 This is the last place a block-move can happen. */
2844 for (i = 0; i < num_actuals; i++)
2845 if (args[i].partial != 0 && ! args[i].pass_on_stack)
2846 store_one_arg (&args[i], argblock, flags,
2847 adjusted_args_size.var != 0, reg_parm_stack_space);
2849 #ifdef PREFERRED_STACK_BOUNDARY
2850 /* If we pushed args in forward order, perform stack alignment
2851 after pushing the last arg. */
2852 if (!PUSH_ARGS_REVERSED && argblock == 0)
2853 anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2854 - unadjusted_args_size));
2857 /* If register arguments require space on the stack and stack space
2858 was not preallocated, allocate stack space here for arguments
2859 passed in registers. */
2860 #ifdef OUTGOING_REG_PARM_STACK_SPACE
2861 if (!ACCUMULATE_OUTGOING_ARGS
2862 && must_preallocate == 0 && reg_parm_stack_space > 0)
2863 anti_adjust_stack (GEN_INT (reg_parm_stack_space));
2866 /* Pass the function the address in which to return a
2868 if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
2870 emit_move_insn (struct_value_rtx,
2872 force_operand (structure_value_addr,
2875 /* Mark the memory for the aggregate as write-only. */
2876 if (current_function_check_memory_usage)
2877 emit_library_call (chkr_set_right_libfunc, 1,
2879 structure_value_addr, ptr_mode,
2880 GEN_INT (struct_value_size),
2881 TYPE_MODE (sizetype),
2882 GEN_INT (MEMORY_USE_WO),
2883 TYPE_MODE (integer_type_node));
2885 if (GET_CODE (struct_value_rtx) == REG)
2886 use_reg (&call_fusage, struct_value_rtx);
2889 funexp = prepare_call_address (funexp, fndecl, &call_fusage,
2892 load_register_parameters (args, num_actuals, &call_fusage, flags);
2894 /* Perform postincrements before actually calling the function. */
2897 /* Save a pointer to the last insn before the call, so that we can
2898 later safely search backwards to find the CALL_INSN. */
2899 before_call = get_last_insn ();
2901 /* Set up next argument register. For sibling calls on machines
2902 with register windows this should be the incoming register. */
2903 #ifdef FUNCTION_INCOMING_ARG
2905 next_arg_reg = FUNCTION_INCOMING_ARG (args_so_far, VOIDmode,
2909 next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode,
2912 /* All arguments and registers used for the call must be set up by
2915 #ifdef PREFERRED_STACK_BOUNDARY
2916 /* Stack must be properly aligned now. */
2917 if (pass && stack_pointer_delta % preferred_unit_stack_boundary)
2921 /* Generate the actual call instruction. */
2922 emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size,
2923 adjusted_args_size.constant, struct_value_size,
2924 next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
2927 /* Verify that we've deallocated all the stack we used. */
2929 && old_stack_allocated != stack_pointer_delta - pending_stack_adjust)
2932 /* If call is cse'able, make appropriate pair of reg-notes around it.
2933 Test valreg so we don't crash; may safely ignore `const'
2934 if return type is void. Disable for PARALLEL return values, because
2935 we have no way to move such values into a pseudo register. */
2937 && (flags & (ECF_CONST | ECF_PURE))
2938 && valreg != 0 && GET_CODE (valreg) != PARALLEL)
2941 rtx temp = gen_reg_rtx (GET_MODE (valreg));
2944 /* Mark the return value as a pointer if needed. */
2945 if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2946 mark_reg_pointer (temp, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))));
2948 /* Construct an "equal form" for the value which mentions all the
2949 arguments in order as well as the function name. */
2950 for (i = 0; i < num_actuals; i++)
2951 note = gen_rtx_EXPR_LIST (VOIDmode, args[i].initial_value, note);
2952 note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
2954 insns = get_insns ();
2957 if (flags & ECF_PURE)
2958 note = gen_rtx_EXPR_LIST (VOIDmode,
2959 gen_rtx_USE (VOIDmode,
2960 gen_rtx_MEM (BLKmode,
2961 gen_rtx_SCRATCH (VOIDmode))), note);
2963 emit_libcall_block (insns, temp, valreg, note);
2967 else if (flags & (ECF_CONST | ECF_PURE))
2969 /* Otherwise, just write out the sequence without a note. */
2970 rtx insns = get_insns ();
2975 else if (flags & ECF_MALLOC)
2977 rtx temp = gen_reg_rtx (GET_MODE (valreg));
2980 /* The return value from a malloc-like function is a pointer. */
2981 if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2982 mark_reg_pointer (temp, BIGGEST_ALIGNMENT);
2984 emit_move_insn (temp, valreg);
2986 /* The return value from a malloc-like function can not alias
2988 last = get_last_insn ();
2990 gen_rtx_EXPR_LIST (REG_NOALIAS, temp, REG_NOTES (last));
2992 /* Write out the sequence. */
2993 insns = get_insns ();
2999 /* For calls to `setjmp', etc., inform flow.c it should complain
3000 if nonvolatile values are live. For functions that cannot return,
3001 inform flow that control does not fall through. */
3003 if ((flags & (ECF_RETURNS_TWICE | ECF_NORETURN | ECF_LONGJMP)) || pass == 0)
3005 /* The barrier or NOTE_INSN_SETJMP note must be emitted
3006 immediately after the CALL_INSN. Some ports emit more
3007 than just a CALL_INSN above, so we must search for it here. */
3009 rtx last = get_last_insn ();
3010 while (GET_CODE (last) != CALL_INSN)
3012 last = PREV_INSN (last);
3013 /* There was no CALL_INSN? */
3014 if (last == before_call)
3018 if (flags & ECF_RETURNS_TWICE)
3020 emit_note_after (NOTE_INSN_SETJMP, last);
3021 current_function_calls_setjmp = 1;
3024 emit_barrier_after (last);
3027 if (flags & ECF_LONGJMP)
3028 current_function_calls_longjmp = 1;
3030 /* If this function is returning into a memory location marked as
3031 readonly, it means it is initializing that location. But we normally
3032 treat functions as not clobbering such locations, so we need to
3033 specify that this one does. */
3034 if (target != 0 && GET_CODE (target) == MEM
3035 && structure_value_addr != 0 && RTX_UNCHANGING_P (target))
3036 emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
3038 /* If value type not void, return an rtx for the value. */
3040 /* If there are cleanups to be called, don't use a hard reg as target.
3041 We need to double check this and see if it matters anymore. */
3042 if (any_pending_cleanups (1))
3044 if (target && REG_P (target)
3045 && REGNO (target) < FIRST_PSEUDO_REGISTER)
3047 sibcall_failure = 1;
3050 if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
3053 target = const0_rtx;
3055 else if (structure_value_addr)
3057 if (target == 0 || GET_CODE (target) != MEM)
3060 = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
3061 memory_address (TYPE_MODE (TREE_TYPE (exp)),
3062 structure_value_addr));
3063 set_mem_attributes (target, exp, 1);
3066 else if (pcc_struct_value)
3068 /* This is the special C++ case where we need to
3069 know what the true target was. We take care to
3070 never use this value more than once in one expression. */
3071 target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
3072 copy_to_reg (valreg));
3073 set_mem_attributes (target, exp, 1);
3075 /* Handle calls that return values in multiple non-contiguous locations.
3076 The Irix 6 ABI has examples of this. */
3077 else if (GET_CODE (valreg) == PARALLEL)
3079 int bytes = int_size_in_bytes (TREE_TYPE (exp));
3083 target = assign_stack_temp (TYPE_MODE (TREE_TYPE (exp)),
3085 MEM_SET_IN_STRUCT_P (target, AGGREGATE_TYPE_P (TREE_TYPE (exp)));
3086 preserve_temp_slots (target);
3089 if (! rtx_equal_p (target, valreg))
3090 emit_group_store (target, valreg, bytes,
3091 TYPE_ALIGN (TREE_TYPE (exp)));
3093 /* We can not support sibling calls for this case. */
3094 sibcall_failure = 1;
3097 && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
3098 && GET_MODE (target) == GET_MODE (valreg))
3100 /* TARGET and VALREG cannot be equal at this point because the
3101 latter would not have REG_FUNCTION_VALUE_P true, while the
3102 former would if it were referring to the same register.
3104 If they refer to the same register, this move will be a no-op,
3105 except when function inlining is being done. */
3106 emit_move_insn (target, valreg);
3108 else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
3109 target = copy_blkmode_from_reg (target, valreg, TREE_TYPE (exp));
3111 target = copy_to_reg (valreg);
3113 #ifdef PROMOTE_FUNCTION_RETURN
3114 /* If we promoted this return value, make the proper SUBREG. TARGET
3115 might be const0_rtx here, so be careful. */
3116 if (GET_CODE (target) == REG
3117 && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
3118 && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
3120 tree type = TREE_TYPE (exp);
3121 int unsignedp = TREE_UNSIGNED (type);
3123 /* If we don't promote as expected, something is wrong. */
3124 if (GET_MODE (target)
3125 != promote_mode (type, TYPE_MODE (type), &unsignedp, 1))
3128 target = gen_rtx_SUBREG (TYPE_MODE (type), target, 0);
3129 SUBREG_PROMOTED_VAR_P (target) = 1;
3130 SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp;
3134 /* If size of args is variable or this was a constructor call for a stack
3135 argument, restore saved stack-pointer value. */
3137 if (old_stack_level)
3139 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
3140 pending_stack_adjust = old_pending_adj;
3141 stack_arg_under_construction = old_stack_arg_under_construction;
3142 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3143 stack_usage_map = initial_stack_usage_map;
3144 sibcall_failure = 1;
3146 else if (ACCUMULATE_OUTGOING_ARGS && pass)
3148 #ifdef REG_PARM_STACK_SPACE
3151 restore_fixed_argument_area (save_area, argblock,
3152 high_to_save, low_to_save);
3156 /* If we saved any argument areas, restore them. */
3157 for (i = 0; i < num_actuals; i++)
3158 if (args[i].save_area)
3160 enum machine_mode save_mode = GET_MODE (args[i].save_area);
3162 = gen_rtx_MEM (save_mode,
3163 memory_address (save_mode,
3164 XEXP (args[i].stack_slot, 0)));
3166 if (save_mode != BLKmode)
3167 emit_move_insn (stack_area, args[i].save_area);
3169 emit_block_move (stack_area,
3170 validize_mem (args[i].save_area),
3171 GEN_INT (args[i].size.constant),
3175 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3176 stack_usage_map = initial_stack_usage_map;
3179 /* If this was alloca, record the new stack level for nonlocal gotos.
3180 Check for the handler slots since we might not have a save area
3181 for non-local gotos. */
3183 if ((flags & ECF_MAY_BE_ALLOCA) && nonlocal_goto_handler_slots != 0)
3184 emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX);
3188 /* Free up storage we no longer need. */
3189 for (i = 0; i < num_actuals; ++i)
3190 if (args[i].aligned_regs)
3191 free (args[i].aligned_regs);
3195 /* Undo the fake expand_start_target_temps we did earlier. If
3196 there had been any cleanups created, we've already set
3198 expand_end_target_temps ();
3201 insns = get_insns ();
3206 tail_call_insns = insns;
3208 /* If something prevents making this a sibling call,
3209 zero out the sequence. */
3210 if (sibcall_failure)
3211 tail_call_insns = NULL_RTX;
3212 /* Restore the pending stack adjustment now that we have
3213 finished generating the sibling call sequence. */
3215 pending_stack_adjust = save_pending_stack_adjust;
3216 stack_pointer_delta = save_stack_pointer_delta;
3218 /* Prepare arg structure for next iteration. */
3219 for (i = 0 ; i < num_actuals ; i++)
3222 args[i].aligned_regs = 0;
3227 normal_call_insns = insns;
3230 /* The function optimize_sibling_and_tail_recursive_calls doesn't
3231 handle CALL_PLACEHOLDERs inside other CALL_PLACEHOLDERs. This
3232 can happen if the arguments to this function call an inline
3233 function who's expansion contains another CALL_PLACEHOLDER.
3235 If there are any C_Ps in any of these sequences, replace them
3236 with their normal call. */
3238 for (insn = normal_call_insns; insn; insn = NEXT_INSN (insn))
3239 if (GET_CODE (insn) == CALL_INSN
3240 && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3241 replace_call_placeholder (insn, sibcall_use_normal);
3243 for (insn = tail_call_insns; insn; insn = NEXT_INSN (insn))
3244 if (GET_CODE (insn) == CALL_INSN
3245 && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3246 replace_call_placeholder (insn, sibcall_use_normal);
3248 for (insn = tail_recursion_insns; insn; insn = NEXT_INSN (insn))
3249 if (GET_CODE (insn) == CALL_INSN
3250 && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3251 replace_call_placeholder (insn, sibcall_use_normal);
3253 /* If this was a potential tail recursion site, then emit a
3254 CALL_PLACEHOLDER with the normal and the tail recursion streams.
3255 One of them will be selected later. */
3256 if (tail_recursion_insns || tail_call_insns)
3258 /* The tail recursion label must be kept around. We could expose
3259 its use in the CALL_PLACEHOLDER, but that creates unwanted edges
3260 and makes determining true tail recursion sites difficult.
3262 So we set LABEL_PRESERVE_P here, then clear it when we select
3263 one of the call sequences after rtl generation is complete. */
3264 if (tail_recursion_insns)
3265 LABEL_PRESERVE_P (tail_recursion_label) = 1;
3266 emit_call_insn (gen_rtx_CALL_PLACEHOLDER (VOIDmode, normal_call_insns,
3268 tail_recursion_insns,
3269 tail_recursion_label));
3272 emit_insns (normal_call_insns);
3274 currently_expanding_call--;
3279 /* Returns nonzero if FUN is the symbol for a library function which can
3283 libfunc_nothrow (fun)
3286 if (fun == throw_libfunc
3287 || fun == rethrow_libfunc
3288 || fun == sjthrow_libfunc
3289 || fun == sjpopnthrow_libfunc)
3295 /* Output a library call to function FUN (a SYMBOL_REF rtx).
3296 The RETVAL parameter specifies whether return value needs to be saved, other
3297 parameters are documented in the emit_library_call function bellow. */
3299 emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
3304 enum machine_mode outmode;
3308 /* Total size in bytes of all the stack-parms scanned so far. */
3309 struct args_size args_size;
3310 /* Size of arguments before any adjustments (such as rounding). */
3311 struct args_size original_args_size;
3312 register int argnum;
3316 struct args_size alignment_pad;
3318 CUMULATIVE_ARGS args_so_far;
3319 struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
3320 struct args_size offset; struct args_size size; rtx save_area; };
3322 int old_inhibit_defer_pop = inhibit_defer_pop;
3323 rtx call_fusage = 0;
3326 int pcc_struct_value = 0;
3327 int struct_value_size = 0;
3329 int reg_parm_stack_space = 0;
3332 #ifdef REG_PARM_STACK_SPACE
3333 /* Define the boundary of the register parm stack space that needs to be
3335 int low_to_save = -1, high_to_save = 0;
3336 rtx save_area = 0; /* Place that it is saved */
3339 /* Size of the stack reserved for parameter registers. */
3340 int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
3341 char *initial_stack_usage_map = stack_usage_map;
3343 #ifdef REG_PARM_STACK_SPACE
3344 #ifdef MAYBE_REG_PARM_STACK_SPACE
3345 reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
3347 reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
3353 else if (fn_type == 2)
3357 if (libfunc_nothrow (fun))
3358 flags |= ECF_NOTHROW;
3360 #ifdef PREFERRED_STACK_BOUNDARY
3361 /* Ensure current function's preferred stack boundary is at least
3363 if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
3364 cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
3367 /* If this kind of value comes back in memory,
3368 decide where in memory it should come back. */
3369 if (outmode != VOIDmode && aggregate_value_p (type_for_mode (outmode, 0)))
3371 #ifdef PCC_STATIC_STRUCT_RETURN
3373 = hard_function_value (build_pointer_type (type_for_mode (outmode, 0)),
3375 mem_value = gen_rtx_MEM (outmode, pointer_reg);
3376 pcc_struct_value = 1;
3378 value = gen_reg_rtx (outmode);
3379 #else /* not PCC_STATIC_STRUCT_RETURN */
3380 struct_value_size = GET_MODE_SIZE (outmode);
3381 if (value != 0 && GET_CODE (value) == MEM)
3384 mem_value = assign_stack_temp (outmode, GET_MODE_SIZE (outmode), 0);
3387 /* This call returns a big structure. */
3388 flags &= ~(ECF_CONST | ECF_PURE);
3391 /* ??? Unfinished: must pass the memory address as an argument. */
3393 /* Copy all the libcall-arguments out of the varargs data
3394 and into a vector ARGVEC.
3396 Compute how to pass each argument. We only support a very small subset
3397 of the full argument passing conventions to limit complexity here since
3398 library functions shouldn't have many args. */
3400 argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
3401 bzero ((char *) argvec, (nargs + 1) * sizeof (struct arg));
3403 INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0);
3405 args_size.constant = 0;
3410 /* Now we are about to start emitting insns that can be deleted
3411 if a libcall is deleted. */
3412 if (flags & (ECF_CONST | ECF_PURE))
3417 /* If there's a structure value address to be passed,
3418 either pass it in the special place, or pass it as an extra argument. */
3419 if (mem_value && struct_value_rtx == 0 && ! pcc_struct_value)
3421 rtx addr = XEXP (mem_value, 0);
3424 /* Make sure it is a reasonable operand for a move or push insn. */
3425 if (GET_CODE (addr) != REG && GET_CODE (addr) != MEM
3426 && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
3427 addr = force_operand (addr, NULL_RTX);
3429 argvec[count].value = addr;
3430 argvec[count].mode = Pmode;
3431 argvec[count].partial = 0;
3433 argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
3434 #ifdef FUNCTION_ARG_PARTIAL_NREGS
3435 if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
3439 locate_and_pad_parm (Pmode, NULL_TREE,
3440 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3443 argvec[count].reg != 0,
3445 NULL_TREE, &args_size, &argvec[count].offset,
3446 &argvec[count].size, &alignment_pad);
3449 if (argvec[count].reg == 0 || argvec[count].partial != 0
3450 || reg_parm_stack_space > 0)
3451 args_size.constant += argvec[count].size.constant;
3453 FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree) 0, 1);
3458 for (; count < nargs; count++)
3460 rtx val = va_arg (p, rtx);
3461 enum machine_mode mode = va_arg (p, enum machine_mode);
3463 /* We cannot convert the arg value to the mode the library wants here;
3464 must do it earlier where we know the signedness of the arg. */
3466 || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
3469 /* On some machines, there's no way to pass a float to a library fcn.
3470 Pass it as a double instead. */
3471 #ifdef LIBGCC_NEEDS_DOUBLE
3472 if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
3473 val = convert_modes (DFmode, SFmode, val, 0), mode = DFmode;
3476 /* There's no need to call protect_from_queue, because
3477 either emit_move_insn or emit_push_insn will do that. */
3479 /* Make sure it is a reasonable operand for a move or push insn. */
3480 if (GET_CODE (val) != REG && GET_CODE (val) != MEM
3481 && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
3482 val = force_operand (val, NULL_RTX);
3484 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
3485 if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
3487 /* We do not support FUNCTION_ARG_CALLEE_COPIES here since it can
3488 be viewed as just an efficiency improvement. */
3489 rtx slot = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
3490 emit_move_insn (slot, val);
3491 val = force_operand (XEXP (slot, 0), NULL_RTX);
3496 argvec[count].value = val;
3497 argvec[count].mode = mode;
3499 argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
3501 #ifdef FUNCTION_ARG_PARTIAL_NREGS
3502 argvec[count].partial
3503 = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
3505 argvec[count].partial = 0;
3508 locate_and_pad_parm (mode, NULL_TREE,
3509 #ifdef STACK_PARMS_IN_REG_PARM_AREA
3512 argvec[count].reg != 0,
3514 NULL_TREE, &args_size, &argvec[count].offset,
3515 &argvec[count].size, &alignment_pad);
3517 if (argvec[count].size.var)
3520 if (reg_parm_stack_space == 0 && argvec[count].partial)
3521 argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
3523 if (argvec[count].reg == 0 || argvec[count].partial != 0
3524 || reg_parm_stack_space > 0)
3525 args_size.constant += argvec[count].size.constant;
3527 FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
3530 #ifdef FINAL_REG_PARM_STACK_SPACE
3531 reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
3534 /* If this machine requires an external definition for library
3535 functions, write one out. */
3536 assemble_external_libcall (fun);
3538 original_args_size = args_size;
3539 #ifdef PREFERRED_STACK_BOUNDARY
3540 args_size.constant = (((args_size.constant
3541 + stack_pointer_delta
3545 - stack_pointer_delta);
3548 args_size.constant = MAX (args_size.constant,
3549 reg_parm_stack_space);
3551 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3552 args_size.constant -= reg_parm_stack_space;
3555 if (args_size.constant > current_function_outgoing_args_size)
3556 current_function_outgoing_args_size = args_size.constant;
3558 if (ACCUMULATE_OUTGOING_ARGS)
3560 /* Since the stack pointer will never be pushed, it is possible for
3561 the evaluation of a parm to clobber something we have already
3562 written to the stack. Since most function calls on RISC machines
3563 do not use the stack, this is uncommon, but must work correctly.
3565 Therefore, we save any area of the stack that was already written
3566 and that we are using. Here we set up to do this by making a new
3567 stack usage map from the old one.
3569 Another approach might be to try to reorder the argument
3570 evaluations to avoid this conflicting stack usage. */
3572 needed = args_size.constant;
3574 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3575 /* Since we will be writing into the entire argument area, the
3576 map must be allocated for its entire size, not just the part that
3577 is the responsibility of the caller. */
3578 needed += reg_parm_stack_space;
3581 #ifdef ARGS_GROW_DOWNWARD
3582 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3585 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3588 stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
3590 if (initial_highest_arg_in_use)
3591 bcopy (initial_stack_usage_map, stack_usage_map,
3592 initial_highest_arg_in_use);
3594 if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
3595 bzero (&stack_usage_map[initial_highest_arg_in_use],
3596 highest_outgoing_arg_in_use - initial_highest_arg_in_use);
3599 /* The address of the outgoing argument list must not be copied to a
3600 register here, because argblock would be left pointing to the
3601 wrong place after the call to allocate_dynamic_stack_space below.
3604 argblock = virtual_outgoing_args_rtx;
3609 argblock = push_block (GEN_INT (args_size.constant), 0, 0);
3612 #ifdef PREFERRED_STACK_BOUNDARY
3613 /* If we push args individually in reverse order, perform stack alignment
3614 before the first push (the last arg). */
3615 if (argblock == 0 && PUSH_ARGS_REVERSED)
3616 anti_adjust_stack (GEN_INT (args_size.constant
3617 - original_args_size.constant));
3620 if (PUSH_ARGS_REVERSED)
3631 #ifdef REG_PARM_STACK_SPACE
3632 if (ACCUMULATE_OUTGOING_ARGS)
3634 /* The argument list is the property of the called routine and it
3635 may clobber it. If the fixed area has been used for previous
3636 parameters, we must save and restore it.
3638 Here we compute the boundary of the that needs to be saved, if any. */
3640 #ifdef ARGS_GROW_DOWNWARD
3641 for (count = 0; count < reg_parm_stack_space + 1; count++)
3643 for (count = 0; count < reg_parm_stack_space; count++)
3646 if (count >= highest_outgoing_arg_in_use
3647 || stack_usage_map[count] == 0)
3650 if (low_to_save == -1)
3651 low_to_save = count;
3653 high_to_save = count;
3656 if (low_to_save >= 0)
3658 int num_to_save = high_to_save - low_to_save + 1;
3659 enum machine_mode save_mode
3660 = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
3663 /* If we don't have the required alignment, must do this in BLKmode. */
3664 if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
3665 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
3666 save_mode = BLKmode;
3668 #ifdef ARGS_GROW_DOWNWARD
3669 stack_area = gen_rtx_MEM (save_mode,
3670 memory_address (save_mode,
3671 plus_constant (argblock,
3674 stack_area = gen_rtx_MEM (save_mode,
3675 memory_address (save_mode,
3676 plus_constant (argblock,
3679 if (save_mode == BLKmode)
3681 save_area = assign_stack_temp (BLKmode, num_to_save, 0);
3682 emit_block_move (validize_mem (save_area), stack_area,
3683 GEN_INT (num_to_save), PARM_BOUNDARY);
3687 save_area = gen_reg_rtx (save_mode);
3688 emit_move_insn (save_area, stack_area);
3694 /* Push the args that need to be pushed. */
3696 /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3697 are to be pushed. */
3698 for (count = 0; count < nargs; count++, argnum += inc)
3700 register enum machine_mode mode = argvec[argnum].mode;
3701 register rtx val = argvec[argnum].value;
3702 rtx reg = argvec[argnum].reg;
3703 int partial = argvec[argnum].partial;
3704 int lower_bound = 0, upper_bound = 0, i;
3706 if (! (reg != 0 && partial == 0))
3708 if (ACCUMULATE_OUTGOING_ARGS)
3710 /* If this is being stored into a pre-allocated, fixed-size,
3711 stack area, save any previous data at that location. */
3713 #ifdef ARGS_GROW_DOWNWARD
3714 /* stack_slot is negative, but we want to index stack_usage_map
3715 with positive values. */
3716 upper_bound = -argvec[argnum].offset.constant + 1;
3717 lower_bound = upper_bound - argvec[argnum].size.constant;
3719 lower_bound = argvec[argnum].offset.constant;
3720 upper_bound = lower_bound + argvec[argnum].size.constant;
3723 for (i = lower_bound; i < upper_bound; i++)
3724 if (stack_usage_map[i]
3725 /* Don't store things in the fixed argument area at this
3726 point; it has already been saved. */
3727 && i > reg_parm_stack_space)
3730 if (i != upper_bound)
3732 /* We need to make a save area. See what mode we can make
3734 enum machine_mode save_mode
3735 = mode_for_size (argvec[argnum].size.constant
3743 plus_constant (argblock,
3744 argvec[argnum].offset.constant)));
3745 argvec[argnum].save_area = gen_reg_rtx (save_mode);
3747 emit_move_insn (argvec[argnum].save_area, stack_area);
3751 emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
3752 argblock, GEN_INT (argvec[argnum].offset.constant),
3753 reg_parm_stack_space, ARGS_SIZE_RTX (alignment_pad));
3755 /* Now mark the segment we just used. */
3756 if (ACCUMULATE_OUTGOING_ARGS)
3757 for (i = lower_bound; i < upper_bound; i++)
3758 stack_usage_map[i] = 1;
3764 #ifdef PREFERRED_STACK_BOUNDARY
3765 /* If we pushed args in forward order, perform stack alignment
3766 after pushing the last arg. */
3767 if (argblock == 0 && !PUSH_ARGS_REVERSED)
3768 anti_adjust_stack (GEN_INT (args_size.constant
3769 - original_args_size.constant));
3772 if (PUSH_ARGS_REVERSED)
3777 fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0);
3779 /* Now load any reg parms into their regs. */
3781 /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3782 are to be pushed. */
3783 for (count = 0; count < nargs; count++, argnum += inc)
3785 register rtx val = argvec[argnum].value;
3786 rtx reg = argvec[argnum].reg;
3787 int partial = argvec[argnum].partial;
3789 /* Handle calls that pass values in multiple non-contiguous
3790 locations. The PA64 has examples of this for library calls. */
3791 if (reg != 0 && GET_CODE (reg) == PARALLEL)
3792 emit_group_load (reg, val,
3793 GET_MODE_SIZE (GET_MODE (val)),
3794 GET_MODE_ALIGNMENT (GET_MODE (val)));
3795 else if (reg != 0 && partial == 0)
3796 emit_move_insn (reg, val);
3801 /* Any regs containing parms remain in use through the call. */
3802 for (count = 0; count < nargs; count++)
3804 rtx reg = argvec[count].reg;
3805 if (reg != 0 && GET_CODE (reg) == PARALLEL)
3806 use_group_regs (&call_fusage, reg);
3808 use_reg (&call_fusage, reg);
3811 /* Pass the function the address in which to return a structure value. */
3812 if (mem_value != 0 && struct_value_rtx != 0 && ! pcc_struct_value)
3814 emit_move_insn (struct_value_rtx,
3816 force_operand (XEXP (mem_value, 0),
3818 if (GET_CODE (struct_value_rtx) == REG)
3819 use_reg (&call_fusage, struct_value_rtx);
3822 /* Don't allow popping to be deferred, since then
3823 cse'ing of library calls could delete a call and leave the pop. */
3825 valreg = (mem_value == 0 && outmode != VOIDmode
3826 ? hard_libcall_value (outmode) : NULL_RTX);
3828 #ifdef PREFERRED_STACK_BOUNDARY
3829 /* Stack must be properly aligned now. */
3830 if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1))
3834 /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
3835 will set inhibit_defer_pop to that value. */
3836 /* The return type is needed to decide how many bytes the function pops.
3837 Signedness plays no role in that, so for simplicity, we pretend it's
3838 always signed. We also assume that the list of arguments passed has
3839 no impact, so we pretend it is unknown. */
3842 get_identifier (XSTR (orgfun, 0)),
3843 build_function_type (outmode == VOIDmode ? void_type_node
3844 : type_for_mode (outmode, 0), NULL_TREE),
3845 original_args_size.constant, args_size.constant,
3847 FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
3849 old_inhibit_defer_pop + 1, call_fusage, flags);
3851 /* Now restore inhibit_defer_pop to its actual original value. */
3854 /* If call is cse'able, make appropriate pair of reg-notes around it.
3855 Test valreg so we don't crash; may safely ignore `const'
3856 if return type is void. Disable for PARALLEL return values, because
3857 we have no way to move such values into a pseudo register. */
3858 if ((flags & (ECF_CONST | ECF_PURE))
3859 && valreg != 0 && GET_CODE (valreg) != PARALLEL)
3862 rtx temp = gen_reg_rtx (GET_MODE (valreg));
3866 /* Construct an "equal form" for the value which mentions all the
3867 arguments in order as well as the function name. */
3868 for (i = 0; i < nargs; i++)
3869 note = gen_rtx_EXPR_LIST (VOIDmode, argvec[i].value, note);
3870 note = gen_rtx_EXPR_LIST (VOIDmode, fun, note);
3872 insns = get_insns ();
3875 if (flags & ECF_PURE)
3876 note = gen_rtx_EXPR_LIST (VOIDmode,
3877 gen_rtx_USE (VOIDmode,
3878 gen_rtx_MEM (BLKmode,
3879 gen_rtx_SCRATCH (VOIDmode))), note);
3881 emit_libcall_block (insns, temp, valreg, note);
3885 else if (flags & (ECF_CONST | ECF_PURE))
3887 /* Otherwise, just write out the sequence without a note. */
3888 rtx insns = get_insns ();
3895 /* Copy the value to the right place. */
3896 if (outmode != VOIDmode && retval)
3902 if (value != mem_value)
3903 emit_move_insn (value, mem_value);
3905 else if (value != 0)
3906 emit_move_insn (value, hard_libcall_value (outmode));
3908 value = hard_libcall_value (outmode);
3911 if (ACCUMULATE_OUTGOING_ARGS)
3913 #ifdef REG_PARM_STACK_SPACE
3916 enum machine_mode save_mode = GET_MODE (save_area);
3917 #ifdef ARGS_GROW_DOWNWARD
3919 = gen_rtx_MEM (save_mode,
3920 memory_address (save_mode,
3921 plus_constant (argblock,
3925 = gen_rtx_MEM (save_mode,
3926 memory_address (save_mode,
3927 plus_constant (argblock, low_to_save)));
3929 if (save_mode != BLKmode)
3930 emit_move_insn (stack_area, save_area);
3932 emit_block_move (stack_area, validize_mem (save_area),
3933 GEN_INT (high_to_save - low_to_save + 1),
3938 /* If we saved any argument areas, restore them. */
3939 for (count = 0; count < nargs; count++)
3940 if (argvec[count].save_area)
3942 enum machine_mode save_mode = GET_MODE (argvec[count].save_area);
3944 = gen_rtx_MEM (save_mode,
3947 plus_constant (argblock,
3948 argvec[count].offset.constant)));
3950 emit_move_insn (stack_area, argvec[count].save_area);
3953 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3954 stack_usage_map = initial_stack_usage_map;
3961 /* Output a library call to function FUN (a SYMBOL_REF rtx)
3962 (emitting the queue unless NO_QUEUE is nonzero),
3963 for a value of mode OUTMODE,
3964 with NARGS different arguments, passed as alternating rtx values
3965 and machine_modes to convert them to.
3966 The rtx values should have been passed through protect_from_queue already.
3968 FN_TYPE will is zero for `normal' calls, one for `const' calls, wich
3969 which will be enclosed in REG_LIBCALL/REG_RETVAL notes and two for `pure'
3970 calls, that are handled like `const' calls with extra
3971 (use (memory (scratch)). */
3974 emit_library_call VPARAMS((rtx orgfun, int fn_type, enum machine_mode outmode,
3977 #ifndef ANSI_PROTOTYPES
3980 enum machine_mode outmode;
3985 VA_START (p, nargs);
3987 #ifndef ANSI_PROTOTYPES
3988 orgfun = va_arg (p, rtx);
3989 fn_type = va_arg (p, int);
3990 outmode = va_arg (p, enum machine_mode);
3991 nargs = va_arg (p, int);
3994 emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p);
3999 /* Like emit_library_call except that an extra argument, VALUE,
4000 comes second and says where to store the result.
4001 (If VALUE is zero, this function chooses a convenient way
4002 to return the value.
4004 This function returns an rtx for where the value is to be found.
4005 If VALUE is nonzero, VALUE is returned. */
4008 emit_library_call_value VPARAMS((rtx orgfun, rtx value, int fn_type,
4009 enum machine_mode outmode, int nargs, ...))
4011 #ifndef ANSI_PROTOTYPES
4015 enum machine_mode outmode;
4020 VA_START (p, nargs);
4022 #ifndef ANSI_PROTOTYPES
4023 orgfun = va_arg (p, rtx);
4024 value = va_arg (p, rtx);
4025 fn_type = va_arg (p, int);
4026 outmode = va_arg (p, enum machine_mode);
4027 nargs = va_arg (p, int);
4030 value = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode, nargs, p);
4038 /* Return an rtx which represents a suitable home on the stack
4039 given TYPE, the type of the argument looking for a home.
4040 This is called only for BLKmode arguments.
4042 SIZE is the size needed for this target.
4043 ARGS_ADDR is the address of the bottom of the argument block for this call.
4044 OFFSET describes this parameter's offset into ARGS_ADDR. It is meaningless
4045 if this machine uses push insns. */
4048 target_for_arg (type, size, args_addr, offset)
4052 struct args_size offset;
4055 rtx offset_rtx = ARGS_SIZE_RTX (offset);
4057 /* We do not call memory_address if possible,
4058 because we want to address as close to the stack
4059 as possible. For non-variable sized arguments,
4060 this will be stack-pointer relative addressing. */
4061 if (GET_CODE (offset_rtx) == CONST_INT)
4062 target = plus_constant (args_addr, INTVAL (offset_rtx));
4065 /* I have no idea how to guarantee that this
4066 will work in the presence of register parameters. */
4067 target = gen_rtx_PLUS (Pmode, args_addr, offset_rtx);
4068 target = memory_address (QImode, target);
4071 return gen_rtx_MEM (BLKmode, target);
4075 /* Store a single argument for a function call
4076 into the register or memory area where it must be passed.
4077 *ARG describes the argument value and where to pass it.
4079 ARGBLOCK is the address of the stack-block for all the arguments,
4080 or 0 on a machine where arguments are pushed individually.
4082 MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
4083 so must be careful about how the stack is used.
4085 VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
4086 argument stack. This is used if ACCUMULATE_OUTGOING_ARGS to indicate
4087 that we need not worry about saving and restoring the stack.
4089 FNDECL is the declaration of the function we are calling. */
4092 store_one_arg (arg, argblock, flags, variable_size,
4093 reg_parm_stack_space)
4094 struct arg_data *arg;
4097 int variable_size ATTRIBUTE_UNUSED;
4098 int reg_parm_stack_space;
4100 register tree pval = arg->tree_value;
4104 int i, lower_bound = 0, upper_bound = 0;
4106 if (TREE_CODE (pval) == ERROR_MARK)
4109 /* Push a new temporary level for any temporaries we make for
4113 if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL))
4115 /* If this is being stored into a pre-allocated, fixed-size, stack area,
4116 save any previous data at that location. */
4117 if (argblock && ! variable_size && arg->stack)
4119 #ifdef ARGS_GROW_DOWNWARD
4120 /* stack_slot is negative, but we want to index stack_usage_map
4121 with positive values. */
4122 if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4123 upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
4127 lower_bound = upper_bound - arg->size.constant;
4129 if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
4130 lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
4134 upper_bound = lower_bound + arg->size.constant;
4137 for (i = lower_bound; i < upper_bound; i++)
4138 if (stack_usage_map[i]
4139 /* Don't store things in the fixed argument area at this point;
4140 it has already been saved. */
4141 && i > reg_parm_stack_space)
4144 if (i != upper_bound)
4146 /* We need to make a save area. See what mode we can make it. */
4147 enum machine_mode save_mode
4148 = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
4150 = gen_rtx_MEM (save_mode,
4151 memory_address (save_mode,
4152 XEXP (arg->stack_slot, 0)));
4154 if (save_mode == BLKmode)
4156 arg->save_area = assign_stack_temp (BLKmode,
4157 arg->size.constant, 0);
4158 MEM_SET_IN_STRUCT_P (arg->save_area,
4159 AGGREGATE_TYPE_P (TREE_TYPE
4160 (arg->tree_value)));
4161 preserve_temp_slots (arg->save_area);
4162 emit_block_move (validize_mem (arg->save_area), stack_area,
4163 GEN_INT (arg->size.constant),
4168 arg->save_area = gen_reg_rtx (save_mode);
4169 emit_move_insn (arg->save_area, stack_area);
4173 /* Now that we have saved any slots that will be overwritten by this
4174 store, mark all slots this store will use. We must do this before
4175 we actually expand the argument since the expansion itself may
4176 trigger library calls which might need to use the same stack slot. */
4177 if (argblock && ! variable_size && arg->stack)
4178 for (i = lower_bound; i < upper_bound; i++)
4179 stack_usage_map[i] = 1;
4182 /* If this isn't going to be placed on both the stack and in registers,
4183 set up the register and number of words. */
4184 if (! arg->pass_on_stack)
4185 reg = arg->reg, partial = arg->partial;
4187 if (reg != 0 && partial == 0)
4188 /* Being passed entirely in a register. We shouldn't be called in
4192 /* If this arg needs special alignment, don't load the registers
4194 if (arg->n_aligned_regs != 0)
4197 /* If this is being passed partially in a register, we can't evaluate
4198 it directly into its stack slot. Otherwise, we can. */
4199 if (arg->value == 0)
4201 /* stack_arg_under_construction is nonzero if a function argument is
4202 being evaluated directly into the outgoing argument list and
4203 expand_call must take special action to preserve the argument list
4204 if it is called recursively.
4206 For scalar function arguments stack_usage_map is sufficient to
4207 determine which stack slots must be saved and restored. Scalar
4208 arguments in general have pass_on_stack == 0.
4210 If this argument is initialized by a function which takes the
4211 address of the argument (a C++ constructor or a C function
4212 returning a BLKmode structure), then stack_usage_map is
4213 insufficient and expand_call must push the stack around the
4214 function call. Such arguments have pass_on_stack == 1.
4216 Note that it is always safe to set stack_arg_under_construction,
4217 but this generates suboptimal code if set when not needed. */
4219 if (arg->pass_on_stack)
4220 stack_arg_under_construction++;
4222 arg->value = expand_expr (pval,
4224 || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
4225 ? NULL_RTX : arg->stack,
4228 /* If we are promoting object (or for any other reason) the mode
4229 doesn't agree, convert the mode. */
4231 if (arg->mode != TYPE_MODE (TREE_TYPE (pval)))
4232 arg->value = convert_modes (arg->mode, TYPE_MODE (TREE_TYPE (pval)),
4233 arg->value, arg->unsignedp);
4235 if (arg->pass_on_stack)
4236 stack_arg_under_construction--;
4239 /* Don't allow anything left on stack from computation
4240 of argument to alloca. */
4241 if (flags & ECF_MAY_BE_ALLOCA)
4242 do_pending_stack_adjust ();
4244 if (arg->value == arg->stack)
4246 /* If the value is already in the stack slot, we are done. */
4247 if (current_function_check_memory_usage && GET_CODE (arg->stack) == MEM)
4249 emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
4250 XEXP (arg->stack, 0), Pmode,
4251 ARGS_SIZE_RTX (arg->size),
4252 TYPE_MODE (sizetype),
4253 GEN_INT (MEMORY_USE_RW),
4254 TYPE_MODE (integer_type_node));
4257 else if (arg->mode != BLKmode)
4261 /* Argument is a scalar, not entirely passed in registers.
4262 (If part is passed in registers, arg->partial says how much
4263 and emit_push_insn will take care of putting it there.)
4265 Push it, and if its size is less than the
4266 amount of space allocated to it,
4267 also bump stack pointer by the additional space.
4268 Note that in C the default argument promotions
4269 will prevent such mismatches. */
4271 size = GET_MODE_SIZE (arg->mode);
4272 /* Compute how much space the push instruction will push.
4273 On many machines, pushing a byte will advance the stack
4274 pointer by a halfword. */
4275 #ifdef PUSH_ROUNDING
4276 size = PUSH_ROUNDING (size);
4280 /* Compute how much space the argument should get:
4281 round up to a multiple of the alignment for arguments. */
4282 if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
4283 used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
4284 / (PARM_BOUNDARY / BITS_PER_UNIT))
4285 * (PARM_BOUNDARY / BITS_PER_UNIT));
4287 /* This isn't already where we want it on the stack, so put it there.
4288 This can either be done with push or copy insns. */
4289 emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX, 0,
4290 partial, reg, used - size, argblock,
4291 ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space,
4292 ARGS_SIZE_RTX (arg->alignment_pad));
4296 /* BLKmode, at least partly to be pushed. */
4298 register int excess;
4301 /* Pushing a nonscalar.
4302 If part is passed in registers, PARTIAL says how much
4303 and emit_push_insn will take care of putting it there. */
4305 /* Round its size up to a multiple
4306 of the allocation unit for arguments. */
4308 if (arg->size.var != 0)
4311 size_rtx = ARGS_SIZE_RTX (arg->size);
4315 /* PUSH_ROUNDING has no effect on us, because
4316 emit_push_insn for BLKmode is careful to avoid it. */
4317 excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
4318 + partial * UNITS_PER_WORD);
4319 size_rtx = expr_size (pval);
4322 emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
4323 TYPE_ALIGN (TREE_TYPE (pval)), partial, reg, excess,
4324 argblock, ARGS_SIZE_RTX (arg->offset),
4325 reg_parm_stack_space,
4326 ARGS_SIZE_RTX (arg->alignment_pad));
4330 /* Unless this is a partially-in-register argument, the argument is now
4333 ??? Note that this can change arg->value from arg->stack to
4334 arg->stack_slot and it matters when they are not the same.
4335 It isn't totally clear that this is correct in all cases. */
4337 arg->value = arg->stack_slot;
4339 /* Once we have pushed something, pops can't safely
4340 be deferred during the rest of the arguments. */
4343 /* ANSI doesn't require a sequence point here,
4344 but PCC has one, so this will avoid some problems. */
4347 /* Free any temporary slots made in processing this argument. Show
4348 that we might have taken the address of something and pushed that
4350 preserve_temp_slots (NULL_RTX);