xref: /netbsd/sys/arch/vax/vax/db_disasm.h (revision bf9ec67e)
1 /*	$NetBSD: db_disasm.h,v 1.1 1996/01/28 11:31:27 ragge Exp $ */
2 /*
3  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
4  * All rights reserved.
5  *
6  * This code is derived from software contributed to Ludd by
7  * Bertram Barth.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. All advertising materials mentioning features or use of this software
18  *    must display the following acknowledgement:
19  *      This product includes software developed at Ludd, University of
20  *      Lule}, Sweden and its contributors.
21  * 4. The name of the author may not be used to endorse or promote products
22  *    derived from this software without specific prior written permission
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
29  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
36 
37 
38 #define SIZE_BYTE	 1		/* Byte */
39 #define SIZE_WORD	 2		/* Word */
40 #define SIZE_LONG 	 4		/* Longword */
41 #define SIZE_QWORD	 8		/* Quadword */
42 #define SIZE_OWORD	16		/* Octaword */
43 
44 /*
45  * The VAX instruction set has a variable length instruction format which
46  * may be as short as one byte and as long as needed depending on the type
47  * of instruction. [...] Each instruction consists of an opcode followed
48  * by zero to six operand specifiers whose number and type depend on the
49  * opcode. All operand specidiers are, themselves, of the same format --
50  * i.e. an address mode plus additional information.
51  *
52  * [VAX Architecture Handbook, p.52:  Instruction Format]
53  */
54 
55 struct {
56 	char *mnemonic;
57 	char *argdesc;
58 } vax_inst[256] = {
59 
60 /*
61  * argdesc describes each arguments by two characters denoting
62  * the access-type and the data-type.
63  *
64  * Arguments (Access-Types):
65  *	r: operand is read only
66  *	w: operand is written only
67  *	m: operand is modified (both R and W)
68  *	b: no operand reference. Branch displacement is specified.
69  *	a: calculate the adress of the specified operand
70  *	v: if not "Rn", same as a. If "RN," R[n+1]R[n]
71  * Arguments (Data-Types):
72  *	b: Byte
73  *	w: Word
74  *	l: Longword
75  *	q: Quadword
76  *	o: Octaword
77  *	d: D_floating
78  *	f: F_floating
79  *	g: G_floating
80  *	h: H_floating
81  *	r: Register
82  *	x: first data type specified by instruction
83  *	y: second data type spcified by instructin
84  *	-: no-args
85  *	?: unknown (variable?)
86  */
87 
88 /* 0x00 */	{	"halt", 	""			},
89 /* 0x01 */	{	"nop", 		""			},
90 /* 0x02 */	{	"rei", 		""			},
91 /* 0x03 */	{	"bpt", 		""			},
92 /* 0x04 */	{	"ret", 		""			},
93 /* 0x05 */	{	"rsb", 		""			},
94 /* 0x06 */	{	"ldpctx", 	""			},
95 /* 0x07 */	{	"svpctx", 	""			},
96 /* 0x08 */	{	"cvtps", 	"rw,ab,rw,ab"		},
97 /* 0x09 */	{	"cvtsp", 	"rw,ab,rw,ab"		},
98 /* 0x0a */	{	"index", 	"rl,rl,rl,rl,rl,wl" 	},
99 /* 0x0b */	{	"crc", 		"ab,rl,rw,ab"		},
100 /* 0x0c */	{	"prober", 	"rb,rw,ab"		},
101 /* 0x0d */	{	"probew", 	"rb,rw,ab"		},
102 /* 0x0e */	{	"insque", 	"ab,wl"			},
103 /* 0x0f */	{	"remque", 	"ab,wl"			},
104 
105 /* 0x10 */	{	"bsbb", 	"bb"			},
106 /* 0x11 */	{	"brb", 		"bb"			},
107 /* 0x12 */	{	"*bneq",	"bb"			},
108 /* 0x13 */	{	"*beql", 	"bb"			},
109 /* 0x14 */	{	"bgtr", 	"bb"			},
110 /* 0x15 */	{	"bleq", 	"bb"			},
111 /* 0x16 */	{	"jsb", 		"ab"			},
112 /* 0x17 */	{	"jmp", 		"ab"			},
113 /* 0x18 */	{	"bgeq", 	"bb"			},
114 /* 0x19 */	{	"blss", 	"bb"			},
115 /* 0x1a */	{	"bgtru", 	"bb"			},
116 /* 0x1b */	{	"blequ", 	"bb"			},
117 /* 0x1c */	{	"bvc", 		"bb"			},
118 /* 0x1d */	{	"bvs", 		"bb"			},
119 /* 0x1e */	{	"*bcc", 	"bb"			},
120 /* 0x1f */	{	"*bcs", 	"bb"			},
121 
122 /* 0x20 */	{	"addp4", 	"rw,ab,rw,ab"		},
123 /* 0x21 */	{	"addp6", 	"rw,ab,rw,ab,rw,ab"	},
124 /* 0x22 */	{	"subp4", 	"rw,ab,rw,ab"		},
125 /* 0x23 */	{	"subp6", 	"rw,ab,rw,ab,rw,ab"	},
126 /* 0x24 */	{	"cvtpt", 	"rw,ab,ab,rw,ab"	},
127 /* 0x25 */	{	"mulp", 	"rw,ab,rw,ab,rw,ab"	},
128 /* 0x26 */	{	"cvttp", 	"rw,ab,ab,rw,ab"	},
129 /* 0x27 */	{	"divp", 	"rw,ab,rw,ab,rw,ab"	},
130 /* 0x28 */	{	"movc3", 	"rw,ab,ab"		},
131 /* 0x29 */	{	"cmpc3", 	"rw,ab,ab"		},
132 /* 0x2a */	{	"scanc", 	"rw,ab,ab,rb"		},
133 /* 0x2b */	{	"spanc", 	"rw,ab,ab,rb"		},
134 /* 0x2c */	{	"movc5", 	"rw,ab,rb,rw,ab"	},
135 /* 0x2d */	{	"cmpc5", 	"rw,ab,rb,rw,ab"	},
136 /* 0x2e */	{	"movtc", 	"rw,ab,rb,ab,rw,ab"	},
137 /* 0x2f */	{	"movtuc", 	"rw,ab,rb,ab,rw,ab"	},
138 
139 /* 0x30 */	{	"bsbw", 	"bw"			},
140 /* 0x31 */	{	"brw", 		"bw"			},
141 /* 0x32 */	{	"cvtwl", 	"rw,wl"			},
142 /* 0x33 */	{	"cvtwb", 	"rw,wb"			},
143 /* 0x34 */	{	"movp", 	"rw,ab,ab"		},
144 /* 0x35 */	{	"cmpp3", 	"rw,ab,ab"		},
145 /* 0x36 */	{	"cvtpl", 	"rw,ab,wl"		},
146 /* 0x37 */	{	"cmpp4", 	"rw,ab,rw,ab"		},
147 /* 0x38 */	{	"editpc", 	"rw,ab,ab,ab"		},
148 /* 0x39 */	{	"matchc", 	"rw,ab,rw,ab"		},
149 /* 0x3a */	{	"locc", 	"rb,rw,ab"		},
150 /* 0x3b */	{	"skpc", 	"rb,rw,ab"		},
151 /* 0x3c */	{	"movzwl", 	"rw,wl"			},
152 /* 0x3d */	{	"acbw", 	"rw,rw,mw,bw"		},
153 /* 0x3e */	{	"movaw", 	"aw,wl"			},
154 /* 0x3f */	{	"pushaw", 	"aw"			},
155 
156 /* 0x40 */	{	"addf2", 	"rf,mf"			},
157 /* 0x41 */	{	"addf3", 	"rf,rf,wf"		},
158 /* 0x42 */	{	"subf2", 	"rf,mf"			},
159 /* 0x43 */	{	"subf3", 	"rf,rf,wf"		},
160 /* 0x44 */	{	"mulf2", 	"rf,mf"			},
161 /* 0x45 */	{	"mulf3", 	"rf,rf,wf"		},
162 /* 0x46 */	{	"divf2", 	"rf,mf"			},
163 /* 0x47 */	{	"divf3", 	"rf,rf,wf"		},
164 /* 0x48 */	{	"cvtfb", 	"rf,wb"			},
165 /* 0x49 */	{	"cvtfw", 	"rf,ww"			},
166 /* 0x4a */	{	"cvtfl", 	"rf,wl"			},
167 /* 0x4b */	{	"cvtrfl", 	"rf,wl"			},
168 /* 0x4c */	{	"cvtbf", 	"rb,wf"			},
169 /* 0x4d */	{	"cvtwf", 	"rw,wf"			},
170 /* 0x4e */	{	"cvtlf", 	"rl,wf"			},
171 /* 0x4f */	{	"acbf", 	"rf,rf,rf,bw"		},
172 
173 /* 0x50 */	{	"movf", 	"rf,wf"			},
174 /* 0x51 */	{	"cmpf", 	"rf,rf"			},
175 /* 0x52 */	{	"mnegf", 	"rf,wf"			},
176 /* 0x53 */	{	"tstf", 	"rf"			},
177 /* 0x54 */	{	"emodf", 	"rf,rb,rf,wl,wf"	},
178 /* 0x55 */	{	"polyf", 	"rf,rw,ab"		},
179 /* 0x56 */	{	"cvtfd", 	"rf,wd"			},
180 /* 0x57 */	{	"-reserved-", 	""			},
181 /* 0x58 */	{	"adawi", 	"rw,mw"			},
182 /* 0x59 */	{	"-reserved-", 	""			},
183 /* 0x5a */	{	"-reserved-", 	""			},
184 /* 0x5b */	{	"-reserved-", 	""			},
185 /* 0x5c */	{	"insqhi", 	"ab,aq"			},
186 /* 0x5d */	{	"insqti", 	"ab,aq"			},
187 /* 0x5e */	{	"remqhi", 	"aq,wl"			},
188 /* 0x5f */	{	"remqti", 	"aq,wl"			},
189 
190 /* 0x60 */	{	"addd2", 	"rd,md"			},
191 /* 0x61 */	{	"addd3", 	"rd,rd,wd"		},
192 /* 0x62 */	{	"subd2", 	"rd,md"			},
193 /* 0x63 */	{	"subd3", 	"rd,rd,wd"		},
194 /* 0x64 */	{	"muld2", 	"rd,md"			},
195 /* 0x65 */	{	"muld3", 	"rd,rd,wd"		},
196 /* 0x66 */	{	"divd2", 	"rd,md"			},
197 /* 0x67 */	{	"divd3", 	"rd,rd,wd"		},
198 /* 0x68 */	{	"cvtdb", 	"rd,wb"			},
199 /* 0x69 */	{	"cvtdw", 	"rd,ww"			},
200 /* 0x6a */	{	"cvtdl", 	"rd,wl"			},
201 /* 0x6b */	{	"cvtrdl", 	"rd,wl"			},
202 /* 0x6c */	{	"cvtbd", 	"rb,wd"			},
203 /* 0x6d */	{	"cvtwd", 	"rw,wd"			},
204 /* 0x6e */	{	"cvtld", 	"rl,wd"			},
205 /* 0x6f */	{	"acbd", 	"rd,rd,md,bw"		},
206 
207 /* 0x70 */	{	"movd", 	"rd,wd"			},
208 /* 0x71 */	{	"cmpd", 	"rd,rd"			},
209 /* 0x72 */	{	"mnegd", 	"rd,wd"			},
210 /* 0x73 */	{	"tstd", 	"rd"			},
211 /* 0x74 */	{	"emodd", 	"rd,rb,rd,wl,wd"	},
212 /* 0x75 */	{	"polyd", 	"rd,rw,ab"		},
213 /* 0x76 */	{	"cvtdf", 	"rd,wf"			},
214 /* 0x77 */	{	"-reserved-", 	""			},
215 /* 0x78 */	{	"ashl", 	"rb,rl,wl"		},
216 /* 0x79 */	{	"ashq", 	"rb,rq,wq"		},
217 /* 0x7a */	{	"emul", 	"rl,rl,rl,wq"		},
218 /* 0x7b */	{	"ediv", 	"rl,rq,wl,wl"		},
219 /* 0x7c */	{	"*clrq", 	"wq"			},
220 /* 0x7d */	{	"movq", 	"rq,wq"			},
221 /* 0x7e */	{	"*movaq", 	"aq,wl"			},
222 /* 0x7f */	{	"*pushaq", 	"aq"			},
223 
224 /* 0x80 */	{	"addb2", 	"rb,mb"			},
225 /* 0x81 */	{	"addb3", 	"rb,rb,wb"		},
226 /* 0x82 */	{	"subb2", 	"rb,mb"			},
227 /* 0x83 */	{	"subb3", 	"rb,rb,wb"		},
228 /* 0x84 */	{	"mulb2", 	"rb,mb"			},
229 /* 0x85 */	{	"mulb3", 	"rb,rb,wb"		},
230 /* 0x86 */	{	"divb2", 	"rb,mb"			},
231 /* 0x87 */	{	"divb3", 	"rb,rb,wb"		},
232 /* 0x88 */	{	"bisb2", 	"rb,mb"			},
233 /* 0x89 */	{	"bisb3", 	"rb,rb,wb"		},
234 /* 0x8a */	{	"bicb2", 	"rb,mb"			},
235 /* 0x8b */	{	"bicb3", 	"rb,rb,wb"		},
236 /* 0x8c */	{	"xorb2", 	"rb,mb"			},
237 /* 0x8d */	{	"xorb3", 	"rb,rb,wb"		},
238 /* 0x8e */	{	"mnegb", 	"rb,wb"			},
239 /* 0x8f */	{	"caseb", 	"rb,rb,rb,bw-list"	},
240 
241 /* 0x90 */	{	"movb", 	"rb,wb"			},
242 /* 0x91 */	{	"cmpb", 	"rb,rb"			},
243 /* 0x92 */	{	"mcomb", 	"rb,wb"			},
244 /* 0x93 */	{	"bitb", 	"rb,rb"			},
245 /* 0x94 */	{	"clrb", 	"wb"			},
246 /* 0x95 */	{	"tstb", 	"rb"			},
247 /* 0x96 */	{	"incb", 	"mb"			},
248 /* 0x97 */	{	"decb", 	"mb"			},
249 /* 0x98 */	{	"cvtbl", 	"rb,wl"			},
250 /* 0x99 */	{	"cvtbw", 	"rb,ww"			},
251 /* 0x9a */	{	"movzbl", 	"rb,wl"			},
252 /* 0x9b */	{	"movzbw", 	"wb,ww"			},
253 /* 0x9c */	{	"rotl", 	"rb,rl,wl"		},
254 /* 0x9d */	{	"acbb", 	"rb,rb,mb,bw"		},
255 /* 0x9e */	{	"movab", 	"ab,wl"			},
256 /* 0x9f */	{	"pushab", 	"ab"			},
257 
258 /* 0xa0 */	{	"addw2", 	"rw,mw"			},
259 /* 0xa1 */	{	"addw3", 	"rw,rw,ww"		},
260 /* 0xa2 */	{	"subw2", 	"rw,mw"			},
261 /* 0xa3 */	{	"subw3", 	"rw,rw,ww"		},
262 /* 0xa4 */	{	"mulw2", 	"rw,mw"			},
263 /* 0xa5 */	{	"mulw3", 	"rw,rw,ww"		},
264 /* 0xa6 */	{	"divw2", 	"rw,mw"			},
265 /* 0xa7 */	{	"divw3", 	"rw,rw,ww"		},
266 /* 0xa8 */	{	"bisw2", 	"rw,mw"			},
267 /* 0xa9 */	{	"bisw3", 	"rw,rw,ww"		},
268 /* 0xaa */	{	"bicw2", 	"rw,mw"			},
269 /* 0xab */	{	"bicw3", 	"rw,rw,ww"		},
270 /* 0xac */	{	"xorw2", 	"rw,mw"			},
271 /* 0xad */	{	"xorw3", 	"rw,rw,ww"		},
272 /* 0xae */	{	"mnegw", 	"rw,ww"			},
273 /* 0xaf */	{	"casew", 	"rw,rw,rw,bw-list"	},
274 
275 /* 0xb0 */	{	"movw", 	"rw,ww"			},
276 /* 0xb1 */	{	"cmpw", 	"rw,rw"			},
277 /* 0xb2 */	{	"mcomw", 	"rw,ww"			},
278 /* 0xb3 */	{	"bitw", 	"rw,rw"			},
279 /* 0xb4 */	{	"clrw", 	"mw"			},
280 /* 0xb5 */	{	"tstw", 	"rw"			},
281 /* 0xb6 */	{	"incw", 	"mw"			},
282 /* 0xb7 */	{	"decw", 	"mw"			},
283 /* 0xb8 */	{	"bispsw", 	"rw"			},
284 /* 0xb9 */	{	"bicpsw", 	"rw"			},
285 /* 0xba */	{	"popr", 	"rw"			},
286 /* 0xbb */	{	"pushr", 	"rw"			},
287 /* 0xbc */	{	"chmk", 	"rw"			},
288 /* 0xbd */	{	"chme", 	"rw"			},
289 /* 0xbe */	{	"chms", 	"rw"			},
290 /* 0xbf */	{	"chmu", 	"rw"			},
291 
292 /* 0xc0 */	{	"addl2", 	"rl,ml"			},
293 /* 0xc1 */	{	"addl3", 	"rl,rl,wl"		},
294 /* 0xc2 */	{	"subl2", 	"rl,ml"			},
295 /* 0xc3 */	{	"subl3", 	"rl,rl,wl"		},
296 /* 0xc4 */	{	"mull2", 	"rl,ml"			},
297 /* 0xc5 */	{	"mull3", 	"rl,rl,wl"		},
298 /* 0xc6 */	{	"divl2", 	"rl,ml"			},
299 /* 0xc7 */	{	"divl3", 	"rl,rl,wl"		},
300 /* 0xc8 */	{	"bisl2", 	"rl,ml"			},
301 /* 0xc9 */	{	"bisl3", 	"rl,rl,wl"		},
302 /* 0xca */	{	"bicl2", 	"rl,ml"			},
303 /* 0xcb */	{	"bicl3", 	"rl,rl,wl"		},
304 /* 0xcc */	{	"xorl2", 	"rl,ml"			},
305 /* 0xcd */	{	"xorl3", 	"rl,rl,wl"		},
306 /* 0xce */	{	"mnegl", 	"rl,wl"			},
307 /* 0xcf */	{	"casel", 	"rl,rl,rl,bw-list"	},
308 
309 /* 0xd0 */	{	"movl", 	"rl,wl"			},
310 /* 0xd1 */	{	"cmpl", 	"rl,rl"			},
311 /* 0xd2 */	{	"mcoml", 	"rl,wl"			},
312 /* 0xd3 */	{	"bitl", 	"rl,rl"			},
313 /* 0xd4 */	{	"*clrl", 	"wl"			},
314 /* 0xd5 */	{	"tstl", 	"rl"			},
315 /* 0xd6 */	{	"incl", 	"ml"			},
316 /* 0xd7 */	{	"decl", 	"ml"			},
317 /* 0xd8 */	{	"adwc", 	"rl,ml"			},
318 /* 0xd9 */	{	"sbwc", 	"rl,ml"			},
319 /* 0xda */	{	"mtpr", 	"rl,rl"			},
320 /* 0xdb */	{	"mfpr", 	"rl,wl"			},
321 /* 0xdc */	{	"movpsl", 	"wl"			},
322 /* 0xdd */	{	"pushl", 	"rl"			},
323 /* 0xde */	{	"*moval", 	"al,wl"			},
324 /* 0xdf */	{	"*pushal", 	"al"			},
325 
326 /* 0xe0 */	{	"bbs", 		"rl,vb,bb"		},
327 /* 0xe1 */	{	"bbc", 		"rl,vb,bb"		},
328 /* 0xe2 */	{	"bbss", 	"rl,vb,bb"		},
329 /* 0xe3 */	{	"bbcs", 	"rl,vb,bb"		},
330 /* 0xe4 */	{	"bbsc", 	"rl,vb,bb"		},
331 /* 0xe5 */	{	"bbcc", 	"rl,vb,bb"		},
332 /* 0xe6 */	{	"bbssi", 	"rl,vb,bb"		},
333 /* 0xe7 */	{	"bbcci", 	"rl,vb,bb"		},
334 /* 0xe8 */	{	"blbs", 	"rl,bb"			},
335 /* 0xe9 */	{	"blbc", 	"rl,bb"			},
336 /* 0xea */	{	"ffs", 		"rl,rb,vb"		},
337 /* 0xeb */	{	"ffc", 		"rl,rb,vb"		},
338 /* 0xec */	{	"cmpv", 	"rl,rb,vb,rl"		},
339 /* 0xed */	{	"cmpzv", 	"rl,rb,vb,rl"		},
340 /* 0xee */	{	"extv", 	"rl,rb,vb,wl"		},
341 /* 0xef */	{	"extzv", 	"rl,rb,vb,wl"		},
342 
343 /* 0xf0 */	{	"insv", 	"rl,rl,rb,vb"		},
344 /* 0xf1 */	{	"acbl", 	"rl,rl,ml,bw"		},
345 /* 0xf2 */	{	"aoblss", 	"rl,ml,bb"		},
346 /* 0xf3 */	{	"aobleq", 	"rl,ml,bb"		},
347 /* 0xf4 */	{	"sobgeq", 	"ml,bb"			},
348 /* 0xf5 */	{	"sobgtr", 	"ml,bb"			},
349 /* 0xf6 */	{	"cvtlb", 	"rl,wb"			},
350 /* 0xf7 */	{	"cvtlw", 	"rl,ww"			},
351 /* 0xf8 */	{	"ashp", 	"rb,rw,ab,rb,rw,ab"	},
352 /* 0xf9 */	{	"cvtlp", 	"rl,rw,ab"		},
353 /* 0xfa */	{	"callg", 	"ab,ab"			},
354 /* 0xfb */	{	"calls", 	"rl,ab"			},
355 /* 0xfc */	{	"xfc", 		"?"			},
356 /* 0xfd */	{	"-reserved-", 	""			},
357 /* 0xfe */	{	"-reserved-", 	""			},
358 /* 0xff */	{	"-reserved-", 	""			},
359 
360 };
361 
362