(xstormy16_expand_prologue): Do not mark assignments to the hard frame pointer as...
authorAndrew MacLeod <amacleod@redhat.com>
Mon, 19 May 2003 08:48:20 +0000 (08:48 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Mon, 19 May 2003 08:48:20 +0000 (08:48 +0000)
(xstormy16_expand_prologue): Do not mark assignments to the hard frame pointer
as being stack frame related.
(xstormy16_expand_epilogue): Mark adjustments to the stack pointer as being
stack frame related.

From-SVN: r66954

gcc/ChangeLog
gcc/config/stormy16/stormy16.c

index 47405031138c7d84ed9529e112d897cf42e08b50..b4aeb336269aa26b2bcc545b18e616a0ad85ff62 100644 (file)
@@ -1,3 +1,11 @@
+2003-05-19  Andrew Macleod  <amacleod@redhat.com>
+
+       * config/stormy16/stormy16.c (xstormy16_expand_prologue): Do
+       not mark assignments to the hard frame pointer as being stack
+       frame related.
+       (xstormy16_expand_epilogue): Mark adjustments to the stack
+       pointer as being stack frame related.
+
 2003-05-19  Richard Sandiford  <rsandifo@redhat.com>
 
        * config/mips/mips.h (ISA_HAS_LOAD_DELAY, ISA_HAS_XFER_DELAY,
index 956a6af56455d41785acdf5ee1e30d94fcc4664a..6278caa92b89608d82bdc3a9998a27c2fd0e691c 100644 (file)
@@ -1127,10 +1127,7 @@ xstormy16_expand_prologue ()
   /* It's just possible that the SP here might be what we need for
      the new FP...  */
   if (frame_pointer_needed && layout.sp_minus_fp == layout.locals_size)
-    {
-      insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
-      RTX_FRAME_RELATED_P (insn) = 1;
-    }
+    emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
 
   /* Allocate space for local variables.  */
   if (layout.locals_size)
@@ -1144,14 +1141,11 @@ xstormy16_expand_prologue ()
   if (frame_pointer_needed && layout.sp_minus_fp != layout.locals_size)
     {
       insn = emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
-      RTX_FRAME_RELATED_P (insn) = 1;
+
       if (layout.sp_minus_fp)
-       {
-         insn = emit_addhi3_postreload (hard_frame_pointer_rtx,
-                                        hard_frame_pointer_rtx,
-                                        GEN_INT (-layout.sp_minus_fp));
-         RTX_FRAME_RELATED_P (insn) = 1;
-       }
+       emit_addhi3_postreload (hard_frame_pointer_rtx,
+                               hard_frame_pointer_rtx,
+                               GEN_INT (-layout.sp_minus_fp));
     }
 }
 
@@ -1175,7 +1169,7 @@ void
 xstormy16_expand_epilogue ()
 {
   struct xstormy16_stack_layout layout;
-  rtx mem_pop_rtx;
+  rtx mem_pop_rtx, insn;
   int regno;
   const int ifun = xstormy16_interrupt_function_p ();
   
@@ -1190,19 +1184,36 @@ xstormy16_expand_epilogue ()
       if (frame_pointer_needed && layout.sp_minus_fp == layout.locals_size)
        emit_move_insn (stack_pointer_rtx, hard_frame_pointer_rtx);
       else
-       emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
-                               GEN_INT (- layout.locals_size));
+        {
+         insn = emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
+                                        GEN_INT (- layout.locals_size));
+         RTX_FRAME_RELATED_P (insn) = 1;
+       }
     }
 
   /* Restore any call-saved registers.  */
   for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
     if (REG_NEEDS_SAVE (regno, ifun))
-      emit_move_insn (gen_rtx_REG (HImode, regno), mem_pop_rtx);
+      {
+        rtx dwarf;
+
+       insn = emit_move_insn (gen_rtx_REG (HImode, regno), mem_pop_rtx);
+       RTX_FRAME_RELATED_P (insn) = 1;
+       dwarf = gen_rtx_SET (Pmode, stack_pointer_rtx,
+                            plus_constant (stack_pointer_rtx,
+                                           -GET_MODE_SIZE (Pmode)));
+       REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
+                                             dwarf,
+                                             REG_NOTES (insn));
+      }
   
   /* Pop the stack for the stdarg save area.  */
   if (layout.stdarg_save_size)
-    emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
-                           GEN_INT (- layout.stdarg_save_size));
+    {
+      insn = emit_addhi3_postreload (stack_pointer_rtx, stack_pointer_rtx,
+                                    GEN_INT (- layout.stdarg_save_size));
+      RTX_FRAME_RELATED_P (insn) = 1;
+    }
 
   /* Return.  */
   if (ifun)
@@ -1557,9 +1568,9 @@ xstormy16_asm_output_mi_thunk (file, thunk_fndecl, delta,
 
 /* Output constructors and destructors.  Just like 
    default_named_section_asm_out_* but don't set the sections writable.  */
-#undef TARGET_ASM_CONSTRUCTOR
+#undef  TARGET_ASM_CONSTRUCTOR
 #define TARGET_ASM_CONSTRUCTOR xstormy16_asm_out_constructor
-#undef TARGET_ASM_DESTRUCTOR
+#undef  TARGET_ASM_DESTRUCTOR
 #define TARGET_ASM_DESTRUCTOR xstormy16_asm_out_destructor
 
 static void