1 /* This file is tc-m68851.h
2 
3    Copyright (C) 1987-2021 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