summaryrefslogtreecommitdiff
path: root/gcc/function.h
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-01 00:09:22 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2000-04-01 00:09:22 +0000
commit91b70175ec94e8f45bb08ff7f3119358f51d5193 (patch)
tree5d6a0fb689b150ce72e10a360f5434117542502c /gcc/function.h
parent2ff3ad1d16fd9e44ce91e7b307cc7403a1dac27a (diff)
downloadgcc-91b70175ec94e8f45bb08ff7f3119358f51d5193.tar.gz
* builtins.c (expand_builtin_apply): Pass proper parameters to
allocate_dynamic_stack_space. * calls.c (emit_call_1): Do not adjust stack pointer for SIB, update stack_pointer_delta; do not update arg_size_so_far. (compute_argument_block_size): Use stack_delta instead of stack_pointer_pending and arg_size_so_far. (expand_call): Add sanity checking for stack_pointer_delta; save and restore stack_pointer_delta for SIB, use stack_pointer_delta for alignment; do not update arg_space_so_far. (emit_library_call_value): Use stack_pointer_delta for alignment. (store_one_arg): Do not update arg_space_so_far. * explow.c (adjust_stack, anti_adjust_stack): Update stack_pointer_delta. (allocate_dynamic_stack_space): Add sanity checking for stack_pointer_delta. * expr.c (init_expr, clear_pending_stack_adjust): Clear stack_pointer_delta. (emit_push_insn): Update stack_pointer_delta. * function.h (struct expr_status): Add x_stack_pointer_delta; remove x_arg_space_so_far. (arg_space_so_far): Remove. (stack_pointer_delta): New macro. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32851 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.h')
-rw-r--r--gcc/function.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/gcc/function.h b/gcc/function.h
index 884b98a3b73..08d438ab67e 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -130,10 +130,6 @@ struct expr_status
These are the arguments to function calls that have already returned. */
int x_pending_stack_adjust;
- /* Number of units that we should eventually pop off the stack.
- These are the arguments to function calls that have not happened yet. */
- int x_arg_space_so_far;
-
/* Under some ABIs, it is the caller's responsibility to pop arguments
pushed for function calls. A naive implementation would simply pop
the arguments immediately after each call. However, if several
@@ -151,6 +147,12 @@ struct expr_status
NO_DEFER_POP and OK_DEFER_POP. */
int x_inhibit_defer_pop;
+ /* If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
+ boundary can be momentairly unaligned while pushing the arguments.
+ Record the delta since last aligned boundary here in order to get
+ stack alignment in the nested function calls working right. */
+ int x_stack_pointer_delta;
+
/* Nonzero means __builtin_saveregs has already been done in this function.
The value is the pseudoreg containing the value __builtin_saveregs
returned. */
@@ -167,12 +169,12 @@ struct expr_status
};
#define pending_stack_adjust (cfun->expr->x_pending_stack_adjust)
-#define arg_space_so_far (cfun->expr->x_arg_space_so_far)
#define inhibit_defer_pop (cfun->expr->x_inhibit_defer_pop)
#define saveregs_value (cfun->expr->x_saveregs_value)
#define apply_args_value (cfun->expr->x_apply_args_value)
#define forced_labels (cfun->expr->x_forced_labels)
#define pending_chain (cfun->expr->x_pending_chain)
+#define stack_pointer_delta (cfun->expr->x_stack_pointer_delta)
/* This structure can save all the important global and static variables
describing the status of the current function. */