1 /* Opcode table for the H8-300
2 Copyright (C) 1989, 1991 Free Software Foundation.
3 Written by Steve Chamberlain, steve@cygnus.com.
5 This file is part of GDB, the GNU Debugger and GAS, the GNU Assembler.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
24 Hex1
,Hex2
,Hex3
,Hex4
,Hex5
,Hex6
,Hex7
,Hex8
,Hex9
,HexA
,HexB
,HexC
,HexD
,HexE
,HexF
,
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 */
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 */
49 B30
= 0x40, /* bit 3 must be low */
50 B31
= 0x80, /* bit 3 must be high */
63 int noperands
; /* Number of operands this opcode takes */
64 int nopcodes
; /* Number of opcodes with same mnemonic */
73 struct h8_opcode h8_opcodes
[]
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}}
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)
85 #define BRANCH(name, op) \
86 { 2, 1, 1,name,{DISP8,E}, { Hex4, op, DISP8,IGNORE,E }}
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}}
92 #define UNOP(name, op1, op2) \
93 { 2, 1, 1, name, {RS8, E}, { op1, op2, 0, RS8, E}}
95 #define UNOP3(name, op1, op2, op3) \
96 {2, 1, 1, name , {RS8, E}, {op1, op2, op3, RS8, E}}
98 #define WTWOP(name, op1, op2) \
99 {2, 2, 1, name, {RS16, RD16, E}, { op1, op2, RS16, RD16, E}}
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
),
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
}},
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
}},
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
}},
171 { 2, 2,13, "mov.b", {RS8
, RDDEC
|B31
, E
}, { Hex6
, HexC
, RDDEC
|B31
, RS8
, E
}},
172 /* Put the 16 bit one in first so it matches first */
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
}},
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
}},
This page took 0.03799 seconds and 4 git commands to generate.