aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2000-04-01 00:09:22 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2000-04-01 00:09:22 +0000
commit1503a7ecd5271a298c89b7b0e36ccf7a57f5b114 (patch)
tree5d6a0fb689b150ce72e10a360f5434117542502c /gcc/expr.c
parentae79697b721b607964d32468c87d1881c3a39974 (diff)
downloadgcc-1503a7ecd5271a298c89b7b0e36ccf7a57f5b114.zip
gcc-1503a7ecd5271a298c89b7b0e36ccf7a57f5b114.tar.gz
gcc-1503a7ecd5271a298c89b7b0e36ccf7a57f5b114.tar.bz2
builtins.c (expand_builtin_apply): Pass proper parameters to allocate_dynamic_stack_space.
* 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. From-SVN: r32851
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index c1866a5..0302d95 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -306,7 +306,7 @@ init_expr ()
pending_chain = 0;
pending_stack_adjust = 0;
- arg_space_so_far = 0;
+ stack_pointer_delta = 0;
inhibit_defer_pop = 0;
saveregs_value = 0;
apply_args_value = 0;
@@ -2996,6 +2996,7 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
&& where_pad != none && where_pad != stack_direction)
anti_adjust_stack (GEN_INT (extra));
+ stack_pointer_delta += INTVAL (size) - used;
move_by_pieces (gen_rtx_MEM (BLKmode, gen_push_operand ()), xinner,
INTVAL (size) - used, align);
@@ -3236,7 +3237,10 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra,
#ifdef PUSH_ROUNDING
if (args_addr == 0 && PUSH_ARGS)
- addr = gen_push_operand ();
+ {
+ addr = gen_push_operand ();
+ stack_pointer_delta += PUSH_ROUNDING (GET_MODE_SIZE (mode));
+ }
else
#endif
{
@@ -9121,7 +9125,10 @@ clear_pending_stack_adjust ()
&& EXIT_IGNORE_STACK
&& ! (DECL_INLINE (current_function_decl) && ! flag_no_inline)
&& ! flag_inline_functions)
- pending_stack_adjust = 0;
+ {
+ stack_pointer_delta -= pending_stack_adjust,
+ pending_stack_adjust = 0;
+ }
#endif
}