+Wed Apr 12 15:54:11 MET DST 2000 Jan Hubicka <jh@suse.cz>
+
+ * 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 <clm@cygnus.com>
* calls.c (emit_library_call_value_1): Change 3rd arg to
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,
/* 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,
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.