calls.c 136 KB
Newer Older
Richard Stallman committed
1
/* Convert function calls to rtl insns, for GNU C compiler.
DJ Delorie committed
2
   Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Richard Stallman committed
4

5
This file is part of GCC.
Richard Stallman committed
6

7 8 9 10
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
Richard Stallman committed
11

12 13 14 15
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.
Richard Stallman committed
16 17

You should have received a copy of the GNU General Public License
18 19 20
along with GCC; see the file COPYING.  If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */
Richard Stallman committed
21 22

#include "config.h"
23
#include "system.h"
24 25
#include "coretypes.h"
#include "tm.h"
26 27 28 29
#include "rtl.h"
#include "tree.h"
#include "flags.h"
#include "expr.h"
30
#include "optabs.h"
31
#include "libfuncs.h"
32
#include "function.h"
33
#include "regs.h"
Robert Lipe committed
34
#include "toplev.h"
Kaveh R. Ghazi committed
35
#include "output.h"
36
#include "tm_p.h"
37
#include "timevar.h"
38
#include "sbitmap.h"
39
#include "langhooks.h"
40
#include "target.h"
41
#include "cgraph.h"
42
#include "except.h"
Richard Stallman committed
43

44 45
/* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits.  */
#define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
Richard Stallman committed
46 47 48 49 50 51 52

/* Data structure and subroutines used within expand_call.  */

struct arg_data
{
  /* Tree node for this argument.  */
  tree tree_value;
53 54
  /* Mode for value; TYPE_MODE unless promoted.  */
  enum machine_mode mode;
Richard Stallman committed
55 56 57 58 59
  /* Current RTL value for argument, or 0 if it isn't precomputed.  */
  rtx value;
  /* Initially-compute RTL value for argument; only for const functions.  */
  rtx initial_value;
  /* Register to pass this argument in, 0 if passed on stack, or an
60
     PARALLEL if the arg is to be copied into multiple non-contiguous
Richard Stallman committed
61 62
     registers.  */
  rtx reg;
63 64 65 66
  /* Register to pass this argument in when generating tail call sequence.
     This is not the same register as for normal calls on machines with
     register windows.  */
  rtx tail_call_reg;
67 68 69
  /* If REG is a PARALLEL, this is a copy of VALUE pulled into the correct
     form for emit_group_move.  */
  rtx parallel_value;
70 71 72
  /* If REG was promoted from the actual mode of the argument expression,
     indicates whether the promotion is sign- or zero-extended.  */
  int unsignedp;
Richard Stallman committed
73 74 75
  /* Number of registers to use.  0 means put the whole arg in registers.
     Also 0 if not passed in registers.  */
  int partial;
76
  /* Nonzero if argument must be passed on stack.
77 78 79
     Note that some arguments may be passed on the stack
     even though pass_on_stack is zero, just because FUNCTION_ARG says so.
     pass_on_stack identifies arguments that *cannot* go in registers.  */
Richard Stallman committed
80
  int pass_on_stack;
81 82
  /* Some fields packaged up for locate_and_pad_parm.  */
  struct locate_and_pad_arg_data locate;
Richard Stallman committed
83 84 85 86 87 88 89 90 91
  /* Location on the stack at which parameter should be stored.  The store
     has already been done if STACK == VALUE.  */
  rtx stack;
  /* Location on the stack of the start of this argument slot.  This can
     differ from STACK if this arg pads downward.  This location is known
     to be aligned to FUNCTION_ARG_BOUNDARY.  */
  rtx stack_slot;
  /* Place that this stack area has been saved, if needed.  */
  rtx save_area;
92 93 94 95 96 97
  /* If an argument's alignment does not permit direct copying into registers,
     copy in smaller-sized pieces into pseudos.  These are stored in a
     block pointed to by this field.  The next field says how many
     word-sized pseudos we made.  */
  rtx *aligned_regs;
  int n_aligned_regs;
Richard Stallman committed
98 99
};

100
/* A vector of one char per byte of stack space.  A byte if nonzero if
Richard Stallman committed
101 102 103 104 105 106 107
   the corresponding stack location has been used.
   This vector is used to prevent a function call within an argument from
   clobbering any stack already set up.  */
static char *stack_usage_map;

/* Size of STACK_USAGE_MAP.  */
static int highest_outgoing_arg_in_use;
108

109 110 111 112 113 114 115
/* A bitmap of virtual-incoming stack space.  Bit is set if the corresponding
   stack location's tail call argument has been already stored into the stack.
   This bitmap is used to prevent sibling call optimization if function tries
   to use parent's incoming argument slots when they have been already
   overwritten with tail call arguments.  */
static sbitmap stored_args_map;

116 117 118 119 120 121
/* stack_arg_under_construction is nonzero when an argument may be
   initialized with a constructor call (including a C function that
   returns a BLKmode struct) and expand_call must take special action
   to make sure the object being constructed does not overlap the
   argument list for the constructor call.  */
int stack_arg_under_construction;
Richard Stallman committed
122

123
static void emit_call_1 (rtx, tree, tree, tree, HOST_WIDE_INT, HOST_WIDE_INT,
124 125 126 127 128 129 130 131 132 133 134 135
			 HOST_WIDE_INT, rtx, rtx, int, rtx, int,
			 CUMULATIVE_ARGS *);
static void precompute_register_parameters (int, struct arg_data *, int *);
static int store_one_arg (struct arg_data *, rtx, int, int, int);
static void store_unaligned_arguments_into_pseudos (struct arg_data *, int);
static int finalize_must_preallocate (int, int, struct arg_data *,
				      struct args_size *);
static void precompute_arguments (int, int, struct arg_data *);
static int compute_argument_block_size (int, struct args_size *, int);
static void initialize_argument_information (int, struct arg_data *,
					     struct args_size *, int, tree,
					     tree, CUMULATIVE_ARGS *, int,
136
					     rtx *, int *, int *, int *,
137
					     bool *, bool);
138 139 140 141 142 143 144 145 146 147 148
static void compute_argument_addresses (struct arg_data *, rtx, int);
static rtx rtx_for_function_call (tree, tree);
static void load_register_parameters (struct arg_data *, int, rtx *, int,
				      int, int *);
static rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
				      enum machine_mode, int, va_list);
static int special_function_p (tree, int);
static int check_sibcall_argument_overlap_1 (rtx);
static int check_sibcall_argument_overlap (rtx, struct arg_data *, int);

static int combine_pending_stack_adjustment_and_call (int, struct args_size *,
149
						      unsigned int);
150
static bool shift_returned_value (tree, rtx *);
151 152
static tree split_complex_values (tree);
static tree split_complex_types (tree);
153

154
#ifdef REG_PARM_STACK_SPACE
155 156
static rtx save_fixed_argument_area (int, rtx, int *, int *);
static void restore_fixed_argument_area (rtx, rtx, int, int);
157
#endif
Richard Stallman committed
158 159 160 161 162

/* Force FUNEXP into a form suitable for the address of a CALL,
   and return that as an rtx.  Also load the static chain register
   if FNDECL is a nested function.

163 164
   CALL_FUSAGE points to a variable holding the prospective
   CALL_INSN_FUNCTION_USAGE information.  */
Richard Stallman committed
165

166
rtx
167 168
prepare_call_address (rtx funexp, rtx static_chain_value,
		      rtx *call_fusage, int reg_parm_seen, int sibcallp)
Richard Stallman committed
169
{
170
  /* Make a valid memory address and copy constants through pseudo-regs,
Richard Stallman committed
171 172
     but not for a constant address if -fno-function-cse.  */
  if (GET_CODE (funexp) != SYMBOL_REF)
173
    /* If we are using registers for parameters, force the
174 175 176 177
       function address into a register now.  */
    funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
	      ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
	      : memory_address (FUNCTION_MODE, funexp));
178
  else if (! sibcallp)
Richard Stallman committed
179 180 181
    {
#ifndef NO_FUNCTION_CSE
      if (optimize && ! flag_no_function_cse)
182
	funexp = force_reg (Pmode, funexp);
Richard Stallman committed
183 184 185 186 187
#endif
    }

  if (static_chain_value != 0)
    {
188
      static_chain_value = convert_memory_address (Pmode, static_chain_value);
Richard Stallman committed
189 190
      emit_move_insn (static_chain_rtx, static_chain_value);

191
      if (REG_P (static_chain_rtx))
192
	use_reg (call_fusage, static_chain_rtx);
Richard Stallman committed
193 194 195 196 197 198 199 200 201
    }

  return funexp;
}

/* Generate instructions to call function FUNEXP,
   and optionally pop the results.
   The CALL_INSN is the first insn generated.

Richard Kenner committed
202
   FNDECL is the declaration node of the function.  This is given to the
203 204
   macro RETURN_POPS_ARGS to determine whether this function pops its own args.

Richard Kenner committed
205 206 207 208 209
   FUNTYPE is the data type of the function.  This is given to the macro
   RETURN_POPS_ARGS to determine whether this function pops its own args.
   We used to allow an identifier for library functions, but that doesn't
   work when the return type is an aggregate type and the calling convention
   says that the pointer to this aggregate is to be popped by the callee.
Richard Stallman committed
210 211

   STACK_SIZE is the number of bytes of arguments on the stack,
212 213 214 215
   ROUNDED_STACK_SIZE is that number rounded up to
   PREFERRED_STACK_BOUNDARY; zero if the size is variable.  This is
   both to put into the call insn and to generate explicit popping
   code if necessary.
Richard Stallman committed
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234

   STRUCT_VALUE_SIZE is the number of bytes wanted in a structure value.
   It is zero if this call doesn't want a structure value.

   NEXT_ARG_REG is the rtx that results from executing
     FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1)
   just after all the args have had their registers assigned.
   This could be whatever you like, but normally it is the first
   arg-register beyond those used for args in this call,
   or 0 if all the arg-registers are used in this call.
   It is passed on to `gen_call' so you can put this info in the call insn.

   VALREG is a hard register in which a value is returned,
   or 0 if the call does not return a value.

   OLD_INHIBIT_DEFER_POP is the value that `inhibit_defer_pop' had before
   the args to this call were processed.
   We restore `inhibit_defer_pop' to that value.

Richard Kenner committed
235
   CALL_FUSAGE is either empty or an EXPR_LIST of USE expressions that
Kazu Hirata committed
236
   denote registers used by the called function.  */
Kazu Hirata committed
237

Richard Kenner committed
238
static void
239 240
emit_call_1 (rtx funexp, tree fntree, tree fndecl ATTRIBUTE_UNUSED,
	     tree funtype ATTRIBUTE_UNUSED,
241 242 243 244 245 246
	     HOST_WIDE_INT stack_size ATTRIBUTE_UNUSED,
	     HOST_WIDE_INT rounded_stack_size,
	     HOST_WIDE_INT struct_value_size ATTRIBUTE_UNUSED,
	     rtx next_arg_reg ATTRIBUTE_UNUSED, rtx valreg,
	     int old_inhibit_defer_pop, rtx call_fusage, int ecf_flags,
	     CUMULATIVE_ARGS *args_so_far ATTRIBUTE_UNUSED)
Richard Stallman committed
247
{
248
  rtx rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
Richard Stallman committed
249 250
  rtx call_insn;
  int already_popped = 0;
251
  HOST_WIDE_INT n_popped = RETURN_POPS_ARGS (fndecl, funtype, stack_size);
252 253 254 255
#if defined (HAVE_call) && defined (HAVE_call_value)
  rtx struct_value_size_rtx;
  struct_value_size_rtx = GEN_INT (struct_value_size);
#endif
Richard Stallman committed
256

Alexandre Oliva committed
257 258 259
#ifdef CALL_POPS_ARGS
  n_popped += CALL_POPS_ARGS (* args_so_far);
#endif
260

Richard Stallman committed
261 262 263 264 265 266
  /* Ensure address is valid.  SYMBOL_REF is already valid, so no need,
     and we don't want to load it into a register as an optimization,
     because prepare_call_address already did it if it should be done.  */
  if (GET_CODE (funexp) != SYMBOL_REF)
    funexp = memory_address (FUNCTION_MODE, funexp);

267 268 269
#if defined (HAVE_sibcall_pop) && defined (HAVE_sibcall_value_pop)
  if ((ecf_flags & ECF_SIBCALL)
      && HAVE_sibcall_pop && HAVE_sibcall_value_pop
270
      && (n_popped > 0 || stack_size == 0))
271
    {
272
      rtx n_pop = GEN_INT (n_popped);
273 274 275 276 277 278
      rtx pat;

      /* If this subroutine pops its own args, record that in the call insn
	 if possible, for the sake of frame pointer elimination.  */

      if (valreg)
279
	pat = GEN_SIBCALL_VALUE_POP (valreg,
280 281 282 283
				     gen_rtx_MEM (FUNCTION_MODE, funexp),
				     rounded_stack_size_rtx, next_arg_reg,
				     n_pop);
      else
284
	pat = GEN_SIBCALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
285 286 287 288 289 290 291 292
			       rounded_stack_size_rtx, next_arg_reg, n_pop);

      emit_call_insn (pat);
      already_popped = 1;
    }
  else
#endif

Richard Stallman committed
293
#if defined (HAVE_call_pop) && defined (HAVE_call_value_pop)
294 295 296 297
  /* If the target has "call" or "call_value" insns, then prefer them
     if no arguments are actually popped.  If the target does not have
     "call" or "call_value" insns, then we must use the popping versions
     even if the call has no arguments to pop.  */
298 299
#if defined (HAVE_call) && defined (HAVE_call_value)
  if (HAVE_call && HAVE_call_value && HAVE_call_pop && HAVE_call_value_pop
300
      && n_popped > 0 && ! (ecf_flags & ECF_SP_DEPRESSED))
301 302 303
#else
  if (HAVE_call_pop && HAVE_call_value_pop)
#endif
Richard Stallman committed
304
    {
305
      rtx n_pop = GEN_INT (n_popped);
Richard Stallman committed
306 307 308 309
      rtx pat;

      /* If this subroutine pops its own args, record that in the call insn
	 if possible, for the sake of frame pointer elimination.  */
310

Richard Stallman committed
311
      if (valreg)
312
	pat = GEN_CALL_VALUE_POP (valreg,
313
				  gen_rtx_MEM (FUNCTION_MODE, funexp),
314
				  rounded_stack_size_rtx, next_arg_reg, n_pop);
Richard Stallman committed
315
      else
316
	pat = GEN_CALL_POP (gen_rtx_MEM (FUNCTION_MODE, funexp),
317
			    rounded_stack_size_rtx, next_arg_reg, n_pop);
Richard Stallman committed
318 319 320 321 322 323 324

      emit_call_insn (pat);
      already_popped = 1;
    }
  else
#endif

325 326 327 328 329
#if defined (HAVE_sibcall) && defined (HAVE_sibcall_value)
  if ((ecf_flags & ECF_SIBCALL)
      && HAVE_sibcall && HAVE_sibcall_value)
    {
      if (valreg)
330
	emit_call_insn (GEN_SIBCALL_VALUE (valreg,
331 332 333 334
					   gen_rtx_MEM (FUNCTION_MODE, funexp),
					   rounded_stack_size_rtx,
					   next_arg_reg, NULL_RTX));
      else
335
	emit_call_insn (GEN_SIBCALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
336 337 338 339 340 341
				     rounded_stack_size_rtx, next_arg_reg,
				     struct_value_size_rtx));
    }
  else
#endif

Richard Stallman committed
342 343 344 345
#if defined (HAVE_call) && defined (HAVE_call_value)
  if (HAVE_call && HAVE_call_value)
    {
      if (valreg)
346
	emit_call_insn (GEN_CALL_VALUE (valreg,
347
					gen_rtx_MEM (FUNCTION_MODE, funexp),
348
					rounded_stack_size_rtx, next_arg_reg,
349
					NULL_RTX));
Richard Stallman committed
350
      else
351
	emit_call_insn (GEN_CALL (gen_rtx_MEM (FUNCTION_MODE, funexp),
352
				  rounded_stack_size_rtx, next_arg_reg,
Richard Stallman committed
353 354 355 356
				  struct_value_size_rtx));
    }
  else
#endif
357
    gcc_unreachable ();
Richard Stallman committed
358

359 360
  /* Find the call we just emitted.  */
  call_insn = last_call_insn ();
Richard Stallman committed
361

362 363
  /* Mark memory as used for "pure" function call.  */
  if (ecf_flags & ECF_PURE)
364 365 366 367 368 369
    call_fusage
      = gen_rtx_EXPR_LIST
	(VOIDmode,
	 gen_rtx_USE (VOIDmode,
		      gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode))),
	 call_fusage);
370

371 372
  /* Put the register usage information there.  */
  add_function_usage_to (call_insn, call_fusage);
Richard Stallman committed
373 374

  /* If this is a const call, then set the insn's unchanging bit.  */
375
  if (ecf_flags & (ECF_CONST | ECF_PURE))
376
    CONST_OR_PURE_CALL_P (call_insn) = 1;
Richard Stallman committed
377

378 379
  /* If this call can't throw, attach a REG_EH_REGION reg note to that
     effect.  */
380
  if (ecf_flags & ECF_NOTHROW)
381
    REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, const0_rtx,
382
					       REG_NOTES (call_insn));
383
  else
384 385 386 387 388 389 390 391 392 393
    {
      int rn = lookup_stmt_eh_region (fntree);

      /* If rn < 0, then either (1) tree-ssa not used or (2) doesn't
	 throw, which we already took care of.  */
      if (rn > 0)
	REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_EH_REGION, GEN_INT (rn),
						   REG_NOTES (call_insn));
      note_current_region_may_contain_throw ();
    }
394

395 396 397
  if (ecf_flags & ECF_NORETURN)
    REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_NORETURN, const0_rtx,
					       REG_NOTES (call_insn));
398 399 400
  if (ecf_flags & ECF_ALWAYS_RETURN)
    REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_ALWAYS_RETURN, const0_rtx,
					       REG_NOTES (call_insn));
401

402
  if (ecf_flags & ECF_RETURNS_TWICE)
403 404 405 406 407
    {
      REG_NOTES (call_insn) = gen_rtx_EXPR_LIST (REG_SETJMP, const0_rtx,
					         REG_NOTES (call_insn));
      current_function_calls_setjmp = 1;
    }
408

409 410
  SIBLING_CALL_P (call_insn) = ((ecf_flags & ECF_SIBCALL) != 0);

411 412 413 414
  /* Restore this now, so that we do defer pops for this call's args
     if the context of the call as a whole permits.  */
  inhibit_defer_pop = old_inhibit_defer_pop;

415
  if (n_popped > 0)
Richard Stallman committed
416 417
    {
      if (!already_popped)
418
	CALL_INSN_FUNCTION_USAGE (call_insn)
419 420 421
	  = gen_rtx_EXPR_LIST (VOIDmode,
			       gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx),
			       CALL_INSN_FUNCTION_USAGE (call_insn));
422
      rounded_stack_size -= n_popped;
423
      rounded_stack_size_rtx = GEN_INT (rounded_stack_size);
424
      stack_pointer_delta -= n_popped;
Richard Stallman committed
425 426
    }

427
  if (!ACCUMULATE_OUTGOING_ARGS)
Richard Stallman committed
428
    {
429 430 431 432 433 434 435
      /* If returning from the subroutine does not automatically pop the args,
	 we need an instruction to pop them sooner or later.
	 Perhaps do it now; perhaps just record how much space to pop later.

	 If returning from the subroutine does pop the args, indicate that the
	 stack pointer will be changed.  */

436
      if (rounded_stack_size != 0)
437
	{
438
	  if (ecf_flags & (ECF_SP_DEPRESSED | ECF_NORETURN | ECF_LONGJMP))
439 440 441
	    /* Just pretend we did the pop.  */
	    stack_pointer_delta -= rounded_stack_size;
	  else if (flag_defer_pop && inhibit_defer_pop == 0
442
	      && ! (ecf_flags & (ECF_CONST | ECF_PURE)))
443 444 445 446
	    pending_stack_adjust += rounded_stack_size;
	  else
	    adjust_stack (rounded_stack_size_rtx);
	}
Richard Stallman committed
447
    }
448 449 450 451 452 453 454 455
  /* When we accumulate outgoing args, we must avoid any stack manipulations.
     Restore the stack pointer to its original value now.  Usually
     ACCUMULATE_OUTGOING_ARGS targets don't get here, but there are exceptions.
     On  i386 ACCUMULATE_OUTGOING_ARGS can be enabled on demand, and
     popping variants of functions exist as well.

     ??? We may optimize similar to defer_pop above, but it is
     probably not worthwhile.
Kazu Hirata committed
456

457 458 459 460
     ??? It will be worthwhile to enable combine_stack_adjustments even for
     such machines.  */
  else if (n_popped)
    anti_adjust_stack (GEN_INT (n_popped));
Richard Stallman committed
461 462
}

463 464 465 466 467 468
/* Determine if the function identified by NAME and FNDECL is one with
   special properties we wish to know about.

   For example, if the function might return more than one time (setjmp), then
   set RETURNS_TWICE to a nonzero value.

469
   Similarly set LONGJMP for if the function is in the longjmp family.
470 471 472 473

   Set MAY_BE_ALLOCA for any memory allocation function that might allocate
   space from the stack such as alloca.  */

474
static int
475
special_function_p (tree fndecl, int flags)
476
{
477
  if (fndecl && DECL_NAME (fndecl)
478
      && IDENTIFIER_LENGTH (DECL_NAME (fndecl)) <= 17
479 480
      /* Exclude functions not at the file scope, or not `extern',
	 since they are not the magic functions we would otherwise
Geoffrey Keating committed
481 482 483 484 485
	 think they are.
         FIXME: this should be handled with attributes, not with this
         hacky imitation of DECL_ASSEMBLER_NAME.  It's (also) wrong
         because you can declare fork() inside a function if you
         wish.  */
486
      && (DECL_CONTEXT (fndecl) == NULL_TREE
Geoffrey Keating committed
487 488
	  || TREE_CODE (DECL_CONTEXT (fndecl)) == TRANSLATION_UNIT_DECL)
      && TREE_PUBLIC (fndecl))
489
    {
Zack Weinberg committed
490 491
      const char *name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
      const char *tname = name;
492

493 494 495
      /* We assume that alloca will always be called by name.  It
	 makes no sense to pass it as a pointer-to-function to
	 anything that does not understand its behavior.  */
496 497 498 499 500 501 502
      if (((IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 6
	    && name[0] == 'a'
	    && ! strcmp (name, "alloca"))
	   || (IDENTIFIER_LENGTH (DECL_NAME (fndecl)) == 16
	       && name[0] == '_'
	       && ! strcmp (name, "__builtin_alloca"))))
	flags |= ECF_MAY_BE_ALLOCA;
503

504 505 506 507 508 509 510 511 512 513 514 515 516
      /* Disregard prefix _, __ or __x.  */
      if (name[0] == '_')
	{
	  if (name[1] == '_' && name[2] == 'x')
	    tname += 3;
	  else if (name[1] == '_')
	    tname += 2;
	  else
	    tname += 1;
	}

      if (tname[0] == 's')
	{
517 518 519 520 521 522 523 524 525
	  if ((tname[1] == 'e'
	       && (! strcmp (tname, "setjmp")
		   || ! strcmp (tname, "setjmp_syscall")))
	      || (tname[1] == 'i'
		  && ! strcmp (tname, "sigsetjmp"))
	      || (tname[1] == 'a'
		  && ! strcmp (tname, "savectx")))
	    flags |= ECF_RETURNS_TWICE;

526 527
	  if (tname[1] == 'i'
	      && ! strcmp (tname, "siglongjmp"))
528
	    flags |= ECF_LONGJMP;
529 530 531 532 533
	}
      else if ((tname[0] == 'q' && tname[1] == 's'
		&& ! strcmp (tname, "qsetjmp"))
	       || (tname[0] == 'v' && tname[1] == 'f'
		   && ! strcmp (tname, "vfork")))
534
	flags |= ECF_RETURNS_TWICE;
535 536 537

      else if (tname[0] == 'l' && tname[1] == 'o'
	       && ! strcmp (tname, "longjmp"))
538
	flags |= ECF_LONGJMP;
539
    }
540

541
  return flags;
542 543
}

544
/* Return nonzero when tree represent call to longjmp.  */
545

546
int
547
setjmp_call_p (tree fndecl)
548 549 550 551
{
  return special_function_p (fndecl, 0) & ECF_RETURNS_TWICE;
}

552 553
/* Return true when exp contains alloca call.  */
bool
554
alloca_call_p (tree exp)
555 556 557 558 559 560 561 562 563 564 565
{
  if (TREE_CODE (exp) == CALL_EXPR
      && TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR
      && (TREE_CODE (TREE_OPERAND (TREE_OPERAND (exp, 0), 0))
	  == FUNCTION_DECL)
      && (special_function_p (TREE_OPERAND (TREE_OPERAND (exp, 0), 0),
			      0) & ECF_MAY_BE_ALLOCA))
    return true;
  return false;
}

566
/* Detect flags (function attributes) from the function decl or type node.  */
567

568
int
569
flags_from_decl_or_type (tree exp)
570 571
{
  int flags = 0;
572
  tree type = exp;
573

574 575
  if (DECL_P (exp))
    {
576
      struct cgraph_rtl_info *i = cgraph_rtl_info (exp);
577 578
      type = TREE_TYPE (exp);

579 580 581 582 583 584 585
      if (i)
	{
	  if (i->pure_function)
	    flags |= ECF_PURE | ECF_LIBCALL_BLOCK;
	  if (i->const_function)
	    flags |= ECF_CONST | ECF_LIBCALL_BLOCK;
	}
586

587
      /* The function exp may have the `malloc' attribute.  */
588
      if (DECL_IS_MALLOC (exp))
589 590
	flags |= ECF_MALLOC;

591
      /* The function exp may have the `pure' attribute.  */
592
      if (DECL_IS_PURE (exp))
593
	flags |= ECF_PURE | ECF_LIBCALL_BLOCK;
594

595 596
      if (TREE_NOTHROW (exp))
	flags |= ECF_NOTHROW;
597 598

      if (TREE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
599
	flags |= ECF_LIBCALL_BLOCK | ECF_CONST;
600 601

      flags = special_function_p (exp, flags);
602
    }
603
  else if (TYPE_P (exp) && TYPE_READONLY (exp) && ! TREE_THIS_VOLATILE (exp))
604
    flags |= ECF_CONST;
605 606 607 608

  if (TREE_THIS_VOLATILE (exp))
    flags |= ECF_NORETURN;

609 610 611 612 613
  /* Mark if the function returns with the stack pointer depressed.   We
     cannot consider it pure or constant in that case.  */
  if (TREE_CODE (type) == FUNCTION_TYPE && TYPE_RETURNS_STACK_DEPRESSED (type))
    {
      flags |= ECF_SP_DEPRESSED;
614
      flags &= ~(ECF_PURE | ECF_CONST | ECF_LIBCALL_BLOCK);
615 616
    }

617 618 619
  return flags;
}

620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641
/* Detect flags from a CALL_EXPR.  */

int
call_expr_flags (tree t)
{
  int flags;
  tree decl = get_callee_fndecl (t);

  if (decl)
    flags = flags_from_decl_or_type (decl);
  else
    {
      t = TREE_TYPE (TREE_OPERAND (t, 0));
      if (t && TREE_CODE (t) == POINTER_TYPE)
	flags = flags_from_decl_or_type (TREE_TYPE (t));
      else
	flags = 0;
    }

  return flags;
}

642 643 644 645 646 647 648 649
/* Precompute all register parameters as described by ARGS, storing values
   into fields within the ARGS array.

   NUM_ACTUALS indicates the total number elements in the ARGS array.

   Set REG_PARM_SEEN if we encounter a register parameter.  */

static void
650 651
precompute_register_parameters (int num_actuals, struct arg_data *args,
				int *reg_parm_seen)
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670
{
  int i;

  *reg_parm_seen = 0;

  for (i = 0; i < num_actuals; i++)
    if (args[i].reg != 0 && ! args[i].pass_on_stack)
      {
	*reg_parm_seen = 1;

	if (args[i].value == 0)
	  {
	    push_temp_slots ();
	    args[i].value = expand_expr (args[i].tree_value, NULL_RTX,
					 VOIDmode, 0);
	    preserve_temp_slots (args[i].value);
	    pop_temp_slots ();
	  }

671 672 673 674 675 676
	/* If the value is a non-legitimate constant, force it into a
	   pseudo now.  TLS symbols sometimes need a call to resolve.  */
	if (CONSTANT_P (args[i].value)
	    && !LEGITIMATE_CONSTANT_P (args[i].value))
	  args[i].value = force_reg (args[i].mode, args[i].value);

677 678 679 680 681 682 683 684 685
	/* If we are to promote the function arg to a wider mode,
	   do it now.  */

	if (args[i].mode != TYPE_MODE (TREE_TYPE (args[i].tree_value)))
	  args[i].value
	    = convert_modes (args[i].mode,
			     TYPE_MODE (TREE_TYPE (args[i].tree_value)),
			     args[i].value, args[i].unsignedp);

686 687 688 689 690 691
	/* If we're going to have to load the value by parts, pull the
	   parts into pseudos.  The part extraction process can involve
	   non-trivial computation.  */
	if (GET_CODE (args[i].reg) == PARALLEL)
	  {
	    tree type = TREE_TYPE (args[i].tree_value);
692
	    args[i].parallel_value
693 694 695 696
	      = emit_group_load_into_temps (args[i].reg, args[i].value,
					    type, int_size_in_bytes (type));
	  }

Kazu Hirata committed
697
	/* If the value is expensive, and we are inside an appropriately
698 699 700 701 702 703 704
	   short loop, put the value into a pseudo and then put the pseudo
	   into the hard reg.

	   For small register classes, also do this if this call uses
	   register parameters.  This is to avoid reload conflicts while
	   loading the parameters registers.  */

705 706 707 708 709 710 711
	else if ((! (REG_P (args[i].value)
		     || (GET_CODE (args[i].value) == SUBREG
			 && REG_P (SUBREG_REG (args[i].value)))))
		 && args[i].mode != BLKmode
		 && rtx_cost (args[i].value, SET) > COSTS_N_INSNS (1)
		 && ((SMALL_REGISTER_CLASSES && *reg_parm_seen)
		     || optimize))
712 713 714 715
	  args[i].value = copy_to_mode_reg (args[i].mode, args[i].value);
      }
}

716
#ifdef REG_PARM_STACK_SPACE
717 718 719 720

  /* The argument list is the property of the called routine and it
     may clobber it.  If the fixed area has been used for previous
     parameters, we must save and restore it.  */
721

722
static rtx
723
save_fixed_argument_area (int reg_parm_stack_space, rtx argblock, int *low_to_save, int *high_to_save)
724
{
725 726
  int low;
  int high;
727

728 729
  /* Compute the boundary of the area that needs to be saved, if any.  */
  high = reg_parm_stack_space;
730
#ifdef ARGS_GROW_DOWNWARD
731
  high += 1;
732
#endif
733 734
  if (high > highest_outgoing_arg_in_use)
    high = highest_outgoing_arg_in_use;
735

736 737 738 739 740 741 742 743
  for (low = 0; low < high; low++)
    if (stack_usage_map[low] != 0)
      {
	int num_to_save;
	enum machine_mode save_mode;
	int delta;
	rtx stack_area;
	rtx save_area;
744

745 746
	while (stack_usage_map[--high] == 0)
	  ;
747

748 749 750 751 752
	*low_to_save = low;
	*high_to_save = high;

	num_to_save = high - low + 1;
	save_mode = mode_for_size (num_to_save * BITS_PER_UNIT, MODE_INT, 1);
753

754 755 756 757 758
	/* If we don't have the required alignment, must do this
	   in BLKmode.  */
	if ((low & (MIN (GET_MODE_SIZE (save_mode),
			 BIGGEST_ALIGNMENT / UNITS_PER_WORD) - 1)))
	  save_mode = BLKmode;
759 760

#ifdef ARGS_GROW_DOWNWARD
761
	delta = -high;
762
#else
763
	delta = low;
764
#endif
765 766 767 768
	stack_area = gen_rtx_MEM (save_mode,
				  memory_address (save_mode,
						  plus_constant (argblock,
								 delta)));
769

770 771 772 773 774 775 776 777 778 779 780 781
	set_mem_align (stack_area, PARM_BOUNDARY);
	if (save_mode == BLKmode)
	  {
	    save_area = assign_stack_temp (BLKmode, num_to_save, 0);
	    emit_block_move (validize_mem (save_area), stack_area,
			     GEN_INT (num_to_save), BLOCK_OP_CALL_PARM);
	  }
	else
	  {
	    save_area = gen_reg_rtx (save_mode);
	    emit_move_insn (save_area, stack_area);
	  }
782

783 784 785 786
	return save_area;
      }

  return NULL_RTX;
787 788 789
}

static void
790
restore_fixed_argument_area (rtx save_area, rtx argblock, int high_to_save, int low_to_save)
791 792
{
  enum machine_mode save_mode = GET_MODE (save_area);
793 794 795
  int delta;
  rtx stack_area;

796
#ifdef ARGS_GROW_DOWNWARD
797
  delta = -high_to_save;
798
#else
799
  delta = low_to_save;
800
#endif
801 802 803 804
  stack_area = gen_rtx_MEM (save_mode,
			    memory_address (save_mode,
					    plus_constant (argblock, delta)));
  set_mem_align (stack_area, PARM_BOUNDARY);
805 806 807 808

  if (save_mode != BLKmode)
    emit_move_insn (stack_area, save_area);
  else
809 810 811
    emit_block_move (stack_area, validize_mem (save_area),
		     GEN_INT (high_to_save - low_to_save + 1),
		     BLOCK_OP_CALL_PARM);
812
}
813
#endif /* REG_PARM_STACK_SPACE */
Kazu Hirata committed
814

815 816 817
/* If any elements in ARGS refer to parameters that are to be passed in
   registers, but not in memory, and whose alignment does not permit a
   direct copy into registers.  Copy the values into a group of pseudos
Kazu Hirata committed
818
   which we will later copy into the appropriate hard registers.
819 820 821 822 823

   Pseudos for each unaligned argument will be stored into the array
   args[argnum].aligned_regs.  The caller is responsible for deallocating
   the aligned_regs array if it is nonzero.  */

824
static void
825
store_unaligned_arguments_into_pseudos (struct arg_data *args, int num_actuals)
826 827
{
  int i, j;
Kazu Hirata committed
828

829 830 831 832 833 834 835
  for (i = 0; i < num_actuals; i++)
    if (args[i].reg != 0 && ! args[i].pass_on_stack
	&& args[i].mode == BLKmode
	&& (TYPE_ALIGN (TREE_TYPE (args[i].tree_value))
	    < (unsigned int) MIN (BIGGEST_ALIGNMENT, BITS_PER_WORD)))
      {
	int bytes = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
836 837
	int nregs = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
	int endian_correction = 0;
838

839
	args[i].n_aligned_regs = args[i].partial ? args[i].partial : nregs;
840
	args[i].aligned_regs = xmalloc (sizeof (rtx) * args[i].n_aligned_regs);
841

842 843
	/* Structures smaller than a word are normally aligned to the
	   least significant byte.  On a BYTES_BIG_ENDIAN machine,
844 845
	   this means we must skip the empty high order bytes when
	   calculating the bit offset.  */
846 847 848 849 850 851 852 853 854 855
	if (bytes < UNITS_PER_WORD
#ifdef BLOCK_REG_PADDING
	    && (BLOCK_REG_PADDING (args[i].mode,
				   TREE_TYPE (args[i].tree_value), 1)
		== downward)
#else
	    && BYTES_BIG_ENDIAN
#endif
	    )
	  endian_correction = BITS_PER_WORD - bytes * BITS_PER_UNIT;
856 857 858 859 860 861 862 863

	for (j = 0; j < args[i].n_aligned_regs; j++)
	  {
	    rtx reg = gen_reg_rtx (word_mode);
	    rtx word = operand_subword_force (args[i].value, j, BLKmode);
	    int bitsize = MIN (bytes * BITS_PER_UNIT, BITS_PER_WORD);

	    args[i].aligned_regs[j] = reg;
864
	    word = extract_bit_field (word, bitsize, 0, 1, NULL_RTX,
865
				      word_mode, word_mode);
866 867 868 869 870 871 872 873 874 875 876 877 878 879 880

	    /* There is no need to restrict this code to loading items
	       in TYPE_ALIGN sized hunks.  The bitfield instructions can
	       load up entire word sized registers efficiently.

	       ??? This may not be needed anymore.
	       We use to emit a clobber here but that doesn't let later
	       passes optimize the instructions we emit.  By storing 0 into
	       the register later passes know the first AND to zero out the
	       bitfield being set in the register is unnecessary.  The store
	       of 0 will be deleted as will at least the first AND.  */

	    emit_move_insn (reg, const0_rtx);

	    bytes -= bitsize / BITS_PER_UNIT;
881
	    store_bit_field (reg, bitsize, endian_correction, word_mode,
882
			     word);
883 884 885 886
	  }
      }
}

887
/* Fill in ARGS_SIZE and ARGS array based on the parameters found in
Kazu Hirata committed
888
   ACTPARMS.
889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904

   NUM_ACTUALS is the total number of parameters.

   N_NAMED_ARGS is the total number of named arguments.

   FNDECL is the tree code for the target of this call (if known)

   ARGS_SO_FAR holds state needed by the target to know where to place
   the next argument.

   REG_PARM_STACK_SPACE is the number of bytes of stack space reserved
   for arguments which are passed in registers.

   OLD_STACK_LEVEL is a pointer to an rtx which olds the old stack level
   and may be modified by this routine.

905
   OLD_PENDING_ADJ, MUST_PREALLOCATE and FLAGS are pointers to integer
906
   flags which may may be modified by this routine.
907

908 909 910
   MAY_TAILCALL is cleared if we encounter an invisible pass-by-reference
   that requires allocation of stack space.

911 912
   CALL_FROM_THUNK_P is true if this call is the jump from a thunk to
   the thunked-to function.  */
913 914

static void
915 916 917 918 919 920 921 922
initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED,
				 struct arg_data *args,
				 struct args_size *args_size,
				 int n_named_args ATTRIBUTE_UNUSED,
				 tree actparms, tree fndecl,
				 CUMULATIVE_ARGS *args_so_far,
				 int reg_parm_stack_space,
				 rtx *old_stack_level, int *old_pending_adj,
923
				 int *must_preallocate, int *ecf_flags,
924
				 bool *may_tailcall, bool call_from_thunk_p)
925 926 927 928 929 930 931 932 933
{
  /* 1 if scanning parms front to back, -1 if scanning back to front.  */
  int inc;

  /* Count arg position in order args appear.  */
  int argpos;

  int i;
  tree p;
Kazu Hirata committed
934

935 936 937 938 939 940 941
  args_size->constant = 0;
  args_size->var = 0;

  /* In this loop, we consider args in the order they are written.
     We fill up ARGS from the front or from the back if necessary
     so that in any case the first arg to be pushed ends up at the front.  */

942 943 944 945 946 947 948 949 950 951
  if (PUSH_ARGS_REVERSED)
    {
      i = num_actuals - 1, inc = -1;
      /* In this case, must reverse order of args
	 so that we compute and push the last arg first.  */
    }
  else
    {
      i = 0, inc = 1;
    }
952 953 954 955 956 957 958 959 960 961 962

  /* I counts args in order (to be) pushed; ARGPOS counts in order written.  */
  for (p = actparms, argpos = 0; p; p = TREE_CHAIN (p), i += inc, argpos++)
    {
      tree type = TREE_TYPE (TREE_VALUE (p));
      int unsignedp;
      enum machine_mode mode;

      args[i].tree_value = TREE_VALUE (p);

      /* Replace erroneous argument with constant zero.  */
963
      if (type == error_mark_node || !COMPLETE_TYPE_P (type))
964 965 966 967 968
	args[i].tree_value = integer_zero_node, type = integer_type_node;

      /* If TYPE is a transparent union, pass things the way we would
	 pass the first field of the union.  We have already verified that
	 the modes are the same.  */
969
      if (TREE_CODE (type) == UNION_TYPE && TYPE_TRANSPARENT_UNION (type))
970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986
	type = TREE_TYPE (TYPE_FIELDS (type));

      /* Decide where to pass this arg.

	 args[i].reg is nonzero if all or part is passed in registers.

	 args[i].partial is nonzero if part but not all is passed in registers,
	 and the exact value says how many words are passed in registers.

	 args[i].pass_on_stack is nonzero if the argument must at least be
	 computed on the stack.  It may then be loaded back into registers
	 if args[i].reg is nonzero.

	 These decisions are driven by the FUNCTION_... macros and must agree
	 with those made by function.c.  */

      /* See if this argument should be passed by invisible reference.  */
987 988
      if (pass_by_reference (args_so_far, TYPE_MODE (type),
			     type, argpos < n_named_args))
989
	{
990 991 992 993
	  bool callee_copies;
	  tree base;

	  callee_copies
994 995
	    = reference_callee_copied (args_so_far, TYPE_MODE (type),
				       type, argpos < n_named_args);
996 997 998

	  /* If we're compiling a thunk, pass through invisible references
	     instead of making a copy.  */
999
	  if (call_from_thunk_p
1000 1001 1002 1003
	      || (callee_copies
		  && !TREE_ADDRESSABLE (type)
		  && (base = get_base_address (args[i].tree_value))
		  && (!DECL_P (base) || MEM_P (DECL_RTL (base)))))
1004
	    {
1005 1006 1007
	      /* We can't use sibcalls if a callee-copied argument is
		 stored in the current function's frame.  */
	      if (!call_from_thunk_p && DECL_P (base) && !TREE_STATIC (base))
1008 1009
		*may_tailcall = false;

1010 1011 1012 1013
	      args[i].tree_value = build_fold_addr_expr (args[i].tree_value);
	      type = TREE_TYPE (args[i].tree_value);

	      *ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
1014
	    }
1015 1016 1017 1018 1019 1020
	  else
	    {
	      /* We make a copy of the object and pass the address to the
		 function being called.  */
	      rtx copy;

1021
	      if (!COMPLETE_TYPE_P (type)
1022 1023
		  || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
		  || (flag_stack_check && ! STACK_CHECK_BUILTIN
1024 1025
		      && (0 < compare_tree_int (TYPE_SIZE_UNIT (type),
						STACK_CHECK_MAX_VAR_SIZE))))
1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038
		{
		  /* This is a variable-sized object.  Make space on the stack
		     for it.  */
		  rtx size_rtx = expr_size (TREE_VALUE (p));

		  if (*old_stack_level == 0)
		    {
		      emit_stack_save (SAVE_BLOCK, old_stack_level, NULL_RTX);
		      *old_pending_adj = pending_stack_adjust;
		      pending_stack_adjust = 0;
		    }

		  copy = gen_rtx_MEM (BLKmode,
1039 1040 1041
				      allocate_dynamic_stack_space
				      (size_rtx, NULL_RTX, TYPE_ALIGN (type)));
		  set_mem_attributes (copy, type, 1);
1042 1043
		}
	      else
1044
		copy = assign_temp (type, 0, 1, 0);
1045 1046 1047

	      store_expr (args[i].tree_value, copy, 0);

1048 1049 1050 1051 1052 1053 1054 1055
	      if (callee_copies)
		*ecf_flags &= ~(ECF_CONST | ECF_LIBCALL_BLOCK);
	      else
		*ecf_flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);

	      args[i].tree_value
		= build_fold_addr_expr (make_tree (type, copy));
	      type = TREE_TYPE (args[i].tree_value);
1056
	      *may_tailcall = false;
1057 1058 1059 1060
	    }
	}

      mode = TYPE_MODE (type);
1061
      unsignedp = TYPE_UNSIGNED (type);
1062

DJ Delorie committed
1063 1064
      if (targetm.calls.promote_function_args (fndecl ? TREE_TYPE (fndecl) : 0))
	mode = promote_mode (type, mode, &unsignedp, 1);
1065 1066 1067

      args[i].unsignedp = unsignedp;
      args[i].mode = mode;
1068

1069 1070
      args[i].reg = FUNCTION_ARG (*args_so_far, mode, type,
				  argpos < n_named_args);
1071 1072 1073 1074
#ifdef FUNCTION_INCOMING_ARG
      /* If this is a sibling call and the machine has register windows, the
	 register window has to be unwinded before calling the routine, so
	 arguments have to go into the incoming registers.  */
1075
      args[i].tail_call_reg = FUNCTION_INCOMING_ARG (*args_so_far, mode, type,
Kazu Hirata committed
1076
						     argpos < n_named_args);
1077 1078
#else
      args[i].tail_call_reg = args[i].reg;
1079 1080
#endif

1081 1082
      if (args[i].reg)
	args[i].partial
1083
	  = FUNCTION_ARG_PARTIAL_NREGS (*args_so_far, mode, type,
1084 1085
					argpos < n_named_args);

1086
      args[i].pass_on_stack = targetm.calls.must_pass_in_stack (mode, type);
1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106

      /* If FUNCTION_ARG returned a (parallel [(expr_list (nil) ...) ...]),
	 it means that we are to pass this arg in the register(s) designated
	 by the PARALLEL, but also to pass it in the stack.  */
      if (args[i].reg && GET_CODE (args[i].reg) == PARALLEL
	  && XEXP (XVECEXP (args[i].reg, 0, 0), 0) == 0)
	args[i].pass_on_stack = 1;

      /* If this is an addressable type, we must preallocate the stack
	 since we must evaluate the object into its final location.

	 If this is to be passed in both registers and the stack, it is simpler
	 to preallocate.  */
      if (TREE_ADDRESSABLE (type)
	  || (args[i].pass_on_stack && args[i].reg != 0))
	*must_preallocate = 1;

      /* If this is an addressable type, we cannot pre-evaluate it.  Thus,
	 we cannot consider this function call constant.  */
      if (TREE_ADDRESSABLE (type))
1107
	*ecf_flags &= ~ECF_LIBCALL_BLOCK;
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118

      /* Compute the stack-size of this argument.  */
      if (args[i].reg == 0 || args[i].partial != 0
	  || reg_parm_stack_space > 0
	  || args[i].pass_on_stack)
	locate_and_pad_parm (mode, type,
#ifdef STACK_PARMS_IN_REG_PARM_AREA
			     1,
#else
			     args[i].reg != 0,
#endif
1119 1120
			     args[i].pass_on_stack ? 0 : args[i].partial,
			     fndecl, args_size, &args[i].locate);
1121 1122 1123 1124 1125 1126 1127 1128
#ifdef BLOCK_REG_PADDING
      else
	/* The argument is passed entirely in registers.  See at which
	   end it should be padded.  */
	args[i].locate.where_pad =
	  BLOCK_REG_PADDING (mode, type,
			     int_size_in_bytes (type) <= UNITS_PER_WORD);
#endif
Kazu Hirata committed
1129

1130 1131
      /* Update ARGS_SIZE, the total stack space for args so far.  */

1132 1133 1134
      args_size->constant += args[i].locate.size.constant;
      if (args[i].locate.size.var)
	ADD_PARM_SIZE (*args_size, args[i].locate.size.var);
1135 1136 1137 1138

      /* Increment ARGS_SO_FAR, which has info about which arg-registers
	 have been used, etc.  */

1139
      FUNCTION_ARG_ADVANCE (*args_so_far, TYPE_MODE (type), type,
1140 1141 1142 1143
			    argpos < n_named_args);
    }
}

1144 1145 1146 1147 1148 1149 1150
/* Update ARGS_SIZE to contain the total size for the argument block.
   Return the original constant component of the argument block's size.

   REG_PARM_STACK_SPACE holds the number of bytes of stack space reserved
   for arguments passed in registers.  */

static int
1151 1152 1153
compute_argument_block_size (int reg_parm_stack_space,
			     struct args_size *args_size,
			     int preferred_stack_boundary ATTRIBUTE_UNUSED)
1154 1155 1156
{
  int unadjusted_args_size = args_size->constant;

1157 1158
  /* For accumulate outgoing args mode we don't need to align, since the frame
     will be already aligned.  Align to STACK_BOUNDARY in order to prevent
1159
     backends from generating misaligned frame sizes.  */
1160 1161 1162
  if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
    preferred_stack_boundary = STACK_BOUNDARY;

1163 1164 1165 1166 1167 1168 1169 1170 1171
  /* Compute the actual size of the argument block required.  The variable
     and constant sizes must be combined, the size may have to be rounded,
     and there may be a minimum required size.  */

  if (args_size->var)
    {
      args_size->var = ARGS_SIZE_TREE (*args_size);
      args_size->constant = 0;

1172 1173
      preferred_stack_boundary /= BITS_PER_UNIT;
      if (preferred_stack_boundary > 1)
1174 1175
	{
	  /* We don't handle this case yet.  To handle it correctly we have
1176
	     to add the delta, round and subtract the delta.
1177
	     Currently no machine description requires this support.  */
1178
	  gcc_assert (!(stack_pointer_delta & (preferred_stack_boundary - 1)));
1179 1180
	  args_size->var = round_up (args_size->var, preferred_stack_boundary);
	}
1181 1182 1183 1184 1185

      if (reg_parm_stack_space > 0)
	{
	  args_size->var
	    = size_binop (MAX_EXPR, args_size->var,
1186
			  ssize_int (reg_parm_stack_space));
1187 1188 1189 1190 1191 1192

#ifndef OUTGOING_REG_PARM_STACK_SPACE
	  /* The area corresponding to register parameters is not to count in
	     the size of the block we need.  So make the adjustment.  */
	  args_size->var
	    = size_binop (MINUS_EXPR, args_size->var,
1193
			  ssize_int (reg_parm_stack_space));
1194 1195 1196 1197 1198
#endif
	}
    }
  else
    {
1199
      preferred_stack_boundary /= BITS_PER_UNIT;
1200 1201
      if (preferred_stack_boundary < 1)
	preferred_stack_boundary = 1;
1202
      args_size->constant = (((args_size->constant
1203
			       + stack_pointer_delta
1204 1205 1206
			       + preferred_stack_boundary - 1)
			      / preferred_stack_boundary
			      * preferred_stack_boundary)
1207
			     - stack_pointer_delta);
1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218

      args_size->constant = MAX (args_size->constant,
				 reg_parm_stack_space);

#ifndef OUTGOING_REG_PARM_STACK_SPACE
      args_size->constant -= reg_parm_stack_space;
#endif
    }
  return unadjusted_args_size;
}

1219
/* Precompute parameters as needed for a function call.
1220

1221
   FLAGS is mask of ECF_* constants.
1222 1223 1224

   NUM_ACTUALS is the number of arguments.

Kazu Hirata committed
1225 1226 1227
   ARGS is an array containing information for each argument; this
   routine fills in the INITIAL_VALUE and VALUE fields for each
   precomputed argument.  */
1228 1229

static void
1230
precompute_arguments (int flags, int num_actuals, struct arg_data *args)
1231 1232 1233
{
  int i;

1234
  /* If this is a libcall, then precompute all arguments so that we do not
1235 1236 1237
     get extraneous instructions emitted as part of the libcall sequence.  */
  if ((flags & ECF_LIBCALL_BLOCK) == 0)
    return;
1238

1239
  for (i = 0; i < num_actuals; i++)
1240 1241
    {
      enum machine_mode mode;
1242

1243
      /* If this is an addressable type, we cannot pre-evaluate it.  */
1244
      gcc_assert (!TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value)));
1245

1246
      args[i].initial_value = args[i].value
1247
	= expand_expr (args[i].tree_value, NULL_RTX, VOIDmode, 0);
1248

1249 1250 1251 1252 1253 1254
      mode = TYPE_MODE (TREE_TYPE (args[i].tree_value));
      if (mode != args[i].mode)
	{
	  args[i].value
	    = convert_modes (args[i].mode, mode,
			     args[i].value, args[i].unsignedp);
1255
#if defined(PROMOTE_FUNCTION_MODE) && !defined(PROMOTE_MODE)
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267
	  /* CSE will replace this only if it contains args[i].value
	     pseudo, so convert it down to the declared mode using
	     a SUBREG.  */
	  if (REG_P (args[i].value)
	      && GET_MODE_CLASS (args[i].mode) == MODE_INT)
	    {
	      args[i].initial_value
		= gen_lowpart_SUBREG (mode, args[i].value);
	      SUBREG_PROMOTED_VAR_P (args[i].initial_value) = 1;
	      SUBREG_PROMOTED_UNSIGNED_SET (args[i].initial_value,
					    args[i].unsignedp);
	    }
1268
#endif
1269 1270
	}
    }
1271 1272
}

1273 1274 1275 1276 1277
/* Given the current state of MUST_PREALLOCATE and information about
   arguments to a function call in NUM_ACTUALS, ARGS and ARGS_SIZE,
   compute and return the final value for MUST_PREALLOCATE.  */

static int
1278
finalize_must_preallocate (int must_preallocate, int num_actuals, struct arg_data *args, struct args_size *args_size)
1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326
{
  /* See if we have or want to preallocate stack space.

     If we would have to push a partially-in-regs parm
     before other stack parms, preallocate stack space instead.

     If the size of some parm is not a multiple of the required stack
     alignment, we must preallocate.

     If the total size of arguments that would otherwise create a copy in
     a temporary (such as a CALL) is more than half the total argument list
     size, preallocation is faster.

     Another reason to preallocate is if we have a machine (like the m88k)
     where stack alignment is required to be maintained between every
     pair of insns, not just when the call is made.  However, we assume here
     that such machines either do not have push insns (and hence preallocation
     would occur anyway) or the problem is taken care of with
     PUSH_ROUNDING.  */

  if (! must_preallocate)
    {
      int partial_seen = 0;
      int copy_to_evaluate_size = 0;
      int i;

      for (i = 0; i < num_actuals && ! must_preallocate; i++)
	{
	  if (args[i].partial > 0 && ! args[i].pass_on_stack)
	    partial_seen = 1;
	  else if (partial_seen && args[i].reg == 0)
	    must_preallocate = 1;

	  if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode
	      && (TREE_CODE (args[i].tree_value) == CALL_EXPR
		  || TREE_CODE (args[i].tree_value) == TARGET_EXPR
		  || TREE_CODE (args[i].tree_value) == COND_EXPR
		  || TREE_ADDRESSABLE (TREE_TYPE (args[i].tree_value))))
	    copy_to_evaluate_size
	      += int_size_in_bytes (TREE_TYPE (args[i].tree_value));
	}

      if (copy_to_evaluate_size * 2 >= args_size->constant
	  && args_size->constant > 0)
	must_preallocate = 1;
    }
  return must_preallocate;
}
1327

1328 1329 1330
/* If we preallocated stack space, compute the address of each argument
   and store it into the ARGS array.

Kazu Hirata committed
1331
   We need not ensure it is a valid memory address here; it will be
1332 1333 1334 1335 1336
   validized when it is used.

   ARGBLOCK is an rtx for the address of the outgoing arguments.  */

static void
1337
compute_argument_addresses (struct arg_data *args, rtx argblock, int num_actuals)
1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348
{
  if (argblock)
    {
      rtx arg_reg = argblock;
      int i, arg_offset = 0;

      if (GET_CODE (argblock) == PLUS)
	arg_reg = XEXP (argblock, 0), arg_offset = INTVAL (XEXP (argblock, 1));

      for (i = 0; i < num_actuals; i++)
	{
1349 1350
	  rtx offset = ARGS_SIZE_RTX (args[i].locate.offset);
	  rtx slot_offset = ARGS_SIZE_RTX (args[i].locate.slot_offset);
1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363
	  rtx addr;

	  /* Skip this parm if it will not be passed on the stack.  */
	  if (! args[i].pass_on_stack && args[i].reg != 0)
	    continue;

	  if (GET_CODE (offset) == CONST_INT)
	    addr = plus_constant (arg_reg, INTVAL (offset));
	  else
	    addr = gen_rtx_PLUS (Pmode, arg_reg, offset);

	  addr = plus_constant (addr, arg_offset);
	  args[i].stack = gen_rtx_MEM (args[i].mode, addr);
1364
	  set_mem_align (args[i].stack, PARM_BOUNDARY);
1365 1366
	  set_mem_attributes (args[i].stack,
			      TREE_TYPE (args[i].tree_value), 1);
1367 1368 1369 1370 1371 1372 1373 1374

	  if (GET_CODE (slot_offset) == CONST_INT)
	    addr = plus_constant (arg_reg, INTVAL (slot_offset));
	  else
	    addr = gen_rtx_PLUS (Pmode, arg_reg, slot_offset);

	  addr = plus_constant (addr, arg_offset);
	  args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
1375
	  set_mem_align (args[i].stack_slot, PARM_BOUNDARY);
1376 1377
	  set_mem_attributes (args[i].stack_slot,
			      TREE_TYPE (args[i].tree_value), 1);
1378 1379 1380 1381 1382

	  /* Function incoming arguments may overlap with sibling call
	     outgoing arguments and we cannot allow reordering of reads
	     from function arguments with stores to outgoing arguments
	     of sibling calls.  */
1383 1384
	  set_mem_alias_set (args[i].stack, 0);
	  set_mem_alias_set (args[i].stack_slot, 0);
1385 1386 1387
	}
    }
}
Kazu Hirata committed
1388

1389 1390 1391 1392 1393 1394
/* Given a FNDECL and EXP, return an rtx suitable for use as a target address
   in a call instruction.

   FNDECL is the tree node for the target function.  For an indirect call
   FNDECL will be NULL_TREE.

1395
   ADDR is the operand 0 of CALL_EXPR for this call.  */
1396 1397

static rtx
1398
rtx_for_function_call (tree fndecl, tree addr)
1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419
{
  rtx funexp;

  /* Get the function to call, in the form of RTL.  */
  if (fndecl)
    {
      /* If this is the first use of the function, see if we need to
	 make an external definition for it.  */
      if (! TREE_USED (fndecl))
	{
	  assemble_external (fndecl);
	  TREE_USED (fndecl) = 1;
	}

      /* Get a SYMBOL_REF rtx for the function address.  */
      funexp = XEXP (DECL_RTL (fndecl), 0);
    }
  else
    /* Generate an rtx (probably a pseudo-register) for the address.  */
    {
      push_temp_slots ();
1420
      funexp = expand_expr (addr, NULL_RTX, VOIDmode, 0);
Kazu Hirata committed
1421
      pop_temp_slots ();	/* FUNEXP can't be BLKmode.  */
1422 1423 1424 1425
    }
  return funexp;
}

1426 1427
/* Do the register loads required for any wholly-register parms or any
   parms which are passed both on the stack and in a register.  Their
Kazu Hirata committed
1428
   expressions were already evaluated.
1429 1430

   Mark all register-parms as living through the call, putting these USE
1431 1432
   insns in the CALL_INSN_FUNCTION_USAGE field.

1433 1434
   When IS_SIBCALL, perform the check_sibcall_overlap_argument_overlap
   checking, setting *SIBCALL_FAILURE if appropriate.  */
1435 1436

static void
1437 1438 1439
load_register_parameters (struct arg_data *args, int num_actuals,
			  rtx *call_fusage, int flags, int is_sibcall,
			  int *sibcall_failure)
1440 1441 1442 1443 1444
{
  int i, j;

  for (i = 0; i < num_actuals; i++)
    {
1445 1446
      rtx reg = ((flags & ECF_SIBCALL)
		 ? args[i].tail_call_reg : args[i].reg);
1447 1448
      if (reg)
	{
1449 1450 1451
	  int partial = args[i].partial;
	  int nregs;
	  int size = 0;
1452
	  rtx before_arg = get_last_insn ();
1453 1454 1455 1456
	  /* Set to non-negative if must move a word at a time, even if just
	     one word (e.g, partial == 1 && mode == DFmode).  Set to -1 if
	     we just use a normal move insn.  This value can be zero if the
	     argument is a zero size structure with no fields.  */
1457 1458 1459 1460 1461 1462 1463 1464 1465 1466
	  nregs = -1;
	  if (partial)
	    nregs = partial;
	  else if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode)
	    {
	      size = int_size_in_bytes (TREE_TYPE (args[i].tree_value));
	      nregs = (size + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;
	    }
	  else
	    size = GET_MODE_SIZE (args[i].mode);
1467 1468 1469 1470 1471

	  /* Handle calls that pass values in multiple non-contiguous
	     locations.  The Irix 6 ABI has examples of this.  */

	  if (GET_CODE (reg) == PARALLEL)
1472
	    emit_group_move (reg, args[i].parallel_value);
1473 1474 1475 1476 1477

	  /* If simple case, just do move.  If normal partial, store_one_arg
	     has already loaded the register for us.  In all other cases,
	     load the register(s) from memory.  */

1478 1479 1480
	  else if (nregs == -1)
	    {
	      emit_move_insn (reg, args[i].value);
1481
#ifdef BLOCK_REG_PADDING
1482 1483 1484 1485 1486 1487 1488 1489 1490
	      /* Handle case where we have a value that needs shifting
		 up to the msb.  eg. a QImode value and we're padding
		 upward on a BYTES_BIG_ENDIAN machine.  */
	      if (size < UNITS_PER_WORD
		  && (args[i].locate.where_pad
		      == (BYTES_BIG_ENDIAN ? upward : downward)))
		{
		  rtx x;
		  int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
1491 1492 1493 1494 1495 1496

		  /* Assigning REG here rather than a temp makes CALL_FUSAGE
		     report the whole reg as used.  Strictly speaking, the
		     call only uses SIZE bytes at the msb end, but it doesn't
		     seem worth generating rtl to say that.  */
		  reg = gen_rtx_REG (word_mode, REGNO (reg));
1497
		  x = expand_shift (LSHIFT_EXPR, word_mode, reg,
1498
				    build_int_cst (NULL_TREE, shift),
1499
				    reg, 1);
1500 1501
		  if (x != reg)
		    emit_move_insn (reg, x);
1502
		}
1503
#endif
1504
	    }
1505 1506 1507 1508 1509 1510 1511 1512 1513 1514

	  /* If we have pre-computed the values to put in the registers in
	     the case of non-aligned structures, copy them in now.  */

	  else if (args[i].n_aligned_regs != 0)
	    for (j = 0; j < args[i].n_aligned_regs; j++)
	      emit_move_insn (gen_rtx_REG (word_mode, REGNO (reg) + j),
			      args[i].aligned_regs[j]);

	  else if (partial == 0 || args[i].pass_on_stack)
1515 1516 1517 1518
	    {
	      rtx mem = validize_mem (args[i].value);

	      /* Handle a BLKmode that needs shifting.  */
1519
	      if (nregs == 1 && size < UNITS_PER_WORD
1520 1521 1522 1523 1524 1525
#ifdef BLOCK_REG_PADDING
		  && args[i].locate.where_pad == downward
#else
		  && BYTES_BIG_ENDIAN
#endif
		 )
1526 1527 1528 1529 1530
		{
		  rtx tem = operand_subword_force (mem, 0, args[i].mode);
		  rtx ri = gen_rtx_REG (word_mode, REGNO (reg));
		  rtx x = gen_reg_rtx (word_mode);
		  int shift = (UNITS_PER_WORD - size) * BITS_PER_UNIT;
1531 1532
		  enum tree_code dir = BYTES_BIG_ENDIAN ? RSHIFT_EXPR
							: LSHIFT_EXPR;
1533 1534

		  emit_move_insn (x, tem);
1535
		  x = expand_shift (dir, word_mode, x,
1536
				    build_int_cst (NULL_TREE, shift),
1537
				    ri, 1);
1538 1539 1540 1541 1542 1543
		  if (x != ri)
		    emit_move_insn (ri, x);
		}
	      else
		move_block_to_reg (REGNO (reg), mem, nregs, args[i].mode);
	    }
1544

1545 1546
	  /* When a parameter is a block, and perhaps in other cases, it is
	     possible that it did a load from an argument slot that was
1547
	     already clobbered.  */
1548 1549 1550 1551
	  if (is_sibcall
	      && check_sibcall_argument_overlap (before_arg, &args[i], 0))
	    *sibcall_failure = 1;

1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563
	  /* Handle calls that pass values in multiple non-contiguous
	     locations.  The Irix 6 ABI has examples of this.  */
	  if (GET_CODE (reg) == PARALLEL)
	    use_group_regs (call_fusage, reg);
	  else if (nregs == -1)
	    use_reg (call_fusage, reg);
	  else
	    use_regs (call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
	}
    }
}

1564 1565 1566
/* We need to pop PENDING_STACK_ADJUST bytes.  But, if the arguments
   wouldn't fill up an even multiple of PREFERRED_UNIT_STACK_BOUNDARY
   bytes, then we would need to push some additional bytes to pad the
1567 1568 1569 1570 1571
   arguments.  So, we compute an adjust to the stack pointer for an
   amount that will leave the stack under-aligned by UNADJUSTED_ARGS_SIZE
   bytes.  Then, when the arguments are pushed the stack will be perfectly
   aligned.  ARGS_SIZE->CONSTANT is set to the number of bytes that should
   be popped after the call.  Returns the adjustment.  */
1572

1573
static int
1574 1575
combine_pending_stack_adjustment_and_call (int unadjusted_args_size,
					   struct args_size *args_size,
1576
					   unsigned int preferred_unit_stack_boundary)
1577 1578 1579 1580 1581 1582
{
  /* The number of bytes to pop so that the stack will be
     under-aligned by UNADJUSTED_ARGS_SIZE bytes.  */
  HOST_WIDE_INT adjustment;
  /* The alignment of the stack after the arguments are pushed, if we
     just pushed the arguments without adjust the stack here.  */
1583
  unsigned HOST_WIDE_INT unadjusted_alignment;
1584

Kazu Hirata committed
1585
  unadjusted_alignment
1586 1587 1588 1589 1590 1591 1592 1593 1594 1595
    = ((stack_pointer_delta + unadjusted_args_size)
       % preferred_unit_stack_boundary);

  /* We want to get rid of as many of the PENDING_STACK_ADJUST bytes
     as possible -- leaving just enough left to cancel out the
     UNADJUSTED_ALIGNMENT.  In other words, we want to ensure that the
     PENDING_STACK_ADJUST is non-negative, and congruent to
     -UNADJUSTED_ALIGNMENT modulo the PREFERRED_UNIT_STACK_BOUNDARY.  */

  /* Begin by trying to pop all the bytes.  */
Kazu Hirata committed
1596 1597
  unadjusted_alignment
    = (unadjusted_alignment
1598 1599 1600 1601
       - (pending_stack_adjust % preferred_unit_stack_boundary));
  adjustment = pending_stack_adjust;
  /* Push enough additional bytes that the stack will be aligned
     after the arguments are pushed.  */
1602 1603
  if (preferred_unit_stack_boundary > 1)
    {
1604
      if (unadjusted_alignment > 0)
Kazu Hirata committed
1605
	adjustment -= preferred_unit_stack_boundary - unadjusted_alignment;
1606
      else
Kazu Hirata committed
1607
	adjustment += unadjusted_alignment;
1608
    }
Kazu Hirata committed
1609

1610 1611 1612 1613
  /* Now, sets ARGS_SIZE->CONSTANT so that we pop the right number of
     bytes after the call.  The right number is the entire
     PENDING_STACK_ADJUST less our ADJUSTMENT plus the amount required
     by the arguments in the first place.  */
Kazu Hirata committed
1614
  args_size->constant
1615 1616
    = pending_stack_adjust - adjustment + unadjusted_args_size;

1617
  return adjustment;
1618 1619
}

1620 1621 1622
/* Scan X expression if it does not dereference any argument slots
   we already clobbered by tail call arguments (as noted in stored_args_map
   bitmap).
1623
   Return nonzero if X expression dereferences such argument slots,
1624 1625 1626
   zero otherwise.  */

static int
1627
check_sibcall_argument_overlap_1 (rtx x)
1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642
{
  RTX_CODE code;
  int i, j;
  unsigned int k;
  const char *fmt;

  if (x == NULL_RTX)
    return 0;

  code = GET_CODE (x);

  if (code == MEM)
    {
      if (XEXP (x, 0) == current_function_internal_arg_pointer)
	i = 0;
1643 1644 1645 1646
      else if (GET_CODE (XEXP (x, 0)) == PLUS
	       && XEXP (XEXP (x, 0), 0) ==
		  current_function_internal_arg_pointer
	       && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)
1647 1648
	i = INTVAL (XEXP (XEXP (x, 0), 1));
      else
1649
	return 1;
1650

1651 1652 1653 1654
#ifdef ARGS_GROW_DOWNWARD
      i = -i - GET_MODE_SIZE (GET_MODE (x));
#endif

1655 1656 1657 1658 1659 1660 1661 1662
      for (k = 0; k < GET_MODE_SIZE (GET_MODE (x)); k++)
	if (i + k < stored_args_map->n_bits
	    && TEST_BIT (stored_args_map, i + k))
	  return 1;

      return 0;
    }

Kazu Hirata committed
1663
  /* Scan all subexpressions.  */
1664 1665 1666 1667
  fmt = GET_RTX_FORMAT (code);
  for (i = 0; i < GET_RTX_LENGTH (code); i++, fmt++)
    {
      if (*fmt == 'e')
Kazu Hirata committed
1668 1669 1670 1671
	{
	  if (check_sibcall_argument_overlap_1 (XEXP (x, i)))
	    return 1;
	}
1672
      else if (*fmt == 'E')
Kazu Hirata committed
1673 1674 1675 1676 1677
	{
	  for (j = 0; j < XVECLEN (x, i); j++)
	    if (check_sibcall_argument_overlap_1 (XVECEXP (x, i, j)))
	      return 1;
	}
1678 1679 1680 1681 1682 1683
    }
  return 0;
}

/* Scan sequence after INSN if it does not dereference any argument slots
   we already clobbered by tail call arguments (as noted in stored_args_map
1684 1685 1686 1687
   bitmap).  If MARK_STORED_ARGS_MAP, add stack slots for ARG to
   stored_args_map bitmap afterwards (when ARG is a register MARK_STORED_ARGS_MAP
   should be 0).  Return nonzero if sequence after INSN dereferences such argument
   slots, zero otherwise.  */
1688 1689

static int
1690
check_sibcall_argument_overlap (rtx insn, struct arg_data *arg, int mark_stored_args_map)
Kazu Hirata committed
1691
{
1692 1693 1694 1695 1696 1697 1698 1699
  int low, high;

  if (insn == NULL_RTX)
    insn = get_insns ();
  else
    insn = NEXT_INSN (insn);

  for (; insn; insn = NEXT_INSN (insn))
Kazu Hirata committed
1700 1701
    if (INSN_P (insn)
	&& check_sibcall_argument_overlap_1 (PATTERN (insn)))
1702 1703
      break;

1704 1705
  if (mark_stored_args_map)
    {
1706
#ifdef ARGS_GROW_DOWNWARD
1707
      low = -arg->locate.slot_offset.constant - arg->locate.size.constant;
1708
#else
1709
      low = arg->locate.slot_offset.constant;
1710 1711
#endif

1712
      for (high = low + arg->locate.size.constant; low < high; low++)
1713 1714
	SET_BIT (stored_args_map, low);
    }
1715 1716 1717
  return insn != NULL_RTX;
}

1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735
/* If function value *VALUE was returned at the most significant end of a
   register, shift it towards the least significant end and convert it to
   TYPE's mode.  Return true and update *VALUE if some action was needed.

   TYPE is the type of the function's return value, which is known not
   to have mode BLKmode.  */

static bool
shift_returned_value (tree type, rtx *value)
{
  if (targetm.calls.return_in_msb (type))
    {
      HOST_WIDE_INT shift;

      shift = (GET_MODE_BITSIZE (GET_MODE (*value))
	       - BITS_PER_UNIT * int_size_in_bytes (type));
      if (shift > 0)
	{
1736
	  /* Shift the value into the low part of the register.  */
1737 1738
	  *value = expand_binop (GET_MODE (*value), lshr_optab, *value,
				 GEN_INT (shift), 0, 1, OPTAB_WIDEN);
1739 1740 1741 1742 1743 1744 1745 1746

	  /* Truncate it to the type's mode, or its integer equivalent.
	     This is subject to TRULY_NOOP_TRUNCATION.  */
	  *value = convert_to_mode (int_mode_for_mode (TYPE_MODE (type)),
				    *value, 0);

	  /* Now convert it to the final form.  */
	  *value = gen_lowpart (TYPE_MODE (type), *value);
1747 1748 1749 1750 1751 1752
	  return true;
	}
    }
  return false;
}

1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776
/* Remove all REG_EQUIV notes found in the insn chain.  */

static void
purge_reg_equiv_notes (void)
{
  rtx insn;

  for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
    {
      while (1)
	{
	  rtx note = find_reg_note (insn, REG_EQUIV, 0);
	  if (note)
	    {
	      /* Remove the note and keep looking at the notes for
		 this insn.  */
	      remove_note (insn, note);
	      continue;
	    }
	  break;
	}
    }
}

Richard Stallman committed
1777 1778 1779 1780 1781 1782 1783
/* Generate all the code for a function call
   and return an rtx for its value.
   Store the value in TARGET (specified as an rtx) if convenient.
   If the value is stored in TARGET then TARGET is returned.
   If IGNORE is nonzero, then we ignore the value of the function call.  */

rtx
1784
expand_call (tree exp, rtx target, int ignore)
Richard Stallman committed
1785
{
1786 1787 1788
  /* Nonzero if we are currently expanding a call.  */
  static int currently_expanding_call = 0;

Richard Stallman committed
1789 1790 1791 1792
  /* List of actual parameters.  */
  tree actparms = TREE_OPERAND (exp, 1);
  /* RTX for the function to be called.  */
  rtx funexp;
1793 1794
  /* Sequence of insns to perform a normal "call".  */
  rtx normal_call_insns = NULL_RTX;
1795
  /* Sequence of insns to perform a tail "call".  */
1796
  rtx tail_call_insns = NULL_RTX;
Richard Stallman committed
1797 1798
  /* Data type of the function.  */
  tree funtype;
1799
  tree type_arg_types;
Richard Stallman committed
1800 1801 1802
  /* Declaration of the function being called,
     or 0 if the function is computed (not known by name).  */
  tree fndecl = 0;
1803 1804
  /* The type of the function being called.  */
  tree fntype;
1805
  bool try_tail_call = CALL_EXPR_TAILCALL (exp);
1806
  int pass;
Richard Stallman committed
1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820

  /* Register in which non-BLKmode value will be returned,
     or 0 if no value or if value is BLKmode.  */
  rtx valreg;
  /* Address where we should return a BLKmode value;
     0 if value not BLKmode.  */
  rtx structure_value_addr = 0;
  /* Nonzero if that address is being passed by treating it as
     an extra, implicit first parameter.  Otherwise,
     it is passed by being copied directly into struct_value_rtx.  */
  int structure_value_addr_parm = 0;
  /* Size of aggregate value wanted, or zero if none wanted
     or if we are using the non-reentrant PCC calling convention
     or expecting the value in registers.  */
1821
  HOST_WIDE_INT struct_value_size = 0;
Richard Stallman committed
1822 1823 1824
  /* Nonzero if called function returns an aggregate in memory PCC style,
     by returning the address of where to find it.  */
  int pcc_struct_value = 0;
DJ Delorie committed
1825
  rtx struct_value = 0;
Richard Stallman committed
1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839

  /* Number of actual parameters in this call, including struct value addr.  */
  int num_actuals;
  /* Number of named args.  Args after this are anonymous ones
     and they must all go on the stack.  */
  int n_named_args;

  /* Vector of information about each argument.
     Arguments are numbered in the order they will be pushed,
     not the order they are written.  */
  struct arg_data *args;

  /* Total size in bytes of all the stack-parms scanned so far.  */
  struct args_size args_size;
1840
  struct args_size adjusted_args_size;
Richard Stallman committed
1841
  /* Size of arguments before any adjustments (such as rounding).  */
1842
  int unadjusted_args_size;
Richard Stallman committed
1843 1844 1845 1846
  /* Data on reg parms scanned so far.  */
  CUMULATIVE_ARGS args_so_far;
  /* Nonzero if a reg parm has been scanned.  */
  int reg_parm_seen;
1847
  /* Nonzero if this is an indirect function call.  */
Richard Stallman committed
1848

Kazu Hirata committed
1849
  /* Nonzero if we must avoid push-insns in the args for this call.
Richard Stallman committed
1850 1851 1852 1853 1854
     If stack space is allocated for register parameters, but not by the
     caller, then it is preallocated in the fixed part of the stack frame.
     So the entire argument block must then be preallocated (i.e., we
     ignore PUSH_ROUNDING in that case).  */

1855
  int must_preallocate = !PUSH_ARGS;
Richard Stallman committed
1856

1857
  /* Size of the stack reserved for parameter registers.  */
Jim Wilson committed
1858 1859
  int reg_parm_stack_space = 0;

Richard Stallman committed
1860 1861 1862 1863
  /* Address of space preallocated for stack parms
     (on machines that lack push insns), or 0 if space not preallocated.  */
  rtx argblock = 0;

1864 1865
  /* Mask of ECF_ flags.  */
  int flags = 0;
1866
#ifdef REG_PARM_STACK_SPACE
Richard Stallman committed
1867
  /* Define the boundary of the register parm stack space that needs to be
1868 1869
     saved, if any.  */
  int low_to_save, high_to_save;
Richard Stallman committed
1870 1871 1872 1873 1874 1875
  rtx save_area = 0;		/* Place that it is saved */
#endif

  int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
  char *initial_stack_usage_map = stack_usage_map;

1876 1877 1878
  int old_stack_allocated;

  /* State variables to track stack modifications.  */
Richard Stallman committed
1879
  rtx old_stack_level = 0;
1880
  int old_stack_arg_under_construction = 0;
1881
  int old_pending_adj = 0;
Richard Stallman committed
1882
  int old_inhibit_defer_pop = inhibit_defer_pop;
1883 1884 1885 1886

  /* Some stack pointer alterations we make are performed via
     allocate_dynamic_stack_space. This modifies the stack_pointer_delta,
     which we then also need to save/restore along the way.  */
1887
  int old_stack_pointer_delta = 0;
1888

1889
  rtx call_fusage;
1890
  tree p = TREE_OPERAND (exp, 0);
1891
  tree addr = TREE_OPERAND (exp, 0);
1892
  int i;
1893
  /* The alignment of the stack, in bits.  */
1894
  unsigned HOST_WIDE_INT preferred_stack_boundary;
1895
  /* The alignment of the stack, in bytes.  */
1896
  unsigned HOST_WIDE_INT preferred_unit_stack_boundary;
1897 1898
  /* The static chain value to use for this call.  */
  rtx static_chain_value;
1899 1900 1901 1902
  /* See if this is "nothrow" function call.  */
  if (TREE_NOTHROW (exp))
    flags |= ECF_NOTHROW;

1903 1904
  /* See if we can find a DECL-node for the actual function, and get the
     function attributes (flags) from the function decl or type node.  */
1905 1906
  fndecl = get_callee_fndecl (exp);
  if (fndecl)
Richard Stallman committed
1907
    {
1908
      fntype = TREE_TYPE (fndecl);
1909
      flags |= flags_from_decl_or_type (fndecl);
Richard Stallman committed
1910
    }
1911
  else
1912
    {
1913 1914
      fntype = TREE_TYPE (TREE_TYPE (p));
      flags |= flags_from_decl_or_type (fntype);
1915
    }
1916

1917
  struct_value = targetm.calls.struct_value_rtx (fntype, 0);
DJ Delorie committed
1918

1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949
  /* Warn if this value is an aggregate type,
     regardless of which calling convention we are using for it.  */
  if (warn_aggregate_return && AGGREGATE_TYPE_P (TREE_TYPE (exp)))
    warning ("function call has aggregate value");

  /* If the result of a pure or const function call is ignored (or void),
     and none of its arguments are volatile, we can avoid expanding the
     call and just evaluate the arguments for side-effects.  */
  if ((flags & (ECF_CONST | ECF_PURE))
      && (ignore || target == const0_rtx
	  || TYPE_MODE (TREE_TYPE (exp)) == VOIDmode))
    {
      bool volatilep = false;
      tree arg;

      for (arg = actparms; arg; arg = TREE_CHAIN (arg))
	if (TREE_THIS_VOLATILE (TREE_VALUE (arg)))
	  {
	    volatilep = true;
	    break;
	  }

      if (! volatilep)
	{
	  for (arg = actparms; arg; arg = TREE_CHAIN (arg))
	    expand_expr (TREE_VALUE (arg), const0_rtx,
			 VOIDmode, EXPAND_NORMAL);
	  return const0_rtx;
	}
    }

Jim Wilson committed
1950 1951 1952 1953
#ifdef REG_PARM_STACK_SPACE
  reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
#endif

1954 1955
#ifndef OUTGOING_REG_PARM_STACK_SPACE
  if (reg_parm_stack_space > 0 && PUSH_ARGS)
1956 1957 1958
    must_preallocate = 1;
#endif

Richard Stallman committed
1959 1960 1961
  /* Set up a place to return a structure.  */

  /* Cater to broken compilers.  */
DJ Delorie committed
1962
  if (aggregate_value_p (exp, fndecl))
Richard Stallman committed
1963 1964
    {
      /* This call returns a big structure.  */
1965
      flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
Richard Stallman committed
1966 1967

#ifdef PCC_STATIC_STRUCT_RETURN
1968 1969 1970 1971 1972 1973
      {
	pcc_struct_value = 1;
      }
#else /* not PCC_STATIC_STRUCT_RETURN */
      {
	struct_value_size = int_size_in_bytes (TREE_TYPE (exp));
Richard Stallman committed
1974

1975
	if (CALL_EXPR_HAS_RETURN_SLOT_ADDR (exp))
1976
	  {
1977 1978 1979 1980 1981 1982 1983
	    /* The structure value address arg is already in actparms.
	       Pull it out.  It might be nice to just leave it there, but
	       we need to set structure_value_addr.  */
	    tree return_arg = TREE_VALUE (actparms);
	    actparms = TREE_CHAIN (actparms);
	    structure_value_addr = expand_expr (return_arg, NULL_RTX,
						VOIDmode, EXPAND_NORMAL);
1984
	  }
1985
	else if (target && MEM_P (target))
1986 1987 1988 1989 1990 1991
	  structure_value_addr = XEXP (target, 0);
	else
	  {
	    /* For variable-sized objects, we must be called with a target
	       specified.  If we were to allocate space on the stack here,
	       we would have no way of knowing when to free it.  */
1992
	    rtx d = assign_temp (TREE_TYPE (exp), 1, 1, 1);
Richard Stallman committed
1993

1994 1995
	    mark_temp_addr_taken (d);
	    structure_value_addr = XEXP (d, 0);
1996 1997 1998 1999
	    target = 0;
	  }
      }
#endif /* not PCC_STATIC_STRUCT_RETURN */
Richard Stallman committed
2000 2001
    }

2002 2003
  /* Figure out the amount to which the stack should be aligned.  */
  preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
2004 2005 2006 2007 2008 2009
  if (fndecl)
    {
      struct cgraph_rtl_info *i = cgraph_rtl_info (fndecl);
      if (i && i->preferred_incoming_stack_boundary)
	preferred_stack_boundary = i->preferred_incoming_stack_boundary;
    }
2010 2011

  /* Operand 0 is a pointer-to-function; get the type of the function.  */
2012
  funtype = TREE_TYPE (addr);
2013
  gcc_assert (POINTER_TYPE_P (funtype));
2014 2015
  funtype = TREE_TYPE (funtype);

2016 2017
  /* Munge the tree to split complex arguments into their imaginary
     and real parts.  */
2018
  if (targetm.calls.split_complex_arg)
2019 2020 2021 2022 2023 2024 2025
    {
      type_arg_types = split_complex_types (TYPE_ARG_TYPES (funtype));
      actparms = split_complex_values (actparms);
    }
  else
    type_arg_types = TYPE_ARG_TYPES (funtype);

2026 2027 2028 2029 2030
  if (flags & ECF_MAY_BE_ALLOCA)
    current_function_calls_alloca = 1;

  /* If struct_value_rtx is 0, it means pass the address
     as if it were an extra parameter.  */
DJ Delorie committed
2031
  if (structure_value_addr && struct_value == 0)
2032 2033 2034 2035 2036 2037
    {
      /* If structure_value_addr is a REG other than
	 virtual_outgoing_args_rtx, we can use always use it.  If it
	 is not a REG, we must always copy it into a register.
	 If it is virtual_outgoing_args_rtx, we must copy it to another
	 register in some cases.  */
2038
      rtx temp = (!REG_P (structure_value_addr)
2039 2040 2041
		  || (ACCUMULATE_OUTGOING_ARGS
		      && stack_arg_under_construction
		      && structure_value_addr == virtual_outgoing_args_rtx)
2042
		  ? copy_addr_to_reg (convert_memory_address
2043
				      (Pmode, structure_value_addr))
2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058
		  : structure_value_addr);

      actparms
	= tree_cons (error_mark_node,
		     make_tree (build_pointer_type (TREE_TYPE (funtype)),
				temp),
		     actparms);
      structure_value_addr_parm = 1;
    }

  /* Count the arguments and set NUM_ACTUALS.  */
  for (p = actparms, num_actuals = 0; p; p = TREE_CHAIN (p))
    num_actuals++;

  /* Compute number of named args.
2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078
     First, do a raw count of the args for INIT_CUMULATIVE_ARGS.  */

  if (type_arg_types != 0)
    n_named_args
      = (list_length (type_arg_types)
	 /* Count the struct value address, if it is passed as a parm.  */
	 + structure_value_addr_parm);
  else
    /* If we know nothing, treat all args as named.  */
    n_named_args = num_actuals;

  /* Start updating where the next arg would go.

     On some machines (such as the PA) indirect calls have a different
     calling convention than normal calls.  The fourth argument in
     INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
     or not.  */
  INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, fndecl, n_named_args);

  /* Now possibly adjust the number of named args.
2079
     Normally, don't include the last named arg if anonymous args follow.
2080 2081
     We do include the last named arg if
     targetm.calls.strict_argument_naming() returns nonzero.
2082 2083 2084
     (If no anonymous args follow, the result of list_length is actually
     one too large.  This is harmless.)

2085
     If targetm.calls.pretend_outgoing_varargs_named() returns
2086 2087 2088 2089 2090
     nonzero, and targetm.calls.strict_argument_naming() returns zero,
     this machine will be able to place unnamed args that were passed
     in registers into the stack.  So treat all args as named.  This
     allows the insns emitting for a specific argument list to be
     independent of the function declaration.
2091 2092 2093 2094

     If targetm.calls.pretend_outgoing_varargs_named() returns zero,
     we do not have any reliable way to pass unnamed args in
     registers, so we must force them into memory.  */
2095

2096 2097 2098 2099 2100 2101 2102
  if (type_arg_types != 0
      && targetm.calls.strict_argument_naming (&args_so_far))
    ;
  else if (type_arg_types != 0
	   && ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
    /* Don't include the last named arg.  */
    --n_named_args;
2103
  else
2104
    /* Treat all args as named.  */
2105 2106 2107
    n_named_args = num_actuals;

  /* Make a vector to hold all the information about each arg.  */
2108 2109
  args = alloca (num_actuals * sizeof (struct arg_data));
  memset (args, 0, num_actuals * sizeof (struct arg_data));
2110

2111 2112
  /* Build up entries in the ARGS array, compute the size of the
     arguments into ARGS_SIZE, etc.  */
2113 2114 2115 2116
  initialize_argument_information (num_actuals, args, &args_size,
				   n_named_args, actparms, fndecl,
				   &args_so_far, reg_parm_stack_space,
				   &old_stack_level, &old_pending_adj,
2117
				   &must_preallocate, &flags,
2118
				   &try_tail_call, CALL_FROM_THUNK_P (exp));
2119 2120 2121 2122 2123 2124

  if (args_size.var)
    {
      /* If this function requires a variable-sized argument list, don't
	 try to make a cse'able block for this call.  We may be able to
	 do this eventually, but it is too complicated to keep track of
Kazu Hirata committed
2125
	 what insns go in the cse'able block and which don't.  */
2126

2127
      flags &= ~ECF_LIBCALL_BLOCK;
2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146
      must_preallocate = 1;
    }

  /* Now make final decision about preallocating stack space.  */
  must_preallocate = finalize_must_preallocate (must_preallocate,
						num_actuals, args,
						&args_size);

  /* If the structure value address will reference the stack pointer, we
     must stabilize it.  We don't need to do this if we know that we are
     not going to adjust the stack pointer in processing this call.  */

  if (structure_value_addr
      && (reg_mentioned_p (virtual_stack_dynamic_rtx, structure_value_addr)
	  || reg_mentioned_p (virtual_outgoing_args_rtx,
			      structure_value_addr))
      && (args_size.var
	  || (!ACCUMULATE_OUTGOING_ARGS && args_size.constant)))
    structure_value_addr = copy_to_reg (structure_value_addr);
2147

2148
  /* Tail calls can make things harder to debug, and we've traditionally
2149
     pushed these optimizations into -O2.  Don't try if we're already
2150
     expanding a call, as that means we're an argument.  Don't try if
2151
     there's cleanups, as we know there's code to follow the call.  */
2152

2153 2154
  if (currently_expanding_call++ != 0
      || !flag_optimize_sibling_calls
2155 2156 2157
      || args_size.var
      || lookup_stmt_eh_region (exp) >= 0)
    try_tail_call = 0;
2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171

  /*  Rest of purposes for tail call optimizations to fail.  */
  if (
#ifdef HAVE_sibcall_epilogue
      !HAVE_sibcall_epilogue
#else
      1
#endif
      || !try_tail_call
      /* Doing sibling call optimization needs some work, since
	 structure_value_addr can be allocated on the stack.
	 It does not seem worth the effort since few optimizable
	 sibling calls will return a structure.  */
      || structure_value_addr != NULL_RTX
2172 2173
      /* Check whether the target is able to optimize the call
	 into a sibcall.  */
2174
      || !targetm.function_ok_for_sibcall (fndecl, exp)
2175 2176
      /* Functions that do not return exactly once may not be sibcall
         optimized.  */
2177
      || (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN))
2178
      || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
2179 2180 2181 2182
      /* If the called function is nested in the current one, it might access
         some of the caller's arguments, but could clobber them beforehand if
         the argument areas are shared.  */
      || (fndecl && decl_function_context (fndecl) == current_function_decl)
2183 2184 2185 2186 2187
      /* If this function requires more stack slots than the current
	 function, we cannot change it into a sibling call.  */
      || args_size.constant > current_function_args_size
      /* If the callee pops its own arguments, then it must pop exactly
	 the same number of arguments as the current function.  */
2188 2189 2190 2191
      || (RETURN_POPS_ARGS (fndecl, funtype, args_size.constant)
	  != RETURN_POPS_ARGS (current_function_decl,
			       TREE_TYPE (current_function_decl),
			       current_function_args_size))
2192
      || !lang_hooks.decls.ok_for_sibcall (fndecl))
Jason Merrill committed
2193
    try_tail_call = 0;
2194

2195 2196 2197 2198 2199 2200
  /* Ensure current function's preferred stack boundary is at least
     what we need.  We don't have to increase alignment for recursive
     functions.  */
  if (cfun->preferred_stack_boundary < preferred_stack_boundary
      && fndecl != current_function_decl)
    cfun->preferred_stack_boundary = preferred_stack_boundary;
2201 2202
  if (fndecl == current_function_decl)
    cfun->recursive_call_emit = true;
2203

2204
  preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
2205

2206 2207 2208
  /* We want to make two insn chains; one for a sibling call, the other
     for a normal call.  We will select one of the two chains after
     initial RTL generation is complete.  */
2209
  for (pass = try_tail_call ? 0 : 1; pass < 2; pass++)
2210 2211
    {
      int sibcall_failure = 0;
2212
      /* We want to emit any pending stack adjustments before the tail
2213
	 recursion "call".  That way we know any adjustment after the tail
2214
	 recursion call can be ignored if we indeed use the tail
2215
	 call expansion.  */
Kaveh R. Ghazi committed
2216 2217
      int save_pending_stack_adjust = 0;
      int save_stack_pointer_delta = 0;
2218
      rtx insns;
2219
      rtx before_call, next_arg_reg;
2220

2221 2222 2223 2224 2225
      if (pass == 0)
	{
	  /* State variables we need to save and restore between
	     iterations.  */
	  save_pending_stack_adjust = pending_stack_adjust;
2226
	  save_stack_pointer_delta = stack_pointer_delta;
2227
	}
2228 2229 2230 2231
      if (pass)
	flags &= ~ECF_SIBCALL;
      else
	flags |= ECF_SIBCALL;
Richard Stallman committed
2232

2233
      /* Other state variables that we must reinitialize each time
2234
	 through the loop (that are not initialized by the loop itself).  */
2235 2236
      argblock = 0;
      call_fusage = 0;
2237

Kazu Hirata committed
2238
      /* Start a new sequence for the normal call case.
Richard Stallman committed
2239

2240 2241 2242
	 From this point on, if the sibling call fails, we want to set
	 sibcall_failure instead of continuing the loop.  */
      start_sequence ();
2243

2244 2245 2246
      /* Don't let pending stack adjusts add up to too much.
	 Also, do all pending adjustments now if there is any chance
	 this might be a call to alloca or if we are expanding a sibling
2247 2248
	 call sequence or if we are calling a function that is to return
	 with stack pointer depressed.  */
2249
      if (pending_stack_adjust >= 32
2250 2251
	  || (pending_stack_adjust > 0
	      && (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED)))
2252 2253
	  || pass == 0)
	do_pending_stack_adjust ();
Richard Stallman committed
2254

2255 2256
      /* When calling a const function, we must pop the stack args right away,
	 so that the pop is deleted or moved with the call.  */
2257
      if (pass && (flags & ECF_LIBCALL_BLOCK))
2258 2259
	NO_DEFER_POP;

2260
      /* Precompute any arguments as needed.  */
2261 2262
      if (pass)
	precompute_arguments (flags, num_actuals, args);
Richard Stallman committed
2263

2264 2265
      /* Now we are about to start emitting insns that can be deleted
	 if a libcall is deleted.  */
2266
      if (pass && (flags & (ECF_LIBCALL_BLOCK | ECF_MALLOC)))
2267
	start_sequence ();
Richard Stallman committed
2268

2269
      adjusted_args_size = args_size;
2270 2271 2272 2273 2274 2275
      /* Compute the actual size of the argument block required.  The variable
	 and constant sizes must be combined, the size may have to be rounded,
	 and there may be a minimum required size.  When generating a sibcall
	 pattern, do not round up, since we'll be re-using whatever space our
	 caller provided.  */
      unadjusted_args_size
Kazu Hirata committed
2276 2277
	= compute_argument_block_size (reg_parm_stack_space,
				       &adjusted_args_size,
2278 2279 2280
				       (pass == 0 ? 0
					: preferred_stack_boundary));

Kazu Hirata committed
2281
      old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2282

2283 2284 2285
      /* The argument block when performing a sibling call is the
         incoming argument block.  */
      if (pass == 0)
2286 2287
	{
	  argblock = virtual_incoming_args_rtx;
2288 2289 2290 2291 2292 2293
	  argblock
#ifdef STACK_GROWS_DOWNWARD
	    = plus_constant (argblock, current_function_pretend_args_size);
#else
	    = plus_constant (argblock, -current_function_pretend_args_size);
#endif
2294 2295 2296
	  stored_args_map = sbitmap_alloc (args_size.constant);
	  sbitmap_zero (stored_args_map);
	}
2297

2298 2299
      /* If we have no actual push instructions, or shouldn't use them,
	 make space for all args right now.  */
2300
      else if (adjusted_args_size.var != 0)
Richard Stallman committed
2301
	{
2302 2303 2304
	  if (old_stack_level == 0)
	    {
	      emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX);
2305
	      old_stack_pointer_delta = stack_pointer_delta;
2306 2307 2308 2309 2310 2311 2312 2313
	      old_pending_adj = pending_stack_adjust;
	      pending_stack_adjust = 0;
	      /* stack_arg_under_construction says whether a stack arg is
		 being constructed at the old stack level.  Pushing the stack
		 gets a clean outgoing argument block.  */
	      old_stack_arg_under_construction = stack_arg_under_construction;
	      stack_arg_under_construction = 0;
	    }
2314
	  argblock = push_block (ARGS_SIZE_RTX (adjusted_args_size), 0, 0);
Richard Stallman committed
2315
	}
2316 2317 2318 2319 2320 2321
      else
	{
	  /* Note that we must go through the motions of allocating an argument
	     block even if the size is zero because we may be storing args
	     in the area reserved for register arguments, which may be part of
	     the stack frame.  */
2322

2323
	  int needed = adjusted_args_size.constant;
Richard Stallman committed
2324

2325 2326 2327
	  /* Store the maximum argument space used.  It will be pushed by
	     the prologue (if ACCUMULATE_OUTGOING_ARGS, or stack overflow
	     checking).  */
Richard Stallman committed
2328

2329 2330
	  if (needed > current_function_outgoing_args_size)
	    current_function_outgoing_args_size = needed;
Richard Stallman committed
2331

2332 2333
	  if (must_preallocate)
	    {
2334 2335
	      if (ACCUMULATE_OUTGOING_ARGS)
		{
2336 2337 2338 2339 2340
		  /* Since the stack pointer will never be pushed, it is
		     possible for the evaluation of a parm to clobber
		     something we have already written to the stack.
		     Since most function calls on RISC machines do not use
		     the stack, this is uncommon, but must work correctly.
2341

2342
		     Therefore, we save any area of the stack that was already
2343 2344
		     written and that we are using.  Here we set up to do this
		     by making a new stack usage map from the old one.  The
Kazu Hirata committed
2345
		     actual save will be done by store_one_arg.
2346

2347 2348
		     Another approach might be to try to reorder the argument
		     evaluations to avoid this conflicting stack usage.  */
2349

2350
#ifndef OUTGOING_REG_PARM_STACK_SPACE
2351 2352 2353
		  /* Since we will be writing into the entire argument area,
		     the map must be allocated for its entire size, not just
		     the part that is the responsibility of the caller.  */
2354
		  needed += reg_parm_stack_space;
Richard Stallman committed
2355 2356 2357
#endif

#ifdef ARGS_GROW_DOWNWARD
2358 2359
		  highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
						     needed + 1);
Richard Stallman committed
2360
#else
2361 2362
		  highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
						     needed);
Richard Stallman committed
2363
#endif
2364
		  stack_usage_map = alloca (highest_outgoing_arg_in_use);
Richard Stallman committed
2365

2366
		  if (initial_highest_arg_in_use)
2367 2368
		    memcpy (stack_usage_map, initial_stack_usage_map,
			    initial_highest_arg_in_use);
2369

2370
		  if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
2371
		    memset (&stack_usage_map[initial_highest_arg_in_use], 0,
2372 2373 2374
			   (highest_outgoing_arg_in_use
			    - initial_highest_arg_in_use));
		  needed = 0;
2375

2376 2377 2378
		  /* The address of the outgoing argument list must not be
		     copied to a register here, because argblock would be left
		     pointing to the wrong place after the call to
Kazu Hirata committed
2379
		     allocate_dynamic_stack_space below.  */
2380

2381
		  argblock = virtual_outgoing_args_rtx;
Kazu Hirata committed
2382
		}
2383
	      else
2384
		{
2385
		  if (inhibit_defer_pop == 0)
2386
		    {
2387
		      /* Try to reuse some or all of the pending_stack_adjust
2388 2389
			 to get this space.  */
		      needed
Kazu Hirata committed
2390
			= (combine_pending_stack_adjustment_and_call
2391
			   (unadjusted_args_size,
2392
			    &adjusted_args_size,
2393 2394 2395 2396 2397 2398 2399 2400 2401
			    preferred_unit_stack_boundary));

		      /* combine_pending_stack_adjustment_and_call computes
			 an adjustment before the arguments are allocated.
			 Account for them and see whether or not the stack
			 needs to go up or down.  */
		      needed = unadjusted_args_size - needed;

		      if (needed < 0)
2402
			{
2403 2404 2405 2406 2407
			  /* We're releasing stack space.  */
			  /* ??? We can avoid any adjustment at all if we're
			     already aligned.  FIXME.  */
			  pending_stack_adjust = -needed;
			  do_pending_stack_adjust ();
2408 2409
			  needed = 0;
			}
Kazu Hirata committed
2410
		      else
2411 2412 2413
			/* We need to allocate space.  We'll do that in
			   push_block below.  */
			pending_stack_adjust = 0;
2414
		    }
2415 2416 2417

		  /* Special case this because overhead of `push_block' in
		     this case is non-trivial.  */
2418 2419
		  if (needed == 0)
		    argblock = virtual_outgoing_args_rtx;
2420
		  else
2421 2422 2423 2424 2425 2426
		    {
		      argblock = push_block (GEN_INT (needed), 0, 0);
#ifdef ARGS_GROW_DOWNWARD
		      argblock = plus_constant (argblock, needed);
#endif
		    }
2427

2428 2429 2430 2431 2432 2433 2434
		  /* We only really need to call `copy_to_reg' in the case
		     where push insns are going to be used to pass ARGBLOCK
		     to a function call in ARGS.  In that case, the stack
		     pointer changes value from the allocation point to the
		     call point, and hence the value of
		     VIRTUAL_OUTGOING_ARGS_RTX changes as well.  But might
		     as well always do it.  */
2435
		  argblock = copy_to_reg (argblock);
2436 2437 2438
		}
	    }
	}
2439

2440 2441 2442 2443 2444 2445 2446 2447
      if (ACCUMULATE_OUTGOING_ARGS)
	{
	  /* The save/restore code in store_one_arg handles all
	     cases except one: a constructor call (including a C
	     function returning a BLKmode struct) to initialize
	     an argument.  */
	  if (stack_arg_under_construction)
	    {
2448
#ifndef OUTGOING_REG_PARM_STACK_SPACE
2449 2450
	      rtx push_size = GEN_INT (reg_parm_stack_space
				       + adjusted_args_size.constant);
2451
#else
2452
	      rtx push_size = GEN_INT (adjusted_args_size.constant);
2453
#endif
2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468
	      if (old_stack_level == 0)
		{
		  emit_stack_save (SAVE_BLOCK, &old_stack_level,
				   NULL_RTX);
		  old_stack_pointer_delta = stack_pointer_delta;
		  old_pending_adj = pending_stack_adjust;
		  pending_stack_adjust = 0;
		  /* stack_arg_under_construction says whether a stack
		     arg is being constructed at the old stack level.
		     Pushing the stack gets a clean outgoing argument
		     block.  */
		  old_stack_arg_under_construction
		    = stack_arg_under_construction;
		  stack_arg_under_construction = 0;
		  /* Make a new map for the new argument list.  */
2469
		  stack_usage_map = alloca (highest_outgoing_arg_in_use);
2470 2471
		  memset (stack_usage_map, 0, highest_outgoing_arg_in_use);
		  highest_outgoing_arg_in_use = 0;
2472
		}
2473 2474
	      allocate_dynamic_stack_space (push_size, NULL_RTX,
					    BITS_PER_UNIT);
2475
	    }
2476

2477 2478 2479 2480 2481 2482 2483 2484 2485
	  /* If argument evaluation might modify the stack pointer,
	     copy the address of the argument list to a register.  */
	  for (i = 0; i < num_actuals; i++)
	    if (args[i].pass_on_stack)
	      {
		argblock = copy_addr_to_reg (argblock);
		break;
	      }
	}
2486

2487
      compute_argument_addresses (args, argblock, num_actuals);
2488

2489 2490
      /* If we push args individually in reverse order, perform stack alignment
	 before the first push (the last arg).  */
2491
      if (PUSH_ARGS_REVERSED && argblock == 0
2492
	  && adjusted_args_size.constant != unadjusted_args_size)
2493
	{
2494 2495
	  /* When the stack adjustment is pending, we get better code
	     by combining the adjustments.  */
Kazu Hirata committed
2496
	  if (pending_stack_adjust
2497
	      && ! (flags & ECF_LIBCALL_BLOCK)
2498
	      && ! inhibit_defer_pop)
2499 2500
	    {
	      pending_stack_adjust
Kazu Hirata committed
2501
		= (combine_pending_stack_adjustment_and_call
2502
		   (unadjusted_args_size,
2503
		    &adjusted_args_size,
2504 2505 2506
		    preferred_unit_stack_boundary));
	      do_pending_stack_adjust ();
	    }
2507
	  else if (argblock == 0)
2508
	    anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2509 2510
					- unadjusted_args_size));
	}
2511 2512 2513
      /* Now that the stack is properly aligned, pops can't safely
	 be deferred during the evaluation of the arguments.  */
      NO_DEFER_POP;
Richard Stallman committed
2514

2515
      funexp = rtx_for_function_call (fndecl, addr);
Richard Stallman committed
2516

2517 2518 2519 2520 2521 2522 2523
      /* Figure out the register where the value, if any, will come back.  */
      valreg = 0;
      if (TYPE_MODE (TREE_TYPE (exp)) != VOIDmode
	  && ! structure_value_addr)
	{
	  if (pcc_struct_value)
	    valreg = hard_function_value (build_pointer_type (TREE_TYPE (exp)),
2524
					  fndecl, (pass == 0));
2525
	  else
2526
	    valreg = hard_function_value (TREE_TYPE (exp), fndecl, (pass == 0));
2527
	}
Richard Stallman committed
2528

2529 2530 2531
      /* Precompute all register parameters.  It isn't safe to compute anything
	 once we have started filling any specific hard regs.  */
      precompute_register_parameters (num_actuals, args, &reg_parm_seen);
Richard Stallman committed
2532

2533 2534 2535 2536 2537 2538
      if (TREE_OPERAND (exp, 2))
	static_chain_value = expand_expr (TREE_OPERAND (exp, 2),
					  NULL_RTX, VOIDmode, 0);
      else
	static_chain_value = 0;

2539
#ifdef REG_PARM_STACK_SPACE
2540 2541
      /* Save the fixed argument area if it's part of the caller's frame and
	 is clobbered by argument setup for this call.  */
2542
      if (ACCUMULATE_OUTGOING_ARGS && pass)
2543 2544
	save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
					      &low_to_save, &high_to_save);
2545
#endif
Richard Stallman committed
2546

2547 2548 2549 2550 2551
      /* Now store (and compute if necessary) all non-register parms.
	 These come before register parms, since they can require block-moves,
	 which could clobber the registers used for register parms.
	 Parms which have partial registers are not stored here,
	 but we do preallocate space here if they want that.  */
Richard Stallman committed
2552

2553 2554
      for (i = 0; i < num_actuals; i++)
	if (args[i].reg == 0 || args[i].pass_on_stack)
2555 2556 2557
	  {
	    rtx before_arg = get_last_insn ();

2558 2559 2560 2561 2562
	    if (store_one_arg (&args[i], argblock, flags,
			       adjusted_args_size.var != 0,
			       reg_parm_stack_space)
		|| (pass == 0
		    && check_sibcall_argument_overlap (before_arg,
2563
						       &args[i], 1)))
2564
	      sibcall_failure = 1;
2565 2566 2567 2568 2569 2570 2571 2572

	    if (flags & ECF_CONST
		&& args[i].stack
		&& args[i].value == args[i].stack)
	      call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
					       gen_rtx_USE (VOIDmode,
							    args[i].value),
					       call_fusage);
2573
	  }
2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586

      /* If we have a parm that is passed in registers but not in memory
	 and whose alignment does not permit a direct copy into registers,
	 make a group of pseudos that correspond to each register that we
	 will later fill.  */
      if (STRICT_ALIGNMENT)
	store_unaligned_arguments_into_pseudos (args, num_actuals);

      /* Now store any partially-in-registers parm.
	 This is the last place a block-move can happen.  */
      if (reg_parm_seen)
	for (i = 0; i < num_actuals; i++)
	  if (args[i].partial != 0 && ! args[i].pass_on_stack)
2587 2588 2589
	    {
	      rtx before_arg = get_last_insn ();

2590 2591 2592 2593 2594
	      if (store_one_arg (&args[i], argblock, flags,
				 adjusted_args_size.var != 0,
				 reg_parm_stack_space)
		  || (pass == 0
		      && check_sibcall_argument_overlap (before_arg,
2595
							 &args[i], 1)))
2596 2597
		sibcall_failure = 1;
	    }
Richard Stallman committed
2598

2599 2600
      /* If we pushed args in forward order, perform stack alignment
	 after pushing the last arg.  */
2601
      if (!PUSH_ARGS_REVERSED && argblock == 0)
2602
	anti_adjust_stack (GEN_INT (adjusted_args_size.constant
2603
				    - unadjusted_args_size));
Richard Stallman committed
2604

2605 2606 2607
      /* If register arguments require space on the stack and stack space
	 was not preallocated, allocate stack space here for arguments
	 passed in registers.  */
2608 2609
#ifdef OUTGOING_REG_PARM_STACK_SPACE
      if (!ACCUMULATE_OUTGOING_ARGS
Kazu Hirata committed
2610
	  && must_preallocate == 0 && reg_parm_stack_space > 0)
2611
	anti_adjust_stack (GEN_INT (reg_parm_stack_space));
2612 2613
#endif

2614 2615 2616 2617
      /* Pass the function the address in which to return a
	 structure value.  */
      if (pass != 0 && structure_value_addr && ! structure_value_addr_parm)
	{
2618
	  structure_value_addr
2619
	    = convert_memory_address (Pmode, structure_value_addr);
DJ Delorie committed
2620
	  emit_move_insn (struct_value,
2621 2622 2623 2624
			  force_reg (Pmode,
				     force_operand (structure_value_addr,
						    NULL_RTX)));

2625
	  if (REG_P (struct_value))
DJ Delorie committed
2626
	    use_reg (&call_fusage, struct_value);
2627
	}
2628

2629 2630
      funexp = prepare_call_address (funexp, static_chain_value,
				     &call_fusage, reg_parm_seen, pass == 0);
Richard Stallman committed
2631

2632 2633
      load_register_parameters (args, num_actuals, &call_fusage, flags,
				pass == 0, &sibcall_failure);
Kazu Hirata committed
2634

2635 2636 2637
      /* Save a pointer to the last insn before the call, so that we can
	 later safely search backwards to find the CALL_INSN.  */
      before_call = get_last_insn ();
Richard Stallman committed
2638

2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649
      /* Set up next argument register.  For sibling calls on machines
	 with register windows this should be the incoming register.  */
#ifdef FUNCTION_INCOMING_ARG
      if (pass == 0)
	next_arg_reg = FUNCTION_INCOMING_ARG (args_so_far, VOIDmode,
					      void_type_node, 1);
      else
#endif
	next_arg_reg = FUNCTION_ARG (args_so_far, VOIDmode,
				     void_type_node, 1);

2650 2651 2652
      /* All arguments and registers used for the call must be set up by
	 now!  */

2653
      /* Stack must be properly aligned now.  */
2654 2655
      gcc_assert (!pass
		  || !(stack_pointer_delta % preferred_unit_stack_boundary));
2656

2657
      /* Generate the actual call instruction.  */
2658
      emit_call_1 (funexp, exp, fndecl, funtype, unadjusted_args_size,
2659
		   adjusted_args_size.constant, struct_value_size,
2660
		   next_arg_reg, valreg, old_inhibit_defer_pop, call_fusage,
Alexandre Oliva committed
2661
		   flags, & args_so_far);
2662 2663 2664 2665 2666

      /* If call is cse'able, make appropriate pair of reg-notes around it.
	 Test valreg so we don't crash; may safely ignore `const'
	 if return type is void.  Disable for PARALLEL return values, because
	 we have no way to move such values into a pseudo register.  */
2667
      if (pass && (flags & ECF_LIBCALL_BLOCK))
2668
	{
2669
	  rtx insns;
2670 2671
	  rtx insn;
	  bool failed = valreg == 0 || GET_CODE (valreg) == PARALLEL;
2672

2673 2674 2675 2676 2677
          insns = get_insns ();

	  /* Expansion of block moves possibly introduced a loop that may
	     not appear inside libcall block.  */
	  for (insn = insns; insn; insn = NEXT_INSN (insn))
2678
	    if (JUMP_P (insn))
2679 2680 2681
	      failed = true;

	  if (failed)
2682 2683
	    {
	      end_sequence ();
2684
	      emit_insn (insns);
2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696
	    }
	  else
	    {
	      rtx note = 0;
	      rtx temp = gen_reg_rtx (GET_MODE (valreg));

	      /* Mark the return value as a pointer if needed.  */
	      if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
		mark_reg_pointer (temp,
				  TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))));

	      end_sequence ();
2697 2698 2699 2700 2701 2702
	      if (flag_unsafe_math_optimizations
		  && fndecl
		  && DECL_BUILT_IN (fndecl)
		  && (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRT
		      || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTF
		      || DECL_FUNCTION_CODE (fndecl) == BUILT_IN_SQRTL))
2703 2704
		note = gen_rtx_fmt_e (SQRT,
				      GET_MODE (temp),
2705 2706 2707 2708 2709 2710 2711 2712 2713 2714
				      args[0].initial_value);
	      else
		{
		  /* Construct an "equal form" for the value which
		     mentions all the arguments in order as well as
		     the function name.  */
		  for (i = 0; i < num_actuals; i++)
		    note = gen_rtx_EXPR_LIST (VOIDmode,
					      args[i].initial_value, note);
		  note = gen_rtx_EXPR_LIST (VOIDmode, funexp, note);
2715

2716 2717
		  if (flags & ECF_PURE)
		    note = gen_rtx_EXPR_LIST (VOIDmode,
2718 2719 2720 2721
			gen_rtx_USE (VOIDmode,
				     gen_rtx_MEM (BLKmode,
						  gen_rtx_SCRATCH (VOIDmode))),
			note);
2722
		}
2723 2724 2725 2726
	      emit_libcall_block (insns, temp, valreg, note);

	      valreg = temp;
	    }
2727
	}
2728
      else if (pass && (flags & ECF_MALLOC))
2729 2730 2731 2732
	{
	  rtx temp = gen_reg_rtx (GET_MODE (valreg));
	  rtx last, insns;

Kazu Hirata committed
2733
	  /* The return value from a malloc-like function is a pointer.  */
2734
	  if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE)
2735
	    mark_reg_pointer (temp, BIGGEST_ALIGNMENT);
2736 2737 2738 2739 2740 2741

	  emit_move_insn (temp, valreg);

	  /* The return value from a malloc-like function can not alias
	     anything else.  */
	  last = get_last_insn ();
Kazu Hirata committed
2742
	  REG_NOTES (last) =
2743 2744 2745 2746 2747
	    gen_rtx_EXPR_LIST (REG_NOALIAS, temp, REG_NOTES (last));

	  /* Write out the sequence.  */
	  insns = get_insns ();
	  end_sequence ();
2748
	  emit_insn (insns);
2749 2750
	  valreg = temp;
	}
Richard Stallman committed
2751

2752 2753 2754
      /* For calls to `setjmp', etc., inform flow.c it should complain
	 if nonvolatile values are live.  For functions that cannot return,
	 inform flow that control does not fall through.  */
Richard Stallman committed
2755

2756
      if ((flags & (ECF_NORETURN | ECF_LONGJMP)) || pass == 0)
2757
	{
2758
	  /* The barrier must be emitted
2759 2760
	     immediately after the CALL_INSN.  Some ports emit more
	     than just a CALL_INSN above, so we must search for it here.  */
Richard Stallman committed
2761

2762
	  rtx last = get_last_insn ();
2763
	  while (!CALL_P (last))
2764 2765 2766
	    {
	      last = PREV_INSN (last);
	      /* There was no CALL_INSN?  */
2767
	      gcc_assert (last != before_call);
2768
	    }
Richard Stallman committed
2769

2770
	  emit_barrier_after (last);
2771

2772 2773 2774 2775 2776 2777 2778 2779
	  /* Stack adjustments after a noreturn call are dead code.
	     However when NO_DEFER_POP is in effect, we must preserve
	     stack_pointer_delta.  */
	  if (inhibit_defer_pop == 0)
	    {
	      stack_pointer_delta = old_stack_allocated;
	      pending_stack_adjust = 0;
	    }
2780
	}
Richard Stallman committed
2781

2782
      if (flags & ECF_LONGJMP)
2783
	current_function_calls_longjmp = 1;
Richard Stallman committed
2784

2785
      /* If value type not void, return an rtx for the value.  */
Richard Stallman committed
2786

2787 2788
      if (TYPE_MODE (TREE_TYPE (exp)) == VOIDmode
	  || ignore)
2789
	target = const0_rtx;
2790 2791
      else if (structure_value_addr)
	{
2792
	  if (target == 0 || !MEM_P (target))
2793
	    {
2794 2795 2796 2797 2798
	      target
		= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
			       memory_address (TYPE_MODE (TREE_TYPE (exp)),
					       structure_value_addr));
	      set_mem_attributes (target, exp, 1);
2799 2800 2801
	    }
	}
      else if (pcc_struct_value)
2802
	{
2803 2804 2805 2806 2807
	  /* This is the special C++ case where we need to
	     know what the true target was.  We take care to
	     never use this value more than once in one expression.  */
	  target = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
				copy_to_reg (valreg));
2808
	  set_mem_attributes (target, exp, 1);
2809
	}
2810 2811 2812 2813
      /* Handle calls that return values in multiple non-contiguous locations.
	 The Irix 6 ABI has examples of this.  */
      else if (GET_CODE (valreg) == PARALLEL)
	{
2814
	  if (target == 0)
2815
	    {
2816 2817 2818 2819 2820 2821
	      /* This will only be assigned once, so it can be readonly.  */
	      tree nt = build_qualified_type (TREE_TYPE (exp),
					      (TYPE_QUALS (TREE_TYPE (exp))
					       | TYPE_QUAL_CONST));

	      target = assign_temp (nt, 0, 1, 1);
2822 2823 2824 2825
	      preserve_temp_slots (target);
	    }

	  if (! rtx_equal_p (target, valreg))
2826
	    emit_group_store (target, valreg, TREE_TYPE (exp),
2827
			      int_size_in_bytes (TREE_TYPE (exp)));
2828

2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842
	  /* We can not support sibling calls for this case.  */
	  sibcall_failure = 1;
	}
      else if (target
	       && GET_MODE (target) == TYPE_MODE (TREE_TYPE (exp))
	       && GET_MODE (target) == GET_MODE (valreg))
	{
	  /* TARGET and VALREG cannot be equal at this point because the
	     latter would not have REG_FUNCTION_VALUE_P true, while the
	     former would if it were referring to the same register.

	     If they refer to the same register, this move will be a no-op,
	     except when function inlining is being done.  */
	  emit_move_insn (target, valreg);
2843 2844 2845 2846

	  /* If we are setting a MEM, this code must be executed.  Since it is
	     emitted after the call insn, sibcall optimization cannot be
	     performed in that case.  */
2847
	  if (MEM_P (target))
2848
	    sibcall_failure = 1;
2849 2850
	}
      else if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
2851 2852 2853 2854 2855 2856
	{
	  target = copy_blkmode_from_reg (target, valreg, TREE_TYPE (exp));

	  /* We can not support sibling calls for this case.  */
	  sibcall_failure = 1;
	}
2857
      else
2858 2859 2860 2861 2862 2863
	{
	  if (shift_returned_value (TREE_TYPE (exp), &valreg))
	    sibcall_failure = 1;

	  target = copy_to_reg (valreg);
	}
Richard Stallman committed
2864

DJ Delorie committed
2865 2866
      if (targetm.calls.promote_function_return(funtype))
	{
2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896
	  /* If we promoted this return value, make the proper SUBREG.
	     TARGET might be const0_rtx here, so be careful.  */
	  if (REG_P (target)
	      && TYPE_MODE (TREE_TYPE (exp)) != BLKmode
	      && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
	    {
	      tree type = TREE_TYPE (exp);
	      int unsignedp = TYPE_UNSIGNED (type);
	      int offset = 0;
	      enum machine_mode pmode;
	      
	      pmode = promote_mode (type, TYPE_MODE (type), &unsignedp, 1);
	      /* If we don't promote as expected, something is wrong.  */
	      gcc_assert (GET_MODE (target) == pmode);
	      
	      if ((WORDS_BIG_ENDIAN || BYTES_BIG_ENDIAN)
		  && (GET_MODE_SIZE (GET_MODE (target))
		      > GET_MODE_SIZE (TYPE_MODE (type))))
		{
		  offset = GET_MODE_SIZE (GET_MODE (target))
		    - GET_MODE_SIZE (TYPE_MODE (type));
		  if (! BYTES_BIG_ENDIAN)
		    offset = (offset / UNITS_PER_WORD) * UNITS_PER_WORD;
		  else if (! WORDS_BIG_ENDIAN)
		    offset %= UNITS_PER_WORD;
		}
	      target = gen_rtx_SUBREG (TYPE_MODE (type), target, offset);
	      SUBREG_PROMOTED_VAR_P (target) = 1;
	      SUBREG_PROMOTED_UNSIGNED_SET (target, unsignedp);
	    }
DJ Delorie committed
2897
	}
2898

2899 2900
      /* If size of args is variable or this was a constructor call for a stack
	 argument, restore saved stack-pointer value.  */
Richard Stallman committed
2901

2902
      if (old_stack_level && ! (flags & ECF_SP_DEPRESSED))
2903 2904
	{
	  emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX);
2905
	  stack_pointer_delta = old_stack_pointer_delta;
2906
	  pending_stack_adjust = old_pending_adj;
2907
	  old_stack_allocated = stack_pointer_delta - pending_stack_adjust;
2908 2909 2910 2911 2912
	  stack_arg_under_construction = old_stack_arg_under_construction;
	  highest_outgoing_arg_in_use = initial_highest_arg_in_use;
	  stack_usage_map = initial_stack_usage_map;
	  sibcall_failure = 1;
	}
2913
      else if (ACCUMULATE_OUTGOING_ARGS && pass)
2914
	{
Richard Stallman committed
2915
#ifdef REG_PARM_STACK_SPACE
2916
	  if (save_area)
2917 2918
	    restore_fixed_argument_area (save_area, argblock,
					 high_to_save, low_to_save);
2919
#endif
Richard Stallman committed
2920

2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933
	  /* If we saved any argument areas, restore them.  */
	  for (i = 0; i < num_actuals; i++)
	    if (args[i].save_area)
	      {
		enum machine_mode save_mode = GET_MODE (args[i].save_area);
		rtx stack_area
		  = gen_rtx_MEM (save_mode,
				 memory_address (save_mode,
						 XEXP (args[i].stack_slot, 0)));

		if (save_mode != BLKmode)
		  emit_move_insn (stack_area, args[i].save_area);
		else
2934
		  emit_block_move (stack_area, args[i].save_area,
2935
				   GEN_INT (args[i].locate.size.constant),
2936
				   BLOCK_OP_CALL_PARM);
2937
	      }
Richard Stallman committed
2938

2939 2940 2941
	  highest_outgoing_arg_in_use = initial_highest_arg_in_use;
	  stack_usage_map = initial_stack_usage_map;
	}
Richard Stallman committed
2942

Kazu Hirata committed
2943
      /* If this was alloca, record the new stack level for nonlocal gotos.
2944 2945
	 Check for the handler slots since we might not have a save area
	 for non-local gotos.  */
2946

2947 2948
      if ((flags & ECF_MAY_BE_ALLOCA) && cfun->nonlocal_goto_save_area != 0)
	update_nonlocal_goto_save_area ();
Richard Stallman committed
2949

2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963
      /* Free up storage we no longer need.  */
      for (i = 0; i < num_actuals; ++i)
	if (args[i].aligned_regs)
	  free (args[i].aligned_regs);

      insns = get_insns ();
      end_sequence ();

      if (pass == 0)
	{
	  tail_call_insns = insns;

	  /* Restore the pending stack adjustment now that we have
	     finished generating the sibling call sequence.  */
2964

2965
	  pending_stack_adjust = save_pending_stack_adjust;
2966
	  stack_pointer_delta = save_stack_pointer_delta;
2967 2968

	  /* Prepare arg structure for next iteration.  */
Kazu Hirata committed
2969
	  for (i = 0; i < num_actuals; i++)
2970 2971 2972 2973 2974
	    {
	      args[i].value = 0;
	      args[i].aligned_regs = 0;
	      args[i].stack = 0;
	    }
2975 2976

	  sbitmap_free (stored_args_map);
2977 2978
	}
      else
2979 2980 2981 2982
	{
	  normal_call_insns = insns;

	  /* Verify that we've deallocated all the stack we used.  */
2983 2984 2985
	  gcc_assert ((flags & (ECF_NORETURN | ECF_LONGJMP))
		      || (old_stack_allocated
			  == stack_pointer_delta - pending_stack_adjust));
2986
	}
2987 2988 2989 2990 2991

      /* If something prevents making this a sibling call,
	 zero out the sequence.  */
      if (sibcall_failure)
	tail_call_insns = NULL_RTX;
2992 2993
      else
	break;
2994 2995
    }

2996
  /* If tail call production succeeded, we need to remove REG_EQUIV notes on
2997 2998
     arguments too, as argument area is now clobbered by the call.  */
  if (tail_call_insns)
2999
    {
3000 3001
      emit_insn (tail_call_insns);
      cfun->tail_call_emit = true;
3002 3003
    }
  else
3004
    emit_insn (normal_call_insns);
Richard Stallman committed
3005

3006
  currently_expanding_call--;
3007

3008 3009 3010 3011 3012 3013
  /* If this function returns with the stack pointer depressed, ensure
     this block saves and restores the stack pointer, show it was
     changed, and adjust for any outgoing arg space.  */
  if (flags & ECF_SP_DEPRESSED)
    {
      clear_pending_stack_adjust ();
3014
      emit_insn (gen_rtx_CLOBBER (VOIDmode, stack_pointer_rtx));
3015 3016 3017
      emit_move_insn (virtual_stack_dynamic_rtx, stack_pointer_rtx);
    }

Richard Stallman committed
3018 3019
  return target;
}
3020

3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036
/* A sibling call sequence invalidates any REG_EQUIV notes made for
   this function's incoming arguments.

   At the start of RTL generation we know the only REG_EQUIV notes
   in the rtl chain are those for incoming arguments, so we can safely
   flush any REG_EQUIV note.

   This is (slight) overkill.  We could keep track of the highest
   argument we clobber and be more selective in removing notes, but it
   does not seem to be worth the effort.  */
void
fixup_tail_calls (void)
{
  purge_reg_equiv_notes ();
}

3037 3038
/* Traverse an argument list in VALUES and expand all complex
   arguments into their components.  */
3039
static tree
3040 3041 3042 3043
split_complex_values (tree values)
{
  tree p;

3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054
  /* Before allocating memory, check for the common case of no complex.  */
  for (p = values; p; p = TREE_CHAIN (p))
    {
      tree type = TREE_TYPE (TREE_VALUE (p));
      if (type && TREE_CODE (type) == COMPLEX_TYPE
	  && targetm.calls.split_complex_arg (type))
        goto found;
    }
  return values;

 found:
3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065
  values = copy_list (values);

  for (p = values; p; p = TREE_CHAIN (p))
    {
      tree complex_value = TREE_VALUE (p);
      tree complex_type;

      complex_type = TREE_TYPE (complex_value);
      if (!complex_type)
	continue;

3066 3067
      if (TREE_CODE (complex_type) == COMPLEX_TYPE
	  && targetm.calls.split_complex_arg (complex_type))
3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092
	{
	  tree subtype;
	  tree real, imag, next;

	  subtype = TREE_TYPE (complex_type);
	  complex_value = save_expr (complex_value);
	  real = build1 (REALPART_EXPR, subtype, complex_value);
	  imag = build1 (IMAGPART_EXPR, subtype, complex_value);

	  TREE_VALUE (p) = real;
	  next = TREE_CHAIN (p);
	  imag = build_tree_list (NULL_TREE, imag);
	  TREE_CHAIN (p) = imag;
	  TREE_CHAIN (imag) = next;

	  /* Skip the newly created node.  */
	  p = TREE_CHAIN (p);
	}
    }

  return values;
}

/* Traverse a list of TYPES and expand all complex types into their
   components.  */
3093
static tree
3094 3095 3096 3097
split_complex_types (tree types)
{
  tree p;

3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108
  /* Before allocating memory, check for the common case of no complex.  */
  for (p = types; p; p = TREE_CHAIN (p))
    {
      tree type = TREE_VALUE (p);
      if (TREE_CODE (type) == COMPLEX_TYPE
	  && targetm.calls.split_complex_arg (type))
        goto found;
    }
  return types;

 found:
3109 3110 3111 3112 3113 3114
  types = copy_list (types);

  for (p = types; p; p = TREE_CHAIN (p))
    {
      tree complex_type = TREE_VALUE (p);

3115 3116
      if (TREE_CODE (complex_type) == COMPLEX_TYPE
	  && targetm.calls.split_complex_arg (complex_type))
3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135
	{
	  tree next, imag;

	  /* Rewrite complex type with component type.  */
	  TREE_VALUE (p) = TREE_TYPE (complex_type);
	  next = TREE_CHAIN (p);

	  /* Add another component type for the imaginary part.  */
	  imag = build_tree_list (NULL_TREE, TREE_VALUE (p));
	  TREE_CHAIN (p) = imag;
	  TREE_CHAIN (imag) = next;

	  /* Skip the newly created node.  */
	  p = TREE_CHAIN (p);
	}
    }

  return types;
}
Richard Stallman committed
3136

3137
/* Output a library call to function FUN (a SYMBOL_REF rtx).
Kazu Hirata committed
3138
   The RETVAL parameter specifies whether return value needs to be saved, other
3139
   parameters are documented in the emit_library_call function below.  */
3140

3141
static rtx
3142 3143 3144
emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
			   enum libcall_type fn_type,
			   enum machine_mode outmode, int nargs, va_list p)
3145
{
3146 3147 3148 3149
  /* Total size in bytes of all the stack-parms scanned so far.  */
  struct args_size args_size;
  /* Size of arguments before any adjustments (such as rounding).  */
  struct args_size original_args_size;
3150
  int argnum;
3151 3152 3153 3154 3155
  rtx fun;
  int inc;
  int count;
  rtx argblock = 0;
  CUMULATIVE_ARGS args_so_far;
Kazu Hirata committed
3156 3157 3158 3159 3160 3161
  struct arg
  {
    rtx value;
    enum machine_mode mode;
    rtx reg;
    int partial;
3162
    struct locate_and_pad_arg_data locate;
Kazu Hirata committed
3163 3164
    rtx save_area;
  };
3165 3166 3167 3168
  struct arg *argvec;
  int old_inhibit_defer_pop = inhibit_defer_pop;
  rtx call_fusage = 0;
  rtx mem_value = 0;
3169
  rtx valreg;
3170 3171
  int pcc_struct_value = 0;
  int struct_value_size = 0;
3172
  int flags;
3173 3174
  int reg_parm_stack_space = 0;
  int needed;
3175
  rtx before_call;
3176
  tree tfom;			/* type_for_mode (outmode, 0) */
3177

3178
#ifdef REG_PARM_STACK_SPACE
3179 3180
  /* Define the boundary of the register parm stack space that needs to be
     save, if any.  */
3181
  int low_to_save, high_to_save;
Kazu Hirata committed
3182
  rtx save_area = 0;            /* Place that it is saved.  */
3183 3184 3185 3186 3187 3188
#endif

  /* Size of the stack reserved for parameter registers.  */
  int initial_highest_arg_in_use = highest_outgoing_arg_in_use;
  char *initial_stack_usage_map = stack_usage_map;

DJ Delorie committed
3189 3190
  rtx struct_value = targetm.calls.struct_value_rtx (0, 0);

3191 3192 3193 3194
#ifdef REG_PARM_STACK_SPACE
  reg_parm_stack_space = REG_PARM_STACK_SPACE ((tree) 0);
#endif

3195
  /* By default, library functions can not throw.  */
3196 3197
  flags = ECF_NOTHROW;

3198 3199 3200
  switch (fn_type)
    {
    case LCT_NORMAL:
3201
      break;
3202
    case LCT_CONST:
3203 3204
      flags |= ECF_CONST;
      break;
3205
    case LCT_PURE:
3206
      flags |= ECF_PURE;
3207 3208
      break;
    case LCT_CONST_MAKE_BLOCK:
3209
      flags |= ECF_CONST | ECF_LIBCALL_BLOCK;
3210 3211
      break;
    case LCT_PURE_MAKE_BLOCK:
3212
      flags |= ECF_PURE | ECF_LIBCALL_BLOCK;
3213 3214 3215 3216 3217 3218 3219
      break;
    case LCT_NORETURN:
      flags |= ECF_NORETURN;
      break;
    case LCT_THROW:
      flags = ECF_NORETURN;
      break;
3220 3221 3222
    case LCT_ALWAYS_RETURN:
      flags = ECF_ALWAYS_RETURN;
      break;
3223 3224 3225
    case LCT_RETURNS_TWICE:
      flags = ECF_RETURNS_TWICE;
      break;
3226
    }
3227 3228 3229 3230 3231 3232 3233 3234 3235
  fun = orgfun;

  /* Ensure current function's preferred stack boundary is at least
     what we need.  */
  if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
    cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;

  /* If this kind of value comes back in memory,
     decide where in memory it should come back.  */
3236
  if (outmode != VOIDmode)
3237
    {
3238
      tfom = lang_hooks.types.type_for_mode (outmode, 0);
DJ Delorie committed
3239
      if (aggregate_value_p (tfom, 0))
3240
	{
3241
#ifdef PCC_STATIC_STRUCT_RETURN
3242 3243 3244 3245 3246 3247
	  rtx pointer_reg
	    = hard_function_value (build_pointer_type (tfom), 0, 0);
	  mem_value = gen_rtx_MEM (outmode, pointer_reg);
	  pcc_struct_value = 1;
	  if (value == 0)
	    value = gen_reg_rtx (outmode);
3248
#else /* not PCC_STATIC_STRUCT_RETURN */
3249
	  struct_value_size = GET_MODE_SIZE (outmode);
3250
	  if (value != 0 && MEM_P (value))
3251 3252 3253
	    mem_value = value;
	  else
	    mem_value = assign_temp (tfom, 0, 1, 1);
3254
#endif
3255 3256 3257
	  /* This call returns a big structure.  */
	  flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);
	}
3258
    }
3259 3260
  else
    tfom = void_type_node;
3261 3262 3263 3264 3265 3266 3267 3268 3269 3270

  /* ??? Unfinished: must pass the memory address as an argument.  */

  /* Copy all the libcall-arguments out of the varargs data
     and into a vector ARGVEC.

     Compute how to pass each argument.  We only support a very small subset
     of the full argument passing conventions to limit complexity here since
     library functions shouldn't have many args.  */

3271 3272
  argvec = alloca ((nargs + 1) * sizeof (struct arg));
  memset (argvec, 0, (nargs + 1) * sizeof (struct arg));
3273

3274 3275 3276
#ifdef INIT_CUMULATIVE_LIBCALL_ARGS
  INIT_CUMULATIVE_LIBCALL_ARGS (args_so_far, outmode, fun);
#else
3277
  INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0, nargs);
3278
#endif
3279 3280 3281 3282 3283 3284

  args_size.constant = 0;
  args_size.var = 0;

  count = 0;

3285 3286
  /* Now we are about to start emitting insns that can be deleted
     if a libcall is deleted.  */
3287
  if (flags & ECF_LIBCALL_BLOCK)
3288 3289
    start_sequence ();

3290 3291 3292 3293
  push_temp_slots ();

  /* If there's a structure value address to be passed,
     either pass it in the special place, or pass it as an extra argument.  */
DJ Delorie committed
3294
  if (mem_value && struct_value == 0 && ! pcc_struct_value)
3295 3296
    {
      rtx addr = XEXP (mem_value, 0);
3297 3298
      int partial;
      
3299 3300 3301
      nargs++;

      /* Make sure it is a reasonable operand for a move or push insn.  */
3302
      if (!REG_P (addr) && !MEM_P (addr)
3303 3304 3305 3306 3307 3308 3309 3310
	  && ! (CONSTANT_P (addr) && LEGITIMATE_CONSTANT_P (addr)))
	addr = force_operand (addr, NULL_RTX);

      argvec[count].value = addr;
      argvec[count].mode = Pmode;
      argvec[count].partial = 0;

      argvec[count].reg = FUNCTION_ARG (args_so_far, Pmode, NULL_TREE, 1);
3311 3312
      partial = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, Pmode, NULL_TREE, 1);
      gcc_assert (!partial);
3313 3314

      locate_and_pad_parm (Pmode, NULL_TREE,
3315 3316 3317 3318 3319
#ifdef STACK_PARMS_IN_REG_PARM_AREA
                           1,
#else
			   argvec[count].reg != 0,
#endif
3320
			   0, NULL_TREE, &args_size, &argvec[count].locate);
3321 3322 3323

      if (argvec[count].reg == 0 || argvec[count].partial != 0
	  || reg_parm_stack_space > 0)
3324
	args_size.constant += argvec[count].locate.size.constant;
3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337

      FUNCTION_ARG_ADVANCE (args_so_far, Pmode, (tree) 0, 1);

      count++;
    }

  for (; count < nargs; count++)
    {
      rtx val = va_arg (p, rtx);
      enum machine_mode mode = va_arg (p, enum machine_mode);

      /* We cannot convert the arg value to the mode the library wants here;
	 must do it earlier where we know the signedness of the arg.  */
3338 3339
      gcc_assert (mode != BLKmode
		  && (GET_MODE (val) == mode || GET_MODE (val) == VOIDmode));
3340 3341

      /* Make sure it is a reasonable operand for a move or push insn.  */
3342
      if (!REG_P (val) && !MEM_P (val)
3343 3344 3345
	  && ! (CONSTANT_P (val) && LEGITIMATE_CONSTANT_P (val)))
	val = force_operand (val, NULL_RTX);

3346
      if (pass_by_reference (&args_so_far, mode, NULL_TREE, 1))
3347
	{
3348
	  rtx slot;
3349 3350
	  int must_copy
	    = !reference_callee_copied (&args_so_far, mode, NULL_TREE, 1);
3351

3352 3353 3354 3355 3356 3357 3358 3359 3360 3361
	  /* loop.c won't look at CALL_INSN_FUNCTION_USAGE of const/pure
	     functions, so we have to pretend this isn't such a function.  */
	  if (flags & ECF_LIBCALL_BLOCK)
	    {
	      rtx insns = get_insns ();
	      end_sequence ();
	      emit_insn (insns);
	    }
	  flags &= ~(ECF_CONST | ECF_PURE | ECF_LIBCALL_BLOCK);

3362 3363 3364 3365 3366 3367 3368 3369
	  /* If this was a CONST function, it is now PURE since
	     it now reads memory.  */
	  if (flags & ECF_CONST)
	    {
	      flags &= ~ECF_CONST;
	      flags |= ECF_PURE;
	    }

3370
	  if (GET_MODE (val) == MEM && !must_copy)
3371
	    slot = val;
3372
	  else
3373
	    {
3374
	      slot = assign_temp (lang_hooks.types.type_for_mode (mode, 0),
3375
				  0, 1, 1);
3376 3377
	      emit_move_insn (slot, val);
	    }
3378

3379 3380 3381
	  call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
					   gen_rtx_USE (VOIDmode, slot),
					   call_fusage);
3382 3383 3384 3385 3386 3387
	  if (must_copy)
	    call_fusage = gen_rtx_EXPR_LIST (VOIDmode,
					     gen_rtx_CLOBBER (VOIDmode,
							      slot),
					     call_fusage);

3388
	  mode = Pmode;
3389
	  val = force_operand (XEXP (slot, 0), NULL_RTX);
3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400
	}

      argvec[count].value = val;
      argvec[count].mode = mode;

      argvec[count].reg = FUNCTION_ARG (args_so_far, mode, NULL_TREE, 1);

      argvec[count].partial
	= FUNCTION_ARG_PARTIAL_NREGS (args_so_far, mode, NULL_TREE, 1);

      locate_and_pad_parm (mode, NULL_TREE,
3401
#ifdef STACK_PARMS_IN_REG_PARM_AREA
Kazu Hirata committed
3402
			   1,
3403 3404 3405
#else
			   argvec[count].reg != 0,
#endif
3406 3407
			   argvec[count].partial,
			   NULL_TREE, &args_size, &argvec[count].locate);
3408

3409
      gcc_assert (!argvec[count].locate.size.var);
3410 3411 3412

      if (argvec[count].reg == 0 || argvec[count].partial != 0
	  || reg_parm_stack_space > 0)
3413
	args_size.constant += argvec[count].locate.size.constant;
3414 3415 3416 3417 3418 3419 3420 3421 3422

      FUNCTION_ARG_ADVANCE (args_so_far, mode, (tree) 0, 1);
    }

  /* If this machine requires an external definition for library
     functions, write one out.  */
  assemble_external_libcall (fun);

  original_args_size = args_size;
3423 3424 3425 3426 3427 3428
  args_size.constant = (((args_size.constant
			  + stack_pointer_delta
			  + STACK_BYTES - 1)
			  / STACK_BYTES
			  * STACK_BYTES)
			 - stack_pointer_delta);
3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439

  args_size.constant = MAX (args_size.constant,
			    reg_parm_stack_space);

#ifndef OUTGOING_REG_PARM_STACK_SPACE
  args_size.constant -= reg_parm_stack_space;
#endif

  if (args_size.constant > current_function_outgoing_args_size)
    current_function_outgoing_args_size = args_size.constant;

3440 3441 3442 3443 3444 3445
  if (ACCUMULATE_OUTGOING_ARGS)
    {
      /* Since the stack pointer will never be pushed, it is possible for
	 the evaluation of a parm to clobber something we have already
	 written to the stack.  Since most function calls on RISC machines
	 do not use the stack, this is uncommon, but must work correctly.
3446

3447 3448 3449
	 Therefore, we save any area of the stack that was already written
	 and that we are using.  Here we set up to do this by making a new
	 stack usage map from the old one.
3450

3451 3452
	 Another approach might be to try to reorder the argument
	 evaluations to avoid this conflicting stack usage.  */
3453

3454
      needed = args_size.constant;
3455 3456

#ifndef OUTGOING_REG_PARM_STACK_SPACE
3457 3458 3459 3460
      /* Since we will be writing into the entire argument area, the
	 map must be allocated for its entire size, not just the part that
	 is the responsibility of the caller.  */
      needed += reg_parm_stack_space;
3461 3462 3463
#endif

#ifdef ARGS_GROW_DOWNWARD
3464 3465
      highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
					 needed + 1);
3466
#else
3467 3468
      highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
					 needed);
3469
#endif
3470
      stack_usage_map = alloca (highest_outgoing_arg_in_use);
3471

3472
      if (initial_highest_arg_in_use)
3473 3474
	memcpy (stack_usage_map, initial_stack_usage_map,
		initial_highest_arg_in_use);
3475

3476
      if (initial_highest_arg_in_use != highest_outgoing_arg_in_use)
3477
	memset (&stack_usage_map[initial_highest_arg_in_use], 0,
3478 3479
	       highest_outgoing_arg_in_use - initial_highest_arg_in_use);
      needed = 0;
3480

3481 3482 3483 3484
      /* We must be careful to use virtual regs before they're instantiated,
         and real regs afterwards.  Loop optimization, for example, can create
	 new libcalls after we've instantiated the virtual regs, and if we
	 use virtuals anyway, they won't match the rtl patterns.  */
3485

3486 3487 3488 3489
      if (virtuals_instantiated)
	argblock = plus_constant (stack_pointer_rtx, STACK_POINTER_OFFSET);
      else
	argblock = virtual_outgoing_args_rtx;
3490 3491 3492 3493 3494 3495
    }
  else
    {
      if (!PUSH_ARGS)
	argblock = push_block (GEN_INT (args_size.constant), 0, 0);
    }
3496 3497 3498

  /* If we push args individually in reverse order, perform stack alignment
     before the first push (the last arg).  */
3499
  if (argblock == 0 && PUSH_ARGS_REVERSED)
3500 3501 3502
    anti_adjust_stack (GEN_INT (args_size.constant
				- original_args_size.constant));

3503 3504 3505 3506 3507 3508 3509 3510 3511 3512
  if (PUSH_ARGS_REVERSED)
    {
      inc = -1;
      argnum = nargs - 1;
    }
  else
    {
      inc = 1;
      argnum = 0;
    }
3513

3514 3515 3516 3517 3518
#ifdef REG_PARM_STACK_SPACE
  if (ACCUMULATE_OUTGOING_ARGS)
    {
      /* The argument list is the property of the called routine and it
	 may clobber it.  If the fixed area has been used for previous
3519 3520 3521
	 parameters, we must save and restore it.  */
      save_area = save_fixed_argument_area (reg_parm_stack_space, argblock,
					    &low_to_save, &high_to_save);
3522 3523
    }
#endif
Kazu Hirata committed
3524

3525 3526 3527 3528 3529 3530
  /* Push the args that need to be pushed.  */

  /* ARGNUM indexes the ARGVEC array in the order in which the arguments
     are to be pushed.  */
  for (count = 0; count < nargs; count++, argnum += inc)
    {
3531 3532
      enum machine_mode mode = argvec[argnum].mode;
      rtx val = argvec[argnum].value;
3533 3534
      rtx reg = argvec[argnum].reg;
      int partial = argvec[argnum].partial;
3535
      int lower_bound = 0, upper_bound = 0, i;
3536 3537 3538

      if (! (reg != 0 && partial == 0))
	{
3539 3540
	  if (ACCUMULATE_OUTGOING_ARGS)
	    {
3541 3542
	      /* If this is being stored into a pre-allocated, fixed-size,
		 stack area, save any previous data at that location.  */
3543 3544

#ifdef ARGS_GROW_DOWNWARD
3545 3546
	      /* stack_slot is negative, but we want to index stack_usage_map
		 with positive values.  */
3547 3548
	      upper_bound = -argvec[argnum].locate.offset.constant + 1;
	      lower_bound = upper_bound - argvec[argnum].locate.size.constant;
3549
#else
3550 3551
	      lower_bound = argvec[argnum].locate.offset.constant;
	      upper_bound = lower_bound + argvec[argnum].locate.size.constant;
3552 3553
#endif

3554 3555 3556 3557 3558 3559 3560
	      i = lower_bound;
	      /* Don't worry about things in the fixed argument area;
		 it has already been saved.  */
	      if (i < reg_parm_stack_space)
		i = reg_parm_stack_space;
	      while (i < upper_bound && stack_usage_map[i] == 0)
		i++;
3561

3562
	      if (i < upper_bound)
3563
		{
3564 3565 3566
		  /* We need to make a save area.  */
		  unsigned int size
		    = argvec[argnum].locate.size.constant * BITS_PER_UNIT;
3567
		  enum machine_mode save_mode
3568 3569 3570 3571
		    = mode_for_size (size, MODE_INT, 1);
		  rtx adr
		    = plus_constant (argblock,
				     argvec[argnum].locate.offset.constant);
3572
		  rtx stack_area
3573
		    = gen_rtx_MEM (save_mode, memory_address (save_mode, adr));
3574

3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592
		  if (save_mode == BLKmode)
		    {
		      argvec[argnum].save_area
			= assign_stack_temp (BLKmode,
				             argvec[argnum].locate.size.constant,
					     0);

		      emit_block_move (validize_mem (argvec[argnum].save_area),
			  	       stack_area,
				       GEN_INT (argvec[argnum].locate.size.constant),
				       BLOCK_OP_CALL_PARM);
		    }
		  else
		    {
		      argvec[argnum].save_area = gen_reg_rtx (save_mode);

		      emit_move_insn (argvec[argnum].save_area, stack_area);
		    }
3593
		}
3594
	    }
3595

3596 3597
	  emit_push_insn (val, mode, NULL_TREE, NULL_RTX, PARM_BOUNDARY,
			  partial, reg, 0, argblock,
3598 3599 3600
			  GEN_INT (argvec[argnum].locate.offset.constant),
			  reg_parm_stack_space,
			  ARGS_SIZE_RTX (argvec[argnum].locate.alignment_pad));
3601 3602

	  /* Now mark the segment we just used.  */
3603 3604 3605
	  if (ACCUMULATE_OUTGOING_ARGS)
	    for (i = lower_bound; i < upper_bound; i++)
	      stack_usage_map[i] = 1;
3606 3607 3608 3609 3610 3611 3612

	  NO_DEFER_POP;
	}
    }

  /* If we pushed args in forward order, perform stack alignment
     after pushing the last arg.  */
3613
  if (argblock == 0 && !PUSH_ARGS_REVERSED)
3614 3615 3616
    anti_adjust_stack (GEN_INT (args_size.constant
				- original_args_size.constant));

3617 3618 3619 3620
  if (PUSH_ARGS_REVERSED)
    argnum = nargs - 1;
  else
    argnum = 0;
3621

3622
  fun = prepare_call_address (fun, NULL, &call_fusage, 0, 0);
3623 3624 3625 3626 3627 3628 3629

  /* Now load any reg parms into their regs.  */

  /* ARGNUM indexes the ARGVEC array in the order in which the arguments
     are to be pushed.  */
  for (count = 0; count < nargs; count++, argnum += inc)
    {
3630
      enum machine_mode mode = argvec[argnum].mode;
3631
      rtx val = argvec[argnum].value;
3632 3633 3634 3635 3636 3637
      rtx reg = argvec[argnum].reg;
      int partial = argvec[argnum].partial;

      /* Handle calls that pass values in multiple non-contiguous
	 locations.  The PA64 has examples of this for library calls.  */
      if (reg != 0 && GET_CODE (reg) == PARALLEL)
3638
	emit_group_load (reg, val, NULL_TREE, GET_MODE_SIZE (mode));
3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655
      else if (reg != 0 && partial == 0)
	emit_move_insn (reg, val);

      NO_DEFER_POP;
    }

  /* Any regs containing parms remain in use through the call.  */
  for (count = 0; count < nargs; count++)
    {
      rtx reg = argvec[count].reg;
      if (reg != 0 && GET_CODE (reg) == PARALLEL)
	use_group_regs (&call_fusage, reg);
      else if (reg != 0)
	use_reg (&call_fusage, reg);
    }

  /* Pass the function the address in which to return a structure value.  */
DJ Delorie committed
3656
  if (mem_value != 0 && struct_value != 0 && ! pcc_struct_value)
3657
    {
DJ Delorie committed
3658
      emit_move_insn (struct_value,
3659 3660 3661
		      force_reg (Pmode,
				 force_operand (XEXP (mem_value, 0),
						NULL_RTX)));
3662
      if (REG_P (struct_value))
DJ Delorie committed
3663
	use_reg (&call_fusage, struct_value);
3664 3665 3666 3667 3668
    }

  /* Don't allow popping to be deferred, since then
     cse'ing of library calls could delete a call and leave the pop.  */
  NO_DEFER_POP;
3669 3670
  valreg = (mem_value == 0 && outmode != VOIDmode
	    ? hard_libcall_value (outmode) : NULL_RTX);
3671

3672
  /* Stack must be properly aligned now.  */
3673 3674
  gcc_assert (!(stack_pointer_delta
		& (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)));
3675

3676 3677
  before_call = get_last_insn ();

3678 3679
  /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which
     will set inhibit_defer_pop to that value.  */
3680 3681 3682 3683
  /* The return type is needed to decide how many bytes the function pops.
     Signedness plays no role in that, so for simplicity, we pretend it's
     always signed.  We also assume that the list of arguments passed has
     no impact, so we pretend it is unknown.  */
3684

3685
  emit_call_1 (fun, NULL,
Kazu Hirata committed
3686
	       get_identifier (XSTR (orgfun, 0)),
3687
	       build_function_type (tfom, NULL_TREE),
Kazu Hirata committed
3688
	       original_args_size.constant, args_size.constant,
3689 3690
	       struct_value_size,
	       FUNCTION_ARG (args_so_far, VOIDmode, void_type_node, 1),
3691
	       valreg,
Alexandre Oliva committed
3692
	       old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far);
3693

3694 3695 3696 3697
  /* For calls to `setjmp', etc., inform flow.c it should complain
     if nonvolatile values are live.  For functions that cannot return,
     inform flow that control does not fall through.  */

3698
  if (flags & (ECF_NORETURN | ECF_LONGJMP))
3699
    {
3700
      /* The barrier note must be emitted
3701 3702 3703 3704
	 immediately after the CALL_INSN.  Some ports emit more than
	 just a CALL_INSN above, so we must search for it here.  */

      rtx last = get_last_insn ();
3705
      while (!CALL_P (last))
3706 3707 3708
	{
	  last = PREV_INSN (last);
	  /* There was no CALL_INSN?  */
3709
	  gcc_assert (last != before_call);
3710 3711
	}

3712
      emit_barrier_after (last);
3713 3714
    }

3715 3716 3717
  /* Now restore inhibit_defer_pop to its actual original value.  */
  OK_DEFER_POP;

3718 3719 3720 3721
  /* If call is cse'able, make appropriate pair of reg-notes around it.
     Test valreg so we don't crash; may safely ignore `const'
     if return type is void.  Disable for PARALLEL return values, because
     we have no way to move such values into a pseudo register.  */
3722
  if (flags & ECF_LIBCALL_BLOCK)
3723 3724 3725
    {
      rtx insns;

3726
      if (valreg == 0)
3727 3728 3729
	{
	  insns = get_insns ();
	  end_sequence ();
3730
	  emit_insn (insns);
3731 3732 3733 3734
	}
      else
	{
	  rtx note = 0;
3735
	  rtx temp;
3736
	  int i;
3737

3738 3739 3740
	  if (GET_CODE (valreg) == PARALLEL)
	    {
	      temp = gen_reg_rtx (outmode);
3741
	      emit_group_store (temp, valreg, NULL_TREE,
3742
				GET_MODE_SIZE (outmode));
3743 3744 3745 3746 3747
	      valreg = temp;
	    }

	  temp = gen_reg_rtx (GET_MODE (valreg));

3748 3749 3750 3751 3752
	  /* Construct an "equal form" for the value which mentions all the
	     arguments in order as well as the function name.  */
	  for (i = 0; i < nargs; i++)
	    note = gen_rtx_EXPR_LIST (VOIDmode, argvec[i].value, note);
	  note = gen_rtx_EXPR_LIST (VOIDmode, fun, note);
3753

3754 3755
	  insns = get_insns ();
	  end_sequence ();
3756

3757 3758 3759 3760 3761 3762 3763 3764
	  if (flags & ECF_PURE)
	    note = gen_rtx_EXPR_LIST (VOIDmode,
			gen_rtx_USE (VOIDmode,
				     gen_rtx_MEM (BLKmode,
						  gen_rtx_SCRATCH (VOIDmode))),
			note);

	  emit_libcall_block (insns, temp, valreg, note);
3765

3766 3767
	  valreg = temp;
	}
3768
    }
3769 3770 3771
  pop_temp_slots ();

  /* Copy the value to the right place.  */
3772
  if (outmode != VOIDmode && retval)
3773 3774 3775 3776 3777 3778 3779 3780
    {
      if (mem_value)
	{
	  if (value == 0)
	    value = mem_value;
	  if (value != mem_value)
	    emit_move_insn (value, mem_value);
	}
3781 3782 3783 3784
      else if (GET_CODE (valreg) == PARALLEL)
	{
	  if (value == 0)
	    value = gen_reg_rtx (outmode);
3785
	  emit_group_store (value, valreg, NULL_TREE, GET_MODE_SIZE (outmode));
3786
	}
3787
      else if (value != 0)
3788
	emit_move_insn (value, valreg);
3789
      else
3790
	value = valreg;
3791 3792
    }

3793
  if (ACCUMULATE_OUTGOING_ARGS)
3794
    {
3795 3796
#ifdef REG_PARM_STACK_SPACE
      if (save_area)
3797 3798
	restore_fixed_argument_area (save_area, argblock,
				     high_to_save, low_to_save);
3799
#endif
Kazu Hirata committed
3800

3801 3802 3803 3804 3805
      /* If we saved any argument areas, restore them.  */
      for (count = 0; count < nargs; count++)
	if (argvec[count].save_area)
	  {
	    enum machine_mode save_mode = GET_MODE (argvec[count].save_area);
3806 3807 3808 3809
	    rtx adr = plus_constant (argblock,
				     argvec[count].locate.offset.constant);
	    rtx stack_area = gen_rtx_MEM (save_mode,
					  memory_address (save_mode, adr));
3810

3811 3812 3813 3814 3815 3816 3817
	    if (save_mode == BLKmode)
	      emit_block_move (stack_area,
		  	       validize_mem (argvec[count].save_area),
			       GEN_INT (argvec[count].locate.size.constant),
			       BLOCK_OP_CALL_PARM);
	    else
	      emit_move_insn (stack_area, argvec[count].save_area);
3818
	  }
3819

3820 3821 3822
      highest_outgoing_arg_in_use = initial_highest_arg_in_use;
      stack_usage_map = initial_stack_usage_map;
    }
3823 3824

  return value;
3825 3826 3827 3828 3829 3830 3831 3832 3833

}

/* Output a library call to function FUN (a SYMBOL_REF rtx)
   (emitting the queue unless NO_QUEUE is nonzero),
   for a value of mode OUTMODE,
   with NARGS different arguments, passed as alternating rtx values
   and machine_modes to convert them to.

3834 3835 3836 3837 3838 3839
   FN_TYPE should be LCT_NORMAL for `normal' calls, LCT_CONST for `const'
   calls, LCT_PURE for `pure' calls, LCT_CONST_MAKE_BLOCK for `const' calls
   which should be enclosed in REG_LIBCALL/REG_RETVAL notes,
   LCT_PURE_MAKE_BLOCK for `purep' calls which should be enclosed in
   REG_LIBCALL/REG_RETVAL notes with extra (use (memory (scratch)),
   or other LCT_ value for other types of library calls.  */
3840 3841

void
3842 3843
emit_library_call (rtx orgfun, enum libcall_type fn_type,
		   enum machine_mode outmode, int nargs, ...)
3844
{
3845
  va_list p;
3846

3847
  va_start (p, nargs);
3848
  emit_library_call_value_1 (0, orgfun, NULL_RTX, fn_type, outmode, nargs, p);
3849
  va_end (p);
3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860
}

/* Like emit_library_call except that an extra argument, VALUE,
   comes second and says where to store the result.
   (If VALUE is zero, this function chooses a convenient way
   to return the value.

   This function returns an rtx for where the value is to be found.
   If VALUE is nonzero, VALUE is returned.  */

rtx
3861 3862 3863
emit_library_call_value (rtx orgfun, rtx value,
			 enum libcall_type fn_type,
			 enum machine_mode outmode, int nargs, ...)
3864
{
3865
  rtx result;
3866
  va_list p;
3867

3868
  va_start (p, nargs);
3869 3870
  result = emit_library_call_value_1 (1, orgfun, value, fn_type, outmode,
				      nargs, p);
3871
  va_end (p);
3872

3873
  return result;
Richard Kenner committed
3874 3875
}

Richard Stallman committed
3876 3877 3878 3879 3880
/* Store a single argument for a function call
   into the register or memory area where it must be passed.
   *ARG describes the argument value and where to pass it.

   ARGBLOCK is the address of the stack-block for all the arguments,
3881
   or 0 on a machine where arguments are pushed individually.
Richard Stallman committed
3882 3883

   MAY_BE_ALLOCA nonzero says this could be a call to `alloca'
Kazu Hirata committed
3884
   so must be careful about how the stack is used.
Richard Stallman committed
3885 3886 3887 3888 3889

   VARIABLE_SIZE nonzero says that this was a variable-sized outgoing
   argument stack.  This is used if ACCUMULATE_OUTGOING_ARGS to indicate
   that we need not worry about saving and restoring the stack.

3890
   FNDECL is the declaration of the function we are calling.
Kazu Hirata committed
3891

3892
   Return nonzero if this arg should cause sibcall failure,
3893
   zero otherwise.  */
Richard Stallman committed
3894

3895
static int
3896 3897
store_one_arg (struct arg_data *arg, rtx argblock, int flags,
	       int variable_size ATTRIBUTE_UNUSED, int reg_parm_stack_space)
Richard Stallman committed
3898
{
3899
  tree pval = arg->tree_value;
Richard Stallman committed
3900 3901 3902
  rtx reg = 0;
  int partial = 0;
  int used = 0;
Kaveh R. Ghazi committed
3903
  int i, lower_bound = 0, upper_bound = 0;
3904
  int sibcall_failure = 0;
Richard Stallman committed
3905 3906

  if (TREE_CODE (pval) == ERROR_MARK)
3907
    return 1;
Richard Stallman committed
3908

3909 3910 3911 3912
  /* Push a new temporary level for any temporaries we make for
     this argument.  */
  push_temp_slots ();

3913
  if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL))
Richard Stallman committed
3914
    {
3915 3916 3917 3918
      /* If this is being stored into a pre-allocated, fixed-size, stack area,
	 save any previous data at that location.  */
      if (argblock && ! variable_size && arg->stack)
	{
Richard Stallman committed
3919
#ifdef ARGS_GROW_DOWNWARD
3920 3921 3922 3923 3924 3925
	  /* stack_slot is negative, but we want to index stack_usage_map
	     with positive values.  */
	  if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
	    upper_bound = -INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1)) + 1;
	  else
	    upper_bound = 0;
Richard Stallman committed
3926

3927
	  lower_bound = upper_bound - arg->locate.size.constant;
Richard Stallman committed
3928
#else
3929 3930 3931 3932
	  if (GET_CODE (XEXP (arg->stack_slot, 0)) == PLUS)
	    lower_bound = INTVAL (XEXP (XEXP (arg->stack_slot, 0), 1));
	  else
	    lower_bound = 0;
Richard Stallman committed
3933

3934
	  upper_bound = lower_bound + arg->locate.size.constant;
Richard Stallman committed
3935 3936
#endif

3937 3938 3939 3940 3941 3942 3943
	  i = lower_bound;
	  /* Don't worry about things in the fixed argument area;
	     it has already been saved.  */
	  if (i < reg_parm_stack_space)
	    i = reg_parm_stack_space;
	  while (i < upper_bound && stack_usage_map[i] == 0)
	    i++;
Richard Stallman committed
3944

3945
	  if (i < upper_bound)
Richard Stallman committed
3946
	    {
3947 3948 3949 3950 3951
	      /* We need to make a save area.  */
	      unsigned int size = arg->locate.size.constant * BITS_PER_UNIT;
	      enum machine_mode save_mode = mode_for_size (size, MODE_INT, 1);
	      rtx adr = memory_address (save_mode, XEXP (arg->stack_slot, 0));
	      rtx stack_area = gen_rtx_MEM (save_mode, adr);
3952 3953 3954

	      if (save_mode == BLKmode)
		{
3955 3956 3957 3958 3959
		  tree ot = TREE_TYPE (arg->tree_value);
		  tree nt = build_qualified_type (ot, (TYPE_QUALS (ot)
						       | TYPE_QUAL_CONST));

		  arg->save_area = assign_temp (nt, 0, 1, 1);
3960 3961
		  preserve_temp_slots (arg->save_area);
		  emit_block_move (validize_mem (arg->save_area), stack_area,
3962 3963
				   expr_size (arg->tree_value),
				   BLOCK_OP_CALL_PARM);
3964 3965 3966 3967 3968 3969
		}
	      else
		{
		  arg->save_area = gen_reg_rtx (save_mode);
		  emit_move_insn (arg->save_area, stack_area);
		}
Richard Stallman committed
3970 3971 3972
	    }
	}
    }
3973

Richard Stallman committed
3974 3975 3976
  /* If this isn't going to be placed on both the stack and in registers,
     set up the register and number of words.  */
  if (! arg->pass_on_stack)
3977 3978 3979 3980 3981 3982 3983
    {
      if (flags & ECF_SIBCALL)
	reg = arg->tail_call_reg;
      else
	reg = arg->reg;
      partial = arg->partial;
    }
Richard Stallman committed
3984

3985 3986 3987 3988
  /* Being passed entirely in a register.  We shouldn't be called in
     this case.  */
  gcc_assert (reg == 0 || partial != 0);
  
3989 3990 3991 3992
  /* If this arg needs special alignment, don't load the registers
     here.  */
  if (arg->n_aligned_regs != 0)
    reg = 0;
Kazu Hirata committed
3993

3994
  /* If this is being passed partially in a register, we can't evaluate
Richard Stallman committed
3995 3996
     it directly into its stack slot.  Otherwise, we can.  */
  if (arg->value == 0)
3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017
    {
      /* stack_arg_under_construction is nonzero if a function argument is
	 being evaluated directly into the outgoing argument list and
	 expand_call must take special action to preserve the argument list
	 if it is called recursively.

	 For scalar function arguments stack_usage_map is sufficient to
	 determine which stack slots must be saved and restored.  Scalar
	 arguments in general have pass_on_stack == 0.

	 If this argument is initialized by a function which takes the
	 address of the argument (a C++ constructor or a C function
	 returning a BLKmode structure), then stack_usage_map is
	 insufficient and expand_call must push the stack around the
	 function call.  Such arguments have pass_on_stack == 1.

	 Note that it is always safe to set stack_arg_under_construction,
	 but this generates suboptimal code if set when not needed.  */

      if (arg->pass_on_stack)
	stack_arg_under_construction++;
4018

4019 4020 4021 4022
      arg->value = expand_expr (pval,
				(partial
				 || TYPE_MODE (TREE_TYPE (pval)) != arg->mode)
				? NULL_RTX : arg->stack,
4023
				VOIDmode, EXPAND_STACK_PARM);
4024 4025 4026 4027

      /* If we are promoting object (or for any other reason) the mode
	 doesn't agree, convert the mode.  */

4028 4029 4030
      if (arg->mode != TYPE_MODE (TREE_TYPE (pval)))
	arg->value = convert_modes (arg->mode, TYPE_MODE (TREE_TYPE (pval)),
				    arg->value, arg->unsignedp);
4031

4032 4033 4034
      if (arg->pass_on_stack)
	stack_arg_under_construction--;
    }
Richard Stallman committed
4035 4036 4037

  /* Don't allow anything left on stack from computation
     of argument to alloca.  */
4038
  if (flags & ECF_MAY_BE_ALLOCA)
Richard Stallman committed
4039 4040 4041
    do_pending_stack_adjust ();

  if (arg->value == arg->stack)
4042 4043
    /* If the value is already in the stack slot, we are done.  */
    ;
4044
  else if (arg->mode != BLKmode)
Richard Stallman committed
4045
    {
4046
      int size;
Richard Stallman committed
4047 4048 4049 4050

      /* Argument is a scalar, not entirely passed in registers.
	 (If part is passed in registers, arg->partial says how much
	 and emit_push_insn will take care of putting it there.)
Kazu Hirata committed
4051

Richard Stallman committed
4052 4053 4054 4055 4056 4057
	 Push it, and if its size is less than the
	 amount of space allocated to it,
	 also bump stack pointer by the additional space.
	 Note that in C the default argument promotions
	 will prevent such mismatches.  */

4058
      size = GET_MODE_SIZE (arg->mode);
Richard Stallman committed
4059 4060 4061 4062 4063 4064 4065 4066 4067 4068
      /* Compute how much space the push instruction will push.
	 On many machines, pushing a byte will advance the stack
	 pointer by a halfword.  */
#ifdef PUSH_ROUNDING
      size = PUSH_ROUNDING (size);
#endif
      used = size;

      /* Compute how much space the argument should get:
	 round up to a multiple of the alignment for arguments.  */
4069
      if (none != FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)))
Richard Stallman committed
4070 4071 4072 4073 4074 4075
	used = (((size + PARM_BOUNDARY / BITS_PER_UNIT - 1)
		 / (PARM_BOUNDARY / BITS_PER_UNIT))
		* (PARM_BOUNDARY / BITS_PER_UNIT));

      /* This isn't already where we want it on the stack, so put it there.
	 This can either be done with push or copy insns.  */
4076
      emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), NULL_RTX,
4077
		      PARM_BOUNDARY, partial, reg, used - size, argblock,
4078 4079
		      ARGS_SIZE_RTX (arg->locate.offset), reg_parm_stack_space,
		      ARGS_SIZE_RTX (arg->locate.alignment_pad));
4080 4081 4082 4083 4084

      /* Unless this is a partially-in-register argument, the argument is now
	 in the stack.  */
      if (partial == 0)
	arg->value = arg->stack;
Richard Stallman committed
4085 4086 4087 4088 4089
    }
  else
    {
      /* BLKmode, at least partly to be pushed.  */

4090
      unsigned int parm_align;
4091
      int excess;
Richard Stallman committed
4092 4093 4094 4095 4096 4097 4098 4099 4100
      rtx size_rtx;

      /* Pushing a nonscalar.
	 If part is passed in registers, PARTIAL says how much
	 and emit_push_insn will take care of putting it there.  */

      /* Round its size up to a multiple
	 of the allocation unit for arguments.  */

4101
      if (arg->locate.size.var != 0)
Richard Stallman committed
4102 4103
	{
	  excess = 0;
4104
	  size_rtx = ARGS_SIZE_RTX (arg->locate.size);
Richard Stallman committed
4105 4106 4107 4108 4109
	}
      else
	{
	  /* PUSH_ROUNDING has no effect on us, because
	     emit_push_insn for BLKmode is careful to avoid it.  */
4110 4111 4112 4113 4114 4115 4116
	  if (reg && GET_CODE (reg) == PARALLEL)
	  {
	    /* Use the size of the elt to compute excess.  */
	    rtx elt = XEXP (XVECEXP (reg, 0, 0), 0);
	    excess = (arg->locate.size.constant
		      - int_size_in_bytes (TREE_TYPE (pval))
		      + partial * GET_MODE_SIZE (GET_MODE (elt)));
4117
	  }
4118 4119 4120 4121
	  else
	    excess = (arg->locate.size.constant
		      - int_size_in_bytes (TREE_TYPE (pval))
		      + partial * UNITS_PER_WORD);
4122 4123
	  size_rtx = expand_expr (size_in_bytes (TREE_TYPE (pval)),
				  NULL_RTX, TYPE_MODE (sizetype), 0);
Richard Stallman committed
4124 4125
	}

4126 4127 4128 4129 4130 4131 4132 4133
      /* Some types will require stricter alignment, which will be
	 provided for elsewhere in argument layout.  */
      parm_align = MAX (PARM_BOUNDARY, TYPE_ALIGN (TREE_TYPE (pval)));

      /* When an argument is padded down, the block is aligned to
	 PARM_BOUNDARY, but the actual argument isn't.  */
      if (FUNCTION_ARG_PADDING (arg->mode, TREE_TYPE (pval)) == downward)
	{
4134
	  if (arg->locate.size.var)
4135 4136 4137
	    parm_align = BITS_PER_UNIT;
	  else if (excess)
	    {
4138
	      unsigned int excess_align = (excess & -excess) * BITS_PER_UNIT;
4139 4140 4141 4142
	      parm_align = MIN (parm_align, excess_align);
	    }
	}

4143
      if ((flags & ECF_SIBCALL) && MEM_P (arg->value))
4144 4145
	{
	  /* emit_push_insn might not work properly if arg->value and
4146
	     argblock + arg->locate.offset areas overlap.  */
4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158
	  rtx x = arg->value;
	  int i = 0;

	  if (XEXP (x, 0) == current_function_internal_arg_pointer
	      || (GET_CODE (XEXP (x, 0)) == PLUS
		  && XEXP (XEXP (x, 0), 0) ==
		     current_function_internal_arg_pointer
		  && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT))
	    {
	      if (XEXP (x, 0) != current_function_internal_arg_pointer)
		i = INTVAL (XEXP (XEXP (x, 0), 1));

4159
	      /* expand_call should ensure this.  */
4160 4161
	      gcc_assert (!arg->locate.offset.var
			  && GET_CODE (size_rtx) == CONST_INT);
4162

4163
	      if (arg->locate.offset.constant > i)
4164
		{
4165
		  if (arg->locate.offset.constant < i + INTVAL (size_rtx))
4166 4167
		    sibcall_failure = 1;
		}
4168
	      else if (arg->locate.offset.constant < i)
4169
		{
4170
		  if (i < arg->locate.offset.constant + INTVAL (size_rtx))
4171 4172 4173 4174 4175
		    sibcall_failure = 1;
		}
	    }
	}

4176
      emit_push_insn (arg->value, arg->mode, TREE_TYPE (pval), size_rtx,
4177
		      parm_align, partial, reg, excess, argblock,
4178 4179
		      ARGS_SIZE_RTX (arg->locate.offset), reg_parm_stack_space,
		      ARGS_SIZE_RTX (arg->locate.alignment_pad));
Richard Stallman committed
4180

4181 4182
      /* Unless this is a partially-in-register argument, the argument is now
	 in the stack.
Richard Stallman committed
4183

4184 4185 4186 4187 4188 4189 4190 4191
	 ??? Unlike the case above, in which we want the actual
	 address of the data, so that we can load it directly into a
	 register, here we want the address of the stack slot, so that
	 it's properly aligned for word-by-word copying or something
	 like that.  It's not clear that this is always correct.  */
      if (partial == 0)
	arg->value = arg->stack_slot;
    }
4192 4193 4194 4195 4196 4197 4198 4199

  if (arg->reg && GET_CODE (arg->reg) == PARALLEL)
    {
      tree type = TREE_TYPE (arg->tree_value);
      arg->parallel_value
	= emit_group_load_into_temps (arg->reg, arg->value, type,
				      int_size_in_bytes (type));
    }
Richard Stallman committed
4200

4201 4202 4203 4204 4205 4206
  /* Mark all slots this store used.  */
  if (ACCUMULATE_OUTGOING_ARGS && !(flags & ECF_SIBCALL)
      && argblock && ! variable_size && arg->stack)
    for (i = lower_bound; i < upper_bound; i++)
      stack_usage_map[i] = 1;

Richard Stallman committed
4207 4208 4209 4210
  /* Once we have pushed something, pops can't safely
     be deferred during the rest of the arguments.  */
  NO_DEFER_POP;

4211 4212 4213 4214
  /* Free any temporary slots made in processing this argument.  Show
     that we might have taken the address of something and pushed that
     as an operand.  */
  preserve_temp_slots (NULL_RTX);
Richard Stallman committed
4215
  free_temp_slots ();
4216
  pop_temp_slots ();
4217 4218

  return sibcall_failure;
Richard Stallman committed
4219
}
4220

4221
/* Nonzero if we do not know how to pass TYPE solely in registers.  */
4222

4223 4224 4225 4226 4227 4228 4229 4230 4231 4232
bool
must_pass_in_stack_var_size (enum machine_mode mode ATTRIBUTE_UNUSED,
			     tree type)
{
  if (!type)
    return false;

  /* If the type has variable size...  */
  if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
    return true;
4233

4234 4235 4236 4237 4238 4239 4240
  /* If the type is marked as addressable (it is required
     to be constructed into the stack)...  */
  if (TREE_ADDRESSABLE (type))
    return true;

  return false;
}
4241

4242
/* Another version of the TARGET_MUST_PASS_IN_STACK hook.  This one
4243 4244
   takes trailing padding of a structure into account.  */
/* ??? Should be able to merge these two by examining BLOCK_REG_PADDING.  */
4245 4246

bool
4247
must_pass_in_stack_var_size_or_pad (enum machine_mode mode, tree type)
4248 4249
{
  if (!type)
4250
    return false;
4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270

  /* If the type has variable size...  */
  if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
    return true;

  /* If the type is marked as addressable (it is required
     to be constructed into the stack)...  */
  if (TREE_ADDRESSABLE (type))
    return true;

  /* If the padding and mode of the type is such that a copy into
     a register would put it into the wrong part of the register.  */
  if (mode == BLKmode
      && int_size_in_bytes (type) % (PARM_BOUNDARY / BITS_PER_UNIT)
      && (FUNCTION_ARG_PADDING (mode, type)
	  == (BYTES_BIG_ENDIAN ? upward : downward)))
    return true;

  return false;
}