aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2002-02-28 03:09:41 +0000
committerAndrew Macleod <amacleod@gcc.gnu.org>2002-02-28 03:09:41 +0000
commitf472fa294971c3ab22a8c5b47dd3fde0f819fc0b (patch)
treece5540c2ef14c8dff94186422205259b66526981
parentd627547118977e053c8204594bb45a6c76f87a45 (diff)
downloadgcc-f472fa294971c3ab22a8c5b47dd3fde0f819fc0b.zip
gcc-f472fa294971c3ab22a8c5b47dd3fde0f819fc0b.tar.gz
gcc-f472fa294971c3ab22a8c5b47dd3fde0f819fc0b.tar.bz2
dwarf2out.c (stack_adjust_offset): Add support for POST_INC, POST_DEC, and POST_MODIFY.
* dwarf2out.c (stack_adjust_offset): Add support for POST_INC, POST_DEC, and POST_MODIFY. From-SVN: r50121
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/dwarf2out.c51
2 files changed, 40 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e631bab..1f9dd89 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-02-27 Andrew MacLeod <amacleod@redhat.com>
+
+ * dwarf2out.c (stack_adjust_offset): Add support for POST_INC,
+ POST_DEC, and POST_MODIFY.
+
2002-02-27 Zack Weinberg <zack@codesourcery.com>
* c-typeck.c (digest_init): Remove unused parameter; all
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 315ac3a..9c0be46 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -950,6 +950,8 @@ stack_adjust_offset (pattern)
return 0;
offset = INTVAL (XEXP (src, 1));
+ if (code == PLUS)
+ offset = -offset;
}
else if (GET_CODE (dest) == MEM)
{
@@ -957,30 +959,47 @@ stack_adjust_offset (pattern)
src = XEXP (dest, 0);
code = GET_CODE (src);
- if ((code != PRE_DEC && code != PRE_INC && code != PRE_MODIFY)
- || XEXP (src, 0) != stack_pointer_rtx)
- return 0;
+ switch (code)
+ {
+ case PRE_MODIFY:
+ case POST_MODIFY:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ rtx val = XEXP (XEXP (src, 1), 1);
+ /* We handle only adjustments by constant amount. */
+ if (GET_CODE (XEXP (src, 1)) != PLUS ||
+ GET_CODE (val) != CONST_INT)
+ abort();
+ offset = -INTVAL (val);
+ break;
+ }
+ return 0;
- if (code == PRE_MODIFY)
- {
- rtx val = XEXP (XEXP (src, 1), 1);
+ case PRE_DEC:
+ case POST_DEC:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ offset = GET_MODE_SIZE (GET_MODE (dest));
+ break;
+ }
+ return 0;
- /* We handle only adjustments by constant amount. */
- if (GET_CODE (XEXP (src, 1)) != PLUS ||
- GET_CODE (val) != CONST_INT)
- abort ();
+ case PRE_INC:
+ case POST_INC:
+ if (XEXP (src, 0) == stack_pointer_rtx)
+ {
+ offset = -GET_MODE_SIZE (GET_MODE (dest));
+ break;
+ }
+ return 0;
- offset = -INTVAL (val);
+ default:
+ return 0;
}
- else
- offset = GET_MODE_SIZE (GET_MODE (dest));
}
else
return 0;
- if (code == PLUS || code == PRE_INC)
- offset = -offset;
-
return offset;
}