diff options
author | Peter Bergner <bergner@vnet.ibm.com> | 2018-05-07 20:47:54 -0500 |
---|---|---|
committer | Peter Bergner <bergner@vnet.ibm.com> | 2018-05-07 20:47:54 -0500 |
commit | a87a64780fde9dc8d1c3af8eda93fc1b878cd3cf (patch) | |
tree | 1acc77d6ca7ae11318b12c4e5c18142b4f4c2eab /opcodes/ppc-dis.c | |
parent | c0a30a9f0ab48fd7cb0fed0cd6710fe478650a7f (diff) | |
download | binutils-a87a64780fde9dc8d1c3af8eda93fc1b878cd3cf.zip binutils-a87a64780fde9dc8d1c3af8eda93fc1b878cd3cf.tar.gz binutils-a87a64780fde9dc8d1c3af8eda93fc1b878cd3cf.tar.bz2 |
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.c | 55 |
1 files changed, 20 insertions, 35 deletions
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c index f8b0292..0f7d7ba 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. */ |