aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Bergner <bergner@vnet.ibm.com>2007-10-16 02:26:30 +0000
committerPeter Bergner <bergner@vnet.ibm.com>2007-10-16 02:26:30 +0000
commit8dbcd839b1bbad39586246ca2d444822b5f91ad7 (patch)
treedd111c6f35b5d11ca6ae324f4e894c6d6ff566fb
parent1b64748beda63e896f48cb4c9409d8629db10747 (diff)
downloadgdb-8dbcd839b1bbad39586246ca2d444822b5f91ad7.zip
gdb-8dbcd839b1bbad39586246ca2d444822b5f91ad7.tar.gz
gdb-8dbcd839b1bbad39586246ca2d444822b5f91ad7.tar.bz2
gas/
* config/tc-ppc.c (ppc_setup_opcodes): Verify instructions are sorted according to major opcode number. opcodes/ * ppc-opc.c (TE): Correct signedness. (powerpc_opcodes): Sort psq_st and psq_stu according to major opcode number.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-ppc.c12
-rw-r--r--opcodes/ChangeLog6
-rw-r--r--opcodes/ppc-opc.c12
4 files changed, 29 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 407db44..8cf8f04 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-15 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config/tc-ppc.c (ppc_setup_opcodes): Verify instructions are sorted
+ according to major opcode number.
+
2007-10-15 Alan Modra <amodra@bigpond.net.au>
* read.c (do_s_func): Check asprintf return status.
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index 868258f..fc8b9a07 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -1249,6 +1249,7 @@ ppc_setup_opcodes (void)
const struct powerpc_macro *macro;
const struct powerpc_macro *macro_end;
bfd_boolean bad_insn = FALSE;
+ unsigned long prev_opcode = 0;
if (ppc_hash != NULL)
hash_die (ppc_hash);
@@ -1296,6 +1297,17 @@ ppc_setup_opcodes (void)
{
const unsigned char *o;
unsigned long omask = op->mask;
+ unsigned long major_opcode = PPC_OP (op->opcode);
+
+ /* The major opcodes had better be sorted. Code in the disassembler
+ assumes the insns are sorted according to major opcode. */
+ if (major_opcode < prev_opcode)
+ {
+ as_bad (_("major opcode is not sorted for %s"),
+ op->name);
+ bad_insn = TRUE;
+ }
+ prev_opcode = major_opcode;
/* The mask had better not trim off opcode bits. */
if ((op->opcode & omask) != op->opcode)
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index a611ea0..a73c99b 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-15 Peter Bergner <bergner@vnet.ibm.com>
+
+ * ppc-opc.c (TE): Correct signedness.
+ (powerpc_opcodes): Sort psq_st and psq_stu according to major
+ opcode number.
+
2007-10-15 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c (dis386_twobyte): Reformat.
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index 8dbfad3..ad30fc5 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -492,13 +492,13 @@ const struct powerpc_operand powerpc_operands[] =
#define VS VD
{ 0x1f, 21, NULL, NULL, PPC_OPERAND_VR },
- /* The SIMM field in a VX form instruction. */
+ /* The SIMM field in a VX form instruction, and TE in Z form. */
#define SIMM VD + 1
+#define TE SIMM
{ 0x1f, 16, NULL, NULL, PPC_OPERAND_SIGNED},
- /* The UIMM field in a VX form instruction, and TE in Z form. */
+ /* The UIMM field in a VX form instruction. */
#define UIMM SIMM + 1
-#define TE UIMM
{ 0x1f, 16, NULL, NULL, 0 },
/* The SHB field in a VA form instruction. */
@@ -4495,9 +4495,6 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "fnmadds", A(59,31,0), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
{ "fnmadds.",A(59,31,1), A_MASK, PPC, { FRT,FRA,FRC,FRB } },
-{ "psq_st", OP(60), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
-{ "psq_stu", OP(61), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
-
{ "dmul", XRC(59,34,0), X_MASK, POWER6, { FRT, FRA, FRB } },
{ "dmul.", XRC(59,34,1), X_MASK, POWER6, { FRT, FRA, FRB } },
@@ -4561,6 +4558,9 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{ "stfq", OP(60), OP_MASK, POWER2, { FRS, D, RA } },
+{ "psq_st", OP(60), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
+{ "psq_stu", OP(61), OP_MASK, PPCPS, { FRS, PSD, RA, PSW, PSQ } },
+
{ "stfqu", OP(61), OP_MASK, POWER2, { FRS, D, RA } },
{ "stfdp", OP(61), OP_MASK, POWER6, { FRT, D, RA0 } },