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 /* If REG was promoted from the actual mode of the argument expression,
94 indicates whether the promotion is sign- or zero-extended. */
96 /* Number of registers to use. 0 means put the whole arg in registers.
97 Also 0 if not passed in registers. */
99 /* Non-zero if argument must be passed on stack.
100 Note that some arguments may be passed on the stack
101 even though pass_on_stack is zero, just because FUNCTION_ARG says so.
102 pass_on_stack identifies arguments that *cannot* go in registers. */
104 /* Offset of this argument from beginning of stack-args. */
105 struct args_size offset;
106 /* Similar, but offset to the start of the stack slot. Different from
107 OFFSET if this arg pads downward. */
108 struct args_size slot_offset;
109 /* Size of this argument on the stack, rounded up for any padding it gets,
110 parts of the argument passed in registers do not count.
111 If REG_PARM_STACK_SPACE is defined, then register parms
112 are counted here as well. */
113 struct args_size size;
114 /* Location on the stack at which parameter should be stored. The store
115 has already been done if STACK == VALUE. */
117 /* Location on the stack of the start of this argument slot. This can
118 differ from STACK if this arg pads downward. This location is known
119 to be aligned to FUNCTION_ARG_BOUNDARY. */
121 /* Place that this stack area has been saved, if needed. */
123 /* If an argument's alignment does not permit direct copying into registers,
124 copy in smaller-sized pieces into pseudos. These are stored in a
125 block pointed to by this field. The next field says how many
126 word-sized pseudos we made. */
129 /* The amount that the stack pointer needs to be adjusted to
130 force alignment for the next argument. */
131 struct args_size alignment_pad;
134 /* A vector of one char per byte of stack space. A byte if non-zero if
135 the corresponding stack location has been used.
136 This vector is used to prevent a function call within an argument from
137 clobbering any stack already set up. */
138 static char *stack_usage_map;
140 /* Size of STACK_USAGE_MAP. */
141 static int highest_outgoing_arg_in_use;
143 /* stack_arg_under_construction is nonzero when an argument may be
144 initialized with a constructor call (including a C function that
145 returns a BLKmode struct) and expand_call must take special action
146 to make sure the object being constructed does not overlap the
147 argument list for the constructor call. */
148 int stack_arg_under_construction;
150 static int calls_function PARAMS ((tree, int));
151 static int calls_function_1 PARAMS ((tree, int));
153 #define ECF_IS_CONST 1
154 #define ECF_NOTHROW 2
155 #define ECF_SIBCALL 4
156 static void emit_call_1 PARAMS ((rtx, tree, tree, HOST_WIDE_INT,
157 HOST_WIDE_INT, HOST_WIDE_INT, rtx,
158 rtx, int, rtx, int));
159 static void precompute_register_parameters PARAMS ((int,
162 static void store_one_arg PARAMS ((struct arg_data *, rtx, int, int,
164 static void store_unaligned_arguments_into_pseudos PARAMS ((struct arg_data *,
166 static int finalize_must_preallocate PARAMS ((int, int,
168 struct args_size *));
169 static void precompute_arguments PARAMS ((int, int, int,
171 struct args_size *));
172 static int compute_argument_block_size PARAMS ((int,
175 static void initialize_argument_information PARAMS ((int,
182 static void compute_argument_addresses PARAMS ((struct arg_data *,
184 static rtx rtx_for_function_call PARAMS ((tree, tree));
185 static void load_register_parameters PARAMS ((struct arg_data *,
187 static int libfunc_nothrow PARAMS ((rtx));
188 static rtx emit_library_call_value_1 PARAMS ((int, rtx, rtx, int,
192 #ifdef REG_PARM_STACK_SPACE
193 static rtx save_fixed_argument_area PARAMS ((int, rtx, int *, int *));
194 static void restore_fixed_argument_area PARAMS ((rtx, rtx, int, int));
197 /* If WHICH is 1, return 1 if EXP contains a call to the built-in function
200 If WHICH is 0, return 1 if EXP contains a call to any function.
201 Actually, we only need return 1 if evaluating EXP would require pushing
202 arguments on the stack, but that is too difficult to compute, so we just
203 assume any function call might require the stack. */
205 static tree calls_function_save_exprs;
208 calls_function (exp, which)
213 calls_function_save_exprs = 0;
214 val = calls_function_1 (exp, which);
215 calls_function_save_exprs = 0;
220 calls_function_1 (exp, which)
225 enum tree_code code = TREE_CODE (exp);
226 int type = TREE_CODE_CLASS (code);
227 int length = tree_code_length[(int) code];
229 /* If this code is language-specific, we don't know what it will do. */
230 if ((int) code >= NUM_TREE_CODES)
233 /* Only expressions and references can contain calls. */
234 if (type != 'e' && type != '<' && type != '1' && type != '2' && type != 'r'
243 else if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
244 && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
247 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
249 if ((DECL_BUILT_IN (fndecl)
250 && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL
251 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_ALLOCA)
252 || (DECL_SAVED_INSNS (fndecl)
253 && DECL_SAVED_INSNS (fndecl)->calls_alloca))
257 /* Third operand is RTL. */
262 if (SAVE_EXPR_RTL (exp) != 0)
264 if (value_member (exp, calls_function_save_exprs))
266 calls_function_save_exprs = tree_cons (NULL_TREE, exp,
267 calls_function_save_exprs);
268 return (TREE_OPERAND (exp, 0) != 0
269 && calls_function_1 (TREE_OPERAND (exp, 0), which));
275 for (local = BLOCK_VARS (exp); local; local = TREE_CHAIN (local))
276 if (DECL_INITIAL (local) != 0
277 && calls_function_1 (DECL_INITIAL (local), which))
281 register tree subblock;
283 for (subblock = BLOCK_SUBBLOCKS (exp);
285 subblock = TREE_CHAIN (subblock))
286 if (calls_function_1 (subblock, which))
291 case METHOD_CALL_EXPR:
295 case WITH_CLEANUP_EXPR:
306 for (i = 0; i < length; i++)
307 if (TREE_OPERAND (exp, i) != 0
308 && calls_function_1 (TREE_OPERAND (exp, i), which))
314 /* Force FUNEXP into a form suitable for the address of a CALL,
315 and return that as an rtx. Also load the static chain register
316 if FNDECL is a nested function.
318 CALL_FUSAGE points to a variable holding the prospective
319 CALL_INSN_FUNCTION_USAGE information. */
322 prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
328 rtx static_chain_value = 0;
330 funexp = protect_from_queue (funexp, 0);
333 /* Get possible static chain value for nested function in C. */
334 static_chain_value = lookup_static_chain (fndecl);
336 /* Make a valid memory address and copy constants thru pseudo-regs,
337 but not for a constant address if -fno-function-cse. */
338 if (GET_CODE (funexp) != SYMBOL_REF)
339 /* If we are using registers for parameters, force the
340 function address into a register now. */
341 funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
342 ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
343 : memory_address (FUNCTION_MODE, funexp));
346 #ifndef NO_FUNCTION_CSE
347 if (optimize && ! flag_no_function_cse)
348 #ifdef NO_RECURSIVE_FUNCTION_CSE
349 if (fndecl != current_function_decl)
351 funexp = force_reg (Pmode, funexp);
355 if (static_chain_value != 0)
357 emit_move_insn (static_chain_rtx, static_chain_value);
359 if (GET_CODE (static_chain_rtx) == REG)
360 use_reg (call_fusage, static_chain_rtx);
366 /* Generate instructions to call function FUNEXP,
367 and optionally pop the results.
368 The CALL_INSN is the first insn generated.
370 FNDECL is the declaration node of the function. This is given to the
371 macro RETURN_POPS_ARGS to determine whether this function pops its own args.
373 FUNTYPE is the data type of the function. This is given to the macro
374 RETURN_POPS_ARGS to determine whether this function pops its own args.
375 We used to allow an identifier for library functions, but that doesn't
376 work when the return type is an aggregate type and the calling convention
377 says that the pointer to this aggregate is to be popped by the callee.
379 STACK_SIZE is the number of bytes of arguments on the stack,
380 ROUNDED_STACK_SIZE is that number rounded up to
381 PREFERRED_STACK_BOUNDARY; zero if the size is variable. This is
382 both to put into the call insn and to generate explicit popping
385 STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
386 It is zero if this call doesn't want a structure value.
388 NEXT_ARG_REG is the rtx that results from executing
389 FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
390 just after all the args have had their registers assigned.
391 This could be whatever you like, but normally it is the first
392 arg-register beyond those used for args in this call,
393 or 0 if all the arg-registers are used in this call.
394 It is passed on to `gen_call' so you can put this info in the call insn.
396 VALREG is a hard register in which a value is returned,
397 or 0 if the call does not return a value.
399 OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
400 the args to this call were processed.
401 We restore `inhibit_defer_pop' to that value.
403 CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that
404 denote registers used by the called function.
406 IS_CONST is true if this is a `const' call. */
409 emit_call_1 (funexp, fndecl, funtype, stack_size, rounded_stack_size,
410 struct_value_size, next_arg_reg, valreg, old_inhibit_defer_pop,
411 call_fusage, ecf_flags)
413 tree fndecl ATTRIBUTE_UNUSED;
414 tree funtype ATTRIBUTE_UNUSED;
415 HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED;
416 HOST_WIDE_INT rounded_stack_size;
417 HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED;
420 int old_inhibit_defer_pop;
424 rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
425 #if defined (HAVE_call) && defined (HAVE_call_value)
426 rtx struct_value_size_rtx = GEN_INT (struct_value_size);
429 int already_popped = 0;
430 HOST_WIDE_INT n_popped = RETURN_POPS_ARGS (fndecl, funtype, stack_size);
432 /* Ensure address is valid. SYMBOL_REF is already valid, so no need,
433 and we don't want to load it into a register as an optimization,
434 because prepare_call_address already did it if it should be done. */
435 if (GET_CODE (funexp) != SYMBOL_REF)
436 funexp = memory_address (FUNCTION_MODE, funexp);
438 #if defined (HAVE_sibcall_pop) && defined (HAVE_sibcall_value_pop)
439 if ((ecf_flags & ECF_SIBCALL)
440 && HAVE_sibcall_pop && HAVE_sibcall_value_pop
441 && (RETURN_POPS_ARGS (fndecl, funtype, stack_size) > 0
444 rtx n_pop = GEN_INT (RETURN_POPS_ARGS (fndecl, funtype, stack_size));
447 /* If this subroutine pops its own args, record that in the call insn
448 if possible, for the sake of frame pointer elimination. */
451 pat = gen_sibcall_value_pop (valreg,
452 gen_rtx_MEM (FUNCTION_MODE, funexp),
453 rounded_stack_size_rtx, next_arg_reg,
456 pat = gen_sibcall_pop (gen_rtx_MEM (FUNCTION_MODE, funexp),
457 rounded_stack_size_rtx, next_arg_reg, n_pop);
459 emit_call_insn (pat);
465 #if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
466 /* If the target has "call" or "call_value" insns, then prefer them
467 if no arguments are actually popped. If the target does not have
468 "call" or "call_value" insns, then we must use the popping versions
469 even if the call has no arguments to pop. */
470 #if defined (HAVE_call) && defined (HAVE_call_value)
471 if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop
474 if (HAVE_call_pop && HAVE_call_value_pop)
477 rtx n_pop = GEN_INT (n_popped);
480 /* If this subroutine pops its own args, record that in the call insn
481 if possible, for the sake of frame pointer elimination. */
484 pat = gen_call_value_pop (valreg,
485 gen_rtx_MEM (FUNCTION_MODE, funexp),
486 rounded_stack_size_rtx, next_arg_reg, n_pop);
488 pat = gen_call_pop (gen_rtx_MEM (FUNCTION_MODE, funexp),
489 rounded_stack_size_rtx, next_arg_reg, n_pop);
491 emit_call_insn (pat);
497 #if defined (HAVE_sibcall) && defined (HAVE_sibcall_value)
498 if ((ecf_flags & ECF_SIBCALL)
499 && HAVE_sibcall && HAVE_sibcall_value)
502 emit_call_insn (gen_sibcall_value (valreg,
503 gen_rtx_MEM (FUNCTION_MODE, funexp),
504 rounded_stack_size_rtx,
505 next_arg_reg, NULL_RTX));
507 emit_call_insn (gen_sibcall (gen_rtx_MEM (FUNCTION_MODE, funexp),
508 rounded_stack_size_rtx, next_arg_reg,
509 struct_value_size_rtx));
514 #if defined (HAVE_call) && defined (HAVE_call_value)
515 if (HAVE_call && HAVE_call_value)
518 emit_call_insn (gen_call_value (valreg,
519 gen_rtx_MEM (FUNCTION_MODE, funexp),
520 rounded_stack_size_rtx, next_arg_reg,
523 emit_call_insn (gen_call (gen_rtx_MEM (FUNCTION_MODE, funexp),
524 rounded_stack_size_rtx, next_arg_reg,
525 struct_value_size_rtx));
531 /* Find the CALL insn we just emitted. */
532 for (call_insn = get_last_insn ();
533 call_insn && GET_CODE (call_insn) != CALL_INSN;
534 call_insn = PREV_INSN (call_insn))
540 /* Put the register usage information on the CALL. If there is already
541 some usage information, put ours at the end. */
542 if (CALL_INSN_FUNCTION_USAGE (call_insn))
546 for (link = CALL_INSN_FUNCTION_USAGE (call_insn); XEXP (link, 1) != 0;
547 link = XEXP (link, 1))
550 XEXP (link, 1) = call_fusage;
553 CALL_INSN_FUNCTION_USAGE (call_insn) = call_fusage;
555 /* If this is a const call, then set the insn's unchanging bit. */
556 if (ecf_flags & ECF_IS_CONST)
557 CONST_CALL_P (call_insn) = 1;
559 /* If this call can't throw, attach a REG_EH_REGION reg note to that
561 if (ecf_flags & ECF_NOTHROW)
562 REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
563 REG_NOTES (call_insn));
565 SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0);
567 /* Restore this now, so that we do defer pops for this call's args
568 if the context of the call as a whole permits. */
569 inhibit_defer_pop = old_inhibit_defer_pop;
574 CALL_INSN_FUNCTION_USAGE (call_insn)
575 = gen_rtx_EXPR_LIST (VOIDmode,
576 gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx),
577 CALL_INSN_FUNCTION_USAGE (call_insn));
578 rounded_stack_size -= n_popped;
579 rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
580 stack_pointer_delta -= n_popped;
583 if (!ACCUMULATE_OUTGOING_ARGS)
585 /* If returning from the subroutine does not automatically pop the args,
586 we need an instruction to pop them sooner or later.
587 Perhaps do it now; perhaps just record how much space to pop later.
589 If returning from the subroutine does pop the args, indicate that the
590 stack pointer will be changed. */
592 if (rounded_stack_size != 0)
594 if (flag_defer_pop && inhibit_defer_pop == 0
595 && !(ecf_flags & ECF_IS_CONST))
596 pending_stack_adjust += rounded_stack_size;
598 adjust_stack (rounded_stack_size_rtx);
601 /* When we accumulate outgoing args, we must avoid any stack manipulations.
602 Restore the stack pointer to its original value now. Usually
603 ACCUMULATE_OUTGOING_ARGS targets don't get here, but there are exceptions.
604 On i386 ACCUMULATE_OUTGOING_ARGS can be enabled on demand, and
605 popping variants of functions exist as well.
607 ??? We may optimize similar to defer_pop above, but it is
608 probably not worthwhile.
610 ??? It will be worthwhile to enable combine_stack_adjustments even for
613 anti_adjust_stack (GEN_INT (n_popped));
616 /* Determine if the function identified by NAME and FNDECL is one with
617 special properties we wish to know about.
619 For example, if the function might return more than one time (setjmp), then
620 set RETURNS_TWICE to a nonzero value.
622 Similarly set IS_LONGJMP for if the function is in the longjmp family.
624 Set IS_MALLOC for any of the standard memory allocation functions which
625 allocate from the heap.
627 Set MAY_BE_ALLOCA for any memory allocation function that might allocate
628 space from the stack such as alloca. */
631 special_function_p (fndecl, returns_twice, is_longjmp, fork_or_exec,
632 is_malloc, may_be_alloca)
645 /* The function decl may have the `malloc' attribute. */
646 *is_malloc = fndecl && DECL_IS_MALLOC (fndecl);
649 && fndecl && DECL_NAME (fndecl)
650 && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
651 /* Exclude functions not at the file scope, or not `extern',
652 since they are not the magic functions we would otherwise
654 && DECL_CONTEXT (fndecl) == NULL_TREE && TREE_PUBLIC (fndecl))
656 char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
659 /* We assume that alloca will always be called by name. It
660 makes no sense to pass it as a pointer-to-function to
661 anything that does not understand its behavior. */
663 = (((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
665 && ! strcmp (name, "alloca"))
666 || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
668 && ! strcmp (name, "__builtin_alloca"))));
670 /* Disregard prefix _, __ or __x. */
673 if (name[1] == '_' && name[2] == 'x')
675 else if (name[1] == '_')
685 && (! strcmp (tname, "setjmp")
686 || ! strcmp (tname, "setjmp_syscall")))
688 && ! strcmp (tname, "sigsetjmp"))
690 && ! strcmp (tname, "savectx")));
692 && ! strcmp (tname, "siglongjmp"))
695 else if ((tname[0] == 'q' && tname[1] == 's'
696 && ! strcmp (tname, "qsetjmp"))
697 || (tname[0] == 'v' && tname[1] == 'f'
698 && ! strcmp (tname, "vfork")))
701 else if (tname[0] == 'l' && tname[1] == 'o'
702 && ! strcmp (tname, "longjmp"))
705 else if ((tname[0] == 'f' && tname[1] == 'o'
706 && ! strcmp (tname, "fork"))
707 /* Linux specific: __clone. check NAME to insist on the
708 leading underscores, to avoid polluting the ISO / POSIX
710 || (name[0] == '_' && name[1] == '_'
711 && ! strcmp (tname, "clone"))
712 || (tname[0] == 'e' && tname[1] == 'x' && tname[2] == 'e'
713 && tname[3] == 'c' && (tname[4] == 'l' || tname[4] == 'v')
715 || ((tname[5] == 'p' || tname[5] == 'e')
716 && tname[6] == '\0'))))
719 /* Do not add any more malloc-like functions to this list,
720 instead mark them as malloc functions using the malloc attribute.
721 Note, realloc is not suitable for attribute malloc since
722 it may return the same address across multiple calls.
723 C++ operator new is not suitable because it is not required
724 to return a unique pointer; indeed, the standard placement new
725 just returns its argument. */
726 else if (TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl))) == Pmode
727 && (! strcmp (tname, "malloc")
728 || ! strcmp (tname, "calloc")
729 || ! strcmp (tname, "strdup")))
734 /* Precompute all register parameters as described by ARGS, storing values
735 into fields within the ARGS array.
737 NUM_ACTUALS indicates the total number elements in the ARGS array.
739 Set REG_PARM_SEEN if we encounter a register parameter. */
742 precompute_register_parameters (num_actuals, args, reg_parm_seen)
744 struct arg_data *args;
751 for (i = 0; i < num_actuals; i++)
752 if (args[i].reg != 0 && ! args[i].pass_on_stack)
756 if (args[i].value == 0)
759 args[i].value = expand_expr (args[i].tree_value, NULL_RTX,
761 preserve_temp_slots (args[i].value);
764 /* ANSI doesn't require a sequence point here,
765 but PCC has one, so this will avoid some problems. */
769 /* If we are to promote the function arg to a wider mode,
772 if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
774 = convert_modes (args[i].mode,
775 TYPE_MODE (TREE_TYPE (args[i].tree_value)),
776 args[i].value, args[i].unsignedp);
778 /* If the value is expensive, and we are inside an appropriately
779 short loop, put the value into a pseudo and then put the pseudo
782 For small register classes, also do this if this call uses
783 register parameters. This is to avoid reload conflicts while
784 loading the parameters registers. */
786 if ((! (GET_CODE (args[i].value) == REG
787 || (GET_CODE (args[i].value) == SUBREG
788 && GET_CODE (SUBREG_REG (args[i].value)) == REG)))
789 && args[i].mode != BLKmode
790 && rtx_cost (args[i].value, SET) > 2
791 && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
792 || preserve_subexpressions_p ()))
793 args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
797 #ifdef REG_PARM_STACK_SPACE
799 /* The argument list is the property of the called routine and it
800 may clobber it. If the fixed area has been used for previous
801 parameters, we must save and restore it. */
803 save_fixed_argument_area (reg_parm_stack_space, argblock,
804 low_to_save, high_to_save)
805 int reg_parm_stack_space;
811 rtx save_area = NULL_RTX;
813 /* Compute the boundary of the that needs to be saved, if any. */
814 #ifdef ARGS_GROW_DOWNWARD
815 for (i = 0; i < reg_parm_stack_space + 1; i++)
817 for (i = 0; i < reg_parm_stack_space; i++)
820 if (i >= highest_outgoing_arg_in_use
821 || stack_usage_map[i] == 0)
824 if (*low_to_save == -1)
830 if (*low_to_save >= 0)
832 int num_to_save = *high_to_save - *low_to_save + 1;
833 enum machine_mode save_mode
834 = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
837 /* If we don't have the required alignment, must do this in BLKmode. */
838 if ((*low_to_save & (MIN (GET_MODE_SIZE (save_mode),
839 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
842 #ifdef ARGS_GROW_DOWNWARD
843 stack_area = gen_rtx_MEM (save_mode,
844 memory_address (save_mode,
845 plus_constant (argblock,
848 stack_area = gen_rtx_MEM (save_mode,
849 memory_address (save_mode,
850 plus_constant (argblock,
853 if (save_mode == BLKmode)
855 save_area = assign_stack_temp (BLKmode, num_to_save, 0);
856 /* Cannot use emit_block_move here because it can be done by a
857 library call which in turn gets into this place again and deadly
858 infinite recursion happens. */
859 move_by_pieces (validize_mem (save_area), stack_area, num_to_save,
864 save_area = gen_reg_rtx (save_mode);
865 emit_move_insn (save_area, stack_area);
872 restore_fixed_argument_area (save_area, argblock, high_to_save, low_to_save)
878 enum machine_mode save_mode = GET_MODE (save_area);
879 #ifdef ARGS_GROW_DOWNWARD
881 = gen_rtx_MEM (save_mode,
882 memory_address (save_mode,
883 plus_constant (argblock,
887 = gen_rtx_MEM (save_mode,
888 memory_address (save_mode,
889 plus_constant (argblock,
893 if (save_mode != BLKmode)
894 emit_move_insn (stack_area, save_area);
896 /* Cannot use emit_block_move here because it can be done by a library
897 call which in turn gets into this place again and deadly infinite
898 recursion happens. */
899 move_by_pieces (stack_area, validize_mem (save_area),
900 high_to_save - low_to_save + 1, PARM_BOUNDARY);
904 /* If any elements in ARGS refer to parameters that are to be passed in
905 registers, but not in memory, and whose alignment does not permit a
906 direct copy into registers. Copy the values into a group of pseudos
907 which we will later copy into the appropriate hard registers.
909 Pseudos for each unaligned argument will be stored into the array
910 args[argnum].aligned_regs. The caller is responsible for deallocating
911 the aligned_regs array if it is nonzero. */
914 store_unaligned_arguments_into_pseudos (args, num_actuals)
915 struct arg_data *args;
920 for (i = 0; i < num_actuals; i++)
921 if (args[i].reg != 0 && ! args[i].pass_on_stack
922 && args[i].mode == BLKmode
923 && (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
924 < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
926 int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
927 int big_endian_correction = 0;
929 args[i].n_aligned_regs
930 = args[i].partial ? args[i].partial
931 : (bytes + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
933 args[i].aligned_regs = (rtx *) xmalloc (sizeof (rtx)
934 * args[i].n_aligned_regs);
936 /* Structures smaller than a word are aligned to the least
937 significant byte (to the right). On a BYTES_BIG_ENDIAN machine,
938 this means we must skip the empty high order bytes when
939 calculating the bit offset. */
940 if (BYTES_BIG_ENDIAN && bytes < UNITS_PER_WORD)
941 big_endian_correction = (BITS_PER_WORD - (bytes * BITS_PER_UNIT));
943 for (j = 0; j < args[i].n_aligned_regs; j++)
945 rtx reg = gen_reg_rtx (word_mode);
946 rtx word = operand_subword_force (args[i].value, j, BLKmode);
947 int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD);
948 int bitalign = TYPE_ALIGN (TREE_TYPE (args[i].tree_value));
950 args[i].aligned_regs[j] = reg;
952 /* There is no need to restrict this code to loading items
953 in TYPE_ALIGN sized hunks. The bitfield instructions can
954 load up entire word sized registers efficiently.
956 ??? This may not be needed anymore.
957 We use to emit a clobber here but that doesn't let later
958 passes optimize the instructions we emit. By storing 0 into
959 the register later passes know the first AND to zero out the
960 bitfield being set in the register is unnecessary. The store
961 of 0 will be deleted as will at least the first AND. */
963 emit_move_insn (reg, const0_rtx);
965 bytes -= bitsize / BITS_PER_UNIT;
966 store_bit_field (reg, bitsize, big_endian_correction, word_mode,
967 extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
968 word_mode, word_mode, bitalign,
970 bitalign, BITS_PER_WORD);
975 /* Fill in ARGS_SIZE and ARGS array based on the parameters found in
978 NUM_ACTUALS is the total number of parameters.
980 N_NAMED_ARGS is the total number of named arguments.
982 FNDECL is the tree code for the target of this call (if known)
984 ARGS_SO_FAR holds state needed by the target to know where to place
987 REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
988 for arguments which are passed in registers.
990 OLD_STACK_LEVEL is a pointer to an rtx which olds the old stack level
991 and may be modified by this routine.
993 OLD_PENDING_ADJ, MUST_PREALLOCATE and IS_CONST are pointers to integer
994 flags which may may be modified by this routine. */
997 initialize_argument_information (num_actuals, args, args_size, n_named_args,
998 actparms, fndecl, args_so_far,
999 reg_parm_stack_space, old_stack_level,
1000 old_pending_adj, must_preallocate, is_const,
1002 int num_actuals ATTRIBUTE_UNUSED;
1003 struct arg_data *args;
1004 struct args_size *args_size;
1005 int n_named_args ATTRIBUTE_UNUSED;
1008 CUMULATIVE_ARGS *args_so_far;
1009 int reg_parm_stack_space;
1010 rtx *old_stack_level;
1011 int *old_pending_adj;
1012 int *must_preallocate;
1014 int ecf_flags ATTRIBUTE_UNUSED;
1016 /* 1 if scanning parms front to back, -1 if scanning back to front. */
1019 /* Count arg position in order args appear. */
1022 struct args_size alignment_pad;
1026 args_size->constant = 0;
1029 /* In this loop, we consider args in the order they are written.
1030 We fill up ARGS from the front or from the back if necessary
1031 so that in any case the first arg to be pushed ends up at the front. */
1033 if (PUSH_ARGS_REVERSED)
1035 i = num_actuals - 1, inc = -1;
1036 /* In this case, must reverse order of args
1037 so that we compute and push the last arg first. */
1044 /* I counts args in order (to be) pushed; ARGPOS counts in order written. */
1045 for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
1047 tree type = TREE_TYPE (TREE_VALUE (p));
1049 enum machine_mode mode;
1051 args[i].tree_value = TREE_VALUE (p);
1053 /* Replace erroneous argument with constant zero. */
1054 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
1055 args[i].tree_value = integer_zero_node, type = integer_type_node;
1057 /* If TYPE is a transparent union, pass things the way we would
1058 pass the first field of the union. We have already verified that
1059 the modes are the same. */
1060 if (TYPE_TRANSPARENT_UNION (type))
1061 type = TREE_TYPE (TYPE_FIELDS (type));
1063 /* Decide where to pass this arg.
1065 args[i].reg is nonzero if all or part is passed in registers.
1067 args[i].partial is nonzero if part but not all is passed in registers,
1068 and the exact value says how many words are passed in registers.
1070 args[i].pass_on_stack is nonzero if the argument must at least be
1071 computed on the stack. It may then be loaded back into registers
1072 if args[i].reg is nonzero.
1074 These decisions are driven by the FUNCTION_... macros and must agree
1075 with those made by function.c. */
1077 /* See if this argument should be passed by invisible reference. */
1078 if ((TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1079 && contains_placeholder_p (TYPE_SIZE (type)))
1080 || TREE_ADDRESSABLE (type)
1081 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
1082 || FUNCTION_ARG_PASS_BY_REFERENCE (*args_so_far, TYPE_MODE (type),
1083 type, argpos < n_named_args)
1087 /* If we're compiling a thunk, pass through invisible
1088 references instead of making a copy. */
1089 if (current_function_is_thunk
1090 #ifdef FUNCTION_ARG_CALLEE_COPIES
1091 || (FUNCTION_ARG_CALLEE_COPIES (*args_so_far, TYPE_MODE (type),
1092 type, argpos < n_named_args)
1093 /* If it's in a register, we must make a copy of it too. */
1094 /* ??? Is this a sufficient test? Is there a better one? */
1095 && !(TREE_CODE (args[i].tree_value) == VAR_DECL
1096 && REG_P (DECL_RTL (args[i].tree_value)))
1097 && ! TREE_ADDRESSABLE (type))
1101 /* C++ uses a TARGET_EXPR to indicate that we want to make a
1102 new object from the argument. If we are passing by
1103 invisible reference, the callee will do that for us, so we
1104 can strip off the TARGET_EXPR. This is not always safe,
1105 but it is safe in the only case where this is a useful
1106 optimization; namely, when the argument is a plain object.
1107 In that case, the frontend is just asking the backend to
1108 make a bitwise copy of the argument. */
1110 if (TREE_CODE (args[i].tree_value) == TARGET_EXPR
1111 && (DECL_P (TREE_OPERAND (args[i].tree_value, 1)))
1112 && ! REG_P (DECL_RTL (TREE_OPERAND (args[i].tree_value, 1))))
1113 args[i].tree_value = TREE_OPERAND (args[i].tree_value, 1);
1115 args[i].tree_value = build1 (ADDR_EXPR,
1116 build_pointer_type (type),
1117 args[i].tree_value);
1118 type = build_pointer_type (type);
1122 /* We make a copy of the object and pass the address to the
1123 function being called. */
1126 if (!COMPLETE_TYPE_P (type)
1127 || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
1128 || (flag_stack_check && ! STACK_CHECK_BUILTIN
1129 && (0 < compare_tree_int (TYPE_SIZE_UNIT (type),
1130 STACK_CHECK_MAX_VAR_SIZE))))
1132 /* This is a variable-sized object. Make space on the stack
1134 rtx size_rtx = expr_size (TREE_VALUE (p));
1136 if (*old_stack_level == 0)
1138 emit_stack_save (SAVE_BLOCK, old_stack_level, NULL_RTX);
1139 *old_pending_adj = pending_stack_adjust;
1140 pending_stack_adjust = 0;
1143 copy = gen_rtx_MEM (BLKmode,
1144 allocate_dynamic_stack_space (size_rtx,
1146 TYPE_ALIGN (type)));
1150 int size = int_size_in_bytes (type);
1151 copy = assign_stack_temp (TYPE_MODE (type), size, 0);
1154 MEM_SET_IN_STRUCT_P (copy, AGGREGATE_TYPE_P (type));
1156 store_expr (args[i].tree_value, copy, 0);
1159 args[i].tree_value = build1 (ADDR_EXPR,
1160 build_pointer_type (type),
1161 make_tree (type, copy));
1162 type = build_pointer_type (type);
1166 mode = TYPE_MODE (type);
1167 unsignedp = TREE_UNSIGNED (type);
1169 #ifdef PROMOTE_FUNCTION_ARGS
1170 mode = promote_mode (type, mode, &unsignedp, 1);
1173 args[i].unsignedp = unsignedp;
1174 args[i].mode = mode;
1176 #ifdef FUNCTION_INCOMING_ARG
1177 /* If this is a sibling call and the machine has register windows, the
1178 register window has to be unwinded before calling the routine, so
1179 arguments have to go into the incoming registers. */
1180 if (ecf_flags & ECF_SIBCALL)
1181 args[i].reg = FUNCTION_INCOMING_ARG (*args_so_far, mode, type,
1182 argpos < n_named_args);
1185 args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
1186 argpos < n_named_args);
1188 #ifdef FUNCTION_ARG_PARTIAL_NREGS
1191 = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
1192 argpos < n_named_args);
1195 args[i].pass_on_stack = MUST_PASS_IN_STACK (mode, type);
1197 /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
1198 it means that we are to pass this arg in the register(s) designated
1199 by the PARALLEL, but also to pass it in the stack. */
1200 if (args[i].reg && GET_CODE (args[i].reg) == PARALLEL
1201 && XEXP (XVECEXP (args[i].reg, 0, 0), 0) == 0)
1202 args[i].pass_on_stack = 1;
1204 /* If this is an addressable type, we must preallocate the stack
1205 since we must evaluate the object into its final location.
1207 If this is to be passed in both registers and the stack, it is simpler
1209 if (TREE_ADDRESSABLE (type)
1210 || (args[i].pass_on_stack && args[i].reg != 0))
1211 *must_preallocate = 1;
1213 /* If this is an addressable type, we cannot pre-evaluate it. Thus,
1214 we cannot consider this function call constant. */
1215 if (TREE_ADDRESSABLE (type))
1218 /* Compute the stack-size of this argument. */
1219 if (args[i].reg == 0 || args[i].partial != 0
1220 || reg_parm_stack_space > 0
1221 || args[i].pass_on_stack)
1222 locate_and_pad_parm (mode, type,
1223 #ifdef STACK_PARMS_IN_REG_PARM_AREA
1228 fndecl, args_size, &args[i].offset,
1229 &args[i].size, &alignment_pad);
1231 #ifndef ARGS_GROW_DOWNWARD
1232 args[i].slot_offset = *args_size;
1235 args[i].alignment_pad = alignment_pad;
1237 /* If a part of the arg was put into registers,
1238 don't include that part in the amount pushed. */
1239 if (reg_parm_stack_space == 0 && ! args[i].pass_on_stack)
1240 args[i].size.constant -= ((args[i].partial * UNITS_PER_WORD)
1241 / (PARM_BOUNDARY / BITS_PER_UNIT)
1242 * (PARM_BOUNDARY / BITS_PER_UNIT));
1244 /* Update ARGS_SIZE, the total stack space for args so far. */
1246 args_size->constant += args[i].size.constant;
1247 if (args[i].size.var)
1249 ADD_PARM_SIZE (*args_size, args[i].size.var);
1252 /* Since the slot offset points to the bottom of the slot,
1253 we must record it after incrementing if the args grow down. */
1254 #ifdef ARGS_GROW_DOWNWARD
1255 args[i].slot_offset = *args_size;
1257 args[i].slot_offset.constant = -args_size->constant;
1259 SUB_PARM_SIZE (args[i].slot_offset, args_size->var);
1262 /* Increment ARGS_SO_FAR, which has info about which arg-registers
1263 have been used, etc. */
1265 FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
1266 argpos < n_named_args);
1270 /* Update ARGS_SIZE to contain the total size for the argument block.
1271 Return the original constant component of the argument block's size.
1273 REG_PARM_STACK_SPACE holds the number of bytes of stack space reserved
1274 for arguments passed in registers. */
1277 compute_argument_block_size (reg_parm_stack_space, args_size,
1278 preferred_stack_boundary)
1279 int reg_parm_stack_space;
1280 struct args_size *args_size;
1281 int preferred_stack_boundary ATTRIBUTE_UNUSED;
1283 int unadjusted_args_size = args_size->constant;
1285 /* For accumulate outgoing args mode we don't need to align, since the frame
1286 will be already aligned. Align to STACK_BOUNDARY in order to prevent
1287 backends from generating missaligned frame sizes. */
1288 #ifdef STACK_BOUNDARY
1289 if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
1290 preferred_stack_boundary = STACK_BOUNDARY;
1293 /* Compute the actual size of the argument block required. The variable
1294 and constant sizes must be combined, the size may have to be rounded,
1295 and there may be a minimum required size. */
1299 args_size->var = ARGS_SIZE_TREE (*args_size);
1300 args_size->constant = 0;
1302 #ifdef PREFERRED_STACK_BOUNDARY
1303 preferred_stack_boundary /= BITS_PER_UNIT;
1304 if (preferred_stack_boundary > 1)
1306 /* We don't handle this case yet. To handle it correctly we have
1307 to add the delta, round and substract the delta.
1308 Currently no machine description requires this support. */
1309 if (stack_pointer_delta & (preferred_stack_boundary - 1))
1311 args_size->var = round_up (args_size->var, preferred_stack_boundary);
1315 if (reg_parm_stack_space > 0)
1318 = size_binop (MAX_EXPR, args_size->var,
1319 ssize_int (reg_parm_stack_space));
1321 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1322 /* The area corresponding to register parameters is not to count in
1323 the size of the block we need. So make the adjustment. */
1325 = size_binop (MINUS_EXPR, args_size->var,
1326 ssize_int (reg_parm_stack_space));
1332 #ifdef PREFERRED_STACK_BOUNDARY
1333 preferred_stack_boundary /= BITS_PER_UNIT;
1334 if (preferred_stack_boundary < 1)
1335 preferred_stack_boundary = 1;
1336 args_size->constant = (((args_size->constant
1337 + stack_pointer_delta
1338 + preferred_stack_boundary - 1)
1339 / preferred_stack_boundary
1340 * preferred_stack_boundary)
1341 - stack_pointer_delta);
1344 args_size->constant = MAX (args_size->constant,
1345 reg_parm_stack_space);
1347 #ifdef MAYBE_REG_PARM_STACK_SPACE
1348 if (reg_parm_stack_space == 0)
1349 args_size->constant = 0;
1352 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1353 args_size->constant -= reg_parm_stack_space;
1356 return unadjusted_args_size;
1359 /* Precompute parameters as needed for a function call.
1361 IS_CONST indicates the target function is a pure function.
1363 MUST_PREALLOCATE indicates that we must preallocate stack space for
1364 any stack arguments.
1366 NUM_ACTUALS is the number of arguments.
1368 ARGS is an array containing information for each argument; this routine
1369 fills in the INITIAL_VALUE and VALUE fields for each precomputed argument.
1371 ARGS_SIZE contains information about the size of the arg list. */
1374 precompute_arguments (is_const, must_preallocate, num_actuals, args, args_size)
1376 int must_preallocate;
1378 struct arg_data *args;
1379 struct args_size *args_size;
1383 /* If this function call is cse'able, precompute all the parameters.
1384 Note that if the parameter is constructed into a temporary, this will
1385 cause an additional copy because the parameter will be constructed
1386 into a temporary location and then copied into the outgoing arguments.
1387 If a parameter contains a call to alloca and this function uses the
1388 stack, precompute the parameter. */
1390 /* If we preallocated the stack space, and some arguments must be passed
1391 on the stack, then we must precompute any parameter which contains a
1392 function call which will store arguments on the stack.
1393 Otherwise, evaluating the parameter may clobber previous parameters
1394 which have already been stored into the stack. */
1396 for (i = 0; i < num_actuals; i++)
1398 || ((args_size->var != 0 || args_size->constant != 0)
1399 && calls_function (args[i].tree_value, 1))
1400 || (must_preallocate
1401 && (args_size->var != 0 || args_size->constant != 0)
1402 && calls_function (args[i].tree_value, 0)))
1404 /* If this is an addressable type, we cannot pre-evaluate it. */
1405 if (TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)))
1411 = expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
1413 preserve_temp_slots (args[i].value);
1416 /* ANSI doesn't require a sequence point here,
1417 but PCC has one, so this will avoid some problems. */
1420 args[i].initial_value = args[i].value
1421 = protect_from_queue (args[i].value, 0);
1423 if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) != args[i].mode)
1426 = convert_modes (args[i].mode,
1427 TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1428 args[i].value, args[i].unsignedp);
1429 #ifdef PROMOTE_FOR_CALL_ONLY
1430 /* CSE will replace this only if it contains args[i].value
1431 pseudo, so convert it down to the declared mode using
1433 if (GET_CODE (args[i].value) == REG
1434 && GET_MODE_CLASS (args[i].mode) == MODE_INT)
1436 args[i].initial_value
1437 = gen_rtx_SUBREG (TYPE_MODE (TREE_TYPE (args[i].tree_value)),
1439 SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
1440 SUBREG_PROMOTED_UNSIGNED_P (args[i].initial_value)
1441 = args[i].unsignedp;
1448 /* Given the current state of MUST_PREALLOCATE and information about
1449 arguments to a function call in NUM_ACTUALS, ARGS and ARGS_SIZE,
1450 compute and return the final value for MUST_PREALLOCATE. */
1453 finalize_must_preallocate (must_preallocate, num_actuals, args, args_size)
1454 int must_preallocate;
1456 struct arg_data *args;
1457 struct args_size *args_size;
1459 /* See if we have or want to preallocate stack space.
1461 If we would have to push a partially-in-regs parm
1462 before other stack parms, preallocate stack space instead.
1464 If the size of some parm is not a multiple of the required stack
1465 alignment, we must preallocate.
1467 If the total size of arguments that would otherwise create a copy in
1468 a temporary (such as a CALL) is more than half the total argument list
1469 size, preallocation is faster.
1471 Another reason to preallocate is if we have a machine (like the m88k)
1472 where stack alignment is required to be maintained between every
1473 pair of insns, not just when the call is made. However, we assume here
1474 that such machines either do not have push insns (and hence preallocation
1475 would occur anyway) or the problem is taken care of with
1478 if (! must_preallocate)
1480 int partial_seen = 0;
1481 int copy_to_evaluate_size = 0;
1484 for (i = 0; i < num_actuals && ! must_preallocate; i++)
1486 if (args[i].partial > 0 && ! args[i].pass_on_stack)
1488 else if (partial_seen && args[i].reg == 0)
1489 must_preallocate = 1;
1491 if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1492 && (TREE_CODE (args[i].tree_value) == CALL_EXPR
1493 || TREE_CODE (args[i].tree_value) == TARGET_EXPR
1494 || TREE_CODE (args[i].tree_value) == COND_EXPR
1495 || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
1496 copy_to_evaluate_size
1497 += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
1500 if (copy_to_evaluate_size * 2 >= args_size->constant
1501 && args_size->constant > 0)
1502 must_preallocate = 1;
1504 return must_preallocate;
1507 /* If we preallocated stack space, compute the address of each argument
1508 and store it into the ARGS array.
1510 We need not ensure it is a valid memory address here; it will be
1511 validized when it is used.
1513 ARGBLOCK is an rtx for the address of the outgoing arguments. */
1516 compute_argument_addresses (args, argblock, num_actuals)
1517 struct arg_data *args;
1523 rtx arg_reg = argblock;
1524 int i, arg_offset = 0;
1526 if (GET_CODE (argblock) == PLUS)
1527 arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));
1529 for (i = 0; i < num_actuals; i++)
1531 rtx offset = ARGS_SIZE_RTX (args[i].offset);
1532 rtx slot_offset = ARGS_SIZE_RTX (args[i].slot_offset);
1535 /* Skip this parm if it will not be passed on the stack. */
1536 if (! args[i].pass_on_stack && args[i].reg != 0)
1539 if (GET_CODE (offset) == CONST_INT)
1540 addr = plus_constant (arg_reg, INTVAL (offset));
1542 addr = gen_rtx_PLUS (Pmode, arg_reg, offset);
1544 addr = plus_constant (addr, arg_offset);
1545 args[i].stack = gen_rtx_MEM (args[i].mode, addr);
1548 AGGREGATE_TYPE_P (TREE_TYPE (args[i].tree_value)));
1550 if (GET_CODE (slot_offset) == CONST_INT)
1551 addr = plus_constant (arg_reg, INTVAL (slot_offset));
1553 addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset);
1555 addr = plus_constant (addr, arg_offset);
1556 args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
1561 /* Given a FNDECL and EXP, return an rtx suitable for use as a target address
1562 in a call instruction.
1564 FNDECL is the tree node for the target function. For an indirect call
1565 FNDECL will be NULL_TREE.
1567 EXP is the CALL_EXPR for this call. */
1570 rtx_for_function_call (fndecl, exp)
1576 /* Get the function to call, in the form of RTL. */
1579 /* If this is the first use of the function, see if we need to
1580 make an external definition for it. */
1581 if (! TREE_USED (fndecl))
1583 assemble_external (fndecl);
1584 TREE_USED (fndecl) = 1;
1587 /* Get a SYMBOL_REF rtx for the function address. */
1588 funexp = XEXP (DECL_RTL (fndecl), 0);
1591 /* Generate an rtx (probably a pseudo-register) for the address. */
1596 expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
1597 pop_temp_slots (); /* FUNEXP can't be BLKmode */
1599 /* Check the function is executable. */
1600 if (current_function_check_memory_usage)
1602 #ifdef POINTERS_EXTEND_UNSIGNED
1603 /* It might be OK to convert funexp in place, but there's
1604 a lot going on between here and when it happens naturally
1605 that this seems safer. */
1606 funaddr = convert_memory_address (Pmode, funexp);
1608 emit_library_call (chkr_check_exec_libfunc, 1,
1617 /* Do the register loads required for any wholly-register parms or any
1618 parms which are passed both on the stack and in a register. Their
1619 expressions were already evaluated.
1621 Mark all register-parms as living through the call, putting these USE
1622 insns in the CALL_INSN_FUNCTION_USAGE field. */
1625 load_register_parameters (args, num_actuals, call_fusage)
1626 struct arg_data *args;
1632 #ifdef LOAD_ARGS_REVERSED
1633 for (i = num_actuals - 1; i >= 0; i--)
1635 for (i = 0; i < num_actuals; i++)
1638 rtx reg = args[i].reg;
1639 int partial = args[i].partial;
1644 /* Set to non-negative if must move a word at a time, even if just
1645 one word (e.g, partial == 1 && mode == DFmode). Set to -1 if
1646 we just use a normal move insn. This value can be zero if the
1647 argument is a zero size structure with no fields. */
1648 nregs = (partial ? partial
1649 : (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
1650 ? ((int_size_in_bytes (TREE_TYPE (args[i].tree_value))
1651 + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD)
1654 /* Handle calls that pass values in multiple non-contiguous
1655 locations. The Irix 6 ABI has examples of this. */
1657 if (GET_CODE (reg) == PARALLEL)
1658 emit_group_load (reg, args[i].value,
1659 int_size_in_bytes (TREE_TYPE (args[i].tree_value)),
1660 TYPE_ALIGN (TREE_TYPE (args[i].tree_value)));
1662 /* If simple case, just do move. If normal partial, store_one_arg
1663 has already loaded the register for us. In all other cases,
1664 load the register(s) from memory. */
1666 else if (nregs == -1)
1667 emit_move_insn (reg, args[i].value);
1669 /* If we have pre-computed the values to put in the registers in
1670 the case of non-aligned structures, copy them in now. */
1672 else if (args[i].n_aligned_regs != 0)
1673 for (j = 0; j < args[i].n_aligned_regs; j++)
1674 emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j),
1675 args[i].aligned_regs[j]);
1677 else if (partial == 0 || args[i].pass_on_stack)
1678 move_block_to_reg (REGNO (reg),
1679 validize_mem (args[i].value), nregs,
1682 /* Handle calls that pass values in multiple non-contiguous
1683 locations. The Irix 6 ABI has examples of this. */
1684 if (GET_CODE (reg) == PARALLEL)
1685 use_group_regs (call_fusage, reg);
1686 else if (nregs == -1)
1687 use_reg (call_fusage, reg);
1689 use_regs (call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
1694 /* Generate all the code for a function call
1695 and return an rtx for its value.
1696 Store the value in TARGET (specified as an rtx) if convenient.
1697 If the value is stored in TARGET then TARGET is returned.
1698 If IGNORE is nonzero, then we ignore the value of the function call. */
1701 expand_call (exp, target, ignore)
1706 /* Nonzero if we are currently expanding a call. */
1707 static int currently_expanding_call = 0;
1709 /* List of actual parameters. */
1710 tree actparms = TREE_OPERAND (exp, 1);
1711 /* RTX for the function to be called. */
1713 /* Sequence of insns to perform a tail recursive "call". */
1714 rtx tail_recursion_insns = NULL_RTX;
1715 /* Sequence of insns to perform a normal "call". */
1716 rtx normal_call_insns = NULL_RTX;
1717 /* Sequence of insns to perform a tail recursive "call". */
1718 rtx tail_call_insns = NULL_RTX;
1719 /* Data type of the function. */
1721 /* Declaration of the function being called,
1722 or 0 if the function is computed (not known by name). */
1730 /* Register in which non-BLKmode value will be returned,
1731 or 0 if no value or if value is BLKmode. */
1733 /* Address where we should return a BLKmode value;
1734 0 if value not BLKmode. */
1735 rtx structure_value_addr = 0;
1736 /* Nonzero if that address is being passed by treating it as
1737 an extra, implicit first parameter. Otherwise,
1738 it is passed by being copied directly into struct_value_rtx. */
1739 int structure_value_addr_parm = 0;
1740 /* Size of aggregate value wanted, or zero if none wanted
1741 or if we are using the non-reentrant PCC calling convention
1742 or expecting the value in registers. */
1743 HOST_WIDE_INT struct_value_size = 0;
1744 /* Nonzero if called function returns an aggregate in memory PCC style,
1745 by returning the address of where to find it. */
1746 int pcc_struct_value = 0;
1748 /* Number of actual parameters in this call, including struct value addr. */
1750 /* Number of named args. Args after this are anonymous ones
1751 and they must all go on the stack. */
1754 /* Vector of information about each argument.
1755 Arguments are numbered in the order they will be pushed,
1756 not the order they are written. */
1757 struct arg_data *args;
1759 /* Total size in bytes of all the stack-parms scanned so far. */
1760 struct args_size args_size;
1761 /* Size of arguments before any adjustments (such as rounding). */
1762 int unadjusted_args_size;
1763 /* Data on reg parms scanned so far. */
1764 CUMULATIVE_ARGS args_so_far;
1765 /* Nonzero if a reg parm has been scanned. */
1767 /* Nonzero if this is an indirect function call. */
1769 /* Nonzero if we must avoid push-insns in the args for this call.
1770 If stack space is allocated for register parameters, but not by the
1771 caller, then it is preallocated in the fixed part of the stack frame.
1772 So the entire argument block must then be preallocated (i.e., we
1773 ignore PUSH_ROUNDING in that case). */
1775 int must_preallocate = !PUSH_ARGS;
1777 /* Size of the stack reserved for parameter registers. */
1778 int reg_parm_stack_space = 0;
1780 /* Address of space preallocated for stack parms
1781 (on machines that lack push insns), or 0 if space not preallocated. */
1784 /* Nonzero if it is plausible that this is a call to alloca. */
1786 /* Nonzero if this is a call to malloc or a related function. */
1788 /* Nonzero if this is a call to setjmp or a related function. */
1790 /* Nonzero if this is a call to `longjmp'. */
1792 /* Nonzero if this is a syscall that makes a new process in the image of
1795 /* Nonzero if this is a call to an inline function. */
1796 int is_integrable = 0;
1797 /* Nonzero if this is a call to a `const' function.
1798 Note that only explicitly named functions are handled as `const' here. */
1800 /* Nonzero if this is a call to a `volatile' function. */
1801 int is_volatile = 0;
1802 /* Nonzero if this is a call to a function that won't throw an exception. */
1803 int nothrow = TREE_NOTHROW (exp);
1804 #ifdef REG_PARM_STACK_SPACE
1805 /* Define the boundary of the register parm stack space that needs to be
1807 int low_to_save = -1, high_to_save;
1808 rtx save_area = 0; /* Place that it is saved */
1811 int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
1812 char *initial_stack_usage_map = stack_usage_map;
1813 int old_stack_arg_under_construction = 0;
1815 rtx old_stack_level = 0;
1816 int old_pending_adj = 0;
1817 int old_inhibit_defer_pop = inhibit_defer_pop;
1818 int old_stack_allocated;
1822 int preferred_stack_boundary;
1824 /* The value of the function call can be put in a hard register. But
1825 if -fcheck-memory-usage, code which invokes functions (and thus
1826 damages some hard registers) can be inserted before using the value.
1827 So, target is always a pseudo-register in that case. */
1828 if (current_function_check_memory_usage)
1831 /* See if we can find a DECL-node for the actual function.
1832 As a result, decide whether this is a call to an integrable function. */
1834 p = TREE_OPERAND (exp, 0);
1835 if (TREE_CODE (p) == ADDR_EXPR)
1837 fndecl = TREE_OPERAND (p, 0);
1838 if (TREE_CODE (fndecl) != FUNCTION_DECL)
1843 && fndecl != current_function_decl
1844 && DECL_INLINE (fndecl)
1845 && DECL_SAVED_INSNS (fndecl)
1846 && DECL_SAVED_INSNS (fndecl)->inlinable)
1848 else if (! TREE_ADDRESSABLE (fndecl))
1850 /* In case this function later becomes inlinable,
1851 record that there was already a non-inline call to it.
1853 Use abstraction instead of setting TREE_ADDRESSABLE
1855 if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
1858 warning_with_decl (fndecl, "can't inline call to `%s'");
1859 warning ("called from here");
1861 mark_addressable (fndecl);
1864 if (TREE_READONLY (fndecl) && ! TREE_THIS_VOLATILE (fndecl)
1865 && TYPE_MODE (TREE_TYPE (exp)) != VOIDmode)
1868 if (TREE_THIS_VOLATILE (fndecl))
1871 if (TREE_NOTHROW (fndecl))
1876 /* If we don't have specific function to call, see if we have a
1877 constant or `noreturn' function from the type. */
1880 is_const = TREE_READONLY (TREE_TYPE (TREE_TYPE (p)));
1881 is_volatile = TREE_THIS_VOLATILE (TREE_TYPE (TREE_TYPE (p)));
1884 #ifdef REG_PARM_STACK_SPACE
1885 #ifdef MAYBE_REG_PARM_STACK_SPACE
1886 reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
1888 reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
1892 #ifndef OUTGOING_REG_PARM_STACK_SPACE
1893 if (reg_parm_stack_space > 0 && PUSH_ARGS)
1894 must_preallocate = 1;
1897 /* Warn if this value is an aggregate type,
1898 regardless of which calling convention we are using for it. */
1899 if (warn_aggregate_return && AGGREGATE_TYPE_P (TREE_TYPE (exp)))
1900 warning ("function call has aggregate value");
1902 /* Set up a place to return a structure. */
1904 /* Cater to broken compilers. */
1905 if (aggregate_value_p (exp))
1907 /* This call returns a big structure. */
1910 #ifdef PCC_STATIC_STRUCT_RETURN
1912 pcc_struct_value = 1;
1913 /* Easier than making that case work right. */
1916 /* In case this is a static function, note that it has been
1918 if (! TREE_ADDRESSABLE (fndecl))
1919 mark_addressable (fndecl);
1923 #else /* not PCC_STATIC_STRUCT_RETURN */
1925 struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
1927 if (target && GET_CODE (target) == MEM)
1928 structure_value_addr = XEXP (target, 0);
1931 /* Assign a temporary to hold the value. */
1934 /* For variable-sized objects, we must be called with a target
1935 specified. If we were to allocate space on the stack here,
1936 we would have no way of knowing when to free it. */
1938 if (struct_value_size < 0)
1941 /* This DECL is just something to feed to mark_addressable;
1942 it doesn't get pushed. */
1943 d = build_decl (VAR_DECL, NULL_TREE, TREE_TYPE (exp));
1944 DECL_RTL (d) = assign_temp (TREE_TYPE (exp), 1, 0, 1);
1945 mark_addressable (d);
1946 mark_temp_addr_taken (DECL_RTL (d));
1947 structure_value_addr = XEXP (DECL_RTL (d), 0);
1952 #endif /* not PCC_STATIC_STRUCT_RETURN */
1955 /* If called function is inline, try to integrate it. */
1961 before_call = get_last_insn ();
1963 temp = expand_inline_function (fndecl, actparms, target,
1964 ignore, TREE_TYPE (exp),
1965 structure_value_addr);
1967 /* If inlining succeeded, return. */
1968 if (temp != (rtx) (HOST_WIDE_INT) -1)
1970 if (ACCUMULATE_OUTGOING_ARGS)
1972 /* If the outgoing argument list must be preserved, push
1973 the stack before executing the inlined function if it
1976 for (i = reg_parm_stack_space - 1; i >= 0; i--)
1977 if (i < highest_outgoing_arg_in_use && stack_usage_map[i] != 0)
1980 if (stack_arg_under_construction || i >= 0)
1983 = before_call ? NEXT_INSN (before_call) : get_insns ();
1984 rtx insn = NULL_RTX, seq;
1986 /* Look for a call in the inline function code.
1987 If DECL_SAVED_INSNS (fndecl)->outgoing_args_size is
1988 nonzero then there is a call and it is not necessary
1989 to scan the insns. */
1991 if (DECL_SAVED_INSNS (fndecl)->outgoing_args_size == 0)
1992 for (insn = first_insn; insn; insn = NEXT_INSN (insn))
1993 if (GET_CODE (insn) == CALL_INSN)
1998 /* Reserve enough stack space so that the largest
1999 argument list of any function call in the inline
2000 function does not overlap the argument list being
2001 evaluated. This is usually an overestimate because
2002 allocate_dynamic_stack_space reserves space for an
2003 outgoing argument list in addition to the requested
2004 space, but there is no way to ask for stack space such
2005 that an argument list of a certain length can be
2008 Add the stack space reserved for register arguments, if
2009 any, in the inline function. What is really needed is the
2010 largest value of reg_parm_stack_space in the inline
2011 function, but that is not available. Using the current
2012 value of reg_parm_stack_space is wrong, but gives
2013 correct results on all supported machines. */
2015 int adjust = (DECL_SAVED_INSNS (fndecl)->outgoing_args_size
2016 + reg_parm_stack_space);
2019 emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2020 allocate_dynamic_stack_space (GEN_INT (adjust),
2021 NULL_RTX, BITS_PER_UNIT);
2024 emit_insns_before (seq, first_insn);
2025 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
2030 /* If the result is equivalent to TARGET, return TARGET to simplify
2031 checks in store_expr. They can be equivalent but not equal in the
2032 case of a function that returns BLKmode. */
2033 if (temp != target && rtx_equal_p (temp, target))
2038 /* If inlining failed, mark FNDECL as needing to be compiled
2039 separately after all. If function was declared inline,
2041 if (DECL_INLINE (fndecl) && warn_inline && !flag_no_inline
2042 && optimize > 0 && ! TREE_ADDRESSABLE (fndecl))
2044 warning_with_decl (fndecl, "inlining failed in call to `%s'");
2045 warning ("called from here");
2047 mark_addressable (fndecl);
2050 currently_expanding_call++;
2052 /* Tail calls can make things harder to debug, and we're traditionally
2053 pushed these optimizations into -O2. Don't try if we're already
2054 expanding a call, as that means we're an argument. Similarly, if
2055 there's pending loops or cleanups we know there's code to follow
2059 if (flag_optimize_sibling_calls
2060 && currently_expanding_call == 1
2061 && stmt_loop_nest_empty ()
2062 && ! any_pending_cleanups (1))
2064 tree new_actparms = NULL_TREE;
2066 /* Ok, we're going to give the tail call the old college try.
2067 This means we're going to evaluate the function arguments
2068 up to three times. There are two degrees of badness we can
2069 encounter, those that can be unsaved and those that can't.
2070 (See unsafe_for_reeval commentary for details.)
2072 Generate a new argument list. Pass safe arguments through
2073 unchanged. For the easy badness wrap them in UNSAVE_EXPRs.
2074 For hard badness, evaluate them now and put their resulting
2075 rtx in a temporary VAR_DECL. */
2077 for (p = actparms; p; p = TREE_CHAIN (p))
2078 switch (unsafe_for_reeval (TREE_VALUE (p)))
2081 new_actparms = tree_cons (TREE_PURPOSE (p), TREE_VALUE (p),
2085 case 1: /* Mildly unsafe. */
2086 new_actparms = tree_cons (TREE_PURPOSE (p),
2087 unsave_expr (TREE_VALUE (p)),
2091 case 2: /* Wildly unsafe. */
2093 tree var = build_decl (VAR_DECL, NULL_TREE,
2094 TREE_TYPE (TREE_VALUE (p)));
2095 DECL_RTL (var) = expand_expr (TREE_VALUE (p), NULL_RTX,
2096 VOIDmode, EXPAND_NORMAL);
2097 new_actparms = tree_cons (TREE_PURPOSE (p), var, new_actparms);
2105 /* We built the new argument chain backwards. */
2106 actparms = nreverse (new_actparms);
2108 /* Expanding one of those dangerous arguments could have added
2109 cleanups, but otherwise give it a whirl. */
2110 try_tail_call = ! any_pending_cleanups (1);
2113 /* Generate a tail recursion sequence when calling ourselves. */
2116 && TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
2117 && TREE_OPERAND (TREE_OPERAND (exp, 0), 0) == current_function_decl)
2119 /* We want to emit any pending stack adjustments before the tail
2120 recursion "call". That way we know any adjustment after the tail
2121 recursion call can be ignored if we indeed use the tail recursion
2123 int save_pending_stack_adjust = pending_stack_adjust;
2124 int save_stack_pointer_delta = stack_pointer_delta;
2126 /* Use a new sequence to hold any RTL we generate. We do not even
2127 know if we will use this RTL yet. The final decision can not be
2128 made until after RTL generation for the entire function is
2132 /* Emit the pending stack adjustments before we expand any arguments. */
2133 do_pending_stack_adjust ();
2135 if (optimize_tail_recursion (actparms, get_last_insn ()))
2136 tail_recursion_insns = get_insns ();
2139 /* Restore the original pending stack adjustment for the sibling and
2140 normal call cases below. */
2141 pending_stack_adjust = save_pending_stack_adjust;
2142 stack_pointer_delta = save_stack_pointer_delta;
2145 function_call_count++;
2147 if (fndecl && DECL_NAME (fndecl))
2148 name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
2150 #ifdef PREFERRED_STACK_BOUNDARY
2151 preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
2153 preferred_stack_boundary = STACK_BOUNDARY;
2156 /* Ensure current function's preferred stack boundary is at least
2157 what we need. We don't have to increase alignment for recursive
2159 if (cfun->preferred_stack_boundary < preferred_stack_boundary
2160 && fndecl != current_function_decl)
2161 cfun->preferred_stack_boundary = preferred_stack_boundary;
2163 /* See if this is a call to a function that can return more than once
2164 or a call to longjmp or malloc. */
2165 special_function_p (fndecl, &returns_twice, &is_longjmp, &fork_or_exec,
2166 &is_malloc, &may_be_alloca);
2169 current_function_calls_alloca = 1;
2171 /* Operand 0 is a pointer-to-function; get the type of the function. */
2172 funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
2173 if (! POINTER_TYPE_P (funtype))
2175 funtype = TREE_TYPE (funtype);
2177 /* We want to make two insn chains; one for a sibling call, the other
2178 for a normal call. We will select one of the two chains after
2179 initial RTL generation is complete. */
2180 for (pass = 0; pass < 2; pass++)
2182 int sibcall_failure = 0;
2183 /* We want to emit ay pending stack adjustments before the tail
2184 recursion "call". That way we know any adjustment after the tail
2185 recursion call can be ignored if we indeed use the tail recursion
2187 int save_pending_stack_adjust;
2188 int save_stack_pointer_delta;
2190 rtx before_call, next_arg_reg;
2194 /* Various reasons we can not use a sibling call. */
2196 #ifdef HAVE_sibcall_epilogue
2197 || ! HAVE_sibcall_epilogue
2201 /* The structure value address is used and modified in the
2202 loop below. It does not seem worth the effort to save and
2203 restore it as a state variable since few optimizable
2204 sibling calls will return a structure. */
2205 || structure_value_addr != NULL_RTX
2206 /* If the register holding the address is a callee saved
2207 register, then we lose. We have no way to prevent that,
2208 so we only allow calls to named functions. */
2209 /* ??? This could be done by having the insn constraints
2210 use a register class that is all call-clobbered. Any
2211 reload insns generated to fix things up would appear
2212 before the sibcall_epilogue. */
2213 || fndecl == NULL_TREE
2214 || ! FUNCTION_OK_FOR_SIBCALL (fndecl))
2217 /* We know at this point that there are not currently any
2218 pending cleanups. If, however, in the process of evaluating
2219 the arguments we were to create some, we'll need to be
2220 able to get rid of them. */
2221 expand_start_target_temps ();
2223 /* State variables we need to save and restore between
2225 save_pending_stack_adjust = pending_stack_adjust;
2226 save_stack_pointer_delta = stack_pointer_delta;
2229 /* Other state variables that we must reinitialize each time
2230 through the loop (that are not initialized by the loop itself. */
2234 /* Start a new sequence for the normal call case.
2236 From this point on, if the sibling call fails, we want to set
2237 sibcall_failure instead of continuing the loop. */
2240 /* When calling a const function, we must pop the stack args right away,
2241 so that the pop is deleted or moved with the call. */
2245 /* Don't let pending stack adjusts add up to too much.
2246 Also, do all pending adjustments now if there is any chance
2247 this might be a call to alloca or if we are expanding a sibling
2249 if (pending_stack_adjust >= 32
2250 || (pending_stack_adjust > 0 && may_be_alloca)
2252 do_pending_stack_adjust ();
2254 if (profile_arc_flag && fork_or_exec)
2256 /* A fork duplicates the profile information, and an exec discards
2257 it. We can't rely on fork/exec to be paired. So write out the
2258 profile information we have gathered so far, and clear it. */
2259 /* ??? When Linux's __clone is called with CLONE_VM set, profiling
2260 is subject to race conditions, just as with multithreaded
2263 emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__bb_fork_func"), 0,
2267 /* Push the temporary stack slot level so that we can free any
2268 temporaries we make. */
2271 /* Start updating where the next arg would go.
2273 On some machines (such as the PA) indirect calls have a different
2274 calling convention than normal calls. The last argument in
2275 INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
2277 INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, (fndecl == 0));
2279 /* If struct_value_rtx is 0, it means pass the address
2280 as if it were an extra parameter. */
2281 if (structure_value_addr && struct_value_rtx == 0)
2283 /* If structure_value_addr is a REG other than
2284 virtual_outgoing_args_rtx, we can use always use it. If it
2285 is not a REG, we must always copy it into a register.
2286 If it is virtual_outgoing_args_rtx, we must copy it to another
2287 register in some cases. */
2288 rtx temp = (GET_CODE (structure_value_addr) != REG
2289 || (ACCUMULATE_OUTGOING_ARGS
2290 && stack_arg_under_construction
2291 && structure_value_addr == virtual_outgoing_args_rtx)
2292 ? copy_addr_to_reg (structure_value_addr)
2293 : structure_value_addr);
2296 = tree_cons (error_mark_node,
2297 make_tree (build_pointer_type (TREE_TYPE (funtype)),
2300 structure_value_addr_parm = 1;
2303 /* Count the arguments and set NUM_ACTUALS. */
2304 for (p = actparms, i = 0; p; p = TREE_CHAIN (p)) i++;
2307 /* Compute number of named args.
2308 Normally, don't include the last named arg if anonymous args follow.
2309 We do include the last named arg if STRICT_ARGUMENT_NAMING is nonzero.
2310 (If no anonymous args follow, the result of list_length is actually
2311 one too large. This is harmless.)
2313 If PRETEND_OUTGOING_VARARGS_NAMED is set and STRICT_ARGUMENT_NAMING is
2314 zero, this machine will be able to place unnamed args that were
2315 passed in registers into the stack. So treat all args as named.
2316 This allows the insns emitting for a specific argument list to be
2317 independent of the function declaration.
2319 If PRETEND_OUTGOING_VARARGS_NAMED is not set, we do not have any
2320 reliable way to pass unnamed args in registers, so we must force
2321 them into memory. */
2323 if ((STRICT_ARGUMENT_NAMING
2324 || ! PRETEND_OUTGOING_VARARGS_NAMED)
2325 && TYPE_ARG_TYPES (funtype) != 0)
2327 = (list_length (TYPE_ARG_TYPES (funtype))
2328 /* Don't include the last named arg. */
2329 - (STRICT_ARGUMENT_NAMING ? 0 : 1)
2330 /* Count the struct value address, if it is passed as a parm. */
2331 + structure_value_addr_parm);
2333 /* If we know nothing, treat all args as named. */
2334 n_named_args = num_actuals;
2336 /* Make a vector to hold all the information about each arg. */
2337 args = (struct arg_data *) alloca (num_actuals
2338 * sizeof (struct arg_data));
2339 bzero ((char *) args, num_actuals * sizeof (struct arg_data));
2341 /* Build up entries inthe ARGS array, compute the size of the arguments
2342 into ARGS_SIZE, etc. */
2343 initialize_argument_information (num_actuals, args, &args_size,
2344 n_named_args, actparms, fndecl,
2345 &args_so_far, reg_parm_stack_space,
2346 &old_stack_level, &old_pending_adj,
2347 &must_preallocate, &is_const,
2348 (pass == 0) ? ECF_SIBCALL : 0);
2350 #ifdef FINAL_REG_PARM_STACK_SPACE
2351 reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
2357 /* If this function requires a variable-sized argument list, don't
2358 try to make a cse'able block for this call. We may be able to
2359 do this eventually, but it is too complicated to keep track of
2360 what insns go in the cse'able block and which don't.
2362 Also do not make a sibling call. */
2365 must_preallocate = 1;
2366 sibcall_failure = 1;
2369 if (args_size.constant > current_function_args_size)
2371 /* If this function requires more stack slots than the current
2372 function, we cannot change it into a sibling call. */
2373 sibcall_failure = 1;
2376 /* Compute the actual size of the argument block required. The variable
2377 and constant sizes must be combined, the size may have to be rounded,
2378 and there may be a minimum required size. When generating a sibcall
2379 pattern, do not round up, since we'll be re-using whatever space our
2381 unadjusted_args_size
2382 = compute_argument_block_size (reg_parm_stack_space, &args_size,
2384 : preferred_stack_boundary));
2386 /* If the callee pops its own arguments, then it must pop exactly
2387 the same number of arguments as the current function. */
2388 if (RETURN_POPS_ARGS (fndecl, funtype, unadjusted_args_size)
2389 != RETURN_POPS_ARGS (current_function_decl,
2390 TREE_TYPE (current_function_decl),
2391 current_function_args_size))
2392 sibcall_failure = 1;
2394 /* Now make final decision about preallocating stack space. */
2395 must_preallocate = finalize_must_preallocate (must_preallocate,
2399 /* If the structure value address will reference the stack pointer, we
2400 must stabilize it. We don't need to do this if we know that we are
2401 not going to adjust the stack pointer in processing this call. */
2403 if (structure_value_addr
2404 && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
2405 || reg_mentioned_p (virtual_outgoing_args_rtx,
2406 structure_value_addr))
2408 || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)
2410 structure_value_addr = copy_to_reg (structure_value_addr);
2412 /* Precompute any arguments as needed. */
2413 precompute_arguments (is_const, must_preallocate, num_actuals,
2416 /* Now we are about to start emitting insns that can be deleted
2417 if a libcall is deleted. */
2418 if (is_const || is_malloc)
2421 old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2423 /* If we have no actual push instructions, or shouldn't use them,
2424 make space for all args right now. */
2426 if (args_size.var != 0)
2428 if (old_stack_level == 0)
2430 emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2431 old_pending_adj = pending_stack_adjust;
2432 pending_stack_adjust = 0;
2433 /* stack_arg_under_construction says whether a stack arg is
2434 being constructed at the old stack level. Pushing the stack
2435 gets a clean outgoing argument block. */
2436 old_stack_arg_under_construction = stack_arg_under_construction;
2437 stack_arg_under_construction = 0;
2439 argblock = push_block (ARGS_SIZE_RTX (args_size), 0, 0);
2443 /* Note that we must go through the motions of allocating an argument
2444 block even if the size is zero because we may be storing args
2445 in the area reserved for register arguments, which may be part of
2448 int needed = args_size.constant;
2450 /* Store the maximum argument space used. It will be pushed by
2451 the prologue (if ACCUMULATE_OUTGOING_ARGS, or stack overflow
2454 if (needed > current_function_outgoing_args_size)
2455 current_function_outgoing_args_size = needed;
2457 if (must_preallocate)
2459 if (ACCUMULATE_OUTGOING_ARGS)
2461 /* Since the stack pointer will never be pushed, it is possible
2462 for the evaluation of a parm to clobber something we have
2463 already written to the stack. Since most function calls on
2464 RISC machines do not use the stack, this is uncommon, but
2465 must work correctly.
2467 Therefore, we save any area of the stack that was already
2468 written and that we are using. Here we set up to do this by
2469 making a new stack usage map from the old one. The actual
2470 save will be done by store_one_arg.
2472 Another approach might be to try to reorder the argument
2473 evaluations to avoid this conflicting stack usage. */
2475 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2476 /* Since we will be writing into the entire argument area, the
2477 map must be allocated for its entire size, not just the part
2478 that is the responsibility of the caller. */
2479 needed += reg_parm_stack_space;
2482 #ifdef ARGS_GROW_DOWNWARD
2483 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2486 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
2489 stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
2491 if (initial_highest_arg_in_use)
2492 bcopy (initial_stack_usage_map, stack_usage_map,
2493 initial_highest_arg_in_use);
2495 if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
2496 bzero (&stack_usage_map[initial_highest_arg_in_use],
2497 (highest_outgoing_arg_in_use
2498 - initial_highest_arg_in_use));
2501 /* The address of the outgoing argument list must not be copied
2502 to a register here, because argblock would be left pointing
2503 to the wrong place after the call to
2504 allocate_dynamic_stack_space below. */
2506 argblock = virtual_outgoing_args_rtx;
2510 if (inhibit_defer_pop == 0)
2512 /* Try to reuse some or all of the pending_stack_adjust
2513 to get this space. Maybe we can avoid any pushing. */
2514 if (needed > pending_stack_adjust)
2516 needed -= pending_stack_adjust;
2517 pending_stack_adjust = 0;
2521 pending_stack_adjust -= needed;
2525 /* Special case this because overhead of `push_block' in this
2526 case is non-trivial. */
2528 argblock = virtual_outgoing_args_rtx;
2530 argblock = push_block (GEN_INT (needed), 0, 0);
2532 /* We only really need to call `copy_to_reg' in the case where
2533 push insns are going to be used to pass ARGBLOCK to a function
2534 call in ARGS. In that case, the stack pointer changes value
2535 from the allocation point to the call point, and hence
2536 the value of VIRTUAL_OUTGOING_ARGS_RTX changes as well.
2537 But might as well always do it. */
2538 argblock = copy_to_reg (argblock);
2543 /* The argument block when performing a sibling call is the
2544 incoming argument block. */
2547 rtx temp = plus_constant (arg_pointer_rtx,
2548 FIRST_PARM_OFFSET (current_function_decl));
2549 argblock = force_reg (Pmode, force_operand (temp, NULL_RTX));
2552 if (ACCUMULATE_OUTGOING_ARGS)
2554 /* The save/restore code in store_one_arg handles all cases except one:
2555 a constructor call (including a C function returning a BLKmode struct)
2556 to initialize an argument. */
2557 if (stack_arg_under_construction)
2559 #ifndef OUTGOING_REG_PARM_STACK_SPACE
2560 rtx push_size = GEN_INT (reg_parm_stack_space + args_size.constant);
2562 rtx push_size = GEN_INT (args_size.constant);
2564 if (old_stack_level == 0)
2566 emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2567 old_pending_adj = pending_stack_adjust;
2568 pending_stack_adjust = 0;
2569 /* stack_arg_under_construction says whether a stack arg is
2570 being constructed at the old stack level. Pushing the stack
2571 gets a clean outgoing argument block. */
2572 old_stack_arg_under_construction = stack_arg_under_construction;
2573 stack_arg_under_construction = 0;
2574 /* Make a new map for the new argument list. */
2575 stack_usage_map = (char *)alloca (highest_outgoing_arg_in_use);
2576 bzero (stack_usage_map, highest_outgoing_arg_in_use);
2577 highest_outgoing_arg_in_use = 0;
2579 allocate_dynamic_stack_space (push_size, NULL_RTX, BITS_PER_UNIT);
2581 /* If argument evaluation might modify the stack pointer, copy the
2582 address of the argument list to a register. */
2583 for (i = 0; i < num_actuals; i++)
2584 if (args[i].pass_on_stack)
2586 argblock = copy_addr_to_reg (argblock);
2591 compute_argument_addresses (args, argblock, num_actuals);
2593 #ifdef PREFERRED_STACK_BOUNDARY
2594 /* If we push args individually in reverse order, perform stack alignment
2595 before the first push (the last arg). */
2596 if (PUSH_ARGS_REVERSED && argblock == 0
2597 && args_size.constant != unadjusted_args_size)
2599 /* When the stack adjustment is pending, we get better code
2600 by combining the adjustments. */
2601 if (pending_stack_adjust && ! is_const
2602 && ! inhibit_defer_pop)
2605 args_size.constant = (unadjusted_args_size
2606 + ((pending_stack_adjust
2607 + args_size.constant
2608 - unadjusted_args_size)
2609 % (preferred_stack_boundary
2611 adjust = (pending_stack_adjust - args_size.constant
2612 + unadjusted_args_size);
2613 adjust_stack (GEN_INT (adjust));
2614 pending_stack_adjust = 0;
2616 else if (argblock == 0)
2617 anti_adjust_stack (GEN_INT (args_size.constant
2618 - unadjusted_args_size));
2619 /* Now that the stack is properly aligned, pops can't safely
2620 be deferred during the evaluation of the arguments. */
2625 /* Don't try to defer pops if preallocating, not even from the first arg,
2626 since ARGBLOCK probably refers to the SP. */
2630 funexp = rtx_for_function_call (fndecl, exp);
2632 /* Figure out the register where the value, if any, will come back. */
2634 if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
2635 && ! structure_value_addr)
2637 if (pcc_struct_value)
2638 valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
2639 fndecl, (pass == 0));
2641 valreg = hard_function_value (TREE_TYPE (exp), fndecl, (pass == 0));
2644 /* Precompute all register parameters. It isn't safe to compute anything
2645 once we have started filling any specific hard regs. */
2646 precompute_register_parameters (num_actuals, args, ®_parm_seen);
2648 #ifdef REG_PARM_STACK_SPACE
2649 /* Save the fixed argument area if it's part of the caller's frame and
2650 is clobbered by argument setup for this call. */
2651 if (ACCUMULATE_OUTGOING_ARGS)
2652 save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
2653 &low_to_save, &high_to_save);
2656 /* Now store (and compute if necessary) all non-register parms.
2657 These come before register parms, since they can require block-moves,
2658 which could clobber the registers used for register parms.
2659 Parms which have partial registers are not stored here,
2660 but we do preallocate space here if they want that. */
2662 for (i = 0; i < num_actuals; i++)
2663 if (args[i].reg == 0 || args[i].pass_on_stack)
2664 store_one_arg (&args[i], argblock, may_be_alloca,
2665 args_size.var != 0, reg_parm_stack_space);
2667 /* If we have a parm that is passed in registers but not in memory
2668 and whose alignment does not permit a direct copy into registers,
2669 make a group of pseudos that correspond to each register that we
2671 if (STRICT_ALIGNMENT)
2672 store_unaligned_arguments_into_pseudos (args, num_actuals);
2674 /* Now store any partially-in-registers parm.
2675 This is the last place a block-move can happen. */
2677 for (i = 0; i < num_actuals; i++)
2678 if (args[i].partial != 0 && ! args[i].pass_on_stack)
2679 store_one_arg (&args[i], argblock, may_be_alloca,
2680 args_size.var != 0, reg_parm_stack_space);
2682 #ifdef PREFERRED_STACK_BOUNDARY
2683 /* If we pushed args in forward order, perform stack alignment
2684 after pushing the last arg. */
2685 if (!PUSH_ARGS_REVERSED && argblock == 0)
2686 anti_adjust_stack (GEN_INT (args_size.constant
2687 - unadjusted_args_size));
2690 /* If register arguments require space on the stack and stack space
2691 was not preallocated, allocate stack space here for arguments
2692 passed in registers. */
2693 #ifdef OUTGOING_REG_PARM_STACK_SPACE
2694 if (!ACCUMULATE_OUTGOING_ARGS
2695 && must_preallocate == 0 && reg_parm_stack_space > 0)
2696 anti_adjust_stack (GEN_INT (reg_parm_stack_space));
2699 /* Pass the function the address in which to return a
2701 if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
2703 emit_move_insn (struct_value_rtx,
2705 force_operand (structure_value_addr,
2708 /* Mark the memory for the aggregate as write-only. */
2709 if (current_function_check_memory_usage)
2710 emit_library_call (chkr_set_right_libfunc, 1,
2712 structure_value_addr, ptr_mode,
2713 GEN_INT (struct_value_size),
2714 TYPE_MODE (sizetype),
2715 GEN_INT (MEMORY_USE_WO),
2716 TYPE_MODE (integer_type_node));
2718 if (GET_CODE (struct_value_rtx) == REG)
2719 use_reg (&call_fusage, struct_value_rtx);
2722 funexp = prepare_call_address (funexp, fndecl, &call_fusage,
2725 load_register_parameters (args, num_actuals, &call_fusage);
2727 /* Perform postincrements before actually calling the function. */
2730 /* Save a pointer to the last insn before the call, so that we can
2731 later safely search backwards to find the CALL_INSN. */
2732 before_call = get_last_insn ();
2734 /* Set up next argument register. For sibling calls on machines
2735 with register windows this should be the incoming register. */
2736 #ifdef FUNCTION_INCOMING_ARG
2738 next_arg_reg = FUNCTION_INCOMING_ARG (args_so_far, VOIDmode,
2742 next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode,
2745 /* All arguments and registers used for the call must be set up by
2748 /* Generate the actual call instruction. */
2749 emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size,
2750 args_size.constant, struct_value_size,
2751 next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
2752 ((is_const ? ECF_IS_CONST : 0)
2753 | (nothrow ? ECF_NOTHROW : 0)
2754 | (pass == 0 ? ECF_SIBCALL : 0)));
2756 /* Verify that we've deallocated all the stack we used. */
2758 && old_stack_allocated != stack_pointer_delta - pending_stack_adjust)
2761 /* If call is cse'able, make appropriate pair of reg-notes around it.
2762 Test valreg so we don't crash; may safely ignore `const'
2763 if return type is void. Disable for PARALLEL return values, because
2764 we have no way to move such values into a pseudo register. */
2765 if (is_const && valreg != 0 && GET_CODE (valreg) != PARALLEL)
2768 rtx temp = gen_reg_rtx (GET_MODE (valreg));
2771 /* Mark the return value as a pointer if needed. */
2772 if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2773 mark_reg_pointer (temp, TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))));
2775 /* Construct an "equal form" for the value which mentions all the
2776 arguments in order as well as the function name. */
2777 if (PUSH_ARGS_REVERSED)
2778 for (i = 0; i < num_actuals; i++)
2779 note = gen_rtx_EXPR_LIST (VOIDmode, args[i].initial_value, note);
2781 for (i = num_actuals - 1; i >= 0; i--)
2782 note = gen_rtx_EXPR_LIST (VOIDmode, args[i].initial_value, note);
2783 note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
2785 insns = get_insns ();
2788 emit_libcall_block (insns, temp, valreg, note);
2794 /* Otherwise, just write out the sequence without a note. */
2795 rtx insns = get_insns ();
2802 rtx temp = gen_reg_rtx (GET_MODE (valreg));
2805 /* The return value from a malloc-like function is a pointer. */
2806 if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2807 mark_reg_pointer (temp, BIGGEST_ALIGNMENT);
2809 emit_move_insn (temp, valreg);
2811 /* The return value from a malloc-like function can not alias
2813 last = get_last_insn ();
2815 gen_rtx_EXPR_LIST (REG_NOALIAS, temp, REG_NOTES (last));
2817 /* Write out the sequence. */
2818 insns = get_insns ();
2824 /* For calls to `setjmp', etc., inform flow.c it should complain
2825 if nonvolatile values are live. For functions that cannot return,
2826 inform flow that control does not fall through. */
2828 if (returns_twice || is_volatile || is_longjmp || pass == 0)
2830 /* The barrier or NOTE_INSN_SETJMP note must be emitted
2831 immediately after the CALL_INSN. Some ports emit more
2832 than just a CALL_INSN above, so we must search for it here. */
2834 rtx last = get_last_insn ();
2835 while (GET_CODE (last) != CALL_INSN)
2837 last = PREV_INSN (last);
2838 /* There was no CALL_INSN? */
2839 if (last == before_call)
2845 emit_note_after (NOTE_INSN_SETJMP, last);
2846 current_function_calls_setjmp = 1;
2847 sibcall_failure = 1;
2850 emit_barrier_after (last);
2854 current_function_calls_longjmp = 1, sibcall_failure = 1;
2856 /* If this function is returning into a memory location marked as
2857 readonly, it means it is initializing that location. But we normally
2858 treat functions as not clobbering such locations, so we need to
2859 specify that this one does. */
2860 if (target != 0 && GET_CODE (target) == MEM
2861 && structure_value_addr != 0 && RTX_UNCHANGING_P (target))
2862 emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
2864 /* If value type not void, return an rtx for the value. */
2866 /* If there are cleanups to be called, don't use a hard reg as target.
2867 We need to double check this and see if it matters anymore. */
2868 if (any_pending_cleanups (1))
2870 if (target && REG_P (target)
2871 && REGNO (target) < FIRST_PSEUDO_REGISTER)
2873 sibcall_failure = 1;
2876 if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
2879 target = const0_rtx;
2881 else if (structure_value_addr)
2883 if (target == 0 || GET_CODE (target) != MEM)
2885 target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
2886 memory_address (TYPE_MODE (TREE_TYPE (exp)),
2887 structure_value_addr));
2888 MEM_SET_IN_STRUCT_P (target,
2889 AGGREGATE_TYPE_P (TREE_TYPE (exp)));
2892 else if (pcc_struct_value)
2894 /* This is the special C++ case where we need to
2895 know what the true target was. We take care to
2896 never use this value more than once in one expression. */
2897 target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
2898 copy_to_reg (valreg));
2899 MEM_SET_IN_STRUCT_P (target, AGGREGATE_TYPE_P (TREE_TYPE (exp)));
2901 /* Handle calls that return values in multiple non-contiguous locations.
2902 The Irix 6 ABI has examples of this. */
2903 else if (GET_CODE (valreg) == PARALLEL)
2905 int bytes = int_size_in_bytes (TREE_TYPE (exp));
2909 target = assign_stack_temp (TYPE_MODE (TREE_TYPE (exp)),
2911 MEM_SET_IN_STRUCT_P (target, AGGREGATE_TYPE_P (TREE_TYPE (exp)));
2912 preserve_temp_slots (target);
2915 if (! rtx_equal_p (target, valreg))
2916 emit_group_store (target, valreg, bytes,
2917 TYPE_ALIGN (TREE_TYPE (exp)));
2919 /* We can not support sibling calls for this case. */
2920 sibcall_failure = 1;
2923 && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
2924 && GET_MODE (target) == GET_MODE (valreg))
2926 /* TARGET and VALREG cannot be equal at this point because the
2927 latter would not have REG_FUNCTION_VALUE_P true, while the
2928 former would if it were referring to the same register.
2930 If they refer to the same register, this move will be a no-op,
2931 except when function inlining is being done. */
2932 emit_move_insn (target, valreg);
2934 else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
2935 target = copy_blkmode_from_reg (target, valreg, TREE_TYPE (exp));
2937 target = copy_to_reg (valreg);
2939 #ifdef PROMOTE_FUNCTION_RETURN
2940 /* If we promoted this return value, make the proper SUBREG. TARGET
2941 might be const0_rtx here, so be careful. */
2942 if (GET_CODE (target) == REG
2943 && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
2944 && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
2946 tree type = TREE_TYPE (exp);
2947 int unsignedp = TREE_UNSIGNED (type);
2949 /* If we don't promote as expected, something is wrong. */
2950 if (GET_MODE (target)
2951 != promote_mode (type, TYPE_MODE (type), &unsignedp, 1))
2954 target = gen_rtx_SUBREG (TYPE_MODE (type), target, 0);
2955 SUBREG_PROMOTED_VAR_P (target) = 1;
2956 SUBREG_PROMOTED_UNSIGNED_P (target) = unsignedp;
2960 /* If size of args is variable or this was a constructor call for a stack
2961 argument, restore saved stack-pointer value. */
2963 if (old_stack_level)
2965 emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
2966 pending_stack_adjust = old_pending_adj;
2967 stack_arg_under_construction = old_stack_arg_under_construction;
2968 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
2969 stack_usage_map = initial_stack_usage_map;
2970 sibcall_failure = 1;
2972 else if (ACCUMULATE_OUTGOING_ARGS)
2974 #ifdef REG_PARM_STACK_SPACE
2977 restore_fixed_argument_area (save_area, argblock,
2978 high_to_save, low_to_save);
2979 sibcall_failure = 1;
2983 /* If we saved any argument areas, restore them. */
2984 for (i = 0; i < num_actuals; i++)
2985 if (args[i].save_area)
2987 enum machine_mode save_mode = GET_MODE (args[i].save_area);
2989 = gen_rtx_MEM (save_mode,
2990 memory_address (save_mode,
2991 XEXP (args[i].stack_slot, 0)));
2993 if (save_mode != BLKmode)
2994 emit_move_insn (stack_area, args[i].save_area);
2996 emit_block_move (stack_area,
2997 validize_mem (args[i].save_area),
2998 GEN_INT (args[i].size.constant),
3000 sibcall_failure = 1;
3003 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3004 stack_usage_map = initial_stack_usage_map;
3007 /* If this was alloca, record the new stack level for nonlocal gotos.
3008 Check for the handler slots since we might not have a save area
3009 for non-local gotos. */
3011 if (may_be_alloca && nonlocal_goto_handler_slots != 0)
3012 emit_stack_save (SAVE_NONLOCAL, &nonlocal_goto_stack_level, NULL_RTX);
3016 /* Free up storage we no longer need. */
3017 for (i = 0; i < num_actuals; ++i)
3018 if (args[i].aligned_regs)
3019 free (args[i].aligned_regs);
3023 /* Undo the fake expand_start_target_temps we did earlier. If
3024 there had been any cleanups created, we've already set
3026 expand_end_target_temps ();
3029 insns = get_insns ();
3034 tail_call_insns = insns;
3036 /* If something prevents making this a sibling call,
3037 zero out the sequence. */
3038 if (sibcall_failure)
3039 tail_call_insns = NULL_RTX;
3040 /* Restore the pending stack adjustment now that we have
3041 finished generating the sibling call sequence. */
3043 pending_stack_adjust = save_pending_stack_adjust;
3044 stack_pointer_delta = save_stack_pointer_delta;
3047 normal_call_insns = insns;
3050 /* The function optimize_sibling_and_tail_recursive_calls doesn't
3051 handle CALL_PLACEHOLDERs inside other CALL_PLACEHOLDERs. This
3052 can happen if the arguments to this function call an inline
3053 function who's expansion contains another CALL_PLACEHOLDER.
3055 If there are any C_Ps in any of these sequences, replace them
3056 with their normal call. */
3058 for (insn = normal_call_insns; insn; insn = NEXT_INSN (insn))
3059 if (GET_CODE (insn) == CALL_INSN
3060 && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3061 replace_call_placeholder (insn, sibcall_use_normal);
3063 for (insn = tail_call_insns; insn; insn = NEXT_INSN (insn))
3064 if (GET_CODE (insn) == CALL_INSN
3065 && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3066 replace_call_placeholder (insn, sibcall_use_normal);
3068 for (insn = tail_recursion_insns; insn; insn = NEXT_INSN (insn))
3069 if (GET_CODE (insn) == CALL_INSN
3070 && GET_CODE (PATTERN (insn)) == CALL_PLACEHOLDER)
3071 replace_call_placeholder (insn, sibcall_use_normal);
3073 /* If this was a potential tail recursion site, then emit a
3074 CALL_PLACEHOLDER with the normal and the tail recursion streams.
3075 One of them will be selected later. */
3076 if (tail_recursion_insns || tail_call_insns)
3078 /* The tail recursion label must be kept around. We could expose
3079 its use in the CALL_PLACEHOLDER, but that creates unwanted edges
3080 and makes determining true tail recursion sites difficult.
3082 So we set LABEL_PRESERVE_P here, then clear it when we select
3083 one of the call sequences after rtl generation is complete. */
3084 if (tail_recursion_insns)
3085 LABEL_PRESERVE_P (tail_recursion_label) = 1;
3086 emit_call_insn (gen_rtx_CALL_PLACEHOLDER (VOIDmode, normal_call_insns,
3088 tail_recursion_insns,
3089 tail_recursion_label));
3092 emit_insns (normal_call_insns);
3094 currently_expanding_call--;
3099 /* Returns nonzero if FUN is the symbol for a library function which can
3103 libfunc_nothrow (fun)
3106 if (fun == throw_libfunc
3107 || fun == rethrow_libfunc
3108 || fun == sjthrow_libfunc
3109 || fun == sjpopnthrow_libfunc)
3115 /* Output a library call to function FUN (a SYMBOL_REF rtx).
3116 The RETVAL parameter specifies whether return value needs to be saved, other
3117 parameters are documented in the emit_library_call function bellow. */
3119 emit_library_call_value_1 (retval, orgfun, value, no_queue, outmode, nargs, p)
3124 enum machine_mode outmode;
3128 /* Total size in bytes of all the stack-parms scanned so far. */
3129 struct args_size args_size;
3130 /* Size of arguments before any adjustments (such as rounding). */
3131 struct args_size original_args_size;
3132 register int argnum;
3136 struct args_size alignment_pad;
3138 CUMULATIVE_ARGS args_so_far;
3139 struct arg { rtx value; enum machine_mode mode; rtx reg; int partial;
3140 struct args_size offset; struct args_size size; rtx save_area; };
3142 int old_inhibit_defer_pop = inhibit_defer_pop;
3143 rtx call_fusage = 0;
3145 int pcc_struct_value = 0;
3146 int struct_value_size = 0;
3148 int reg_parm_stack_space = 0;
3152 #ifdef REG_PARM_STACK_SPACE
3153 /* Define the boundary of the register parm stack space that needs to be
3155 int low_to_save = -1, high_to_save = 0;
3156 rtx save_area = 0; /* Place that it is saved */
3159 /* Size of the stack reserved for parameter registers. */
3160 int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
3161 char *initial_stack_usage_map = stack_usage_map;
3163 #ifdef REG_PARM_STACK_SPACE
3164 #ifdef MAYBE_REG_PARM_STACK_SPACE
3165 reg_parm_stack_space = MAYBE_REG_PARM_STACK_SPACE;
3167 reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
3171 is_const = no_queue;
3174 nothrow = libfunc_nothrow (fun);
3176 #ifdef PREFERRED_STACK_BOUNDARY
3177 /* Ensure current function's preferred stack boundary is at least
3179 if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
3180 cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
3183 /* If this kind of value comes back in memory,
3184 decide where in memory it should come back. */
3185 if (outmode != VOIDmode && aggregate_value_p (type_for_mode (outmode, 0)))
3187 #ifdef PCC_STATIC_STRUCT_RETURN
3189 = hard_function_value (build_pointer_type (type_for_mode (outmode, 0)),
3191 mem_value = gen_rtx_MEM (outmode, pointer_reg);
3192 pcc_struct_value = 1;
3194 value = gen_reg_rtx (outmode);
3195 #else /* not PCC_STATIC_STRUCT_RETURN */
3196 struct_value_size = GET_MODE_SIZE (outmode);
3197 if (value != 0 && GET_CODE (value) == MEM)
3200 mem_value = assign_stack_temp (outmode, GET_MODE_SIZE (outmode), 0);
3203 /* This call returns a big structure. */
3207 /* ??? Unfinished: must pass the memory address as an argument. */
3209 /* Copy all the libcall-arguments out of the varargs data
3210 and into a vector ARGVEC.
3212 Compute how to pass each argument. We only support a very small subset
3213 of the full argument passing conventions to limit complexity here since
3214 library functions shouldn't have many args. */
3216 argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
3217 bzero ((char *) argvec, (nargs + 1) * sizeof (struct arg));
3219 INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0);
3221 args_size.constant = 0;
3228 /* If there's a structure value address to be passed,
3229 either pass it in the special place, or pass it as an extra argument. */
3230 if (mem_value && struct_value_rtx == 0 && ! pcc_struct_value)
3232 rtx addr = XEXP (mem_value, 0);
3235 /* Make sure it is a reasonable operand for a move or push insn. */
3236 if (GET_CODE (addr) != REG && GET_CODE (addr) != MEM
3237 && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
3238 addr = force_operand (addr, NULL_RTX);
3240 argvec[count].value = addr;
3241 argvec[count].mode = Pmode;
3242 argvec[count].partial = 0;
3244 argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
3245 #ifdef FUNCTION_ARG_PARTIAL_NREGS
3246 if (FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1))
3250 locate_and_pad_parm (Pmode, NULL_TREE,
3251 argvec[count].reg && argvec[count].partial == 0,
3252 NULL_TREE, &args_size, &argvec[count].offset,
3253 &argvec[count].size, &alignment_pad);
3256 if (argvec[count].reg == 0 || argvec[count].partial != 0
3257 || reg_parm_stack_space > 0)
3258 args_size.constant += argvec[count].size.constant;
3260 FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree) 0, 1);
3265 for (; count < nargs; count++)
3267 rtx val = va_arg (p, rtx);
3268 enum machine_mode mode = va_arg (p, enum machine_mode);
3270 /* We cannot convert the arg value to the mode the library wants here;
3271 must do it earlier where we know the signedness of the arg. */
3273 || (GET_MODE (val) != mode && GET_MODE (val) != VOIDmode))
3276 /* On some machines, there's no way to pass a float to a library fcn.
3277 Pass it as a double instead. */
3278 #ifdef LIBGCC_NEEDS_DOUBLE
3279 if (LIBGCC_NEEDS_DOUBLE && mode == SFmode)
3280 val = convert_modes (DFmode, SFmode, val, 0), mode = DFmode;
3283 /* There's no need to call protect_from_queue, because
3284 either emit_move_insn or emit_push_insn will do that. */
3286 /* Make sure it is a reasonable operand for a move or push insn. */
3287 if (GET_CODE (val) != REG && GET_CODE (val) != MEM
3288 && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
3289 val = force_operand (val, NULL_RTX);
3291 #ifdef FUNCTION_ARG_PASS_BY_REFERENCE
3292 if (FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, mode, NULL_TREE, 1))
3294 /* We do not support FUNCTION_ARG_CALLEE_COPIES here since it can
3295 be viewed as just an efficiency improvement. */
3296 rtx slot = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
3297 emit_move_insn (slot, val);
3298 val = force_operand (XEXP (slot, 0), NULL_RTX);
3303 argvec[count].value = val;
3304 argvec[count].mode = mode;
3306 argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);
3308 #ifdef FUNCTION_ARG_PARTIAL_NREGS
3309 argvec[count].partial
3310 = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);
3312 argvec[count].partial = 0;
3315 locate_and_pad_parm (mode, NULL_TREE,
3316 argvec[count].reg && argvec[count].partial == 0,
3317 NULL_TREE, &args_size, &argvec[count].offset,
3318 &argvec[count].size, &alignment_pad);
3320 if (argvec[count].size.var)
3323 if (reg_parm_stack_space == 0 && argvec[count].partial)
3324 argvec[count].size.constant -= argvec[count].partial * UNITS_PER_WORD;
3326 if (argvec[count].reg == 0 || argvec[count].partial != 0
3327 || reg_parm_stack_space > 0)
3328 args_size.constant += argvec[count].size.constant;
3330 FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
3333 #ifdef FINAL_REG_PARM_STACK_SPACE
3334 reg_parm_stack_space = FINAL_REG_PARM_STACK_SPACE (args_size.constant,
3337 /* If this machine requires an external definition for library
3338 functions, write one out. */
3339 assemble_external_libcall (fun);
3341 original_args_size = args_size;
3342 #ifdef PREFERRED_STACK_BOUNDARY
3343 args_size.constant = (((args_size.constant
3344 + stack_pointer_delta
3348 - stack_pointer_delta);
3351 args_size.constant = MAX (args_size.constant,
3352 reg_parm_stack_space);
3354 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3355 args_size.constant -= reg_parm_stack_space;
3358 if (args_size.constant > current_function_outgoing_args_size)
3359 current_function_outgoing_args_size = args_size.constant;
3361 if (ACCUMULATE_OUTGOING_ARGS)
3363 /* Since the stack pointer will never be pushed, it is possible for
3364 the evaluation of a parm to clobber something we have already
3365 written to the stack. Since most function calls on RISC machines
3366 do not use the stack, this is uncommon, but must work correctly.
3368 Therefore, we save any area of the stack that was already written
3369 and that we are using. Here we set up to do this by making a new
3370 stack usage map from the old one.
3372 Another approach might be to try to reorder the argument
3373 evaluations to avoid this conflicting stack usage. */
3375 needed = args_size.constant;
3377 #ifndef OUTGOING_REG_PARM_STACK_SPACE
3378 /* Since we will be writing into the entire argument area, the
3379 map must be allocated for its entire size, not just the part that
3380 is the responsibility of the caller. */
3381 needed += reg_parm_stack_space;
3384 #ifdef ARGS_GROW_DOWNWARD
3385 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3388 highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
3391 stack_usage_map = (char *) alloca (highest_outgoing_arg_in_use);
3393 if (initial_highest_arg_in_use)
3394 bcopy (initial_stack_usage_map, stack_usage_map,
3395 initial_highest_arg_in_use);
3397 if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
3398 bzero (&stack_usage_map[initial_highest_arg_in_use],
3399 highest_outgoing_arg_in_use - initial_highest_arg_in_use);
3402 /* The address of the outgoing argument list must not be copied to a
3403 register here, because argblock would be left pointing to the
3404 wrong place after the call to allocate_dynamic_stack_space below.
3407 argblock = virtual_outgoing_args_rtx;
3412 argblock = push_block (GEN_INT (args_size.constant), 0, 0);
3415 #ifdef PREFERRED_STACK_BOUNDARY
3416 /* If we push args individually in reverse order, perform stack alignment
3417 before the first push (the last arg). */
3418 if (argblock == 0 && PUSH_ARGS_REVERSED)
3419 anti_adjust_stack (GEN_INT (args_size.constant
3420 - original_args_size.constant));
3423 if (PUSH_ARGS_REVERSED)
3434 #ifdef REG_PARM_STACK_SPACE
3435 if (ACCUMULATE_OUTGOING_ARGS)
3437 /* The argument list is the property of the called routine and it
3438 may clobber it. If the fixed area has been used for previous
3439 parameters, we must save and restore it.
3441 Here we compute the boundary of the that needs to be saved, if any. */
3443 #ifdef ARGS_GROW_DOWNWARD
3444 for (count = 0; count < reg_parm_stack_space + 1; count++)
3446 for (count = 0; count < reg_parm_stack_space; count++)
3449 if (count >= highest_outgoing_arg_in_use
3450 || stack_usage_map[count] == 0)
3453 if (low_to_save == -1)
3454 low_to_save = count;
3456 high_to_save = count;
3459 if (low_to_save >= 0)
3461 int num_to_save = high_to_save - low_to_save + 1;
3462 enum machine_mode save_mode
3463 = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
3466 /* If we don't have the required alignment, must do this in BLKmode. */
3467 if ((low_to_save & (MIN (GET_MODE_SIZE (save_mode),
3468 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
3469 save_mode = BLKmode;
3471 #ifdef ARGS_GROW_DOWNWARD
3472 stack_area = gen_rtx_MEM (save_mode,
3473 memory_address (save_mode,
3474 plus_constant (argblock,
3477 stack_area = gen_rtx_MEM (save_mode,
3478 memory_address (save_mode,
3479 plus_constant (argblock,
3482 if (save_mode == BLKmode)
3484 save_area = assign_stack_temp (BLKmode, num_to_save, 0);
3485 emit_block_move (validize_mem (save_area), stack_area,
3486 GEN_INT (num_to_save), PARM_BOUNDARY);
3490 save_area = gen_reg_rtx (save_mode);
3491 emit_move_insn (save_area, stack_area);
3497 /* Push the args that need to be pushed. */
3499 /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3500 are to be pushed. */
3501 for (count = 0; count < nargs; count++, argnum += inc)
3503 register enum machine_mode mode = argvec[argnum].mode;
3504 register rtx val = argvec[argnum].value;
3505 rtx reg = argvec[argnum].reg;
3506 int partial = argvec[argnum].partial;
3507 int lower_bound = 0, upper_bound = 0, i;
3509 if (! (reg != 0 && partial == 0))
3511 if (ACCUMULATE_OUTGOING_ARGS)
3513 /* If this is being stored into a pre-allocated, fixed-size, stack
3514 area, save any previous data at that location. */
3516 #ifdef ARGS_GROW_DOWNWARD
3517 /* stack_slot is negative, but we want to index stack_usage_map
3518 with positive values. */
3519 upper_bound = -argvec[argnum].offset.constant + 1;
3520 lower_bound = upper_bound - argvec[argnum].size.constant;
3522 lower_bound = argvec[argnum].offset.constant;
3523 upper_bound = lower_bound + argvec[argnum].size.constant;
3526 for (i = lower_bound; i < upper_bound; i++)
3527 if (stack_usage_map[i]
3528 /* Don't store things in the fixed argument area at this point;
3529 it has already been saved. */
3530 && i > reg_parm_stack_space)
3533 if (i != upper_bound)
3535 /* We need to make a save area. See what mode we can make it. */
3536 enum machine_mode save_mode
3537 = mode_for_size (argvec[argnum].size.constant * BITS_PER_UNIT,
3544 plus_constant (argblock,
3545 argvec[argnum].offset.constant)));
3546 argvec[argnum].save_area = gen_reg_rtx (save_mode);
3548 emit_move_insn (argvec[argnum].save_area, stack_area);
3552 emit_push_insn (val, mode, NULL_TREE, NULL_RTX, 0, partial, reg, 0,
3553 argblock, GEN_INT (argvec[argnum].offset.constant),
3554 reg_parm_stack_space, ARGS_SIZE_RTX (alignment_pad));
3556 /* Now mark the segment we just used. */
3557 if (ACCUMULATE_OUTGOING_ARGS)
3558 for (i = lower_bound; i < upper_bound; i++)
3559 stack_usage_map[i] = 1;
3565 #ifdef PREFERRED_STACK_BOUNDARY
3566 /* If we pushed args in forward order, perform stack alignment
3567 after pushing the last arg. */
3568 if (argblock == 0 && !PUSH_ARGS_REVERSED)
3569 anti_adjust_stack (GEN_INT (args_size.constant
3570 - original_args_size.constant));
3573 if (PUSH_ARGS_REVERSED)
3578 fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0);
3580 /* Now load any reg parms into their regs. */
3582 /* ARGNUM indexes the ARGVEC array in the order in which the arguments
3583 are to be pushed. */
3584 for (count = 0; count < nargs; count++, argnum += inc)
3586 register rtx val = argvec[argnum].value;
3587 rtx reg = argvec[argnum].reg;
3588 int partial = argvec[argnum].partial;
3590 /* Handle calls that pass values in multiple non-contiguous
3591 locations. The PA64 has examples of this for library calls. */
3592 if (reg != 0 && GET_CODE (reg) == PARALLEL)
3593 emit_group_load (reg, val,
3594 GET_MODE_SIZE (GET_MODE (val)),
3595 GET_MODE_ALIGNMENT (GET_MODE (val)));
3596 else if (reg != 0 && partial == 0)
3597 emit_move_insn (reg, val);
3603 /* For version 1.37, try deleting this entirely. */
3608 /* Any regs containing parms remain in use through the call. */
3609 for (count = 0; count < nargs; count++)
3611 rtx reg = argvec[count].reg;
3612 if (reg != 0 && GET_CODE (reg) == PARALLEL)
3613 use_group_regs (&call_fusage, reg);
3615 use_reg (&call_fusage, reg);
3618 /* Pass the function the address in which to return a structure value. */
3619 if (mem_value != 0 && struct_value_rtx != 0 && ! pcc_struct_value)
3621 emit_move_insn (struct_value_rtx,
3623 force_operand (XEXP (mem_value, 0),
3625 if (GET_CODE (struct_value_rtx) == REG)
3626 use_reg (&call_fusage, struct_value_rtx);
3629 /* Don't allow popping to be deferred, since then
3630 cse'ing of library calls could delete a call and leave the pop. */
3633 /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
3634 will set inhibit_defer_pop to that value. */
3635 /* The return type is needed to decide how many bytes the function pops.
3636 Signedness plays no role in that, so for simplicity, we pretend it's
3637 always signed. We also assume that the list of arguments passed has
3638 no impact, so we pretend it is unknown. */
3641 get_identifier (XSTR (orgfun, 0)),
3642 build_function_type (outmode == VOIDmode ? void_type_node
3643 : type_for_mode (outmode, 0), NULL_TREE),
3644 original_args_size.constant, args_size.constant,
3646 FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
3647 mem_value == 0 && outmode != VOIDmode ? hard_libcall_value (outmode) : NULL_RTX,
3648 old_inhibit_defer_pop + 1, call_fusage,
3649 ((is_const ? ECF_IS_CONST : 0)
3650 | (nothrow ? ECF_NOTHROW : 0)));
3652 /* Now restore inhibit_defer_pop to its actual original value. */
3657 /* Copy the value to the right place. */
3658 if (outmode != VOIDmode && retval)
3664 if (value != mem_value)
3665 emit_move_insn (value, mem_value);
3667 else if (value != 0)
3668 emit_move_insn (value, hard_libcall_value (outmode));
3670 value = hard_libcall_value (outmode);
3673 if (ACCUMULATE_OUTGOING_ARGS)
3675 #ifdef REG_PARM_STACK_SPACE
3678 enum machine_mode save_mode = GET_MODE (save_area);
3679 #ifdef ARGS_GROW_DOWNWARD
3681 = gen_rtx_MEM (save_mode,
3682 memory_address (save_mode,
3683 plus_constant (argblock,
3687 = gen_rtx_MEM (save_mode,
3688 memory_address (save_mode,
3689 plus_constant (argblock, low_to_save)));
3691 if (save_mode != BLKmode)
3692 emit_move_insn (stack_area, save_area);
3694 emit_block_move (stack_area, validize_mem (save_area),
3695 GEN_INT (high_to_save - low_to_save + 1),
3700 /* If we saved any argument areas, restore them. */
3701 for (count = 0; count < nargs; count++)
3702 if (argvec[count].save_area)
3704 enum machine_mode save_mode = GET_MODE (argvec[count].save_area);
3706 = gen_rtx_MEM (save_mode,
3709 plus_constant (argblock,
3710 argvec[count].offset.constant)));
3712 emit_move_insn (stack_area, argvec[count].save_area);
3715 highest_outgoing_arg_in_use = initial_highest_arg_in_use;
3716 stack_usage_map = initial_stack_usage_map;
3723 /* Output a library call to function FUN (a SYMBOL_REF rtx)
3724 (emitting the queue unless NO_QUEUE is nonzero),
3725 for a value of mode OUTMODE,
3726 with NARGS different arguments, passed as alternating rtx values
3727 and machine_modes to convert them to.
3728 The rtx values should have been passed through protect_from_queue already.
3730 NO_QUEUE will be true if and only if the library call is a `const' call
3731 which will be enclosed in REG_LIBCALL/REG_RETVAL notes; it is equivalent
3732 to the variable is_const in expand_call.
3734 NO_QUEUE must be true for const calls, because if it isn't, then
3735 any pending increment will be emitted between REG_LIBCALL/REG_RETVAL notes,
3736 and will be lost if the libcall sequence is optimized away.
3738 NO_QUEUE must be false for non-const calls, because if it isn't, the
3739 call insn will have its CONST_CALL_P bit set, and it will be incorrectly
3740 optimized. For instance, the instruction scheduler may incorrectly
3741 move memory references across the non-const call. */
3744 emit_library_call VPARAMS((rtx orgfun, int no_queue, enum machine_mode outmode,
3747 #ifndef ANSI_PROTOTYPES
3750 enum machine_mode outmode;
3755 VA_START (p, nargs);
3757 #ifndef ANSI_PROTOTYPES
3758 orgfun = va_arg (p, rtx);
3759 no_queue = va_arg (p, int);
3760 outmode = va_arg (p, enum machine_mode);
3761 nargs = va_arg (p, int);
3764 emit_library_call_value_1 (0, orgfun, NULL_RTX, no_queue, outmode, nargs, p);
3769 /* Like emit_library_call except that an extra argument, VALUE,
3770 comes second and says where to store the result.
3771 (If VALUE is zero, this function chooses a convenient way
3772 to return the value.
3774 This function returns an rtx for where the value is to be found.
3775 If VALUE is nonzero, VALUE is returned. */
3778 emit_library_call_value VPARAMS((rtx orgfun, rtx value, int no_queue,
3779 enum machine_mode outmode, int nargs, ...))
3781 #ifndef ANSI_PROTOTYPES
3785 enum machine_mode outmode;
3790 VA_START (p, nargs);
3792 #ifndef ANSI_PROTOTYPES
3793 orgfun = va_arg (p, rtx);
3794 value = va_arg (p, rtx);
3795 no_queue = va_arg (p, int);
3796 outmode = va_arg (p, enum machine_mode);
3797 nargs = va_arg (p, int);
3800 value = emit_library_call_value_1 (1, orgfun, value, no_queue, outmode, nargs, p);
3808 /* Return an rtx which represents a suitable home on the stack
3809 given TYPE, the type of the argument looking for a home.
3810 This is called only for BLKmode arguments.
3812 SIZE is the size needed for this target.
3813 ARGS_ADDR is the address of the bottom of the argument block for this call.
3814 OFFSET describes this parameter's offset into ARGS_ADDR. It is meaningless
3815 if this machine uses push insns. */
3818 target_for_arg (type, size, args_addr, offset)
3822 struct args_size offset;
3825 rtx offset_rtx = ARGS_SIZE_RTX (offset);
3827 /* We do not call memory_address if possible,
3828 because we want to address as close to the stack
3829 as possible. For non-variable sized arguments,
3830 this will be stack-pointer relative addressing. */
3831 if (GET_CODE (offset_rtx) == CONST_INT)
3832 target = plus_constant (args_addr, INTVAL (offset_rtx));
3835 /* I have no idea how to guarantee that this
3836 will work in the presence of register parameters. */
3837 target = gen_rtx_PLUS (Pmode, args_addr, offset_rtx);
3838 target = memory_address (QImode, target);
3841 return gen_rtx_MEM (BLKmode, target);
3845 /* Store a single argument for a function call
3846 into the register or memory area where it must be passed.
3847 *ARG describes the argument value and where to pass it.
3849 ARGBLOCK is the address of the stack-block for all the arguments,
3850 or 0 on a machine where arguments are pushed individually.
3852 MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
3853 so must be careful about how the stack is used.
3855 VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
3856 argument stack. This is used if ACCUMULATE_OUTGOING_ARGS to indicate
3857 that we need not worry about saving and restoring the stack.
3859 FNDECL is the declaration of the function we are calling. */
3862 store_one_arg (arg, argblock, may_be_alloca, variable_size,
3863 reg_parm_stack_space)
3864 struct arg_data *arg;
3867 int variable_size ATTRIBUTE_UNUSED;
3868 int reg_parm_stack_space;
3870 register tree pval = arg->tree_value;
3874 int i, lower_bound = 0, upper_bound = 0;
3876 if (TREE_CODE (pval) == ERROR_MARK)
3879 /* Push a new temporary level for any temporaries we make for
3883 if (ACCUMULATE_OUTGOING_ARGS)
3885 /* If this is being stored into a pre-allocated, fixed-size, stack area,
3886 save any previous data at that location. */
3887 if (argblock && ! variable_size && arg->stack)
3889 #ifdef ARGS_GROW_DOWNWARD
3890 /* stack_slot is negative, but we want to index stack_usage_map
3891 with positive values. */
3892 if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
3893 upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
3897 lower_bound = upper_bound - arg->size.constant;
3899 if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
3900 lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
3904 upper_bound = lower_bound + arg->size.constant;
3907 for (i = lower_bound; i < upper_bound; i++)
3908 if (stack_usage_map[i]
3909 /* Don't store things in the fixed argument area at this point;
3910 it has already been saved. */
3911 && i > reg_parm_stack_space)
3914 if (i != upper_bound)
3916 /* We need to make a save area. See what mode we can make it. */
3917 enum machine_mode save_mode
3918 = mode_for_size (arg->size.constant * BITS_PER_UNIT, MODE_INT, 1);
3920 = gen_rtx_MEM (save_mode,
3921 memory_address (save_mode,
3922 XEXP (arg->stack_slot, 0)));
3924 if (save_mode == BLKmode)
3926 arg->save_area = assign_stack_temp (BLKmode,
3927 arg->size.constant, 0);
3928 MEM_SET_IN_STRUCT_P (arg->save_area,
3929 AGGREGATE_TYPE_P (TREE_TYPE
3930 (arg->tree_value)));
3931 preserve_temp_slots (arg->save_area);
3932 emit_block_move (validize_mem (arg->save_area), stack_area,
3933 GEN_INT (arg->size.constant),
3938 arg->save_area = gen_reg_rtx (save_mode);
3939 emit_move_insn (arg->save_area, stack_area);
3943 /* Now that we have saved any slots that will be overwritten by this
3944 store, mark all slots this store will use. We must do this before
3945 we actually expand the argument since the expansion itself may
3946 trigger library calls which might need to use the same stack slot. */
3947 if (argblock && ! variable_size && arg->stack)
3948 for (i = lower_bound; i < upper_bound; i++)
3949 stack_usage_map[i] = 1;
3952 /* If this isn't going to be placed on both the stack and in registers,
3953 set up the register and number of words. */
3954 if (! arg->pass_on_stack)
3955 reg = arg->reg, partial = arg->partial;
3957 if (reg != 0 && partial == 0)
3958 /* Being passed entirely in a register. We shouldn't be called in
3962 /* If this arg needs special alignment, don't load the registers
3964 if (arg->n_aligned_regs != 0)
3967 /* If this is being passed partially in a register, we can't evaluate
3968 it directly into its stack slot. Otherwise, we can. */
3969 if (arg->value == 0)
3971 /* stack_arg_under_construction is nonzero if a function argument is
3972 being evaluated directly into the outgoing argument list and
3973 expand_call must take special action to preserve the argument list
3974 if it is called recursively.
3976 For scalar function arguments stack_usage_map is sufficient to
3977 determine which stack slots must be saved and restored. Scalar
3978 arguments in general have pass_on_stack == 0.
3980 If this argument is initialized by a function which takes the
3981 address of the argument (a C++ constructor or a C function
3982 returning a BLKmode structure), then stack_usage_map is
3983 insufficient and expand_call must push the stack around the
3984 function call. Such arguments have pass_on_stack == 1.
3986 Note that it is always safe to set stack_arg_under_construction,
3987 but this generates suboptimal code if set when not needed. */
3989 if (arg->pass_on_stack)
3990 stack_arg_under_construction++;
3992 arg->value = expand_expr (pval,
3994 || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
3995 ? NULL_RTX : arg->stack,
3998 /* If we are promoting object (or for any other reason) the mode
3999 doesn't agree, convert the mode. */
4001 if (arg->mode != TYPE_MODE (TREE_TYPE (pval)))
4002 arg->value = convert_modes (arg->mode, TYPE_MODE (TREE_TYPE (pval)),
4003 arg->value, arg->unsignedp);
4005 if (arg->pass_on_stack)
4006 stack_arg_under_construction--;
4009 /* Don't allow anything left on stack from computation
4010 of argument to alloca. */
4012 do_pending_stack_adjust ();
4014 if (arg->value == arg->stack)
4016 /* If the value is already in the stack slot, we are done. */
4017 if (current_function_check_memory_usage && GET_CODE (arg->stack) == MEM)
4019 emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3,
4020 XEXP (arg->stack, 0), Pmode,
4021 ARGS_SIZE_RTX (arg->size),
4022 TYPE_MODE (sizetype),
4023 GEN_INT (MEMORY_USE_RW),
4024 TYPE_MODE (integer_type_node));
4027 else if (arg->mode != BLKmode)
4031 /* Argument is a scalar, not entirely passed in registers.
4032 (If part is passed in registers, arg->partial says how much
4033 and emit_push_insn will take care of putting it there.)
4035 Push it, and if its size is less than the
4036 amount of space allocated to it,
4037 also bump stack pointer by the additional space.
4038 Note that in C the default argument promotions
4039 will prevent such mismatches. */
4041 size = GET_MODE_SIZE (arg->mode);
4042 /* Compute how much space the push instruction will push.
4043 On many machines, pushing a byte will advance the stack
4044 pointer by a halfword. */
4045 #ifdef PUSH_ROUNDING
4046 size = PUSH_ROUNDING (size);
4050 /* Compute how much space the argument should get:
4051 round up to a multiple of the alignment for arguments. */
4052 if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
4053 used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
4054 / (PARM_BOUNDARY / BITS_PER_UNIT))
4055 * (PARM_BOUNDARY / BITS_PER_UNIT));
4057 /* This isn't already where we want it on the stack, so put it there.
4058 This can either be done with push or copy insns. */
4059 emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX, 0,
4060 partial, reg, used - size, argblock,
4061 ARGS_SIZE_RTX (arg->offset), reg_parm_stack_space,
4062 ARGS_SIZE_RTX (arg->alignment_pad));
4066 /* BLKmode, at least partly to be pushed. */
4068 register int excess;
4071 /* Pushing a nonscalar.
4072 If part is passed in registers, PARTIAL says how much
4073 and emit_push_insn will take care of putting it there. */
4075 /* Round its size up to a multiple
4076 of the allocation unit for arguments. */
4078 if (arg->size.var != 0)
4081 size_rtx = ARGS_SIZE_RTX (arg->size);
4085 /* PUSH_ROUNDING has no effect on us, because
4086 emit_push_insn for BLKmode is careful to avoid it. */
4087 excess = (arg->size.constant - int_size_in_bytes (TREE_TYPE (pval))
4088 + partial * UNITS_PER_WORD);
4089 size_rtx = expr_size (pval);
4092 emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
4093 TYPE_ALIGN (TREE_TYPE (pval)), partial, reg, excess,
4094 argblock, ARGS_SIZE_RTX (arg->offset),
4095 reg_parm_stack_space,
4096 ARGS_SIZE_RTX (arg->alignment_pad));
4100 /* Unless this is a partially-in-register argument, the argument is now
4103 ??? Note that this can change arg->value from arg->stack to
4104 arg->stack_slot and it matters when they are not the same.
4105 It isn't totally clear that this is correct in all cases. */
4107 arg->value = arg->stack_slot;
4109 /* Once we have pushed something, pops can't safely
4110 be deferred during the rest of the arguments. */
4113 /* ANSI doesn't require a sequence point here,
4114 but PCC has one, so this will avoid some problems. */
4117 /* Free any temporary slots made in processing this argument. Show
4118 that we might have taken the address of something and pushed that
4120 preserve_temp_slots (NULL_RTX);