function.h (virtuals_instantiated): Declare.

* function.h (virtuals_instantiated): Declare.
* function.c: (virtuals_instantiated): Make global.
* calls.c (emit_library_call_value_1): Use
virtual_outgoing_args_rtx only if it hasn't been instantiated.
Otherwise, use the stack pointer directly.

From-SVN: r41127
This commit is contained in:
DJ Delorie 2001-04-05 16:13:53 -04:00 committed by DJ Delorie
parent 93a6eb7802
commit c39ada0455
4 changed files with 27 additions and 6 deletions

View File

@ -1,3 +1,11 @@
2001-04-05 DJ Delorie <dj@redhat.com>
* function.h (virtuals_instantiated): Declare.
* function.c: (virtuals_instantiated): Make global.
* calls.c (emit_library_call_value_1): Use
virtual_outgoing_args_rtx only if it hasn't been instantiated.
Otherwise, use the stack pointer directly.
Thu Apr 5 19:13:33 CEST 2001 Jan Hubicka <jh@suse.cz>
* i386.c (x86_initialize_trampoline): New global function.

View File

@ -59,6 +59,10 @@ Boston, MA 02111-1307, USA. */
#define PUSH_ARGS_REVERSED 0
#endif
#ifndef STACK_POINTER_OFFSET
#define STACK_POINTER_OFFSET 0
#endif
/* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits. */
#define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT)
@ -3820,11 +3824,15 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
highest_outgoing_arg_in_use - initial_highest_arg_in_use);
needed = 0;
/* 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 allocate_dynamic_stack_space below. */
/* 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. */
argblock = virtual_outgoing_args_rtx;
if (virtuals_instantiated)
argblock = plus_constant (stack_pointer_rtx, STACK_POINTER_OFFSET);
else
argblock = virtual_outgoing_args_rtx;
}
else
{

View File

@ -120,8 +120,10 @@ int current_function_sp_is_unchanging;
int current_function_uses_only_leaf_regs;
/* Nonzero once virtual register instantiation has been done.
assign_stack_local uses frame_pointer_rtx when this is nonzero. */
static int virtuals_instantiated;
assign_stack_local uses frame_pointer_rtx when this is nonzero.
calls.c:emit_library_call_value_1 uses it to set up
post-instantiation libcalls. */
int virtuals_instantiated;
/* These variables hold pointers to functions to create and destroy
target specific, per-function data structures. */

View File

@ -481,6 +481,9 @@ extern struct function *cfun;
/* A list of all functions we have compiled so far. */
extern struct function *all_functions;
/* Nonzero if we've already converted virtual regs to hard regs. */
extern int virtuals_instantiated;
/* For backward compatibility... eventually these should all go away. */
#define current_function_name (cfun->name)
#define current_function_pops_args (cfun->pops_args)