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