OSDN Git Service

PR 10924
authornickc <nickc>
Wed, 9 Dec 2009 17:38:03 +0000 (17:38 +0000)
committernickc <nickc>
Wed, 9 Dec 2009 17:38:03 +0000 (17:38 +0000)
        * arm-dis.c (print_insn_arm): Mark insns that use the PC in
        post-indexed addressing as unpredictable.

opcodes/ChangeLog
opcodes/arm-dis.c

index 7ecb512..9e2dfbd 100644 (file)
@@ -1,3 +1,9 @@
+2009-12-09  Nick Clifton  <nickc@redhat.com>
+
+       PR 10924
+       * arm-dis.c (print_insn_arm): Mark insns that use the PC in
+       post-indexed addressing as unpredictable.
+
 2009-12-03  H.J. Lu  <hongjiu.lu@intel.com>
 
        * i386-dis.c (FXSAVE_Fixup): New.
index a871d23..3bfad52 100644 (file)
@@ -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;