aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index d4fef87..611eff0 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.