diff options
| author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-12 13:56:19 +0000 |
|---|---|---|
| committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-04-12 13:56:19 +0000 |
| commit | fa4f1f09902e75f0d09d58d0c6bdf45e3bb73fef (patch) | |
| tree | 3bc4dc8d8437c72809b666d7fdfd18eaa0c86299 | |
| parent | 2e735c0d9f396a5c59de726300f19989d0a0336a (diff) | |
| download | ppe42-gcc-fa4f1f09902e75f0d09d58d0c6bdf45e3bb73fef.tar.gz ppe42-gcc-fa4f1f09902e75f0d09d58d0c6bdf45e3bb73fef.zip | |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33106 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/calls.c | 18 |
2 files changed, 23 insertions, 3 deletions
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 <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 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. |

