OSDN Git Service

* config/alpha/alpha.c (alpha_expand_prologue [OPEN_VMS_ABI]): Don't
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Apr 2003 22:58:05 +0000 (22:58 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 22 Apr 2003 22:58:05 +0000 (22:58 +0000)
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

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 28cbfda..c5cbb74 100644 (file)
@@ -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
index 2bcf912..81d8c20 100644 (file)
@@ -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)
     {