aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>1997-09-16 22:15:48 +0000
committerNick Clifton <nickc@redhat.com>1997-09-16 22:15:48 +0000
commit714229c39ae3e3658e5d288f665d335eb3d9fa1f (patch)
tree501ba52cca18ca158f9a0a24a144309a0d7ecbdd
parente9fa596ff2d68d5c0cd7efe52ba826b078026feb (diff)
downloadgdb-714229c39ae3e3658e5d288f665d335eb3d9fa1f.zip
gdb-714229c39ae3e3658e5d288f665d335eb3d9fa1f.tar.gz
gdb-714229c39ae3e3658e5d288f665d335eb3d9fa1f.tar.bz2
Further rearrangements of the opcodes.
-rw-r--r--opcodes/ChangeLog4
-rw-r--r--opcodes/v850-opc.c81
2 files changed, 55 insertions, 30 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index bff9b63..8a2d6e0 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,7 @@
+Tue Sep 16 15:18:20 1997 Nick Clifton <nickc@cygnus.com>
+
+ * v850-opc.c (v850_opcodes): Further rearrangements.
+
start-sanitize-d30v
Tue Sep 16 16:12:11 1997 Ken Raeburn <raeburn@cygnus.com>
diff --git a/opcodes/v850-opc.c b/opcodes/v850-opc.c
index a0c2f9c..b568524 100644
--- a/opcodes/v850-opc.c
+++ b/opcodes/v850-opc.c
@@ -341,39 +341,39 @@ extract_i5div (insn, invalid)
const struct v850_operand v850_operands[] =
{
#define UNUSED 0
- { 0, 0, 0, 0, 0 },
+ { 0, 0, NULL, NULL, 0 },
/* The R1 field in a format 1, 6, 7, or 9 insn. */
-#define R1 (UNUSED+1)
- { 5, 0, 0, 0, V850_OPERAND_REG },
+#define R1 (UNUSED + 1)
+ { 5, 0, NULL, NULL, V850_OPERAND_REG },
/* As above, but register 0 is not allowed. */
#define R1_NOTR0 (R1 + 1)
- { 5, 0, 0, 0, V850_OPERAND_REG | V850_NOT_R0 },
+ { 5, 0, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0 },
/* The R2 field in a format 1, 2, 4, 5, 6, 7, 9 insn. */
#define R2 (R1_NOTR0 + 1)
- { 5, 11, 0, 0, V850_OPERAND_REG },
+ { 5, 11, NULL, NULL, V850_OPERAND_REG },
/* As above, but register 0 is not allowed. */
#define R2_NOTR0 (R2 + 1)
- { 5, 11, 0, 0, V850_OPERAND_REG | V850_NOT_R0 },
+ { 5, 11, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0 },
/* The imm5 field in a format 2 insn. */
#define I5 (R2_NOTR0 + 1)
- { 5, 0, 0, 0, V850_OPERAND_SIGNED },
+ { 5, 0, NULL, NULL, V850_OPERAND_SIGNED },
/* The unsigned imm5 field in a format 2 insn. */
#define I5U (I5 + 1)
- { 5, 0, 0, 0, 0 },
+ { 5, 0, NULL, NULL, 0 },
/* The imm16 field in a format 6 insn. */
#define I16 (I5U + 1)
- { 16, 16, 0, 0, V850_OPERAND_SIGNED },
+ { 16, 16, NULL, NULL, V850_OPERAND_SIGNED },
/* The signed disp7 field in a format 4 insn. */
#define D7 (I16 + 1)
- { 7, 0, 0, 0, 0},
+ { 7, 0, NULL, NULL, 0},
/* The disp16 field in a format 6 insn. */
#define D16_15 (D7 + 1)
@@ -381,11 +381,11 @@ const struct v850_operand v850_operands[] =
/* The 3 bit immediate field in format 8 insn. */
#define B3 (D16_15 + 1)
- { 3, 11, 0, 0, 0 },
+ { 3, 11, NULL, NULL, 0 },
/* The 4 bit condition code in a setf instruction */
#define CCCC (B3 + 1)
- { 4, 0, 0, 0, V850_OPERAND_CC },
+ { 4, 0, NULL, NULL, V850_OPERAND_CC },
/* The unsigned DISP8 field in a format 4 insn. */
#define D8_7 (CCCC + 1)
@@ -397,23 +397,23 @@ const struct v850_operand v850_operands[] =
/* System register operands. */
#define SR1 (D8_6 + 1)
- { 5, 0, 0, 0, V850_OPERAND_SRG },
+ { 5, 0, NULL, NULL, V850_OPERAND_SRG },
/* EP Register. */
#define EP (SR1 + 1)
- { 0, 0, 0, 0, V850_OPERAND_EP },
+ { 0, 0, NULL, NULL, V850_OPERAND_EP },
/* The imm16 field (unsigned) in a format 6 insn. */
#define I16U (EP + 1)
- { 16, 16, 0, 0, 0},
+ { 16, 16, NULL, NULL, 0},
/* The R2 field as a system register. */
#define SR2 (I16U + 1)
- { 5, 11, 0, 0, V850_OPERAND_SRG },
+ { 5, 11, NULL, NULL, V850_OPERAND_SRG },
/* The disp16 field in a format 8 insn. */
#define D16 (SR2 + 1)
- { 16, 16, 0, 0, V850_OPERAND_SIGNED },
+ { 16, 16, NULL, NULL, V850_OPERAND_SIGNED },
/* The DISP22 field in a format 4 insn, relaxable. */
#define D9_RELAX (D16 + 1)
@@ -430,7 +430,7 @@ const struct v850_operand v850_operands[] =
/* The signed disp4 field in a format 4 insn. */
#define D4 (D22 + 1)
- { 4, 0, 0, 0, 0},
+ { 4, 0, NULL, NULL, 0},
/* The unsigned disp5 field in a format 4 insn. */
#define D5_4 (D4 + 1)
@@ -442,11 +442,11 @@ const struct v850_operand v850_operands[] =
/* Third register in conditional moves. */
#define R3 (D16_16 + 1)
- { 5, 27, 0, 0, V850_OPERAND_REG },
+ { 5, 27, NULL, NULL, V850_OPERAND_REG },
/* Condition code in conditional moves. */
#define MOVCC (R3 + 1)
- { 4, 17, 0, 0, V850_OPERAND_CC },
+ { 4, 17, NULL, NULL, V850_OPERAND_CC },
/* The imm9 field in a multiply word. */
#define I9 (MOVCC + 1)
@@ -458,15 +458,15 @@ const struct v850_operand v850_operands[] =
/* A list of registers in a prepare/dispose instruction. */
#define LIST12 (U9 + 1)
- { -1, 0xffe00001, 0, 0, V850E_PUSH_POP },
+ { -1, 0xffe00001, NULL, NULL, V850E_PUSH_POP },
/* The IMM6 field in a call instruction. */
#define I6 (LIST12 + 1)
- { 6, 0, 0, 0, 0 },
+ { 6, 0, NULL, NULL, 0 },
/* The 16 bit immediate following a 32 bit instruction. */
#define IMM16 (I6 + 1)
- { 16, 16, 0, 0, V850_OPERAND_SIGNED | V850E_IMMEDIATE16 },
+ { 16, 16, NULL, NULL, V850_OPERAND_SIGNED | V850E_IMMEDIATE16 },
/* The 32 bit immediate following a 32 bit instruction. */
#define IMM32 (IMM16 + 1)
@@ -474,11 +474,11 @@ const struct v850_operand v850_operands[] =
/* The imm5 field in a push/pop instruction. */
#define IMM5 (IMM32 + 1)
- { 5, 1, 0, 0, 0 },
+ { 5, 1, NULL, NULL, 0 },
/* Reg2 in dispose instruction. */
#define R2DISPOSE (IMM5 + 1)
- { 5, 16, 0, 0, V850_OPERAND_REG | V850_NOT_R0 },
+ { 5, 16, NULL, NULL, V850_OPERAND_REG | V850_NOT_R0 },
/* Stack pointer in prepare instruction. */
#define SP (R2DISPOSE + 1)
@@ -493,11 +493,11 @@ const struct v850_operand v850_operands[] =
/* The list of registers in a PUSHMH/POPMH instruction. */
#define LIST18_H (I5DIV + 1)
- { -1, 0xfff8000f, 0, 0, V850E_PUSH_POP },
+ { -1, 0xfff8000f, NULL, NULL, V850E_PUSH_POP },
/* The list of registers in a PUSHML/POPML instruction. */
#define LIST18_L (LIST18_H + 1)
- { -1, 0xfff8001f, 0, 0, V850E_PUSH_POP }, /* The setting of the 4th bit is a flag to disassmble() in v850-dis.c */
+ { -1, 0xfff8001f, NULL, NULL, V850E_PUSH_POP }, /* The setting of the 4th bit is a flag to disassmble() in v850-dis.c */
/* end-sanitize-v850eq */
} ;
@@ -537,7 +537,18 @@ const struct v850_operand v850_operands[] =
The disassembler reads the table in order and prints the first
instruction which matches, so this table is sorted to put more
specific instructions before more general instructions. It is also
- sorted by major opcode. */
+ sorted by major opcode.
+
+ The table is also sorted by name. This is used by the assembler.
+ When parsing an instruction the assembler finds the first occurance
+ of the name of the instruciton in this table and then attempts to
+ match the instruction's arguments with description of the operands
+ associated with the entry it has just found in this table. If the
+ match fails the assembler looks at the next entry in this table.
+ If that entry has the same name as the previous entry, then it
+ tries to match the instruction against that entry and so on. This
+ is how the assembler copes with multiple, different formats of the
+ same instruction. */
const struct v850_opcode v850_opcodes[] =
{
@@ -552,20 +563,30 @@ const struct v850_opcode v850_opcodes[] =
/* start-sanitize-v850e */
{ "sld.bu", one (0x0060), one (0x07f0), {D4, EP, R2_NOTR0}, 1, PROCESSOR_V850E },
/* end-sanitize-v850e */
+
/* start-sanitize-v850eq */
{ "sld.hu", one (0x0400), one (0x0780), {D8_7, EP, R2_NOTR0}, 1, PROCESSOR_V850EQ },
/* end-sanitize-v850eq */
/* start-sanitize-v850e */
{ "sld.hu", one (0x0070), one (0x07f0), {D5_4, EP, R2_NOTR0}, 1, PROCESSOR_V850E },
/* end-sanitize-v850e */
+
/* start-sanitize-v850eq */
{ "sld.b", one (0x0060), one (0x07f0), {D4, EP, R2}, 1, PROCESSOR_V850EQ },
/* end-sanitize-v850eq */
-{ "sld.b", one (0x0300), one (0x0780), {D7, EP, R2}, 1, PROCESSOR_ALL },
+/* start-sanitize-v850e */
+{ "sld.b", one (0x0300), one (0x0780), {D7, EP, R2}, 1, PROCESSOR_V850E },
+/* end-sanitize-v850e */
+{ "sld.b", one (0x0300), one (0x0780), {D7, EP, R2}, 1, PROCESSOR_V850 },
+
/* start-sanitize-v850eq */
{ "sld.h", one (0x0070), one (0x07f0), {D5_4, EP, R2}, 1, PROCESSOR_V850EQ },
/* end-sanitize-v850eq */
-{ "sld.h", one (0x0400), one (0x0780), {D8_7, EP, R2}, 1, PROCESSOR_ALL },
+/* start-sanitize-v850e */
+{ "sld.h", one (0x0400), one (0x0780), {D8_7, EP, R2}, 1, PROCESSOR_V850E },
+/* end-sanitize-v850e */
+
+{ "sld.h", one (0x0400), one (0x0780), {D8_7, EP, R2}, 1, PROCESSOR_V850 },
{ "sld.w", one (0x0500), one (0x0781), {D8_6, EP, R2}, 1, PROCESSOR_ALL },
{ "sst.b", one (0x0380), one (0x0780), {R2, D7, EP}, 2, PROCESSOR_ALL },
{ "sst.h", one (0x0480), one (0x0780), {R2, D8_7, EP}, 2, PROCESSOR_ALL },