aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/arm/arm.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index b7c8591..79088e3 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -7207,11 +7207,14 @@ print_multi_reg (stream, instr, reg, mask)
fprintf (stream, "}");
/* Add a ^ character for the 26-bit ABI, but only if we were loading
- the PC or not updating the stack pointer. Otherwise we generate
- an UNPREDICTABLE instruction. */
+ the PC. Otherwise we would generate an UNPREDICTABLE instruction.
+ Strictly speaking the instruction would be unpredicatble only if
+ we were writing back the base register as well, but since we never
+ want to generate an LDM type 2 instruction (register bank switching)
+ which is what you get if the PC is not being loaded, we do not need
+ to check for writeback. */
if (! TARGET_APCS_32
- && (((mask & (1 << PC_REGNUM)) != 0)
- || strchr (instr, '!') == NULL))
+ && ((mask & (1 << PC_REGNUM)) != 0))
fprintf (stream, "^");
fprintf (stream, "\n");