aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2018-05-07 11:35:22 +0930
committerAlan Modra <amodra@gmail.com>2018-05-08 22:28:44 +0930
commitf413a91378902aadbe4e338a6dc8f33f5f7148a0 (patch)
tree07530badfb8696ab6121104e32e5b3e4f9683eae /opcodes
parentwatchpoint-unaligned.exp: Use skip_hw_watchpoint_tests (diff)
downloadbinutils-gdb-f413a91378902aadbe4e338a6dc8f33f5f7148a0.tar.gz
binutils-gdb-f413a91378902aadbe4e338a6dc8f33f5f7148a0.tar.bz2
binutils-gdb-f413a91378902aadbe4e338a6dc8f33f5f7148a0.zip
Correct powerpc spe opcode lookup
Defining SPE2_OPCD_SEGS as 13 discounts the possibility that we'd ever look up spe2_opcd_indices[14..16], which I think is possible. Extend that array to size 16+1, using the macros we use to index the array. Similarly use the index macros for PPC_OPCD_SEGS and VLE_OPCD_SEGS. * ppc-dis.c (PPC_OPCD_SEGS): Define using PPC_OP. (VLE_OPCD_SEGS, SPE2_OPCD_SEGS): Similarly, using macros used to partition opcode space for index lookup.
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/ppc-dis.c12
2 files changed, 12 insertions, 6 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 0c6994e90df..a6000cebbc8 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,9 @@
+2018-05-08 Alan Modra <amodra@gmail.com>
+
+ * ppc-dis.c (PPC_OPCD_SEGS): Define using PPC_OP.
+ (VLE_OPCD_SEGS, SPE2_OPCD_SEGS): Similarly, using macros used to
+ partition opcode space for index lookup.
+
2018-05-07 Peter Bergner <bergner@vnet.ibm.com.com>
* ppc-dis.c (print_insn_powerpc) <insn_is_short>: Replace this...
diff --git a/opcodes/ppc-dis.c b/opcodes/ppc-dis.c
index 0f7d7bacfb3..412aae000de 100644
--- a/opcodes/ppc-dis.c
+++ b/opcodes/ppc-dis.c
@@ -367,12 +367,12 @@ powerpc_init_dialect (struct disassemble_info *info)
POWERPC_DIALECT(info) = dialect;
}
-#define PPC_OPCD_SEGS 64
-static unsigned short powerpc_opcd_indices[PPC_OPCD_SEGS+1];
-#define VLE_OPCD_SEGS 32
-static unsigned short vle_opcd_indices[VLE_OPCD_SEGS+1];
-#define SPE2_OPCD_SEGS 13
-static unsigned short spe2_opcd_indices[SPE2_OPCD_SEGS+1];
+#define PPC_OPCD_SEGS (1 + PPC_OP (-1))
+static unsigned short powerpc_opcd_indices[PPC_OPCD_SEGS + 1];
+#define VLE_OPCD_SEGS (1 + VLE_OP_TO_SEG (VLE_OP (-1, 0xffff)))
+static unsigned short vle_opcd_indices[VLE_OPCD_SEGS + 1];
+#define SPE2_OPCD_SEGS (1 + SPE2_XOP_TO_SEG (SPE2_XOP (-1)))
+static unsigned short spe2_opcd_indices[SPE2_OPCD_SEGS + 1];
/* Calculate opcode table indices to speed up disassembly,
and init dialect. */