From: Paul Brook Date: Tue, 3 Aug 2004 14:30:46 +0000 (+0000) Subject: * config/arm/arm.c (emit_sfm): Only emit a single frame adjustment. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8ee6eb4e8c7bba61f471d259f84cb11f92120eb7;p=gcc.git * config/arm/arm.c (emit_sfm): Only emit a single frame adjustment. From-SVN: r85480 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de1e8508b1c..68e347e1456 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-08-03 Paul Brook + + * config/arm/arm.c (emit_sfm): Only emit a single frame adjustment. + 2004-08-03 Jan Hubicka * coverage.c (tree_coverage_counter_ref): Fix computation of the new diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 7209896555e..66fc8f88735 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -9911,7 +9911,7 @@ emit_sfm (int base_reg, int count) int i; par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); - dwarf = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + dwarf = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (count + 1)); reg = gen_rtx_REG (XFmode, base_reg++); @@ -9922,13 +9922,10 @@ emit_sfm (int base_reg, int count) gen_rtx_UNSPEC (BLKmode, gen_rtvec (1, reg), UNSPEC_PUSH_MULT)); - tmp - = gen_rtx_SET (VOIDmode, - gen_rtx_MEM (XFmode, - gen_rtx_PRE_DEC (BLKmode, stack_pointer_rtx)), - reg); + tmp = gen_rtx_SET (VOIDmode, + gen_rtx_MEM (XFmode, stack_pointer_rtx), reg); RTX_FRAME_RELATED_P (tmp) = 1; - XVECEXP (dwarf, 0, count - 1) = tmp; + XVECEXP (dwarf, 0, 1) = tmp; for (i = 1; i < count; i++) { @@ -9937,13 +9934,21 @@ emit_sfm (int base_reg, int count) tmp = gen_rtx_SET (VOIDmode, gen_rtx_MEM (XFmode, - gen_rtx_PRE_DEC (BLKmode, - stack_pointer_rtx)), + plus_constant (stack_pointer_rtx, + i * 12)), reg); RTX_FRAME_RELATED_P (tmp) = 1; - XVECEXP (dwarf, 0, count - i - 1) = tmp; + XVECEXP (dwarf, 0, i + 1) = tmp; } + tmp = gen_rtx_SET (VOIDmode, + stack_pointer_rtx, + gen_rtx_PLUS (SImode, + stack_pointer_rtx, + GEN_INT (-12 * count))); + RTX_FRAME_RELATED_P (tmp) = 1; + XVECEXP (dwarf, 0, 0) = tmp; + par = emit_insn (par); REG_NOTES (par) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, dwarf, REG_NOTES (par));