1 |
cebix |
1.1 |
/* Opcode table header for m680[01234]0/m6888[12]/m68851. |
2 |
|
|
Copyright 1989, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation. |
3 |
|
|
|
4 |
|
|
This file is part of GDB, GAS, and the GNU binutils. |
5 |
|
|
|
6 |
|
|
GDB, GAS, and the GNU binutils are free software; you can redistribute |
7 |
|
|
them and/or modify them under the terms of the GNU General Public |
8 |
|
|
License as published by the Free Software Foundation; either version |
9 |
|
|
1, or (at your option) any later version. |
10 |
|
|
|
11 |
|
|
GDB, GAS, and the GNU binutils are distributed in the hope that they |
12 |
|
|
will be useful, but WITHOUT ANY WARRANTY; without even the implied |
13 |
|
|
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See |
14 |
|
|
the GNU General Public License for more details. |
15 |
|
|
|
16 |
|
|
You should have received a copy of the GNU General Public License |
17 |
|
|
along with this file; see the file COPYING. If not, write to the Free |
18 |
|
|
Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
19 |
|
|
02111-1307, USA. */ |
20 |
|
|
|
21 |
|
|
/* These are used as bit flags for the arch field in the m68k_opcode |
22 |
|
|
structure. */ |
23 |
|
|
#define _m68k_undef 0 |
24 |
|
|
#define m68000 0x001 |
25 |
|
|
#define m68008 m68000 /* synonym for -m68000. otherwise unused. */ |
26 |
|
|
#define m68010 0x002 |
27 |
|
|
#define m68020 0x004 |
28 |
|
|
#define m68030 0x008 |
29 |
|
|
#define m68ec030 m68030 /* similar enough to -m68030 to ignore differences; |
30 |
|
|
gas will deal with the few differences. */ |
31 |
|
|
#define m68040 0x010 |
32 |
|
|
/* there is no 68050 */ |
33 |
|
|
#define m68060 0x020 |
34 |
|
|
#define m68881 0x040 |
35 |
|
|
#define m68882 m68881 /* synonym for -m68881. otherwise unused. */ |
36 |
|
|
#define m68851 0x080 |
37 |
|
|
#define cpu32 0x100 /* e.g., 68332 */ |
38 |
|
|
#define mcf5200 0x200 |
39 |
|
|
|
40 |
|
|
/* handy aliases */ |
41 |
|
|
#define m68040up (m68040 | m68060) |
42 |
|
|
#define m68030up (m68030 | m68040up) |
43 |
|
|
#define m68020up (m68020 | m68030up) |
44 |
|
|
#define m68010up (m68010 | cpu32 | m68020up) |
45 |
|
|
#define m68000up (m68000 | m68010up) |
46 |
|
|
|
47 |
|
|
#define mfloat (m68881 | m68882 | m68040 | m68060) |
48 |
|
|
#define mmmu (m68851 | m68030 | m68040 | m68060) |
49 |
|
|
|
50 |
|
|
/* The structure used to hold information for an opcode. */ |
51 |
|
|
|
52 |
|
|
struct m68k_opcode |
53 |
|
|
{ |
54 |
|
|
/* The opcode name. */ |
55 |
|
|
const char *name; |
56 |
|
|
/* The opcode itself. */ |
57 |
|
|
unsigned long opcode; |
58 |
|
|
/* The mask used by the disassembler. */ |
59 |
|
|
unsigned long match; |
60 |
|
|
/* The arguments. */ |
61 |
|
|
const char *args; |
62 |
|
|
/* The architectures which support this opcode. */ |
63 |
|
|
unsigned int arch; |
64 |
|
|
}; |
65 |
|
|
|
66 |
|
|
/* The structure used to hold information for an opcode alias. */ |
67 |
|
|
|
68 |
|
|
struct m68k_opcode_alias |
69 |
|
|
{ |
70 |
|
|
/* The alias name. */ |
71 |
|
|
const char *alias; |
72 |
|
|
/* The instruction for which this is an alias. */ |
73 |
|
|
const char *primary; |
74 |
|
|
}; |
75 |
|
|
|
76 |
|
|
/* We store four bytes of opcode for all opcodes because that is the |
77 |
|
|
most any of them need. The actual length of an instruction is |
78 |
|
|
always at least 2 bytes, and is as much longer as necessary to hold |
79 |
|
|
the operands it has. |
80 |
|
|
|
81 |
|
|
The match field is a mask saying which bits must match particular |
82 |
|
|
opcode in order for an instruction to be an instance of that |
83 |
|
|
opcode. |
84 |
|
|
|
85 |
|
|
The args field is a string containing two characters for each |
86 |
|
|
operand of the instruction. The first specifies the kind of |
87 |
|
|
operand; the second, the place it is stored. */ |
88 |
|
|
|
89 |
|
|
/* Kinds of operands: |
90 |
|
|
Characters used: AaBCcDdFfIJkLlMmnOopQqRrSsTtUVvWXYZ0123|*~%;@!&$?/<>#^+- |
91 |
|
|
|
92 |
|
|
D data register only. Stored as 3 bits. |
93 |
|
|
A address register only. Stored as 3 bits. |
94 |
|
|
a address register indirect only. Stored as 3 bits. |
95 |
|
|
R either kind of register. Stored as 4 bits. |
96 |
|
|
r either kind of register indirect only. Stored as 4 bits. |
97 |
|
|
At the moment, used only for cas2 instruction. |
98 |
|
|
F floating point coprocessor register only. Stored as 3 bits. |
99 |
|
|
O an offset (or width): immediate data 0-31 or data register. |
100 |
|
|
Stored as 6 bits in special format for BF... insns. |
101 |
|
|
+ autoincrement only. Stored as 3 bits (number of the address register). |
102 |
|
|
- autodecrement only. Stored as 3 bits (number of the address register). |
103 |
|
|
Q quick immediate data. Stored as 3 bits. |
104 |
|
|
This matches an immediate operand only when value is in range 1 .. 8. |
105 |
|
|
M moveq immediate data. Stored as 8 bits. |
106 |
|
|
This matches an immediate operand only when value is in range -128..127 |
107 |
|
|
T trap vector immediate data. Stored as 4 bits. |
108 |
|
|
|
109 |
|
|
k K-factor for fmove.p instruction. Stored as a 7-bit constant or |
110 |
|
|
a three bit register offset, depending on the field type. |
111 |
|
|
|
112 |
|
|
# immediate data. Stored in special places (b, w or l) |
113 |
|
|
which say how many bits to store. |
114 |
|
|
^ immediate data for floating point instructions. Special places |
115 |
|
|
are offset by 2 bytes from '#'... |
116 |
|
|
B pc-relative address, converted to an offset |
117 |
|
|
that is treated as immediate data. |
118 |
|
|
d displacement and register. Stores the register as 3 bits |
119 |
|
|
and stores the displacement in the entire second word. |
120 |
|
|
|
121 |
|
|
C the CCR. No need to store it; this is just for filtering validity. |
122 |
|
|
S the SR. No need to store, just as with CCR. |
123 |
|
|
U the USP. No need to store, just as with CCR. |
124 |
|
|
|
125 |
|
|
I Coprocessor ID. Not printed if 1. The Coprocessor ID is always |
126 |
|
|
extracted from the 'd' field of word one, which means that an extended |
127 |
|
|
coprocessor opcode can be skipped using the 'i' place, if needed. |
128 |
|
|
|
129 |
|
|
s System Control register for the floating point coprocessor. |
130 |
|
|
|
131 |
|
|
J Misc register for movec instruction, stored in 'j' format. |
132 |
|
|
Possible values: |
133 |
|
|
0x000 SFC Source Function Code reg [60, 40, 30, 20, 10] |
134 |
|
|
0x001 DFC Data Function Code reg [60, 40, 30, 20, 10] |
135 |
|
|
0x002 CACR Cache Control Register [60, 40, 30, 20] |
136 |
|
|
0x003 TC MMU Translation Control [60, 40] |
137 |
|
|
0x004 ITT0 Instruction Transparent |
138 |
|
|
Translation reg 0 [60, 40] |
139 |
|
|
0x005 ITT1 Instruction Transparent |
140 |
|
|
Translation reg 1 [60, 40] |
141 |
|
|
0x006 DTT0 Data Transparent |
142 |
|
|
Translation reg 0 [60, 40] |
143 |
|
|
0x007 DTT1 Data Transparent |
144 |
|
|
Translation reg 1 [60, 40] |
145 |
|
|
0x008 BUSCR Bus Control Register [60] |
146 |
|
|
0x800 USP User Stack Pointer [60, 40, 30, 20, 10] |
147 |
|
|
0x801 VBR Vector Base reg [60, 40, 30, 20, 10] |
148 |
|
|
0x802 CAAR Cache Address Register [ 30, 20] |
149 |
|
|
0x803 MSP Master Stack Pointer [ 40, 30, 20] |
150 |
|
|
0x804 ISP Interrupt Stack Pointer [ 40, 30, 20] |
151 |
|
|
0x805 MMUSR MMU Status reg [ 40] |
152 |
|
|
0x806 URP User Root Pointer [60, 40] |
153 |
|
|
0x807 SRP Supervisor Root Pointer [60, 40] |
154 |
|
|
0x808 PCR Processor Configuration reg [60] |
155 |
|
|
0xC00 ROMBAR ROM Base Address Register [520X] |
156 |
|
|
0xC04 RAMBAR0 RAM Base Address Register 0 [520X] |
157 |
|
|
0xC05 RAMBAR1 RAM Base Address Register 0 [520X] |
158 |
|
|
0xC0F MBAR0 RAM Base Address Register 0 [520X] |
159 |
|
|
|
160 |
|
|
L Register list of the type d0-d7/a0-a7 etc. |
161 |
|
|
(New! Improved! Can also hold fp0-fp7, as well!) |
162 |
|
|
The assembler tries to see if the registers match the insn by |
163 |
|
|
looking at where the insn wants them stored. |
164 |
|
|
|
165 |
|
|
l Register list like L, but with all the bits reversed. |
166 |
|
|
Used for going the other way. . . |
167 |
|
|
|
168 |
|
|
c cache identifier which may be "nc" for no cache, "ic" |
169 |
|
|
for instruction cache, "dc" for data cache, or "bc" |
170 |
|
|
for both caches. Used in cinv and cpush. Always |
171 |
|
|
stored in position "d". |
172 |
|
|
|
173 |
|
|
The remainder are all stored as 6 bits using an address mode and a |
174 |
|
|
register number; they differ in which addressing modes they match. |
175 |
|
|
|
176 |
|
|
* all (modes 0-6,7.0-4) |
177 |
|
|
~ alterable memory (modes 2-6,7.0,7.1) |
178 |
|
|
(not 0,1,7.2-4) |
179 |
|
|
% alterable (modes 0-6,7.0,7.1) |
180 |
|
|
(not 7.2-4) |
181 |
|
|
; data (modes 0,2-6,7.0-4) |
182 |
|
|
(not 1) |
183 |
|
|
@ data, but not immediate (modes 0,2-6,7.0-3) |
184 |
|
|
(not 1,7.4) |
185 |
|
|
! control (modes 2,5,6,7.0-3) |
186 |
|
|
(not 0,1,3,4,7.4) |
187 |
|
|
& alterable control (modes 2,5,6,7.0,7.1) |
188 |
|
|
(not 0,1,7.2-4) |
189 |
|
|
$ alterable data (modes 0,2-6,7.0,7.1) |
190 |
|
|
(not 1,7.2-4) |
191 |
|
|
? alterable control, or data register (modes 0,2,5,6,7.0,7.1) |
192 |
|
|
(not 1,3,4,7.2-4) |
193 |
|
|
/ control, or data register (modes 0,2,5,6,7.0-3) |
194 |
|
|
(not 1,3,4,7.4) |
195 |
|
|
> *save operands (modes 2,4,5,6,7.0,7.1) |
196 |
|
|
(not 0,1,3,7.2-4) |
197 |
|
|
< *restore operands (modes 2,3,5,6,7.0-3) |
198 |
|
|
(not 0,1,4,7.4) |
199 |
|
|
|
200 |
|
|
coldfire move operands: |
201 |
|
|
m (modes 0-4) |
202 |
|
|
n (modes 5,7.2) |
203 |
|
|
o (modes 6,7.0,7.1,7.3,7.4) |
204 |
|
|
p (modes 0-5) |
205 |
|
|
|
206 |
|
|
coldfire bset/bclr/btst operands: |
207 |
|
|
q (modes 0,2-5) |
208 |
|
|
v (modes 0,2-5,7.0,7.1) |
209 |
|
|
*/ |
210 |
|
|
|
211 |
|
|
/* For the 68851: */ |
212 |
|
|
/* |
213 |
|
|
I didn't use much imagination in choosing the |
214 |
|
|
following codes, so many of them aren't very |
215 |
|
|
mnemonic. -rab |
216 |
|
|
|
217 |
|
|
0 32 bit pmmu register |
218 |
|
|
Possible values: |
219 |
|
|
000 TC Translation Control Register (68030, 68851) |
220 |
|
|
|
221 |
|
|
1 16 bit pmmu register |
222 |
|
|
111 AC Access Control (68851) |
223 |
|
|
|
224 |
|
|
2 8 bit pmmu register |
225 |
|
|
100 CAL Current Access Level (68851) |
226 |
|
|
101 VAL Validate Access Level (68851) |
227 |
|
|
110 SCC Stack Change Control (68851) |
228 |
|
|
|
229 |
|
|
3 68030-only pmmu registers (32 bit) |
230 |
|
|
010 TT0 Transparent Translation reg 0 |
231 |
|
|
(aka Access Control reg 0 -- AC0 -- on 68ec030) |
232 |
|
|
011 TT1 Transparent Translation reg 1 |
233 |
|
|
(aka Access Control reg 1 -- AC1 -- on 68ec030) |
234 |
|
|
|
235 |
|
|
W wide pmmu registers |
236 |
|
|
Possible values: |
237 |
|
|
001 DRP Dma Root Pointer (68851) |
238 |
|
|
010 SRP Supervisor Root Pointer (68030, 68851) |
239 |
|
|
011 CRP Cpu Root Pointer (68030, 68851) |
240 |
|
|
|
241 |
|
|
f function code register (68030, 68851) |
242 |
|
|
0 SFC |
243 |
|
|
1 DFC |
244 |
|
|
|
245 |
|
|
V VAL register only (68851) |
246 |
|
|
|
247 |
|
|
X BADx, BACx (16 bit) |
248 |
|
|
100 BAD Breakpoint Acknowledge Data (68851) |
249 |
|
|
101 BAC Breakpoint Acknowledge Control (68851) |
250 |
|
|
|
251 |
|
|
Y PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030) |
252 |
|
|
Z PCSR (68851) |
253 |
|
|
|
254 |
|
|
| memory (modes 2-6, 7.*) |
255 |
|
|
|
256 |
|
|
t address test level (68030 only) |
257 |
|
|
Stored as 3 bits, range 0-7. |
258 |
|
|
Also used for breakpoint instruction now. |
259 |
|
|
|
260 |
|
|
*/ |
261 |
|
|
|
262 |
|
|
/* Places to put an operand, for non-general operands: |
263 |
|
|
s source, low bits of first word. |
264 |
|
|
d dest, shifted 9 in first word |
265 |
|
|
1 second word, shifted 12 |
266 |
|
|
2 second word, shifted 6 |
267 |
|
|
3 second word, shifted 0 |
268 |
|
|
4 third word, shifted 12 |
269 |
|
|
5 third word, shifted 6 |
270 |
|
|
6 third word, shifted 0 |
271 |
|
|
7 second word, shifted 7 |
272 |
|
|
8 second word, shifted 10 |
273 |
|
|
9 second word, shifted 5 |
274 |
|
|
D store in both place 1 and place 3; for divul and divsl. |
275 |
|
|
B first word, low byte, for branch displacements |
276 |
|
|
W second word (entire), for branch displacements |
277 |
|
|
L second and third words (entire), for branch displacements |
278 |
|
|
(also overloaded for move16) |
279 |
|
|
b second word, low byte |
280 |
|
|
w second word (entire) [variable word/long branch offset for dbra] |
281 |
|
|
W second word (entire) (must be signed 16 bit value) |
282 |
|
|
l second and third word (entire) |
283 |
|
|
g variable branch offset for bra and similar instructions. |
284 |
|
|
The place to store depends on the magnitude of offset. |
285 |
|
|
t store in both place 7 and place 8; for floating point operations |
286 |
|
|
c branch offset for cpBcc operations. |
287 |
|
|
The place to store is word two if bit six of word one is zero, |
288 |
|
|
and words two and three if bit six of word one is one. |
289 |
|
|
i Increment by two, to skip over coprocessor extended operands. Only |
290 |
|
|
works with the 'I' format. |
291 |
|
|
k Dynamic K-factor field. Bits 6-4 of word 2, used as a register number. |
292 |
|
|
Also used for dynamic fmovem instruction. |
293 |
|
|
C floating point coprocessor constant - 7 bits. Also used for static |
294 |
|
|
K-factors... |
295 |
|
|
j Movec register #, stored in 12 low bits of second word. |
296 |
|
|
|
297 |
|
|
Places to put operand, for general operands: |
298 |
|
|
d destination, shifted 6 bits in first word |
299 |
|
|
b source, at low bit of first word, and immediate uses one byte |
300 |
|
|
w source, at low bit of first word, and immediate uses two bytes |
301 |
|
|
l source, at low bit of first word, and immediate uses four bytes |
302 |
|
|
s source, at low bit of first word. |
303 |
|
|
Used sometimes in contexts where immediate is not allowed anyway. |
304 |
|
|
f single precision float, low bit of 1st word, immediate uses 4 bytes |
305 |
|
|
F double precision float, low bit of 1st word, immediate uses 8 bytes |
306 |
|
|
x extended precision float, low bit of 1st word, immediate uses 12 bytes |
307 |
|
|
p packed float, low bit of 1st word, immediate uses 12 bytes |
308 |
|
|
*/ |
309 |
|
|
|
310 |
|
|
extern const struct m68k_opcode m68k_opcodes[]; |
311 |
|
|
extern const struct m68k_opcode_alias m68k_opcode_aliases[]; |
312 |
|
|
|
313 |
|
|
extern const int m68k_numopcodes, m68k_numaliases; |
314 |
|
|
|
315 |
|
|
/* end of m68k-opcode.h */ |