summaryrefslogtreecommitdiff
path: root/opcodes/ppc-dis.c
diff options
context:
space:
mode:
authorPeter Bergner <bergner@vnet.ibm.com>2018-05-07 20:47:54 -0500
committerPeter Bergner <bergner@vnet.ibm.com>2018-05-07 20:47:54 -0500
commita87a64780fde9dc8d1c3af8eda93fc1b878cd3cf (patch)
tree1acc77d6ca7ae11318b12c4e5c18142b4f4c2eab /opcodes/ppc-dis.c
parentc0a30a9f0ab48fd7cb0fed0cd6710fe478650a7f (diff)
downloadbinutils-gdb-a87a64780fde9dc8d1c3af8eda93fc1b878cd3cf.tar.gz
Simplify VLE handling in print_insn_powerpc().
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.
Diffstat (limited to 'opcodes/ppc-dis.c')
-rw-r--r--opcodes/ppc-dis.c55
1 files changed, 20 insertions, 35 deletions
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index f8b0292c4e4..0f7d7bacfb3 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -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. */