pa.c (hppa_expand_prologue): Do pic register save in frame marker without adding...
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>
Wed, 24 Sep 2003 01:38:32 +0000 (01:38 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Wed, 24 Sep 2003 01:38:32 +0000 (01:38 +0000)
* pa.c (hppa_expand_prologue): Do pic register save in frame marker
without adding a frame note.
* pa.md (allocate_stack): Save pic register in new frame marker when
generating pic code.

From-SVN: r71709

gcc/ChangeLog
gcc/config/pa/pa.c
gcc/config/pa/pa.md

index e0890b3c41773f930baebe3dcb4c8ad999845f24..67ac8926f26b8f92dafae2ff08209095649f4e66 100644 (file)
@@ -1,3 +1,10 @@
+2003-09-23  John Davind Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * pa.c (hppa_expand_prologue): Do pic register save in frame marker
+       without adding a frame note.
+       * pa.md (allocate_stack): Save pic register in new frame marker when
+       generating pic code.
+
 2003-09-23  Kelley Cook  <kelleycook@wideopenwest.com>
 
        * cgraphunit.c (cgraph_expand_all_functions): Renamed from 
index 9c207d6d591e28e7fad0064c91d0ae3fb7bba088..a7a55881e3fde9e3e3c280c4d4b62a15f968ae81 100644 (file)
@@ -3475,9 +3475,17 @@ hppa_expand_prologue (void)
      when generating PIC code.  FIXME:  What is the correct thing
      to do for functions which make no calls and allocate no
      frame?  Do we need to allocate a frame, or can we just omit
-     the save?   For now we'll just omit the save.  */
+     the save?   For now we'll just omit the save.
+     
+     We don't want a note on this insn as the frame marker can
+     move if there is a dynamic stack allocation.  */
   if (flag_pic && actual_fsize != 0 && !TARGET_64BIT)
-    store_reg (PIC_OFFSET_TABLE_REGNUM, -32, STACK_POINTER_REGNUM);
+    {
+      rtx addr = gen_rtx_PLUS (word_mode, stack_pointer_rtx, GEN_INT (-32));
+
+      emit_move_insn (gen_rtx_MEM (word_mode, addr), pic_offset_table_rtx);
+
+    }
 
   /* Align pointer properly (doubleword boundary).  */
   offset = (offset + 7) & ~7;
index b5c994017ba6a9fd87f9d0ebcd692263e0fbcfe9..f6d9238c691f0e9abce2c347e48d0e857fc1bf57 100644 (file)
   ""
   "
 {
+  rtx addr;
+
   /* Since the stack grows upward, we need to store virtual_stack_dynamic_rtx
      in operand 0 before adjusting the stack.  */
   emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
   anti_adjust_stack (operands[1]);
   if (TARGET_HPUX_UNWIND_LIBRARY)
     {
-      rtx dst = gen_rtx_MEM (word_mode,
-                            gen_rtx_PLUS (word_mode, stack_pointer_rtx,
-                                          GEN_INT (TARGET_64BIT ? -8 : -4)));
-
-      emit_move_insn (dst, frame_pointer_rtx);
+      addr = gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+                          GEN_INT (TARGET_64BIT ? -8 : -4));
+      emit_move_insn (gen_rtx_MEM (word_mode, addr), frame_pointer_rtx);
+    }
+  if (!TARGET_64BIT && flag_pic)
+    {
+      rtx addr = gen_rtx_PLUS (word_mode, stack_pointer_rtx, GEN_INT (-32));
+      emit_move_insn (gen_rtx_MEM (word_mode, addr), pic_offset_table_rtx);
     }
   DONE;
 }")