diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4a9e95b899b..c36a8d31f37 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Wed Apr 12 15:54:11 MET DST 2000 Jan Hubicka + + * calls.c (expand_call): Do NO_DEFER_POP unconditionally once + stack is propertly aligned; add sanity checking for aligned + stack pointer. + (expand_library_call_value_1): Add sanity checking for aligned + stack pointer. + Wed Apr 12 07:51:54 2000 Catherine Moore * calls.c (emit_library_call_value_1): Change 3rd arg to diff --git a/gcc/calls.c b/gcc/calls.c index d4fef871679..611eff06955 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2671,10 +2671,10 @@ expand_call (exp, target, ignore) else if (argblock == 0) anti_adjust_stack (GEN_INT (args_size.constant - unadjusted_args_size)); - /* Now that the stack is properly aligned, pops can't safely - be deferred during the evaluation of the arguments. */ - NO_DEFER_POP; } + /* Now that the stack is properly aligned, pops can't safely + be deferred during the evaluation of the arguments. */ + NO_DEFER_POP; #endif /* Don't try to defer pops if preallocating, not even from the first arg, @@ -2800,6 +2800,12 @@ expand_call (exp, target, ignore) /* All arguments and registers used for the call must be set up by now! */ +#ifdef PREFERRED_STACK_BOUNDARY + /* Stack must to be properly aligned now. */ + if (stack_pointer_delta & (preferred_stack_boundary / BITS_PER_UNIT - 1)) + abort(); +#endif + /* Generate the actual call instruction. */ emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size, args_size.constant, struct_value_size, @@ -3692,6 +3698,12 @@ emit_library_call_value_1 (retval, orgfun, value, no_queue, outmode, nargs, p) cse'ing of library calls could delete a call and leave the pop. */ NO_DEFER_POP; +#ifdef PREFERRED_STACK_BOUNDARY + /* Stack must to be properly aligned now. */ + if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)) + abort(); +#endif + /* We pass the old value of inhibit_defer_pop + 1 to emit_call_1, which will set inhibit_defer_pop to that value. */ /* The return type is needed to decide how many bytes the function pops.