* cris-dis.c (bytes_to_skip): Handle new parameter prefix_matchedp.
authorHans-Peter Nilsson <hp@axis.com>
Mon, 5 Dec 2005 23:27:01 +0000 (23:27 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 5 Dec 2005 23:27:01 +0000 (23:27 +0000)
(print_with_operands): Check for prefix when [PC+] is seen.

opcodes/ChangeLog
opcodes/cris-dis.c

index eca41fd7b68d2cc0cad5b7ab04cd25d33178060b..c5b400f60959940e4026f40292a1a40aa4150ed6 100644 (file)
@@ -1,3 +1,8 @@
+2005-12-06  Hans-Peter Nilsson  <hp@axis.com>
+
+       * cris-dis.c (bytes_to_skip): Handle new parameter prefix_matchedp.
+       (print_with_operands): Check for prefix when [PC+] is seen.
+
 2005-12-02  Dave Brolley  <brolley@redhat.com>
 
        * configure.in (cgen_files): Add cgen-bitset.lo.
index 3d248b74b75ab6b9d6b6a7cf0f9e8ff39bb94289..f6c63cb280dd153d7e4206d0f5077ded9349e3f1 100644 (file)
@@ -651,7 +651,8 @@ format_sup_reg (unsigned int regno,
 static unsigned
 bytes_to_skip (unsigned int insn,
               const struct cris_opcode *matchedp,
-              enum cris_disass_family distype)
+              enum cris_disass_family distype,
+              const struct cris_opcode *prefix_matchedp)
 {
   /* Each insn is a word plus "immediate" operands.  */
   unsigned to_skip = 2;
@@ -660,7 +661,8 @@ bytes_to_skip (unsigned int insn,
 
   for (s = template; *s; s++)
     if ((*s == 's' || *s == 'N' || *s == 'Y')
-       && (insn & 0x400) && (insn & 15) == 15)
+       && (insn & 0x400) && (insn & 15) == 15
+       && prefix_matchedp == NULL)
       {
        /* Immediate via [pc+], so we have to check the size of the
           operand.  */
@@ -880,7 +882,7 @@ print_with_operands (const struct cris_opcode *opcodep,
       case 'S':
       case 's':
        /* Any "normal" memory operand.  */
-       if ((insn & 0x400) && (insn & 15) == 15)
+       if ((insn & 0x400) && (insn & 15) == 15 && prefix_opcodep == NULL)
          {
            /* We're looking at [pc+], i.e. we need to output an immediate
               number, where the size can depend on different things.  */
@@ -1495,7 +1497,7 @@ print_insn_cris_generic (bfd_vma memaddr,
              /* If it's a prefix, put it into the prefix vars and get the
                 main insn.  */
              prefix_size = bytes_to_skip (prefix_insn, matchedp,
-                                          disdata->distype);
+                                          disdata->distype, NULL);
              prefix_opcodep = matchedp;
 
              insn = bufp[prefix_size] + bufp[prefix_size + 1] * 256;
@@ -1527,7 +1529,9 @@ print_insn_cris_generic (bfd_vma memaddr,
            }
          else
            {
-             advance += bytes_to_skip (insn, matchedp, disdata->distype);
+             advance
+               += bytes_to_skip (insn, matchedp, disdata->distype,
+                                 prefix_opcodep);
 
              /* The info_type and assorted fields will be set according
                 to the operands.   */