diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 51 |
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; } |