From b53ef1a25fb257dac1b951f9f1c440a97ce39bbc Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 22 Dec 2000 17:55:09 +0000 Subject: Allow the (scratch) frame pointer to be initialised from the stack pointer plus a constant. From-SVN: r38466 --- gcc/dwarf2out.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'gcc/dwarf2out.c') diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 8c6b6ce..344fe4d 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -1355,16 +1355,27 @@ dwarf2out_frame_debug_expr (expr, label) } else { - if (GET_CODE (src) != PLUS - || XEXP (src, 1) != stack_pointer_rtx) + if (GET_CODE (src) != PLUS) abort (); - if (GET_CODE (XEXP (src, 0)) != REG - || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp_reg) - abort (); - if (cfa.reg != STACK_POINTER_REGNUM) - abort (); - cfa_store.reg = REGNO (dest); - cfa_store.offset = cfa.offset - cfa_temp_value; + + if (GET_CODE (XEXP (src, 0)) == REG + && REGNO (XEXP (src, 0)) == cfa.reg + && GET_CODE (XEXP (src, 1)) == CONST_INT) + /* Setting the FP (or a scratch that will be copied into the FP + later on) from SP + const. */ + cfa.reg = REGNO (dest); + else + { + if (XEXP (src, 1) != stack_pointer_rtx) + abort (); + if (GET_CODE (XEXP (src, 0)) != REG + || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp_reg) + abort (); + if (cfa.reg != STACK_POINTER_REGNUM) + abort (); + cfa_store.reg = REGNO (dest); + cfa_store.offset = cfa.offset - cfa_temp_value; + } } break; -- cgit v1.1