diff options
author | Olivier Hainque <hainque@act-europe.fr> | 2003-04-23 00:58:05 +0200 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2003-04-22 18:58:05 -0400 |
commit | c1238896d34055a41d31f4e5b6a9678759eb8500 (patch) | |
tree | ceb1bd779a607612eb6c58b28a3cb82aef47d5ee /gcc | |
parent | ae2196c28e9fe2cd9291f4d8e7a040da04a72085 (diff) | |
download | gcc-c1238896d34055a41d31f4e5b6a9678759eb8500.zip gcc-c1238896d34055a41d31f4e5b6a9678759eb8500.tar.gz gcc-c1238896d34055a41d31f4e5b6a9678759eb8500.tar.bz2 |
alpha.c (alpha_expand_prologue [OPEN_VMS_ABI]): Don't set FRP on stack adjustment for outgoing args if frame_pointer_needed.
* config/alpha/alpha.c (alpha_expand_prologue [OPEN_VMS_ABI]): Don't
set FRP on stack adjustment for outgoing args if frame_pointer_needed.
From-SVN: r65965
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 28cbfda..c5cbb74 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 2bcf912..81d8c20 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) { |