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.
This commit is contained in:
parent
c0a30a9f0a
commit
a87a64780f
@ -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>
|
||||
|
||||
|
||||
@ -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. */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user