alpha_instruction.h revision 1.1 1 1.1 thorpej /* $NetBSD: alpha_instruction.h,v 1.1 2023/11/21 22:19:12 thorpej Exp $ */
2 1.1 thorpej
3 1.1 thorpej /*
4 1.1 thorpej * Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
5 1.1 thorpej *
6 1.1 thorpej * Redistribution and use in source and binary forms, with or without
7 1.1 thorpej * modification, are permitted provided that the following conditions
8 1.1 thorpej * are met:
9 1.1 thorpej * 1. Redistributions of source code must retain the above copyright
10 1.1 thorpej * notice, this list of conditions and the following disclaimer.
11 1.1 thorpej * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 thorpej * notice, this list of conditions and the following disclaimer in the
13 1.1 thorpej * documentation and/or other materials provided with the distribution.
14 1.1 thorpej * 3. All advertising materials mentioning features or use of this software
15 1.1 thorpej * must display the following acknowledgement:
16 1.1 thorpej * This product includes software developed by Christopher G. Demetriou
17 1.1 thorpej * for the NetBSD Project.
18 1.1 thorpej * 4. The name of the author may not be used to endorse or promote products
19 1.1 thorpej * derived from this software without specific prior written permission
20 1.1 thorpej *
21 1.1 thorpej * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 1.1 thorpej * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 1.1 thorpej * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 1.1 thorpej * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 1.1 thorpej * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 1.1 thorpej * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 1.1 thorpej * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 1.1 thorpej * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 1.1 thorpej * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30 1.1 thorpej * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 1.1 thorpej */
32 1.1 thorpej
33 1.1 thorpej /*
34 1.1 thorpej * Mach Operating System
35 1.1 thorpej * Copyright (c) 1993,1992 Carnegie Mellon University
36 1.1 thorpej * All Rights Reserved.
37 1.1 thorpej *
38 1.1 thorpej * Permission to use, copy, modify and distribute this software and its
39 1.1 thorpej * documentation is hereby granted, provided that both the copyright
40 1.1 thorpej * notice and this permission notice appear in all copies of the
41 1.1 thorpej * software, derivative works or modified versions, and any portions
42 1.1 thorpej * thereof, and that both notices appear in supporting documentation.
43 1.1 thorpej *
44 1.1 thorpej * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
45 1.1 thorpej * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
46 1.1 thorpej * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
47 1.1 thorpej *
48 1.1 thorpej * Carnegie Mellon requests users of this software to return to
49 1.1 thorpej *
50 1.1 thorpej * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU
51 1.1 thorpej * School of Computer Science
52 1.1 thorpej * Carnegie Mellon University
53 1.1 thorpej * Pittsburgh PA 15213-3890
54 1.1 thorpej *
55 1.1 thorpej * any improvements or extensions that they make and grant Carnegie Mellon
56 1.1 thorpej * the rights to redistribute these changes.
57 1.1 thorpej */
58 1.1 thorpej
59 1.1 thorpej /*
60 1.1 thorpej * File: alpha_instruction.h
61 1.1 thorpej * Author: Alessandro Forin, Carnegie Mellon University
62 1.1 thorpej * Date: 11/91
63 1.1 thorpej *
64 1.1 thorpej * Alpha Instruction set definition
65 1.1 thorpej *
66 1.1 thorpej * Reference: "Alpha System Reference Manual", V4.0, April 1991
67 1.1 thorpej *
68 1.1 thorpej */
69 1.1 thorpej
70 1.1 thorpej #ifndef _ALPHA_INSTRUCTION_H_
71 1.1 thorpej #define _ALPHA_INSTRUCTION_H_ 1
72 1.1 thorpej
73 1.1 thorpej #if !defined(ASSEMBLER)
74 1.1 thorpej
75 1.1 thorpej /*
76 1.1 thorpej * All instructions are in one of five formats:
77 1.1 thorpej * Memory, Branch, Operate, Floating-point Operate, PAL
78 1.1 thorpej *
79 1.1 thorpej * The original Mach sources attempted to use 'smarter' names
80 1.1 thorpej * for registers, which reflected source and destination. These
81 1.1 thorpej * definitions use the names from the Architecture Reference Manual,
82 1.1 thorpej * both for clarity and because you can't differentiate between
83 1.1 thorpej * 'source' and 'destinations' for some types of instructions (loads
84 1.1 thorpej * and stores; they'd be correct for one, but swapped for the other).
85 1.1 thorpej */
86 1.1 thorpej
87 1.1 thorpej
88 1.1 thorpej typedef union {
89 1.1 thorpej /*
90 1.1 thorpej * All instructions are 32 bits wide
91 1.1 thorpej */
92 1.1 thorpej unsigned int bits;
93 1.1 thorpej
94 1.1 thorpej /*
95 1.1 thorpej * Generic instruction pseudo format; look at
96 1.1 thorpej * opcode to see how to interpret the rest.
97 1.1 thorpej */
98 1.1 thorpej struct {
99 1.1 thorpej unsigned bits:26,
100 1.1 thorpej opcode:6;
101 1.1 thorpej } generic_format;
102 1.1 thorpej
103 1.1 thorpej /*
104 1.1 thorpej * Memory instructions contain a 16 bit
105 1.1 thorpej * signed immediate value and two register
106 1.1 thorpej * specifiers
107 1.1 thorpej */
108 1.1 thorpej struct {
109 1.1 thorpej signed short displacement;
110 1.1 thorpej unsigned rb : 5,
111 1.1 thorpej ra : 5,
112 1.1 thorpej opcode : 6;
113 1.1 thorpej } mem_format;
114 1.1 thorpej
115 1.1 thorpej /*
116 1.1 thorpej * Branch instruction contain a 21 bit offset,
117 1.1 thorpej * which is sign-extended, shifted and combined
118 1.1 thorpej * with the PC to form a 64 bit destination address.
119 1.1 thorpej *
120 1.1 thorpej * In computed jump instructions the opcode is further
121 1.1 thorpej * specified in the offset field, the rest of it is
122 1.1 thorpej * used as branch target hint. The destination of the
123 1.1 thorpej * jump is the source register.
124 1.1 thorpej */
125 1.1 thorpej struct {
126 1.1 thorpej signed int displacement : 21;
127 1.1 thorpej unsigned ra : 5,
128 1.1 thorpej opcode : 6;
129 1.1 thorpej } branch_format;
130 1.1 thorpej
131 1.1 thorpej struct {
132 1.1 thorpej signed int hint : 14;
133 1.1 thorpej unsigned action : 2,
134 1.1 thorpej rb : 5,
135 1.1 thorpej ra : 5,
136 1.1 thorpej opcode : 6;
137 1.1 thorpej } jump_format;
138 1.1 thorpej
139 1.1 thorpej
140 1.1 thorpej /*
141 1.1 thorpej * Operate instructions are of two types, with
142 1.1 thorpej * a second source register or with a literal
143 1.1 thorpej * specifier. Bit 12 sez which is which.
144 1.1 thorpej */
145 1.1 thorpej struct {
146 1.1 thorpej unsigned rc : 5,
147 1.1 thorpej function : 7,
148 1.1 thorpej is_lit : 1,
149 1.1 thorpej sbz_or_litlo : 3,
150 1.1 thorpej rb_or_lithi : 5,
151 1.1 thorpej ra : 5,
152 1.1 thorpej opcode : 6;
153 1.1 thorpej } operate_generic_format;
154 1.1 thorpej
155 1.1 thorpej struct {
156 1.1 thorpej unsigned rc : 5,
157 1.1 thorpej function : 7,
158 1.1 thorpej zero : 1,
159 1.1 thorpej sbz : 3,
160 1.1 thorpej rb : 5,
161 1.1 thorpej ra : 5,
162 1.1 thorpej opcode : 6;
163 1.1 thorpej } operate_reg_format;
164 1.1 thorpej
165 1.1 thorpej struct {
166 1.1 thorpej unsigned rc : 5,
167 1.1 thorpej function : 7,
168 1.1 thorpej one : 1,
169 1.1 thorpej literal : 8,
170 1.1 thorpej ra : 5,
171 1.1 thorpej opcode : 6;
172 1.1 thorpej } operate_lit_format;
173 1.1 thorpej
174 1.1 thorpej
175 1.1 thorpej /*
176 1.1 thorpej * Floating point operate instruction are quite
177 1.1 thorpej * uniform in the encoding. As for the semantics..
178 1.1 thorpej */
179 1.1 thorpej struct {
180 1.1 thorpej unsigned fc : 5,
181 1.1 thorpej function : 11,
182 1.1 thorpej fb : 5,
183 1.1 thorpej fa : 5,
184 1.1 thorpej opcode : 6;
185 1.1 thorpej } float_format;
186 1.1 thorpej
187 1.1 thorpej struct {
188 1.1 thorpej unsigned fc : 5,
189 1.1 thorpej opclass : 4,
190 1.1 thorpej src : 2,
191 1.1 thorpej rnd : 2,
192 1.1 thorpej trp : 3,
193 1.1 thorpej fb : 5,
194 1.1 thorpej fa : 5,
195 1.1 thorpej opcode : 6;
196 1.1 thorpej } float_detail;
197 1.1 thorpej
198 1.1 thorpej /*
199 1.1 thorpej * PAL instructions just define the major opcode
200 1.1 thorpej */
201 1.1 thorpej
202 1.1 thorpej struct {
203 1.1 thorpej unsigned function : 26,
204 1.1 thorpej opcode : 6;
205 1.1 thorpej } pal_format;
206 1.1 thorpej
207 1.1 thorpej } alpha_instruction;
208 1.1 thorpej
209 1.1 thorpej #endif /* !defined(ASSEMBLER) */
210 1.1 thorpej
211 1.1 thorpej /*
212 1.1 thorpej *
213 1.1 thorpej * Encoding of regular instructions (Appendix C op cit)
214 1.1 thorpej *
215 1.1 thorpej */
216 1.1 thorpej
217 1.1 thorpej /* OPCODE, bits 26..31 */
218 1.1 thorpej
219 1.1 thorpej #define op_pal 0x00 /* see PAL sub-table */
220 1.1 thorpej /* 1..7 reserved */
221 1.1 thorpej #define op_lda 0x08
222 1.1 thorpej #define op_ldah 0x09
223 1.1 thorpej #define op_ldbu 0x0a
224 1.1 thorpej #define op_ldq_u 0x0b
225 1.1 thorpej #define op_ldwu 0x0c
226 1.1 thorpej #define op_stw 0x0d
227 1.1 thorpej #define op_stb 0x0e
228 1.1 thorpej #define op_stq_u 0x0f
229 1.1 thorpej
230 1.1 thorpej #define op_arit 0x10 /* see ARIT sub-table */
231 1.1 thorpej #define op_logical 0x11 /* see LOGICAL sub-table */
232 1.1 thorpej #define op_bit 0x12 /* see BIT sub-table */
233 1.1 thorpej #define op_mul 0x13 /* see MUL sub-table */
234 1.1 thorpej #define op_fix_float 0x14 /* if ALPHA_AMASK_FIX */
235 1.1 thorpej #define op_vax_float 0x15 /* see FLOAT sub-table */
236 1.1 thorpej #define op_ieee_float 0x16 /* see FLOAT sub-table */
237 1.1 thorpej #define op_any_float 0x17 /* see FLOAT sub-table */
238 1.1 thorpej
239 1.1 thorpej #define op_special 0x18 /* see SPECIAL sub-table */
240 1.1 thorpej #define op_pal19 0x19 /* reserved for pal code */
241 1.1 thorpej #define op_j 0x1a /* see JUMP sub-table */
242 1.1 thorpej #define op_pal1b 0x1b /* reserved for pal code */
243 1.1 thorpej #define op_intmisc 0x1c /* see INTMISC sub-table */
244 1.1 thorpej #define op_pal1d 0x1d /* reserved for pal code */
245 1.1 thorpej #define op_pal1e 0x1e /* reserved for pal code */
246 1.1 thorpej #define op_pal1f 0x1f /* reserved for pal code */
247 1.1 thorpej
248 1.1 thorpej #define op_ldf 0x20
249 1.1 thorpej #define op_ldg 0x21
250 1.1 thorpej #define op_lds 0x22
251 1.1 thorpej #define op_ldt 0x23
252 1.1 thorpej #define op_stf 0x24
253 1.1 thorpej #define op_stg 0x25
254 1.1 thorpej #define op_sts 0x26
255 1.1 thorpej #define op_stt 0x27
256 1.1 thorpej #define op_ldl 0x28
257 1.1 thorpej #define op_ldq 0x29
258 1.1 thorpej #define op_ldl_l 0x2a
259 1.1 thorpej #define op_ldq_l 0x2b
260 1.1 thorpej #define op_stl 0x2c
261 1.1 thorpej #define op_stq 0x2d
262 1.1 thorpej #define op_stl_c 0x2e
263 1.1 thorpej #define op_stq_c 0x2f
264 1.1 thorpej #define op_br 0x30
265 1.1 thorpej #define op_fbeq 0x31
266 1.1 thorpej #define op_fblt 0x32
267 1.1 thorpej #define op_fble 0x33
268 1.1 thorpej #define op_bsr 0x34
269 1.1 thorpej #define op_fbne 0x35
270 1.1 thorpej #define op_fbge 0x36
271 1.1 thorpej #define op_fbgt 0x37
272 1.1 thorpej #define op_blbc 0x38
273 1.1 thorpej #define op_beq 0x39
274 1.1 thorpej #define op_blt 0x3a
275 1.1 thorpej #define op_ble 0x3b
276 1.1 thorpej #define op_blbs 0x3c
277 1.1 thorpej #define op_bne 0x3d
278 1.1 thorpej #define op_bge 0x3e
279 1.1 thorpej #define op_bgt 0x3f
280 1.1 thorpej
281 1.1 thorpej
282 1.1 thorpej /* PAL, "function" opcodes (bits 0..25) */
283 1.1 thorpej /*
284 1.1 thorpej * What we will implement is TBD. These are the unprivileged ones
285 1.1 thorpej * that we probably have to support for compat reasons.
286 1.1 thorpej */
287 1.1 thorpej
288 1.1 thorpej /* See <machine/pal.h> */
289 1.1 thorpej
290 1.1 thorpej /* ARIT, "function" opcodes (bits 5..11) */
291 1.1 thorpej
292 1.1 thorpej #define op_addl 0x00
293 1.1 thorpej #define op_s4addl 0x02
294 1.1 thorpej #define op_subl 0x09
295 1.1 thorpej #define op_s4subl 0x0b
296 1.1 thorpej #define op_cmpbge 0x0f
297 1.1 thorpej #define op_s8addl 0x12
298 1.1 thorpej #define op_s8subl 0x1b
299 1.1 thorpej #define op_cmpult 0x1d
300 1.1 thorpej #define op_addq 0x20
301 1.1 thorpej #define op_s4addq 0x22
302 1.1 thorpej #define op_subq 0x29
303 1.1 thorpej #define op_s4subq 0x2b
304 1.1 thorpej #define op_cmpeq 0x2d
305 1.1 thorpej #define op_s8addq 0x32
306 1.1 thorpej #define op_s8subq 0x3b
307 1.1 thorpej #define op_cmpule 0x3d
308 1.1 thorpej #define op_addl_v 0x40
309 1.1 thorpej #define op_subl_v 0x49
310 1.1 thorpej #define op_cmplt 0x4d
311 1.1 thorpej #define op_addq_v 0x60
312 1.1 thorpej #define op_subq_v 0x69
313 1.1 thorpej #define op_cmple 0x6d
314 1.1 thorpej
315 1.1 thorpej
316 1.1 thorpej /* LOGICAL, "function" opcodes (bits 5..11) */
317 1.1 thorpej
318 1.1 thorpej #define op_and 0x00
319 1.1 thorpej #define op_andnot 0x08 /* bic */
320 1.1 thorpej #define op_cmovlbs 0x14
321 1.1 thorpej #define op_cmovlbc 0x16
322 1.1 thorpej #define op_or 0x20 /* bis */
323 1.1 thorpej #define op_cmoveq 0x24
324 1.1 thorpej #define op_cmovne 0x26
325 1.1 thorpej #define op_ornot 0x28
326 1.1 thorpej #define op_xor 0x40
327 1.1 thorpej #define op_cmovlt 0x44
328 1.1 thorpej #define op_cmovge 0x46
329 1.1 thorpej #define op_xornot 0x48 /* eqv */
330 1.1 thorpej #define op_amask 0x61
331 1.1 thorpej #define op_cmovle 0x64
332 1.1 thorpej #define op_cmovgt 0x66
333 1.1 thorpej #define op_implver 0x6c
334 1.1 thorpej
335 1.1 thorpej /* BIT, "function" opcodes (bits 5..11) */
336 1.1 thorpej
337 1.1 thorpej #define op_mskbl 0x02
338 1.1 thorpej #define op_extbl 0x06
339 1.1 thorpej #define op_insbl 0x0b
340 1.1 thorpej #define op_mskwl 0x12
341 1.1 thorpej #define op_extwl 0x16
342 1.1 thorpej #define op_inswl 0x1b
343 1.1 thorpej #define op_mskll 0x22
344 1.1 thorpej #define op_extll 0x26
345 1.1 thorpej #define op_insll 0x2b
346 1.1 thorpej #define op_zap 0x30
347 1.1 thorpej #define op_zapnot 0x31
348 1.1 thorpej #define op_mskql 0x32
349 1.1 thorpej #define op_srl 0x34
350 1.1 thorpej #define op_extql 0x36
351 1.1 thorpej #define op_sll 0x39
352 1.1 thorpej #define op_insql 0x3b
353 1.1 thorpej #define op_sra 0x3c
354 1.1 thorpej #define op_mskwh 0x52
355 1.1 thorpej #define op_inswh 0x57
356 1.1 thorpej #define op_extwh 0x5a
357 1.1 thorpej #define op_msklh 0x62
358 1.1 thorpej #define op_inslh 0x67
359 1.1 thorpej #define op_extlh 0x6a
360 1.1 thorpej #define op_mskqh 0x72
361 1.1 thorpej #define op_insqh 0x77
362 1.1 thorpej #define op_extqh 0x7a
363 1.1 thorpej
364 1.1 thorpej /* MUL, "function" opcodes (bits 5..11) */
365 1.1 thorpej
366 1.1 thorpej #define op_mull 0x00
367 1.1 thorpej #define op_mulq_v 0x60
368 1.1 thorpej #define op_mull_v 0x40
369 1.1 thorpej #define op_umulh 0x30
370 1.1 thorpej #define op_mulq 0x20
371 1.1 thorpej
372 1.1 thorpej
373 1.1 thorpej /* SPECIAL, "displacement" opcodes (bits 0..15) */
374 1.1 thorpej
375 1.1 thorpej #define op_trapb 0x0000
376 1.1 thorpej #define op_excb 0x0400
377 1.1 thorpej #define op_mb 0x4000
378 1.1 thorpej #define op_wmb 0x4400
379 1.1 thorpej #define op_fetch 0x8000
380 1.1 thorpej #define op_fetch_m 0xa000
381 1.1 thorpej #define op_rpcc 0xc000
382 1.1 thorpej #define op_rc 0xe000
383 1.1 thorpej #define op_ecb 0xe800
384 1.1 thorpej #define op_rs 0xf000
385 1.1 thorpej #define op_wh64 0xf800
386 1.1 thorpej
387 1.1 thorpej /* JUMP, "action" opcodes (bits 14..15) */
388 1.1 thorpej
389 1.1 thorpej #define op_jmp 0x0
390 1.1 thorpej #define op_jsr 0x1
391 1.1 thorpej #define op_ret 0x2
392 1.1 thorpej #define op_jcr 0x3
393 1.1 thorpej
394 1.1 thorpej /* INTMISC, "function" opcodes (operate format) */
395 1.1 thorpej
396 1.1 thorpej #define op_sextb 0x00
397 1.1 thorpej #define op_sextw 0x01
398 1.1 thorpej #define op_ctpop 0x30
399 1.1 thorpej #define op_perr 0x31
400 1.1 thorpej #define op_ctlz 0x32
401 1.1 thorpej #define op_cttz 0x33
402 1.1 thorpej #define op_unpkbw 0x34
403 1.1 thorpej #define op_unpkbl 0x35
404 1.1 thorpej #define op_pkwb 0x36
405 1.1 thorpej #define op_pklb 0x37
406 1.1 thorpej #define op_minsb8 0x38
407 1.1 thorpej #define op_minsw4 0x39
408 1.1 thorpej #define op_minub8 0x3a
409 1.1 thorpej #define op_minuw4 0x3b
410 1.1 thorpej #define op_maxub8 0x3c
411 1.1 thorpej #define op_maxuw4 0x3d
412 1.1 thorpej #define op_maxsb8 0x3e
413 1.1 thorpej #define op_maxsw4 0x3f
414 1.1 thorpej #define op_ftoit 0x70
415 1.1 thorpej #define op_ftois 0x78
416 1.1 thorpej
417 1.1 thorpej /*
418 1.1 thorpej *
419 1.1 thorpej * Encoding of floating point instructions (pagg. C-5..6 op cit)
420 1.1 thorpej *
421 1.1 thorpej * Load and store operations use opcodes op_ldf..op_stt
422 1.1 thorpej */
423 1.1 thorpej
424 1.1 thorpej /* src encoding from function, 9..10 */
425 1.1 thorpej #define op_src_sf 0
426 1.1 thorpej #define op_src_xd 1
427 1.1 thorpej #define op_src_tg 2
428 1.1 thorpej #define op_src_qq 3
429 1.1 thorpej
430 1.1 thorpej /* any FLOAT, "function" opcodes (bits 5..11) */
431 1.1 thorpej
432 1.1 thorpej #define op_cvtlq 0x010
433 1.1 thorpej #define op_cpys 0x020
434 1.1 thorpej #define op_cpysn 0x021
435 1.1 thorpej #define op_cpyse 0x022
436 1.1 thorpej #define op_mt_fpcr 0x024
437 1.1 thorpej #define op_mf_fpcr 0x025
438 1.1 thorpej #define op_fcmoveq 0x02a
439 1.1 thorpej #define op_fcmovne 0x02b
440 1.1 thorpej #define op_fcmovlt 0x02c
441 1.1 thorpej #define op_fcmovge 0x02d
442 1.1 thorpej #define op_fcmovle 0x02e
443 1.1 thorpej #define op_fcmovgt 0x02f
444 1.1 thorpej #define op_cvtql 0x030
445 1.1 thorpej #define op_cvtql_v 0x130
446 1.1 thorpej #define op_cvtql_sv 0x530
447 1.1 thorpej
448 1.1 thorpej /* FIX FLOAT, "function" opcodes (bits 5..11) */
449 1.1 thorpej
450 1.1 thorpej #define op_itofs 0x004
451 1.1 thorpej #define op_itoff 0x014
452 1.1 thorpej #define op_itoft 0x024
453 1.1 thorpej
454 1.1 thorpej /* ieee FLOAT, "function" opcodes (bits 5..11) */
455 1.1 thorpej
456 1.1 thorpej #define op_adds_c 0x000
457 1.1 thorpej #define op_subs_c 0x001
458 1.1 thorpej #define op_muls_c 0x002
459 1.1 thorpej #define op_divs_c 0x003
460 1.1 thorpej #define op_addt_c 0x020
461 1.1 thorpej #define op_subt_c 0x021
462 1.1 thorpej #define op_mult_c 0x022
463 1.1 thorpej #define op_divt_c 0x023
464 1.1 thorpej #define op_cvtts_c 0x02c
465 1.1 thorpej #define op_cvttq_c 0x02f
466 1.1 thorpej #define op_cvtqs_c 0x03c
467 1.1 thorpej #define op_cvtqt_c 0x03e
468 1.1 thorpej #define op_adds_m 0x040
469 1.1 thorpej #define op_subs_m 0x041
470 1.1 thorpej #define op_muls_m 0x042
471 1.1 thorpej #define op_divs_m 0x043
472 1.1 thorpej #define op_addt_m 0x060
473 1.1 thorpej #define op_subt_m 0x061
474 1.1 thorpej #define op_mult_m 0x062
475 1.1 thorpej #define op_divt_m 0x063
476 1.1 thorpej #define op_cvtts_m 0x06c
477 1.1 thorpej #define op_cvtqs_m 0x07c
478 1.1 thorpej #define op_cvtqt_m 0x07e
479 1.1 thorpej #define op_adds 0x080
480 1.1 thorpej #define op_subs 0x081
481 1.1 thorpej #define op_muls 0x082
482 1.1 thorpej #define op_divs 0x083
483 1.1 thorpej #define op_addt 0x0a0
484 1.1 thorpej #define op_subt 0x0a1
485 1.1 thorpej #define op_mult 0x0a2
486 1.1 thorpej #define op_divt 0x0a3
487 1.1 thorpej #define op_cmptun 0x0a4
488 1.1 thorpej #define op_cmpteq 0x0a5
489 1.1 thorpej #define op_cmptlt 0x0a6
490 1.1 thorpej #define op_cmptle 0x0a7
491 1.1 thorpej #define op_cvtts 0x0ac
492 1.1 thorpej #define op_cvttq 0x0af
493 1.1 thorpej #define op_cvtqs 0x0bc
494 1.1 thorpej #define op_cvtqt 0x0be
495 1.1 thorpej #define op_adds_d 0x0c0
496 1.1 thorpej #define op_subs_d 0x0c1
497 1.1 thorpej #define op_muls_d 0x0c2
498 1.1 thorpej #define op_divs_d 0x0c3
499 1.1 thorpej #define op_addt_d 0x0e0
500 1.1 thorpej #define op_subt_d 0x0e1
501 1.1 thorpej #define op_mult_d 0x0e2
502 1.1 thorpej #define op_divt_d 0x0e3
503 1.1 thorpej #define op_cvtts_d 0x0ec
504 1.1 thorpej #define op_cvtqs_d 0x0fc
505 1.1 thorpej #define op_cvtqt_d 0x0fe
506 1.1 thorpej #define op_adds_uc 0x100
507 1.1 thorpej #define op_subs_uc 0x101
508 1.1 thorpej #define op_muls_uc 0x102
509 1.1 thorpej #define op_divs_uc 0x103
510 1.1 thorpej #define op_addt_uc 0x120
511 1.1 thorpej #define op_subt_uc 0x121
512 1.1 thorpej #define op_mult_uc 0x122
513 1.1 thorpej #define op_divt_uc 0x123
514 1.1 thorpej #define op_cvtts_uc 0x12c
515 1.1 thorpej #define op_cvttq_vc 0x12f
516 1.1 thorpej #define op_adds_um 0x140
517 1.1 thorpej #define op_subs_um 0x141
518 1.1 thorpej #define op_muls_um 0x142
519 1.1 thorpej #define op_divs_um 0x143
520 1.1 thorpej #define op_addt_um 0x160
521 1.1 thorpej #define op_subt_um 0x161
522 1.1 thorpej #define op_mult_um 0x162
523 1.1 thorpej #define op_divt_um 0x163
524 1.1 thorpej #define op_cvtts_um 0x16c
525 1.1 thorpej #define op_adds_u 0x180
526 1.1 thorpej #define op_subs_u 0x181
527 1.1 thorpej #define op_muls_u 0x182
528 1.1 thorpej #define op_divs_u 0x183
529 1.1 thorpej #define op_addt_u 0x1a0
530 1.1 thorpej #define op_subt_u 0x1a1
531 1.1 thorpej #define op_mult_u 0x1a2
532 1.1 thorpej #define op_divt_u 0x1a3
533 1.1 thorpej #define op_cvtts_u 0x1ac
534 1.1 thorpej #define op_cvttq_v 0x1af
535 1.1 thorpej #define op_adds_ud 0x1c0
536 1.1 thorpej #define op_subs_ud 0x1c1
537 1.1 thorpej #define op_muls_ud 0x1c2
538 1.1 thorpej #define op_divs_ud 0x1c3
539 1.1 thorpej #define op_addt_ud 0x1e0
540 1.1 thorpej #define op_subt_ud 0x1e1
541 1.1 thorpej #define op_mult_ud 0x1e2
542 1.1 thorpej #define op_divt_ud 0x1e3
543 1.1 thorpej #define op_cvtts_ud 0x1ec
544 1.1 thorpej #define op_cvtst 0x2ac
545 1.1 thorpej #define op_adds_suc 0x500
546 1.1 thorpej #define op_subs_suc 0x501
547 1.1 thorpej #define op_muls_suc 0x502
548 1.1 thorpej #define op_divs_suc 0x503
549 1.1 thorpej #define op_addt_suc 0x520
550 1.1 thorpej #define op_subt_suc 0x521
551 1.1 thorpej #define op_mult_suc 0x522
552 1.1 thorpej #define op_divt_suc 0x523
553 1.1 thorpej #define op_cvtts_suc 0x52c
554 1.1 thorpej #define op_cvttq_svc 0x52f
555 1.1 thorpej #define op_adds_sum 0x540
556 1.1 thorpej #define op_subs_sum 0x541
557 1.1 thorpej #define op_muls_sum 0x542
558 1.1 thorpej #define op_divs_sum 0x543
559 1.1 thorpej #define op_addt_sum 0x560
560 1.1 thorpej #define op_subt_sum 0x561
561 1.1 thorpej #define op_mult_sum 0x562
562 1.1 thorpej #define op_divt_sum 0x563
563 1.1 thorpej #define op_cvtts_sum 0x56c
564 1.1 thorpej #define op_adds_su 0x580
565 1.1 thorpej #define op_subs_su 0x581
566 1.1 thorpej #define op_muls_su 0x582
567 1.1 thorpej #define op_divs_su 0x583
568 1.1 thorpej #define op_addt_su 0x5a0
569 1.1 thorpej #define op_subt_su 0x5a1
570 1.1 thorpej #define op_mult_su 0x5a2
571 1.1 thorpej #define op_divt_su 0x5a3
572 1.1 thorpej #define op_cmptun_su 0x5a4
573 1.1 thorpej #define op_cmpteq_su 0x5a5
574 1.1 thorpej #define op_cmptlt_su 0x5a6
575 1.1 thorpej #define op_cmptle_su 0x5a7
576 1.1 thorpej #define op_cvtts_su 0x5ac
577 1.1 thorpej #define op_cvttq_sv 0x5af
578 1.1 thorpej #define op_adds_sud 0x5c0
579 1.1 thorpej #define op_subs_sud 0x5c1
580 1.1 thorpej #define op_muls_sud 0x5c2
581 1.1 thorpej #define op_divs_sud 0x5c3
582 1.1 thorpej #define op_addt_sud 0x5e0
583 1.1 thorpej #define op_subt_sud 0x5e1
584 1.1 thorpej #define op_mult_sud 0x5e2
585 1.1 thorpej #define op_divt_sud 0x5e3
586 1.1 thorpej #define op_cvtts_sud 0x5ec
587 1.1 thorpej #define op_cvtst_u 0x6ac
588 1.1 thorpej #define op_adds_suic 0x700
589 1.1 thorpej #define op_subs_suic 0x701
590 1.1 thorpej #define op_muls_suic 0x702
591 1.1 thorpej #define op_divs_suic 0x703
592 1.1 thorpej #define op_addt_suic 0x720
593 1.1 thorpej #define op_subt_suic 0x721
594 1.1 thorpej #define op_mult_suic 0x722
595 1.1 thorpej #define op_divt_suic 0x723
596 1.1 thorpej #define op_cvtts_suic 0x72c
597 1.1 thorpej #define op_cvttq_svic 0x72f
598 1.1 thorpej #define op_cvtqs_suic 0x73c
599 1.1 thorpej #define op_cvtqt_suic 0x73e
600 1.1 thorpej #define op_adds_suim 0x740
601 1.1 thorpej #define op_subs_suim 0x741
602 1.1 thorpej #define op_muls_suim 0x742
603 1.1 thorpej #define op_divs_suim 0x743
604 1.1 thorpej #define op_addt_suim 0x760
605 1.1 thorpej #define op_subt_suim 0x761
606 1.1 thorpej #define op_mult_suim 0x762
607 1.1 thorpej #define op_divt_suim 0x763
608 1.1 thorpej #define op_cvtts_suim 0x76c
609 1.1 thorpej #define op_cvtqs_suim 0x77c
610 1.1 thorpej #define op_cvtqt_suim 0x77e
611 1.1 thorpej #define op_adds_sui 0x780
612 1.1 thorpej #define op_subs_sui 0x781
613 1.1 thorpej #define op_muls_sui 0x782
614 1.1 thorpej #define op_divs_sui 0x783
615 1.1 thorpej #define op_addt_sui 0x7a0
616 1.1 thorpej #define op_subt_sui 0x7a1
617 1.1 thorpej #define op_mult_sui 0x7a2
618 1.1 thorpej #define op_divt_sui 0x7a3
619 1.1 thorpej #define op_cvtts_sui 0x7ac
620 1.1 thorpej #define op_cvttq_svi 0x7af
621 1.1 thorpej #define op_cvtqs_sui 0x7bc
622 1.1 thorpej #define op_cvtqt_sui 0x7be
623 1.1 thorpej #define op_adds_suid 0x7c0
624 1.1 thorpej #define op_subs_suid 0x7c1
625 1.1 thorpej #define op_muls_suid 0x7c2
626 1.1 thorpej #define op_divs_suid 0x7c3
627 1.1 thorpej #define op_addt_suid 0x7e0
628 1.1 thorpej #define op_subt_suid 0x7e1
629 1.1 thorpej #define op_mult_suid 0x7e2
630 1.1 thorpej #define op_divt_suid 0x7e3
631 1.1 thorpej #define op_cvtts_suid 0x7ec
632 1.1 thorpej #define op_cvtqs_suid 0x7fc
633 1.1 thorpej #define op_cvtqt_suid 0x7fe
634 1.1 thorpej
635 1.1 thorpej
636 1.1 thorpej /* vax FLOAT, "function" opcodes (bits 5..11) */
637 1.1 thorpej
638 1.1 thorpej #define op_addf_c 0x000
639 1.1 thorpej #define op_subf_c 0x001
640 1.1 thorpej #define op_mulf_c 0x002
641 1.1 thorpej #define op_divf_c 0x003
642 1.1 thorpej #define op_cvtdg_c 0x01e
643 1.1 thorpej #define op_addg_c 0x020
644 1.1 thorpej #define op_subg_c 0x021
645 1.1 thorpej #define op_mulg_c 0x022
646 1.1 thorpej #define op_divg_c 0x023
647 1.1 thorpej #define op_cvtgf_c 0x02c
648 1.1 thorpej #define op_cvtgd_c 0x02d
649 1.1 thorpej #define op_cvtgqg_c 0x02f
650 1.1 thorpej #define op_cvtqf_c 0x03c
651 1.1 thorpej #define op_cvtqg_c 0x03e
652 1.1 thorpej #define op_addf 0x080
653 1.1 thorpej #define op_subf 0x081
654 1.1 thorpej #define op_mulf 0x082
655 1.1 thorpej #define op_divf 0x083
656 1.1 thorpej #define op_cvtdg 0x09e
657 1.1 thorpej #define op_addg 0x0a0
658 1.1 thorpej #define op_subg 0x0a1
659 1.1 thorpej #define op_mulg 0x0a2
660 1.1 thorpej #define op_divg 0x0a3
661 1.1 thorpej #define op_cmpgeq 0x0a5
662 1.1 thorpej #define op_cmpglt 0x0a6
663 1.1 thorpej #define op_cmpgle 0x0a7
664 1.1 thorpej #define op_cvtgf 0x0ac
665 1.1 thorpej #define op_cvtgd 0x0ad
666 1.1 thorpej #define op_cvtgq 0x0af
667 1.1 thorpej #define op_cvtqf 0x0bc
668 1.1 thorpej #define op_cvtqg 0x0be
669 1.1 thorpej #define op_addf_uc 0x100
670 1.1 thorpej #define op_subf_uc 0x101
671 1.1 thorpej #define op_mulf_uc 0x102
672 1.1 thorpej #define op_divf_uc 0x103
673 1.1 thorpej #define op_cvtdg_uc 0x11e
674 1.1 thorpej #define op_addg_uc 0x120
675 1.1 thorpej #define op_subg_uc 0x121
676 1.1 thorpej #define op_mulg_uc 0x122
677 1.1 thorpej #define op_divg_uc 0x123
678 1.1 thorpej #define op_cvtgf_uc 0x12c
679 1.1 thorpej #define op_cvtgd_uc 0x12d
680 1.1 thorpej #define op_cvtgqg_vc 0x12f
681 1.1 thorpej #define op_addf_u 0x180
682 1.1 thorpej #define op_subf_u 0x181
683 1.1 thorpej #define op_mulf_u 0x182
684 1.1 thorpej #define op_divf_u 0x183
685 1.1 thorpej #define op_cvtdg_u 0x19e
686 1.1 thorpej #define op_addg_u 0x1a0
687 1.1 thorpej #define op_subg_u 0x1a1
688 1.1 thorpej #define op_mulg_u 0x1a2
689 1.1 thorpej #define op_divg_u 0x1a3
690 1.1 thorpej #define op_cvtgf_u 0x1ac
691 1.1 thorpej #define op_cvtgd_u 0x1ad
692 1.1 thorpej #define op_cvtgqg_v 0x1af
693 1.1 thorpej #define op_addf_sc 0x400
694 1.1 thorpej #define op_subf_sc 0x401
695 1.1 thorpej #define op_mulf_sc 0x402
696 1.1 thorpej #define op_divf_sc 0x403
697 1.1 thorpej #define op_cvtdg_sc 0x41e
698 1.1 thorpej #define op_addg_sc 0x420
699 1.1 thorpej #define op_subg_sc 0x421
700 1.1 thorpej #define op_mulg_sc 0x422
701 1.1 thorpej #define op_divg_sc 0x423
702 1.1 thorpej #define op_cvtgf_sc 0x42c
703 1.1 thorpej #define op_cvtgd_sc 0x42d
704 1.1 thorpej #define op_cvtgqg_sc 0x42f
705 1.1 thorpej #define op_cvtqf_sc 0x43c
706 1.1 thorpej #define op_cvtqg_sc 0x43e
707 1.1 thorpej #define op_addf_s 0x480
708 1.1 thorpej #define op_subf_s 0x481
709 1.1 thorpej #define op_mulf_s 0x482
710 1.1 thorpej #define op_divf_s 0x483
711 1.1 thorpej #define op_cvtdg_s 0x49e
712 1.1 thorpej #define op_addg_s 0x4a0
713 1.1 thorpej #define op_subg_s 0x4a1
714 1.1 thorpej #define op_mulg_s 0x4a2
715 1.1 thorpej #define op_divg_s 0x4a3
716 1.1 thorpej #define op_cmpgeq_s 0x4a5
717 1.1 thorpej #define op_cmpglt_s 0x4a6
718 1.1 thorpej #define op_cmpgle_s 0x4a7
719 1.1 thorpej #define op_cvtgf_s 0x4ac
720 1.1 thorpej #define op_cvtgd_s 0x4ad
721 1.1 thorpej #define op_cvtgqg_s 0x4af
722 1.1 thorpej #define op_cvtqf_s 0x4bc
723 1.1 thorpej #define op_cvtqg_s 0x4be
724 1.1 thorpej #define op_addf_suc 0x500
725 1.1 thorpej #define op_subf_suc 0x501
726 1.1 thorpej #define op_mulf_suc 0x502
727 1.1 thorpej #define op_divf_suc 0x503
728 1.1 thorpej #define op_cvtdg_suc 0x51e
729 1.1 thorpej #define op_addg_suc 0x520
730 1.1 thorpej #define op_subg_suc 0x521
731 1.1 thorpej #define op_mulg_suc 0x522
732 1.1 thorpej #define op_divg_suc 0x523
733 1.1 thorpej #define op_cvtgf_suc 0x52c
734 1.1 thorpej #define op_cvtgd_suc 0x52d
735 1.1 thorpej #define op_cvtgqg_svc 0x52f
736 1.1 thorpej #define op_addf_su 0x580
737 1.1 thorpej #define op_subf_su 0x581
738 1.1 thorpej #define op_mulf_su 0x582
739 1.1 thorpej #define op_divf_su 0x583
740 1.1 thorpej #define op_cvtdg_su 0x59e
741 1.1 thorpej #define op_addg_su 0x5a0
742 1.1 thorpej #define op_subg_su 0x5a1
743 1.1 thorpej #define op_mulg_su 0x5a2
744 1.1 thorpej #define op_divg_su 0x5a3
745 1.1 thorpej #define op_cvtgf_su 0x5ac
746 1.1 thorpej #define op_cvtgd_su 0x5ad
747 1.1 thorpej #define op_cvtgqg_sv 0x5af
748 1.1 thorpej
749 1.1 thorpej #ifdef _KERNEL
750 1.1 thorpej struct alpha_print_instruction_context {
751 1.1 thorpej unsigned long pc; /* address of insn */
752 1.1 thorpej alpha_instruction insn; /* instruction bits */
753 1.1 thorpej char *buf; /* output buffer (if not DDB) */
754 1.1 thorpej size_t bufsize; /* size of output buffer */
755 1.1 thorpej size_t cursor; /* current next output location */
756 1.1 thorpej };
757 1.1 thorpej
758 1.1 thorpej int alpha_print_instruction(struct alpha_print_instruction_context *);
759 1.1 thorpej #endif /* _KERNEL */
760 1.1 thorpej
761 1.1 thorpej #endif /* _ALPHA_INSTRUCTION_H_ */
762