diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-22 22:58:05 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-04-22 22:58:05 +0000 |
commit | 81a5b286608d9a9725109c1518afb7f8291ab915 (patch) | |
tree | ceb1bd779a607612eb6c58b28a3cb82aef47d5ee /gcc | |
parent | 2ce73251fb405967e44370b935cef372da203ae1 (diff) | |
download | ppe42-gcc-81a5b286608d9a9725109c1518afb7f8291ab915.tar.gz ppe42-gcc-81a5b286608d9a9725109c1518afb7f8291ab915.zip |
* config/alpha/alpha.c (alpha_expand_prologue [OPEN_VMS_ABI]): Don't
set FRP on stack adjustment for outgoing args if frame_pointer_needed.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65965 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.c | 30 |
2 files changed, 30 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28cbfda34ba..c5cbb7485e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-04-22 Olivier Hainque <hainque@act-europe.fr> + + * config/alpha/alpha.c (alpha_expand_prologue [OPEN_VMS_ABI]): Don't + set FRP on stack adjustment for outgoing args if frame_pointer_needed. + 2003-04-22 Vincent Celier <celier@gnat.com> * gthr-gnat.h, gthr-gnat.c: new sources for implementation of diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 2bcf9128f33..81d8c206a8b 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -7503,11 +7503,31 @@ alpha_expand_prologue () /* If we have to allocate space for outgoing args, do it now. */ if (current_function_outgoing_args_size != 0) - FRP (emit_move_insn - (stack_pointer_rtx, - plus_constant (hard_frame_pointer_rtx, - - (ALPHA_ROUND - (current_function_outgoing_args_size))))); + { + rtx seq + = emit_move_insn (stack_pointer_rtx, + plus_constant + (hard_frame_pointer_rtx, + - (ALPHA_ROUND + (current_function_outgoing_args_size)))); + + /* Only set FRAME_RELATED_P on the stack adjustment we just emitted + if ! frame_pointer_needed. Setting the bit will change the CFA + computation rule to use sp again, which would be wrong if we had + frame_pointer_needed, as this means sp might move unpredictably + later on. + + Also, note that + frame_pointer_needed + => vms_unwind_regno == HARD_FRAME_POINTER_REGNUM + and + current_function_outgoing_args_size != 0 + => alpha_procedure_type != PT_NULL, + + so when we are not setting the bit here, we are guaranteed to + have emited an FRP frame pointer update just before. */ + RTX_FRAME_RELATED_P (seq) = ! frame_pointer_needed; + } } else if (!TARGET_ABI_UNICOSMK) { |