forked from Imagelibrary/binutils-gdb
ppc: extend opindex to 16 bits
With the upcoming SVP64 extension[0] to PowerPC architecture, it became evident that PowerPC operand indices no longer fit 8 bits. This patch switches the underlying type to uint16_t, also introducing a special typedef so that any future extension goes even smoother. [0] https://libre-soc.org include/ * opcode/ppc.h (ppc_opindex_t): New typedef. (struct powerpc_opcode): Use it. (PPC_OPINDEX_MAX): Define. gas/ * write.h (struct fix): Increase size of fx_pcrel_adjust. Reorganise. * config/tc-ppc.c (insn_validate): Use ppc_opindex_t for operands. (md_assemble): Likewise. (md_apply_fix): Likewise. Mask fx_pcrel_adjust with PPC_OPINDEX_MAX. (ppc_setup_opcodes): Adjust opcode index assertion. opcodes/ * ppc-dis.c (skip_optional_operands): Use ppc_opindex_t for operand pointer. (lookup_powerpc, lookup_prefix, lookup_vle, lookup_spe2): Likewise. (print_insn_powerpc): Likewise.
This commit is contained in:
committed by
Alan Modra
parent
f59e7b1289
commit
8e5eb8e1b0
@@ -546,7 +546,7 @@ operand_value_powerpc (const struct powerpc_operand *operand,
|
||||
/* Determine whether the optional operand(s) should be printed. */
|
||||
|
||||
static bool
|
||||
skip_optional_operands (const unsigned char *opindex,
|
||||
skip_optional_operands (const ppc_opindex_t *opindex,
|
||||
uint64_t insn, ppc_cpu_t dialect, bool *is_pcrel)
|
||||
{
|
||||
const struct powerpc_operand *operand;
|
||||
@@ -592,7 +592,7 @@ lookup_powerpc (uint64_t insn, ppc_cpu_t dialect)
|
||||
opcode < opcode_end;
|
||||
++opcode)
|
||||
{
|
||||
const unsigned char *opindex;
|
||||
const ppc_opindex_t *opindex;
|
||||
const struct powerpc_operand *operand;
|
||||
int invalid;
|
||||
|
||||
@@ -637,7 +637,7 @@ lookup_prefix (uint64_t insn, ppc_cpu_t dialect)
|
||||
opcode < opcode_end;
|
||||
++opcode)
|
||||
{
|
||||
const unsigned char *opindex;
|
||||
const ppc_opindex_t *opindex;
|
||||
const struct powerpc_operand *operand;
|
||||
int invalid;
|
||||
|
||||
@@ -691,7 +691,7 @@ lookup_vle (uint64_t insn, ppc_cpu_t dialect)
|
||||
uint64_t table_mask = opcode->mask;
|
||||
bool table_op_is_short = PPC_OP_SE_VLE(table_mask);
|
||||
uint64_t insn2;
|
||||
const unsigned char *opindex;
|
||||
const ppc_opindex_t *opindex;
|
||||
const struct powerpc_operand *operand;
|
||||
int invalid;
|
||||
|
||||
@@ -746,7 +746,7 @@ lookup_spe2 (uint64_t insn, ppc_cpu_t dialect)
|
||||
uint64_t table_opcd = opcode->opcode;
|
||||
uint64_t table_mask = opcode->mask;
|
||||
uint64_t insn2;
|
||||
const unsigned char *opindex;
|
||||
const ppc_opindex_t *opindex;
|
||||
const struct powerpc_operand *operand;
|
||||
int invalid;
|
||||
|
||||
@@ -925,7 +925,7 @@ print_insn_powerpc (bfd_vma memaddr,
|
||||
|
||||
if (opcode != NULL)
|
||||
{
|
||||
const unsigned char *opindex;
|
||||
const ppc_opindex_t *opindex;
|
||||
const struct powerpc_operand *operand;
|
||||
enum {
|
||||
need_comma = 0,
|
||||
|
||||
Reference in New Issue
Block a user