diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2016-06-02 08:54:15 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2016-06-02 08:54:15 +0000 |
commit | 114e816e3f80ea999d329d0a187ef1e53348645b (patch) | |
tree | 667840947661a7838da0b05f265a8533938499ad | |
parent | 521466e5cc8aa2b45f41c2aa71915eab1290c617 (diff) | |
download | gcc-114e816e3f80ea999d329d0a187ef1e53348645b.zip gcc-114e816e3f80ea999d329d0a187ef1e53348645b.tar.gz gcc-114e816e3f80ea999d329d0a187ef1e53348645b.tar.bz2 |
Fix fallout from: [ARM] PR target/70830: Avoid POP-{reglist}^ when returning from interrupt handlers
PR target/70830
* config/arm/arm.c (arm_output_multireg_pop): Guard "pop" on update.
From-SVN: r237027
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 6 |
2 files changed, 7 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d23e27d..23171c5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-06-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + PR target/70830 + * config/arm/arm.c (arm_output_multireg_pop): Guard "pop" on update. + 2016-06-02 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/dfp.md (trunctddd2): Correct the "length" attribute. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index e924090..47d2447 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -17781,10 +17781,8 @@ arm_output_multireg_pop (rtx *operands, bool return_pc, rtx cond, bool reverse, conditional = reverse ? "%?%D0" : "%?%d0"; /* Can't use POP if returning from an interrupt. */ - if ((regno_base == SP_REGNUM) && !(interrupt_p && return_pc)) - { - sprintf (pattern, "pop%s\t{", conditional); - } + if ((regno_base == SP_REGNUM) && update && !(interrupt_p && return_pc)) + sprintf (pattern, "pop%s\t{", conditional); else { /* Output ldmfd when the base register is SP, otherwise output ldmia. |