From f472fa294971c3ab22a8c5b47dd3fde0f819fc0b Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Thu, 28 Feb 2002 03:09:41 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/dwarf2out.c | 51 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e631babdb1b..1f9dd893f03 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-02-27 Andrew MacLeod + + * dwarf2out.c (stack_adjust_offset): Add support for POST_INC, + POST_DEC, and POST_MODIFY. + 2002-02-27 Zack Weinberg * c-typeck.c (digest_init): Remove unused parameter; all diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 315ac3a61fb..9c0be46acd7 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; }