1/* This file is tc-m68851.h
2
3   Copyright 1987, 1988, 1989, 1990, 1991, 1992, 2000, 2005, 2007
4   Free Software Foundation, Inc.
5
6   This file is part of GAS, the GNU Assembler.
7
8   GAS is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3, or (at your option)
11   any later version.
12
13   GAS is distributed in the hope that it will be useful, but WITHOUT
14   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16   License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with GAS; see the file COPYING.  If not, write to the Free
20   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21   02110-1301, USA.  */
22
23#ifdef m68851
24
25/*
26  I didn't use much imagination in choosing the
27  following codes, so many of them aren't very
28  mnemonic. -rab
29
30  P  pmmu register
31  Possible values:
32  000	TC	Translation Control reg
33  100	CAL	Current Access Level
34  101	VAL	Validate Access Level
35  110	SCC	Stack Change Control
36  111	AC	Access Control
37
38  W  wide pmmu registers
39  Possible values:
40  001	DRP	Dma Root Pointer
41  010	SRP	Supervisor Root Pointer
42  011	CRP	Cpu Root Pointer
43
44  f	function code register
45  0	SFC
46  1	DFC
47
48  V	VAL register only
49
50  X	BADx, BACx
51  100	BAD	Breakpoint Acknowledge Data
52  101	BAC	Breakpoint Acknowledge Control
53
54  Y	PSR
55  Z	PCSR
56
57  |	memory 		(modes 2-6, 7.*)
58
59  */
60
61/*
62 * these defines should be in m68k.c but
63 * i put them here to keep all the m68851 stuff
64 * together -rab
65 * JF--Make sure these #s don't clash with the ones in m68k.c
66 * That would be BAD.
67 */
68#define TC	(FPS+1)		/* 48 */
69#define DRP	(TC+1)		/* 49 */
70#define SRP	(DRP+1)		/* 50 */
71#define CRP	(SRP+1)		/* 51 */
72#define CAL	(CRP+1)		/* 52 */
73#define VAL	(CAL+1)		/* 53 */
74#define SCC	(VAL+1)		/* 54 */
75#define AC	(SCC+1)		/* 55 */
76#define BAD	(AC+1)		/* 56,57,58,59, 60,61,62,63 */
77#define BAC	(BAD+8)		/* 64,65,66,67, 68,69,70,71 */
78#define PSR	(BAC+8)		/* 72 */
79#define PCSR	(PSR+1)		/* 73 */
80
81/* name */	/* opcode */		/* match */		/* args */
82
83{"pbac",	one(0xf0c7),		one(0xffbf),		"Bc"},
84{"pbacw",	one(0xf087),		one(0xffbf),		"Bc"},
85{"pbas",	one(0xf0c6),		one(0xffbf),		"Bc"},
86{"pbasw",	one(0xf086),		one(0xffbf),		"Bc"},
87{"pbbc",	one(0xf0c1),		one(0xffbf),		"Bc"},
88{"pbbcw",	one(0xf081),		one(0xffbf),		"Bc"},
89{"pbbs",	one(0xf0c0),		one(0xffbf),		"Bc"},
90{"pbbsw",	one(0xf080),		one(0xffbf),		"Bc"},
91{"pbcc",	one(0xf0cf),		one(0xffbf),		"Bc"},
92{"pbccw",	one(0xf08f),		one(0xffbf),		"Bc"},
93{"pbcs",	one(0xf0ce),		one(0xffbf),		"Bc"},
94{"pbcsw",	one(0xf08e),		one(0xffbf),		"Bc"},
95{"pbgc",	one(0xf0cd),		one(0xffbf),		"Bc"},
96{"pbgcw",	one(0xf08d),		one(0xffbf),		"Bc"},
97{"pbgs",	one(0xf0cc),		one(0xffbf),		"Bc"},
98{"pbgsw",	one(0xf08c),		one(0xffbf),		"Bc"},
99{"pbic",	one(0xf0cb),		one(0xffbf),		"Bc"},
100{"pbicw",	one(0xf08b),		one(0xffbf),		"Bc"},
101{"pbis",	one(0xf0ca),		one(0xffbf),		"Bc"},
102{"pbisw",	one(0xf08a),		one(0xffbf),		"Bc"},
103{"pblc",	one(0xf0c3),		one(0xffbf),		"Bc"},
104{"pblcw",	one(0xf083),		one(0xffbf),		"Bc"},
105{"pbls",	one(0xf0c2),		one(0xffbf),		"Bc"},
106{"pblsw",	one(0xf082),		one(0xffbf),		"Bc"},
107{"pbsc",	one(0xf0c5),		one(0xffbf),		"Bc"},
108{"pbscw",	one(0xf085),		one(0xffbf),		"Bc"},
109{"pbss",	one(0xf0c4),		one(0xffbf),		"Bc"},
110{"pbssw",	one(0xf084),		one(0xffbf),		"Bc"},
111{"pbwc",	one(0xf0c9),		one(0xffbf),		"Bc"},
112{"pbwcw",	one(0xf089),		one(0xffbf),		"Bc"},
113{"pbws",	one(0xf0c8),		one(0xffbf),		"Bc"},
114{"pbwsw",	one(0xf088),		one(0xffbf),		"Bc"},
115
116{"pdbac",	two(0xf048, 0x0007),	two(0xfff8, 0xffff),	"DsBw"},
117{"pdbas",	two(0xf048, 0x0006),	two(0xfff8, 0xffff),	"DsBw"},
118{"pdbbc",	two(0xf048, 0x0001),	two(0xfff8, 0xffff),	"DsBw"},
119{"pdbbs",	two(0xf048, 0x0000),	two(0xfff8, 0xffff),	"DsBw"},
120{"pdbcc",	two(0xf048, 0x000f),	two(0xfff8, 0xffff),	"DsBw"},
121{"pdbcs",	two(0xf048, 0x000e),	two(0xfff8, 0xffff),	"DsBw"},
122{"pdbgc",	two(0xf048, 0x000d),	two(0xfff8, 0xffff),	"DsBw"},
123{"pdbgs",	two(0xf048, 0x000c),	two(0xfff8, 0xffff),	"DsBw"},
124{"pdbic",	two(0xf048, 0x000b),	two(0xfff8, 0xffff),	"DsBw"},
125{"pdbis",	two(0xf048, 0x000a),	two(0xfff8, 0xffff),	"DsBw"},
126{"pdblc",	two(0xf048, 0x0003),	two(0xfff8, 0xffff),	"DsBw"},
127{"pdbls",	two(0xf048, 0x0002),	two(0xfff8, 0xffff),	"DsBw"},
128{"pdbsc",	two(0xf048, 0x0005),	two(0xfff8, 0xffff),	"DsBw"},
129{"pdbss",	two(0xf048, 0x0004),	two(0xfff8, 0xffff),	"DsBw"},
130{"pdbwc",	two(0xf048, 0x0009),	two(0xfff8, 0xffff),	"DsBw"},
131{"pdbws",	two(0xf048, 0x0008),	two(0xfff8, 0xffff),	"DsBw"},
132
133{"pflusha",	two(0xf000, 0x2400),	two(0xffff, 0xffff),	"" },
134
135{"pflush",	two(0xf000, 0x3010),	two(0xffc0, 0xfe10),	"T3T9" },
136{"pflush",	two(0xf000, 0x3810),	two(0xffc0, 0xfe10),	"T3T9&s" },
137{"pflush",	two(0xf000, 0x3008),	two(0xffc0, 0xfe18),	"D3T9" },
138{"pflush",	two(0xf000, 0x3808),	two(0xffc0, 0xfe18),	"D3T9&s" },
139{"pflush",	two(0xf000, 0x3000),	two(0xffc0, 0xfe1e),	"f3T9" },
140{"pflush",	two(0xf000, 0x3800),	two(0xffc0, 0xfe1e),	"f3T9&s" },
141
142{"pflushs",	two(0xf000, 0x3410),	two(0xfff8, 0xfe10),	"T3T9" },
143{"pflushs",	two(0xf000, 0x3c00),	two(0xfff8, 0xfe00),	"T3T9&s" },
144{"pflushs",	two(0xf000, 0x3408),	two(0xfff8, 0xfe18),	"D3T9" },
145{"pflushs",	two(0xf000, 0x3c08),	two(0xfff8, 0xfe18),	"D3T9&s" },
146{"pflushs",	two(0xf000, 0x3400),	two(0xfff8, 0xfe1e),	"f3T9" },
147{"pflushs",	two(0xf000, 0x3c00),	two(0xfff8, 0xfe1e),	"f3T9&s"},
148
149{"pflushr",	two(0xf000, 0xa000),	two(0xffc0, 0xffff),	"|s" },
150
151{"ploadr",	two(0xf000, 0x2210),	two(0xffc0, 0xfff0),	"T3&s" },
152{"ploadr",	two(0xf000, 0x2208),	two(0xffc0, 0xfff8),	"D3&s" },
153{"ploadr",	two(0xf000, 0x2200),	two(0xffc0, 0xfffe),	"f3&s" },
154{"ploadw",	two(0xf000, 0x2010),	two(0xffc0, 0xfff0),	"T3&s" },
155{"ploadw",	two(0xf000, 0x2008),	two(0xffc0, 0xfff8),	"D3&s" },
156{"ploadw",	two(0xf000, 0x2000),	two(0xffc0, 0xfffe),	"f3&s" },
157
158    /* TC, CRP, DRP, SRP, CAL, VAL, SCC, AC */
159{"pmove",	two(0xf000, 0x4000),	two(0xffc0, 0xe3ff),	"*sP8" },
160{"pmove",	two(0xf000, 0x4200),	two(0xffc0, 0xe3ff),	"P8%s" },
161{"pmove",	two(0xf000, 0x4000),	two(0xffc0, 0xe3ff),	"|sW8" },
162{"pmove",	two(0xf000, 0x4200),	two(0xffc0, 0xe3ff),	"W8~s" },
163
164    /* BADx, BACx */
165{"pmove",	two(0xf000, 0x6200),	two(0xffc0, 0xe3e3),	"*sX3" },
166{"pmove",	two(0xf000, 0x6000),	two(0xffc0, 0xe3e3),	"X3%s" },
167
168    /* PSR, PCSR */
169    /* {"pmove",	two(0xf000, 0x6100),	two(oxffc0, oxffff),	"*sZ8" }, */
170{"pmove",	two(0xf000, 0x6000),	two(0xffc0, 0xffff),	"*sY8" },
171{"pmove",	two(0xf000, 0x6200),	two(0xffc0, 0xffff),	"Y8%s" },
172{"pmove",	two(0xf000, 0x6600),	two(0xffc0, 0xffff),	"Z8%s" },
173
174{"prestore",	one(0xf140),		one(0xffc0),		"&s"},
175{"prestore",	one(0xf158),		one(0xfff8),		"+s"},
176{"psave",	one(0xf100),		one(0xffc0),		"&s"},
177{"psave",	one(0xf100),		one(0xffc0),		"+s"},
178
179{"psac",	two(0xf040, 0x0007),	two(0xffc0, 0xffff),	"@s"},
180{"psas",	two(0xf040, 0x0006),	two(0xffc0, 0xffff),	"@s"},
181{"psbc",	two(0xf040, 0x0001),	two(0xffc0, 0xffff),	"@s"},
182{"psbs",	two(0xf040, 0x0000),	two(0xffc0, 0xffff),	"@s"},
183{"pscc",	two(0xf040, 0x000f),	two(0xffc0, 0xffff),	"@s"},
184{"pscs",	two(0xf040, 0x000e),	two(0xffc0, 0xffff),	"@s"},
185{"psgc",	two(0xf040, 0x000d),	two(0xffc0, 0xffff),	"@s"},
186{"psgs",	two(0xf040, 0x000c),	two(0xffc0, 0xffff),	"@s"},
187{"psic",	two(0xf040, 0x000b),	two(0xffc0, 0xffff),	"@s"},
188{"psis",	two(0xf040, 0x000a),	two(0xffc0, 0xffff),	"@s"},
189{"pslc",	two(0xf040, 0x0003),	two(0xffc0, 0xffff),	"@s"},
190{"psls",	two(0xf040, 0x0002),	two(0xffc0, 0xffff),	"@s"},
191{"pssc",	two(0xf040, 0x0005),	two(0xffc0, 0xffff),	"@s"},
192{"psss",	two(0xf040, 0x0004),	two(0xffc0, 0xffff),	"@s"},
193{"pswc",	two(0xf040, 0x0009),	two(0xffc0, 0xffff),	"@s"},
194{"psws",	two(0xf040, 0x0008),	two(0xffc0, 0xffff),	"@s"},
195
196{"ptestr",	two(0xf000, 0x8210),	two(0xffc0, 0xe3f0),	"T3&sQ8" },
197{"ptestr",	two(0xf000, 0x8310),	two(0xffc0, 0xe310),	"T3&sQ8A9" },
198{"ptestr",	two(0xf000, 0x8208),	two(0xffc0, 0xe3f8),	"D3&sQ8" },
199{"ptestr",	two(0xf000, 0x8308),	two(0xffc0, 0xe318),	"D3&sQ8A9" },
200{"ptestr",	two(0xf000, 0x8200),	two(0xffc0, 0xe3fe),	"f3&sQ8" },
201{"ptestr",	two(0xf000, 0x8300),	two(0xffc0, 0xe31e),	"f3&sQ8A9" },
202
203{"ptestw",	two(0xf000, 0x8010),	two(0xffc0, 0xe3f0),	"T3&sQ8" },
204{"ptestw",	two(0xf000, 0x8110),	two(0xffc0, 0xe310),	"T3&sQ8A9" },
205{"ptestw",	two(0xf000, 0x8008),	two(0xffc0, 0xe3f8),	"D3&sQ8" },
206{"ptestw",	two(0xf000, 0x8108),	two(0xffc0, 0xe318),	"D3&sQ8A9" },
207{"ptestw",	two(0xf000, 0x8000),	two(0xffc0, 0xe3fe),	"f3&sQ8" },
208{"ptestw",	two(0xf000, 0x8100),	two(0xffc0, 0xe31e),	"f3&sQ8A9" },
209
210{"ptrapacw",	two(0xf07a, 0x0007),	two(0xffff, 0xffff),	"#w"},
211{"ptrapacl",	two(0xf07b, 0x0007),	two(0xffff, 0xffff),	"#l"},
212{"ptrapac",	two(0xf07c, 0x0007),	two(0xffff, 0xffff),	""},
213
214{"ptrapasw",	two(0xf07a, 0x0006),	two(0xffff, 0xffff),	"#w"},
215{"ptrapasl",	two(0xf07b, 0x0006),	two(0xffff, 0xffff),	"#l"},
216{"ptrapas",	two(0xf07c, 0x0006),	two(0xffff, 0xffff),	""},
217
218{"ptrapbcw",	two(0xf07a, 0x0001),	two(0xffff, 0xffff),	"#w"},
219{"ptrapbcl",	two(0xf07b, 0x0001),	two(0xffff, 0xffff),	"#l"},
220{"ptrapbc",	two(0xf07c, 0x0001),	two(0xffff, 0xffff),	""},
221
222{"ptrapbsw",	two(0xf07a, 0x0000),	two(0xffff, 0xffff),	"#w"},
223{"ptrapbsl",	two(0xf07b, 0x0000),	two(0xffff, 0xffff),	"#l"},
224{"ptrapbs",	two(0xf07c, 0x0000),	two(0xffff, 0xffff),	""},
225
226{"ptrapccw",	two(0xf07a, 0x000f),	two(0xffff, 0xffff),	"#w"},
227{"ptrapccl",	two(0xf07b, 0x000f),	two(0xffff, 0xffff),	"#l"},
228{"ptrapcc",	two(0xf07c, 0x000f),	two(0xffff, 0xffff),	""},
229
230{"ptrapcsw",	two(0xf07a, 0x000e),	two(0xffff, 0xffff),	"#w"},
231{"ptrapcsl",	two(0xf07b, 0x000e),	two(0xffff, 0xffff),	"#l"},
232{"ptrapcs",	two(0xf07c, 0x000e),	two(0xffff, 0xffff),	""},
233
234{"ptrapgcw",	two(0xf07a, 0x000d),	two(0xffff, 0xffff),	"#w"},
235{"ptrapgcl",	two(0xf07b, 0x000d),	two(0xffff, 0xffff),	"#l"},
236{"ptrapgc",	two(0xf07c, 0x000d),	two(0xffff, 0xffff),	""},
237
238{"ptrapgsw",	two(0xf07a, 0x000c),	two(0xffff, 0xffff),	"#w"},
239{"ptrapgsl",	two(0xf07b, 0x000c),	two(0xffff, 0xffff),	"#l"},
240{"ptrapgs",	two(0xf07c, 0x000c),	two(0xffff, 0xffff),	""},
241
242{"ptrapicw",	two(0xf07a, 0x000b),	two(0xffff, 0xffff),	"#w"},
243{"ptrapicl",	two(0xf07b, 0x000b),	two(0xffff, 0xffff),	"#l"},
244{"ptrapic",	two(0xf07c, 0x000b),	two(0xffff, 0xffff),	""},
245
246{"ptrapisw",	two(0xf07a, 0x000a),	two(0xffff, 0xffff),	"#w"},
247{"ptrapisl",	two(0xf07b, 0x000a),	two(0xffff, 0xffff),	"#l"},
248{"ptrapis",	two(0xf07c, 0x000a),	two(0xffff, 0xffff),	""},
249
250{"ptraplcw",	two(0xf07a, 0x0003),	two(0xffff, 0xffff),	"#w"},
251{"ptraplcl",	two(0xf07b, 0x0003),	two(0xffff, 0xffff),	"#l"},
252{"ptraplc",	two(0xf07c, 0x0003),	two(0xffff, 0xffff),	""},
253
254{"ptraplsw",	two(0xf07a, 0x0002),	two(0xffff, 0xffff),	"#w"},
255{"ptraplsl",	two(0xf07b, 0x0002),	two(0xffff, 0xffff),	"#l"},
256{"ptrapls",	two(0xf07c, 0x0002),	two(0xffff, 0xffff),	""},
257
258{"ptrapscw",	two(0xf07a, 0x0005),	two(0xffff, 0xffff),	"#w"},
259{"ptrapscl",	two(0xf07b, 0x0005),	two(0xffff, 0xffff),	"#l"},
260{"ptrapsc",	two(0xf07c, 0x0005),	two(0xffff, 0xffff),	""},
261
262{"ptrapssw",	two(0xf07a, 0x0004),	two(0xffff, 0xffff),	"#w"},
263{"ptrapssl",	two(0xf07b, 0x0004),	two(0xffff, 0xffff),	"#l"},
264{"ptrapss",	two(0xf07c, 0x0004),	two(0xffff, 0xffff),	""},
265
266{"ptrapwcw",	two(0xf07a, 0x0009),	two(0xffff, 0xffff),	"#w"},
267{"ptrapwcl",	two(0xf07b, 0x0009),	two(0xffff, 0xffff),	"#l"},
268{"ptrapwc",	two(0xf07c, 0x0009),	two(0xffff, 0xffff),	""},
269
270{"ptrapwsw",	two(0xf07a, 0x0008),	two(0xffff, 0xffff),	"#w"},
271{"ptrapwsl",	two(0xf07b, 0x0008),	two(0xffff, 0xffff),	"#l"},
272{"ptrapws",	two(0xf07c, 0x0008),	two(0xffff, 0xffff),	""},
273
274{"pvalid",	two(0xf000, 0x2800),	two(0xffc0, 0xffff),	"Vs&s"},
275{"pvalid",	two(0xf000, 0x2c00),	two(0xffc0, 0xfff8),	"A3&s" },
276
277#endif /* m68851 */
278