Simplify VLE handling in print_insn_powerpc().
authorPeter Bergner <bergner@vnet.ibm.com>
Tue, 8 May 2018 01:47:54 +0000 (20:47 -0500)
committerPeter Bergner <bergner@vnet.ibm.com>
Tue, 8 May 2018 01:47:54 +0000 (20:47 -0500)
opcodes/
* ppc-dis.c (print_insn_powerpc) <insn_is_short>: Replace this...
<insn_length>: ...with this.  Update usage.
Remove duplicate call to *info->memory_error_func.

opcodes/ChangeLog
opcodes/ppc-dis.c

index b1abf30..0c6994e 100644 (file)
@@ -1,3 +1,9 @@
+2018-05-07  Peter Bergner  <bergner@vnet.ibm.com.com>
+
+       * ppc-dis.c (print_insn_powerpc) <insn_is_short>: Replace this...
+       <insn_length>: ...with this.  Update usage.
+       Remove duplicate call to *info->memory_error_func.
+
 2018-05-07  Igor Tsimbalist  <igor.v.tsimbalist@intel.com>
            H.J. Lu  <hongjiu.lu@intel.com>
 
index f8b0292..0f7d7ba 100644 (file)
@@ -660,28 +660,22 @@ print_insn_powerpc (bfd_vma memaddr,
   int status;
   uint64_t insn;
   const struct powerpc_opcode *opcode;
-  bfd_boolean insn_is_short;
+  int insn_length = 4;  /* Assume we have a normal 4-byte instruction.  */
 
   status = (*info->read_memory_func) (memaddr, buffer, 4, info);
+
+  /* The final instruction may be a 2-byte VLE insn.  */
+  if (status != 0 && (dialect & PPC_OPCODE_VLE) != 0)
+    {
+      /* Clear buffer so unused bytes will not have garbage in them.  */
+      buffer[0] = buffer[1] = buffer[2] = buffer[3] = 0;
+      status = (*info->read_memory_func) (memaddr, buffer, 2, info);
+    }
+
   if (status != 0)
     {
-      /* The final instruction may be a 2-byte VLE insn.  */
-      if ((dialect & PPC_OPCODE_VLE) != 0)
-        {
-          /* Clear buffer so unused bytes will not have garbage in them.  */
-          buffer[0] = buffer[1] = buffer[2] = buffer[3] = 0;
-          status = (*info->read_memory_func) (memaddr, buffer, 2, info);
-          if (status != 0)
-            {
-              (*info->memory_error_func) (status, memaddr, info);
-              return -1;
-            }
-        }
-      else
-        {
-          (*info->memory_error_func) (status, memaddr, info);
-          return -1;
-        }
+      (*info->memory_error_func) (status, memaddr, info);
+      return -1;
     }
 
   if (bigendian)
@@ -691,12 +685,15 @@ print_insn_powerpc (bfd_vma memaddr,
 
   /* Get the major opcode of the insn.  */
   opcode = NULL;
-  insn_is_short = FALSE;
   if ((dialect & PPC_OPCODE_VLE) != 0)
     {
       opcode = lookup_vle (insn);
-      if (opcode != NULL)
-       insn_is_short = PPC_OP_SE_VLE(opcode->mask);
+      if (opcode != NULL && PPC_OP_SE_VLE (opcode->mask))
+       {
+         /* The operands will be fetched out of the 16-bit instruction.  */
+         insn >>= 16;
+         insn_length = 2;
+       }
     }
   if (opcode == NULL && (dialect & PPC_OPCODE_SPE2) != 0)
     opcode = lookup_spe2 (insn);
@@ -718,10 +715,6 @@ print_insn_powerpc (bfd_vma memaddr,
       else
        (*info->fprintf_func) (info->stream, "%s", opcode->name);
 
-      if (insn_is_short)
-        /* The operands will be fetched out of the 16-bit instruction.  */
-        insn >>= 16;
-
       /* Now extract and print the operands.  */
       need_comma = 0;
       need_paren = 0;
@@ -813,16 +806,8 @@ print_insn_powerpc (bfd_vma memaddr,
            }
        }
 
-      /* We have found and printed an instruction.
-         If it was a short VLE instruction we have more to do.  */
-      if (insn_is_short)
-        {
-          memaddr += 2;
-          return 2;
-        }
-      else
-        /* Otherwise, return.  */
-        return 4;
+      /* We have found and printed an instruction.  */
+      return insn_length;
     }
 
   /* We could not find a match.  */