aboutsummaryrefslogtreecommitdiff
path: root/opcodes/arm-dis.c
diff options
context:
space:
mode:
Diffstat (limited to 'opcodes/arm-dis.c')
-rw-r--r--opcodes/arm-dis.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index a871d23..3bfad52 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -2931,11 +2931,17 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
NEGATIVE_BIT_SET ? "-" : "",
arm_regnames[given & 0xf]);
- /* Writeback is automatically implied by post- addressing.
- Setting the W bit is unnecessary and ARM specify it as
- being unpredictable. */
- if (WRITEBACK_BIT_SET && ! allow_unpredictable)
- func (stream, UNPREDICTABLE_INSTRUCTION);
+ if (! allow_unpredictable)
+ {
+ /* Writeback is automatically implied by post- addressing.
+ Setting the W bit is unnecessary and ARM specify it as
+ being unpredictable. */
+ if (WRITEBACK_BIT_SET
+ /* Specifying the PC register as the post-indexed
+ registers is also unpredictable. */
+ || ((given & 0xf) == 0xf))
+ func (stream, UNPREDICTABLE_INSTRUCTION);
+ }
}
}
break;