* Makefile.in: add target "binutils.ms"
[deliverable/binutils-gdb.git] / include / h8300-opcode.h
CommitLineData
86adb437
SC
1/* Opcode table for the H8-300
2 Copyright (C) 1989, 1991 Free Software Foundation.
81f8fee9 3 Written by Steve Chamberlain, steve@cygnus.com.
86adb437
SC
4
5This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler.
6
81f8fee9 7This program is free software; you can redistribute it and/or modify
86adb437 8it under the terms of the GNU General Public License as published by
81f8fee9
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
86adb437 11
81f8fee9 12This program is distributed in the hope that it will be useful,
86adb437
SC
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
81f8fee9
JG
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
86adb437 20
81f8fee9 21typedef enum op_type
86adb437
SC
22 {
23Hex0=0,
24Hex1,Hex2,Hex3,Hex4,Hex5,Hex6,Hex7,Hex8,Hex9,HexA,HexB,HexC,HexD,HexE,HexF,
25 START = 0x20,
26 KBIT, /* K is #1, or #2, yielding 0x0 or 0x8 */
27 IMM3, /* bit number */
28 RD8, /* 8 bit reg as 2nd op */
29 RD16, /* 16 bit reg as 2nd op */
30 RS8, /* 8 bit reg as 1st op */
31 RS16, /* 16 bit reg 1st op */
32 IMM8, /* constant which fits into 8 bits */
33 IMM16, /* constant which fits into 16 bits */
34 CCR, /* CCR reg */
35 ABS8SRC, /* abs 8 address mode */
36 ABS8DST, /* abs 8 address mode */
37 DISP8, /* pc rel displacement */
38 ABS16SRC, /* abs 16 address mode */
39 ABS16DST, /* abs 16 address mode */
40 DISPSRC, /* @(r:16) address mode src */
41 DISPDST, /* @(r:16) address mode dst*/
42 DISPREG, /* register from DISP address mode */
43 RDDEC, /* @-rn mode */
44 RSINC, /* @rn+ mode */
45 RDIND, /* @R mode dst */
46 RSIND, /* @R mode src */
47 MEMIND, /* @@r8 mode */
48 IGNORE,
49 B30 = 0x40, /* bit 3 must be low */
50 B31 = 0x80, /* bit 3 must be high */
51
52 E /* End of list */
81f8fee9 53 } op_type;
86adb437
SC
54
55
56struct code {
57
81f8fee9 58 op_type nib[9];
86adb437
SC
59} ;
60
61struct h8_opcode {
62 int length;
63 int noperands; /* Number of operands this opcode takes */
64 int nopcodes; /* Number of opcodes with same mnemonic */
65 char *name;
66 struct code args;
67 struct code data;
68int value;
69};
70
71
72
73struct h8_opcode h8_opcodes[]
74#ifdef DEFINE_TABLE
75
76#define BITOP(n,imm, name, op00, op01,op10,op11, op20,op21)\
77{ 2, 2,n, name, {imm,RD8,E}, {op00, op01, imm, RD8,E}},\
78{ 4, 2,n, name, {imm,RDIND,E}, {op10, op11, RDIND, 0, op00,op01, imm, 0,E}},\
79{ 4, 2,n, name, {imm,ABS8DST,E}, {op20, op21, ABS8DST, IGNORE, op00,op01, imm, 0,E}}
80
81#define EBITOP(n,imm, name, op00, op01,op10,op11, op20,op21)\
82 BITOP(n,imm, name, op00+1, op01, op10,op11, op20,op21),\
83 BITOP(n, RS8, name, op00, op01, op10,op11, op20,op21)
84
85#define BRANCH(name, op) \
b39096a4 86{ 2, 1, 1,name,{DISP8,E}, { Hex4, op, DISP8,IGNORE,E }}
86adb437
SC
87
88#define TWOOP(name, op1, op2,op3) \
89{ 2, 2, 2, name, {IMM8, RD8,E}, { op1, RD8, IMM8,IGNORE,E}},\
90{ 2, 2, 2, name, {RS8, RD8, E}, { op2, op3, RS8, RD8 ,E}}
91
92#define UNOP(name, op1, op2) \
93{ 2, 1, 1, name, {RS8, E}, { op1, op2, 0, RS8, E}}
94
95#define UNOP3(name, op1, op2, op3) \
b39096a4 96{2, 1, 1, name , {RS8, E}, {op1, op2, op3, RS8, E}}
86adb437
SC
97
98#define WTWOP(name, op1, op2) \
99{2, 2, 1, name, {RS16, RD16, E}, { op1, op2, RS16, RD16, E}}
100
101=
102{
b39096a4
SC
103 TWOOP("add.b", Hex8, Hex0,Hex8),
104 WTWOP("add.w", Hex0, Hex9),
105 { 2, 2, 1, "adds", {KBIT,RD16|B30, E},{Hex0, HexB, KBIT, RD16|B30, E}},
106 TWOOP("addx", Hex9,Hex0,HexE),
107 TWOOP("and", HexE,Hex1,Hex6),
108 { 2, 2, 1, "andc", {IMM8, CCR, E}, { Hex0, Hex6, IMM8,IGNORE, E}},
109 BITOP(3,IMM3|B30, "band", Hex7, Hex6, Hex7, HexC, Hex7, HexE),
110 BRANCH("bra", Hex0),
111 BRANCH("bt", Hex0),
112 BRANCH("brn", Hex1),
113 BRANCH("bf", Hex1),
114 BRANCH("bhi", Hex2),
115 BRANCH("bls", Hex3),
116 BRANCH("bcc", Hex4),
117 BRANCH("bhs", Hex4),
118 BRANCH("bcs", Hex5),
119 BRANCH("blo", Hex5),
120 BRANCH("bne", Hex6),
121 BRANCH("beq", Hex7),
122 BRANCH("bvc", Hex8),
123 BRANCH("bvs", Hex9),
124 BRANCH("bpl", HexA),
125 BRANCH("bmi", HexB),
126 BRANCH("bge", HexC),
127 BRANCH("blt", HexD),
128 BRANCH("bgt", HexE),
129 BRANCH("ble", HexF),
130 EBITOP(6,IMM3|B30,"bclr", Hex6, Hex2, Hex7, HexD, Hex7, HexF),
131 BITOP(3,IMM3|B31,"biand", Hex7, Hex6, Hex7, HexC, Hex7, HexE),
132 BITOP(3,IMM3|B31, "bild", Hex7, Hex7,Hex7, HexC, Hex7, HexE),
133 BITOP(3,IMM3|B31, "bior", Hex7, Hex4,Hex7, HexC, Hex7, HexE),
134 BITOP(3,IMM3|B31, "bist", Hex6, Hex7,Hex7, HexD, Hex7, HexE),
135 BITOP(3,IMM3|B31, "bixor", Hex7, Hex5,Hex7, HexC, Hex7, HexE),
136 BITOP(3,IMM3|B30, "bld", Hex7, Hex7,Hex7, HexC, Hex7, HexE),
137 EBITOP(6,IMM3|B30,"bnot", Hex6, Hex1, Hex7, HexD, Hex7, HexF),
138 BITOP(3,IMM3|B30,"bor", Hex7, Hex4,Hex7, HexC, Hex7, HexE),
139 EBITOP(6,IMM3|B30,"bset", Hex6, Hex0,Hex7, HexD, Hex7, HexF),
140 { 2, 1, 1, "bsr",{DISP8, E},{ Hex5, Hex5, DISP8,IGNORE, E}},
141 BITOP(3,IMM3|B30, "bst", Hex6, Hex7,Hex7, HexD, Hex7, HexF),
142 EBITOP(6,IMM3|B30, "btst", Hex6, Hex3,Hex7, HexC, Hex7, HexE),
143 BITOP(3,IMM3|B30, "bxor", Hex7,Hex5,Hex7, HexC, Hex7, HexE),
144 TWOOP( "cmp.b",HexA, Hex1, HexC),
145 WTWOP( "cmp.w",Hex1,HexD),
146 UNOP( "daa",Hex0, HexF),
147 UNOP( "das",Hex1, HexF),
148 UNOP( "dec",Hex1, HexA),
149 { 2, 2, 1, "divxu",{RS8, RD16|B30, E}, { Hex5, Hex1, RS8, RD16|B30, E}},
150 { 4, 0, 1, "eepmov",{ E}, {Hex7, HexB, Hex5, HexC, Hex5, Hex9, Hex8, HexF,E}},
151 UNOP( "inc", Hex0, HexA),
152 { 2, 1, 3, "jmp",{RSIND|B30, E}, {Hex5, Hex9, RSIND|B30, Hex0, E}},
153 { 4, 1, 3, "jmp",{ABS16SRC, E}, {Hex5, HexA, Hex0, Hex0, ABS16SRC, IGNORE,IGNORE,IGNORE,E}},
154 { 2, 1, 3, "jmp",{MEMIND, E}, {Hex5, HexB, MEMIND,IGNORE, E}},
155 { 2, 1, 3, "jsr",{RSIND|B30, E}, {Hex5, HexD, RSIND|B30, Hex0, E}},
156 { 4, 1, 3, "jsr",{ABS16SRC, E}, {Hex5, HexE, Hex0, Hex0, ABS16SRC,IGNORE,IGNORE,IGNORE, E}},
157 { 2, 1, 3, "jsr",{MEMIND, E}, {Hex5, HexF, MEMIND, IGNORE,E}},
158 { 2, 2, 2, "ldc", {IMM8, CCR, E}, { Hex0, Hex7, IMM8,IGNORE, E}},
159 { 2, 2, 2, "ldc", {RS8, CCR, E}, { Hex0, Hex3, Hex0, RS8, E}},
160
161 { 2, 2,13, "mov.b", {RS8, RD8, E}, { Hex0, HexC, RS8, RD8, E}},
162 { 2, 2,13, "mov.b", {IMM8, RD8, E}, { HexF, RD8, IMM8,IGNORE, E}},
163 { 2, 2,13, "mov.b", {RSIND|B30,RD8, E}, { Hex6, Hex8, RSIND|B30, RD8, E}},
164 { 4, 2,13, "mov.b", {DISPSRC,RD8, E}, { Hex6, HexE, DISPREG|B30, RD8, DISPSRC, IGNORE, IGNORE, IGNORE, E}} ,
165 { 2, 2,13, "mov.b", {RSINC|B30, RD8, E}, { Hex6, HexC, RSINC|B30, RD8, E}},
166
167 { 4, 2,13, "mov.b", {ABS16SRC, RD8, E}, { Hex6, HexA, Hex0, RD8,ABS16SRC, IGNORE,IGNORE,IGNORE,E}},
168 { 2, 2,13, "mov.b", {ABS8SRC, RD8, E}, { Hex2, RD8, ABS8SRC,IGNORE, E}},
169 { 2, 2,13, "mov.b", {RS8, RDIND|B30, E}, { Hex6, Hex8, RDIND|B31, RS8, E}},
170 { 4, 2,13, "mov.b", {RS8, DISPDST, E}, { Hex6, HexE, DISPREG|B31, RS8,DISPDST, IGNORE, IGNORE, IGNORE, E}},
82ef74dc 171 { 2, 2,13, "mov.b", {RS8, RDDEC|B31, E}, { Hex6, HexC, RDDEC|B31, RS8, E}},
86adb437 172/* Put the 16 bit one in first so it matches first */
b39096a4
SC
173 { 4, 2,13, "mov.b", {RS8, ABS16DST, E}, { Hex6, HexA, Hex8, RS8, ABS16DST,IGNORE,IGNORE,IGNORE, E}},
174 { 2, 2,13, "mov.b", {RS8, ABS8DST, E}, { Hex3, RS8, ABS8DST,IGNORE, E}},
175 { 2, 2,11, "mov.w", {RS16|B30, RD16|B30, E},{ Hex0, HexD, RS16|B30, RD16|B30, E}},
176 { 4, 2,11, "mov.w", {IMM16, RD16|B30, E}, { Hex7, Hex9, Hex0, RD16|B30, IMM16,IGNORE,IGNORE,IGNORE, E}},
177 { 2, 2,11, "mov.w", {RSIND|B30,RD16|B30, E},{ Hex6, Hex9, RSIND|B30, RD16|B30, E}},
178 { 4, 2,11, "mov.w", {DISPSRC,RD16|B30, E}, { Hex6, HexF, DISPREG|B30, RD16|B30, DISPSRC, IGNORE, IGNORE, IGNORE,E}} ,
179 { 2, 2,11, "mov.w", {RSINC|B30, RD16|B30, E}, { Hex6, HexD, RSINC|B30, RD16|B30, E}},
180 { 4, 2,11, "mov.w", {ABS16SRC, RD16|B30, E}, { Hex6, HexB, Hex0, RD16|B30,ABS16SRC,IGNORE,IGNORE,IGNORE, E}},
181 { 2, 2,11, "mov.w", {RS16|B30, RDIND|B30, E},{ Hex6, Hex9, RDIND|B31, RS16|B30, E}},
182 { 4, 2,11, "mov.w", {RS16|B30, DISPDST, E}, { Hex6, HexF, DISPREG|B31, RS16|B30,DISPDST, IGNORE,IGNORE,IGNORE,E}},
183 { 2, 2,11, "mov.w", {RS16|B30, RDDEC|B30, E},{ Hex6, HexD, RDDEC|B31, RS16|B30, E}},
184 { 4, 2,11, "mov.w", {RS16|B30, ABS16DST, E}, { Hex6, HexB, Hex8, RS16|B30, ABS16DST, IGNORE, IGNORE, IGNORE, E}},
185
186
187 { 4, 2,1, "movfpe", {ABS16SRC, RD8, E}, { Hex6, HexA, Hex4, RD8, ABS16SRC,IGNORE,IGNORE,IGNORE, E}},
188 { 4, 2,1, "movtpe", {RS8, ABS16DST, E}, { Hex6, HexA, HexC, RS8, ABS16DST,IGNORE,IGNORE,IGNORE, E}},
189 { 2, 2,1, "mulxu", {RS8, RD16|B30, E}, { Hex5, Hex0, RS8, RD16|B30, E}},
190 { 2, 1,1, "neg", {RS8, E}, { Hex1, Hex7, Hex8, RS8, E}},
191 { 2, 0,1, "nop", {E}, { Hex0, Hex0, Hex0, Hex0,E}},
192 { 2, 1,1, "not", {RS8,E}, { Hex1, Hex7, Hex0, RS8,E}},
193 TWOOP("or", HexC, Hex1, Hex4),
194 { 2, 2,1, "orc", {IMM8, CCR,E}, { Hex0, Hex4, IMM8,IGNORE,E}},
195 { 2, 1,1, "pop", {RS16|B30,E}, { Hex6, HexD, Hex7, RS16|B30,E}},
196 { 2, 1,1, "push", {RS16|B30,E}, { Hex6, HexD, HexF, RS16|B30,E}},
197 UNOP3( "rotl",Hex1, Hex2,Hex8),
198 UNOP3( "rotr",Hex1, Hex3, Hex8),
199 UNOP3( "rotxl",Hex1, Hex2, Hex0),
200 UNOP3( "rotxr",Hex1, Hex3, Hex0),
201 { 2, 0, 1, "rte", {E}, { Hex5, Hex6, Hex7, Hex0,E}},
202 { 2, 0, 1, "rts", {E}, { Hex5, Hex4, Hex7, Hex0,E}},
203 UNOP3( "shal", Hex1, Hex0, Hex8),
204 UNOP3( "shar", Hex1, Hex1, Hex8),
205 UNOP3( "shll", Hex1, Hex0, Hex0),
206 UNOP3( "shlr", Hex1, Hex1, Hex0),
207 { 2, 0, 1, "sleep", {E}, { Hex0, Hex1, Hex8, Hex0,E}},
208 { 2, 2, 1, "stc", {CCR, RD8,E}, { Hex0, Hex2, Hex0, RD8,E}},
209 { 2, 2, 1, "sub.b", {RS8,RD8,E}, { Hex1, Hex8, RS8, RD8,E}},
210 { 2, 2, 1, "sub.w", {RS16|B30, RD16|B30,E}, {Hex1, Hex9, RS16|B30, RD16|B30,E}},
211 { 2, 2, 1, "subs", {KBIT,RD16|B30,E}, { Hex1, HexB, KBIT, RD16|B30,E}},
212 TWOOP("subx",HexB, Hex1, HexE),
213 TWOOP("xor", HexD, Hex1, Hex5),
214 { 2, 2, 1,"xorc", {IMM8, CCR,E}, { Hex0, Hex5, IMM8,IGNORE,E}},
215 { 2, 0,1, "bad 52", {E, IMM8}, { Hex5, Hex2, IMM8, IGNORE,E}},
216 { 2, 0,1, "bad 53", {E, IMM8}, { Hex5, Hex3, IMM8, IGNORE,E}},
217 { 2, 0,1, "bad 57", {E, IMM8}, { Hex5, Hex7, IMM8, IGNORE,E}},
218 { 2, 0,1, "bad 58", {E, IMM8}, { Hex5, Hex8, IMM8, IGNORE,E}},
219 { 2, 0,1, "bad 64", {E, IMM8}, { Hex6, Hex4, IMM8, IGNORE,E}},
220 { 2, 0,1, "bad 65", {E, IMM8}, { Hex6, Hex5, IMM8, IGNORE,E}},
221 { 2, 0,1, "bad 66", {E, IMM8}, { Hex6, Hex6, IMM8, IGNORE,E}},
222 { 2, 0,1, "bad 78", {E, IMM8}, { Hex7, Hex8, IMM8, IGNORE,E}},
223 { 2, 0,1, "bad 7a", {E, IMM8}, { Hex7, HexA, IMM8, IGNORE,E}},
224 { 2, 0,1, "bad 5c", {E, IMM8}, { Hex5, HexC, IMM8, IGNORE,E}},
86adb437
SC
225
226 0
227 }
228
229
230
231#endif
232
233;
This page took 0.032099 seconds and 4 git commands to generate.