diff options
author | Jan Hubicka <jh@suse.cz> | 2000-04-01 00:09:22 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2000-04-01 00:09:22 +0000 |
commit | 1503a7ecd5271a298c89b7b0e36ccf7a57f5b114 (patch) | |
tree | 5d6a0fb689b150ce72e10a360f5434117542502c /gcc/expr.c | |
parent | ae79697b721b607964d32468c87d1881c3a39974 (diff) | |
download | gcc-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.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -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 } |