diff options
author | Paul Brook <paul@codesourcery.com> | 2004-08-03 14:30:46 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2004-08-03 14:30:46 +0000 |
commit | 8ee6eb4e8c7bba61f471d259f84cb11f92120eb7 (patch) | |
tree | 9453fb9976a05c20f0f736b02b7b9a2a31ba2cbb /gcc | |
parent | 7a1f75f1b77d03231fe926c754bfdec890541889 (diff) | |
download | gcc-8ee6eb4e8c7bba61f471d259f84cb11f92120eb7.zip gcc-8ee6eb4e8c7bba61f471d259f84cb11f92120eb7.tar.gz gcc-8ee6eb4e8c7bba61f471d259f84cb11f92120eb7.tar.bz2 |
* config/arm/arm.c (emit_sfm): Only emit a single frame adjustment.
From-SVN: r85480
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 25 |
2 files changed, 19 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index de1e850..68e347e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-08-03 Paul Brook <paul@codesourcery.com> + + * config/arm/arm.c (emit_sfm): Only emit a single frame adjustment. + 2004-08-03 Jan Hubicka <jh@suse.cz> * 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 7209896..66fc8f8 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)); |