aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2016-06-02 08:54:15 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2016-06-02 08:54:15 +0000
commit114e816e3f80ea999d329d0a187ef1e53348645b (patch)
tree667840947661a7838da0b05f265a8533938499ad
parent521466e5cc8aa2b45f41c2aa71915eab1290c617 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/config/arm/arm.c6
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.