dwarf2out.c (dwarf2out_frame_debug): Handle adjustments of the frame pointer in the...
authorGavin Koch <gavin@cygnus.com>
Thu, 18 Dec 1997 14:48:19 +0000 (07:48 -0700)
committerJeff Law <law@gcc.gnu.org>
Thu, 18 Dec 1997 14:48:19 +0000 (07:48 -0700)
/
        * dwarf2out.c (dwarf2out_frame_debug): Handle adjustments of the
        frame pointer in the prologue.

From-SVN: r17131

gcc/dwarf2out.c

index d7ddf7612dd482d8259f8c6d2bc6466cc026ed42..d321e9f0f3a20725e774e9cb960b95c568d5e39d 100644 (file)
@@ -1221,6 +1221,39 @@ dwarf2out_frame_debug (insn)
              if (cfa_store_reg == STACK_POINTER_REGNUM)
                cfa_store_offset += offset;
            }
+          else if (dest == hard_frame_pointer_rtx)
+            {
+              /* Either setting the FP from an offset of the SP,
+                 or adjusting the FP */
+             if (! frame_pointer_needed
+                 || REGNO (dest) != HARD_FRAME_POINTER_REGNUM)
+               abort ();
+
+              if (XEXP (src, 0) == stack_pointer_rtx
+                  && GET_CODE (XEXP (src, 1)) == CONST_INT)
+                {
+                 if (cfa_reg != STACK_POINTER_REGNUM)
+                   abort ();
+                  offset = INTVAL (XEXP (src, 1));
+                  if (GET_CODE (src) == PLUS)
+                    offset = -offset;
+                  cfa_offset += offset;
+                  cfa_reg = HARD_FRAME_POINTER_REGNUM;
+                }
+              else if (XEXP (src, 0) == hard_frame_pointer_rtx
+                       && GET_CODE (XEXP (src, 1)) == CONST_INT)
+                {
+                 if (cfa_reg != HARD_FRAME_POINTER_REGNUM)
+                   abort ();
+                  offset = INTVAL (XEXP (src, 1));
+                  if (GET_CODE (src) == PLUS)
+                    offset = -offset;
+                  cfa_offset += offset;
+                }
+
+              else 
+                abort();
+            }
          else
            {
              if (GET_CODE (src) != PLUS