opcodes: blackfin: mark push/pop insns with a P6/P7 range as illegal
authorMike Frysinger <vapier@gentoo.org>
Wed, 22 Sep 2010 21:53:14 +0000 (21:53 +0000)
committerMike Frysinger <vapier@gentoo.org>
Wed, 22 Sep 2010 21:53:14 +0000 (21:53 +0000)
The push/pop multiple insn has a 3 bit field for the P register range,
but only values of 0...5 are valid (P0 - P5).  There is no such P6 or
P7 register, so mark these insns as illegal.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
opcodes/ChangeLog
opcodes/bfin-dis.c

index 3067e3cce7d43797dc569a2c1d44edf0ba5f55ea..f11938c3403e76ef63c421825df8dc32ad185645 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-22  Mike Frysinger  <vapier@gentoo.org>
+
+       * bfin-dis.c (decode_PushPopMultiple_0): Return 0 when pr > 5.
+
 2010-09-22  Robin Getz  <robin.getz@analog.com>
 
        * bfin-dis.c (decode_dsp32shiftimm_0): Add missing "S" flag.
index a510db1e764b0c19bbdce2e919eb6f0f86e36a2d..0ce0ecf46f7ea32be49a5d875e5dd894351c00ff 100644 (file)
@@ -936,6 +936,9 @@ decode_PushPopMultiple_0 (TIword iw0, disassemble_info *outf)
   int dr = ((iw0 >> PushPopMultiple_dr_bits) & PushPopMultiple_dr_mask);
   int pr = ((iw0 >> PushPopMultiple_pr_bits) & PushPopMultiple_pr_mask);
 
+  if (pr > 5)
+    return 0;
+
   if (W == 1 && d == 1 && p == 1)
     {
       OUTS (outf, "[--SP] = (R7:");