summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2003-04-22 22:58:05 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>2003-04-22 22:58:05 +0000
commit81a5b286608d9a9725109c1518afb7f8291ab915 (patch)
treeceb1bd779a607612eb6c58b28a3cb82aef47d5ee /gcc
parent2ce73251fb405967e44370b935cef372da203ae1 (diff)
downloadppe42-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/ChangeLog5
-rw-r--r--gcc/config/alpha/alpha.c30
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)
{
OpenPOWER on IntegriCloud