1 /* This file is tc-m68851.h
2 
3    Copyright 1987, 1988, 1989, 1990, 1991, 1992, 2000, 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