Commit c39ada04 by DJ Delorie Committed by DJ Delorie

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
parent 93a6eb78
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.
......
......@@ -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
{
......
......@@ -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. */
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment