xref: /netbsd-src/external/gpl3/gdb.old/dist/include/opcode/visium.h (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1a5a4af3bSchristos /* Opcode table header for Visium.
2a5a4af3bSchristos 
3*8b657b07Schristos    Copyright (C) 2003-2022 Free Software Foundation, Inc.
4a5a4af3bSchristos 
5a5a4af3bSchristos    This file is part of GDB, GAS, and GNU binutils.
6a5a4af3bSchristos 
7a5a4af3bSchristos    GDB, GAS and the GNU binutils are free software; you can redistribute
8a5a4af3bSchristos    them and/or modify them under the terms of the GNU General Public
9a5a4af3bSchristos    License as published by the Free Software Foundation; either version 3,
10a5a4af3bSchristos    or (at your option) any later version.
11a5a4af3bSchristos 
12a5a4af3bSchristos    GDB, GAS, and the GNU binutils are distributed in the hope that they
13a5a4af3bSchristos    will be useful, but WITHOUT ANY WARRANTY; without even the implied
14a5a4af3bSchristos    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
15a5a4af3bSchristos    the GNU General Public License for more details.
16a5a4af3bSchristos 
17a5a4af3bSchristos    You should have received a copy of the GNU General Public License
18a5a4af3bSchristos    along with this file; see the file COPYING3.  If not, write to the Free
19a5a4af3bSchristos    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
20a5a4af3bSchristos    MA 02110-1301, USA.  */
21a5a4af3bSchristos 
22a5a4af3bSchristos enum visium_opcode_arch_val
23a5a4af3bSchristos {
24a5a4af3bSchristos   VISIUM_OPCODE_ARCH_DEF = 0,
25a5a4af3bSchristos   VISIUM_OPCODE_ARCH_GR5,
26a5a4af3bSchristos   VISIUM_OPCODE_ARCH_GR6,
27a5a4af3bSchristos   VISIUM_OPCODE_ARCH_BAD
28a5a4af3bSchristos };
29a5a4af3bSchristos 
30a5a4af3bSchristos /* The highest architecture in the table.  */
31a5a4af3bSchristos #define VISIUM_OPCODE_ARCH_MAX (VISIUM_OPCODE_ARCH_BAD - 1)
32a5a4af3bSchristos 
33a5a4af3bSchristos /* Given an enum visium_opcode_arch_val, return the bitmask to use in
34a5a4af3bSchristos    insn encoding/decoding.  */
35a5a4af3bSchristos #define VISIUM_OPCODE_ARCH_MASK(arch) (1 << (arch))
36a5a4af3bSchristos 
37a5a4af3bSchristos /* Some defines to make life easy.  */
38a5a4af3bSchristos #define MASK_DEF VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_DEF)
39a5a4af3bSchristos #define MASK_GR5 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR5)
40a5a4af3bSchristos #define MASK_GR6 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR6)
41a5a4af3bSchristos 
42a5a4af3bSchristos /* Bit masks of architectures supporting the insn.  */
43a5a4af3bSchristos #define def (MASK_DEF | MASK_GR5 | MASK_GR6)
44a5a4af3bSchristos #define gr5 (MASK_GR5 | MASK_GR6)
45a5a4af3bSchristos #define gr6 (MASK_GR6)
46a5a4af3bSchristos 
47a5a4af3bSchristos /* The condition code field is not used (zero) for most instructions.
48a5a4af3bSchristos    BRR and BRA make normal use of it. Floating point instructions use
49a5a4af3bSchristos    it as a sub-opcode.  */
50a5a4af3bSchristos #define CC_MASK (0xf << 27)
51a5a4af3bSchristos 
52a5a4af3bSchristos /* It seems a shame not to use these bits in a class 0 instruction,
53a5a4af3bSchristos    since they could be used to extend the range of the branch.  */
54a5a4af3bSchristos #define CLASS0_UNUSED_MASK (0x1f << 16)
55a5a4af3bSchristos 
56a5a4af3bSchristos /* For class 1 instructions the following bit is unused.  */
57a5a4af3bSchristos #define CLASS1_UNUSED_MASK (1 << 9)
58a5a4af3bSchristos 
59a5a4af3bSchristos /* For class 1 instructions this field gives the index for a write
60a5a4af3bSchristos    instruction, the specific operation for an EAM instruction, or
61a5a4af3bSchristos    the floating point destination register for a floating point
62a5a4af3bSchristos    instruction.  */
63a5a4af3bSchristos #define CLASS1_INDEX_MASK (0x1f << 10)
64a5a4af3bSchristos 
65a5a4af3bSchristos /* For class 3 instructions the following field gives the destination
66a5a4af3bSchristos    general register.  */
67a5a4af3bSchristos #define CLASS3_DEST_MASK (0x1f << 10)
68a5a4af3bSchristos 
69a5a4af3bSchristos /* For class 1 and class 3 instructions the following bit selects an
70a5a4af3bSchristos    EAM write/read rather than a memory write/read.  */
71a5a4af3bSchristos #define EAM_SELECT_MASK (1 << 15)
72a5a4af3bSchristos 
73a5a4af3bSchristos /* Floating point instructions are distinguished from general EAM
74a5a4af3bSchristos    instructions by the following bit.  */
75a5a4af3bSchristos #define FP_SELECT_MASK (1 << 3)
76a5a4af3bSchristos 
77a5a4af3bSchristos /* For both class 1 and class 3 the following fields give, where
78a5a4af3bSchristos    appropriate the srcA and srcB registers whether floating point
79a5a4af3bSchristos    or general.  */
80a5a4af3bSchristos #define SRCA_MASK (0x1f << 16)
81a5a4af3bSchristos #define SRCB_MASK (0x1f << 4)
82a5a4af3bSchristos 
83a5a4af3bSchristos /* The class 3 interrupt bit. It turns a BRA into a SYS1, and an
84a5a4af3bSchristos    RFLAG into a SYS2. This bit should not be set in the user's
85a5a4af3bSchristos    class 3 instructions. This bit is also used in class 3
86a5a4af3bSchristos    to distinguish between floating point and other EAM operations.
87a5a4af3bSchristos    (see FP_SELECT_MASK).  */
88a5a4af3bSchristos #define CLASS3_INT (1 << 3)
89a5a4af3bSchristos 
90a5a4af3bSchristos /* Class 3 shift instructions use this bit to indicate that the
91a5a4af3bSchristos    srcB field is a 5 bit immediate shift count rather than a
92a5a4af3bSchristos    register number.  */
93a5a4af3bSchristos #define CLASS3_SOURCEB_IMMED (1 << 9)
94a5a4af3bSchristos 
95a5a4af3bSchristos #define BMD 0x02630004
96a5a4af3bSchristos #define BMI 0x82230004
97a5a4af3bSchristos #define DSI 0x82800004
98a5a4af3bSchristos #define ENI 0x02a00004
99a5a4af3bSchristos #define RFI 0x82fe01d4
100a5a4af3bSchristos 
101a5a4af3bSchristos struct reg_entry
102a5a4af3bSchristos {
103e5cb852cSchristos   const char *name;
104a5a4af3bSchristos   unsigned char code;
105a5a4af3bSchristos };
106a5a4af3bSchristos 
107e5cb852cSchristos static const struct reg_entry gen_reg_table[] ATTRIBUTE_UNUSED =
108a5a4af3bSchristos {
109a5a4af3bSchristos   {"fp", 0x16},
110a5a4af3bSchristos   {"r0", 0x0},
111a5a4af3bSchristos   {"r1", 0x1},
112a5a4af3bSchristos   {"r10", 0xA},
113a5a4af3bSchristos   {"r11", 0xB},
114a5a4af3bSchristos   {"r12", 0xC},
115a5a4af3bSchristos   {"r13", 0xD},
116a5a4af3bSchristos   {"r14", 0xE},
117a5a4af3bSchristos   {"r15", 0xF},
118a5a4af3bSchristos   {"r16", 0x10},
119a5a4af3bSchristos   {"r17", 0x11},
120a5a4af3bSchristos   {"r18", 0x12},
121a5a4af3bSchristos   {"r19", 0x13},
122a5a4af3bSchristos   {"r2", 0x2},
123a5a4af3bSchristos   {"r20", 0x14},
124a5a4af3bSchristos   {"r21", 0x15},
125a5a4af3bSchristos   {"r22", 0x16},
126a5a4af3bSchristos   {"r23", 0x17},
127a5a4af3bSchristos   {"r24", 0x18},
128a5a4af3bSchristos   {"r25", 0x19},
129a5a4af3bSchristos   {"r26", 0x1a},
130a5a4af3bSchristos   {"r27", 0x1b},
131a5a4af3bSchristos   {"r28", 0x1c},
132a5a4af3bSchristos   {"r29", 0x1d},
133a5a4af3bSchristos   {"r3", 0x3},
134a5a4af3bSchristos   {"r30", 0x1e},
135a5a4af3bSchristos   {"r31", 0x1f},
136a5a4af3bSchristos   {"r4", 0x4},
137a5a4af3bSchristos   {"r5", 0x5},
138a5a4af3bSchristos   {"r6", 0x6},
139a5a4af3bSchristos   {"r7", 0x7},
140a5a4af3bSchristos   {"r8", 0x8},
141a5a4af3bSchristos   {"r9", 0x9},
142a5a4af3bSchristos   {"sp", 0x17},
143a5a4af3bSchristos };
144a5a4af3bSchristos 
145e5cb852cSchristos static const struct reg_entry fp_reg_table[] ATTRIBUTE_UNUSED =
146a5a4af3bSchristos {
147a5a4af3bSchristos   {"f0", 0x0},
148a5a4af3bSchristos   {"f1", 0x1},
149a5a4af3bSchristos   {"f10", 0xa},
150a5a4af3bSchristos   {"f11", 0xb},
151a5a4af3bSchristos   {"f12", 0xc},
152a5a4af3bSchristos   {"f13", 0xd},
153a5a4af3bSchristos   {"f14", 0xe},
154a5a4af3bSchristos   {"f15", 0xf},
155a5a4af3bSchristos   {"f2", 0x2},
156a5a4af3bSchristos   {"f3", 0x3},
157a5a4af3bSchristos   {"f4", 0x4},
158a5a4af3bSchristos   {"f5", 0x5},
159a5a4af3bSchristos   {"f6", 0x6},
160a5a4af3bSchristos   {"f7", 0x7},
161a5a4af3bSchristos   {"f8", 0x8},
162a5a4af3bSchristos   {"f9", 0x9},
163a5a4af3bSchristos };
164a5a4af3bSchristos 
165e5cb852cSchristos static const struct cc_entry
166a5a4af3bSchristos {
167e5cb852cSchristos   const char *name;
168a5a4af3bSchristos   int code;
169e5cb852cSchristos } cc_table [] ATTRIBUTE_UNUSED =
170a5a4af3bSchristos {
171a5a4af3bSchristos   {"cc", 6},
172a5a4af3bSchristos   {"cs", 2},
173a5a4af3bSchristos   {"eq", 1},
174a5a4af3bSchristos   {"fa", 0},
175a5a4af3bSchristos   {"ge", 9},
176a5a4af3bSchristos   {"gt", 10},
177a5a4af3bSchristos   {"hi", 11},
178a5a4af3bSchristos   {"le", 12},
179a5a4af3bSchristos   {"ls", 13},
180a5a4af3bSchristos   {"lt", 14},
181a5a4af3bSchristos   {"nc", 8},
182a5a4af3bSchristos   {"ne", 5},
183a5a4af3bSchristos   {"ns", 4},
184a5a4af3bSchristos   {"oc", 7},
185a5a4af3bSchristos   {"os", 3},
186a5a4af3bSchristos   {"tr", 15},
187a5a4af3bSchristos };
188a5a4af3bSchristos 
189a5a4af3bSchristos enum addressing_mode
190a5a4af3bSchristos {
191a5a4af3bSchristos   mode_d,	/* register := */
192a5a4af3bSchristos   mode_a,	/* op= register */
193a5a4af3bSchristos   mode_da,	/* register := register */
194a5a4af3bSchristos   mode_ab,	/* register * register */
195a5a4af3bSchristos   mode_dab,	/* register := register * register */
196a5a4af3bSchristos   mode_iab,	/* 5-bit immediate * register * register */
197a5a4af3bSchristos   mode_0ab,	/* zero * register * register */
198a5a4af3bSchristos   mode_da0,	/* register := register * zero */
199a5a4af3bSchristos   mode_cad,	/* condition * register * register */
200a5a4af3bSchristos   mode_das,	/* register := register * 5-bit immed/register shift count */
201a5a4af3bSchristos   mode_di,	/* register := 5-bit immediate */
202a5a4af3bSchristos   mode_ir,	/* 5-bit immediate * register */
203a5a4af3bSchristos   mode_ai,	/* register 16-bit unsigned immediate */
204a5a4af3bSchristos   mode_i,	/* 16-bit unsigned immediate */
205a5a4af3bSchristos   mode_bax,	/* register * register * 5-bit immediate */
206a5a4af3bSchristos   mode_dax,	/* register := register * 5-bit immediate */
207a5a4af3bSchristos   mode_s,	/* special mode */
208a5a4af3bSchristos   mode_sr,	/* special mode with register */
209a5a4af3bSchristos   mode_ci,	/* condition * 16-bit signed word displacement */
210a5a4af3bSchristos   mode_fdab,	/* float := float * float */
211a5a4af3bSchristos   mode_ifdab,	/* fpinst: 4-bit immediate * float * float * float */
212a5a4af3bSchristos   mode_idfab,	/* fpuread: 4-bit immediate * register * float * float */
213a5a4af3bSchristos   mode_fda,	/* float := float */
214a5a4af3bSchristos   mode_fdra,	/* float := register */
215a5a4af3bSchristos   mode_rdfab,	/* register := float * float */
216a5a4af3bSchristos   mode_rdfa,	/* register := float */
217a5a4af3bSchristos   mode_rrr,	/* 3 register sources and destinations (block move) */
218a5a4af3bSchristos };
219a5a4af3bSchristos 
220a5a4af3bSchristos #define class0 (0<<25)
221a5a4af3bSchristos #define class1 (1<<25)
222a5a4af3bSchristos #define class2 (2<<25)
223a5a4af3bSchristos #define class3 (3<<25)
224a5a4af3bSchristos 
225a5a4af3bSchristos static const struct opcode_entry
226a5a4af3bSchristos {
227e5cb852cSchristos   const char *mnem;
228a5a4af3bSchristos   enum addressing_mode mode;
229a5a4af3bSchristos   unsigned code;
230a5a4af3bSchristos   char flags;
231a5a4af3bSchristos }
232e5cb852cSchristos opcode_table[] ATTRIBUTE_UNUSED =
233a5a4af3bSchristos {
234a5a4af3bSchristos   { "adc.b",    mode_dab,  class3|(1<<21)|(1), def },
235a5a4af3bSchristos   { "adc.l",    mode_dab,  class3|(1<<21)|(4), def },
236a5a4af3bSchristos   { "adc.w",    mode_dab,  class3|(1<<21)|(2), def },
237a5a4af3bSchristos   { "add.b",    mode_dab,  class3|(0<<21)|(1), def },
238a5a4af3bSchristos   { "add.l",    mode_dab,  class3|(0<<21)|(4), def },
239a5a4af3bSchristos   { "add.w",    mode_dab,  class3|(0<<21)|(2), def },
240a5a4af3bSchristos   { "addi",     mode_ai,   class2, def },
241a5a4af3bSchristos   { "and.b",    mode_dab,  class3|(10<<21)|(1), def},
242a5a4af3bSchristos   { "and.l",    mode_dab,  class3|(10<<21)|(4), def },
243a5a4af3bSchristos   { "and.w",    mode_dab,  class3|(10<<21)|(2), def },
244a5a4af3bSchristos   { "asl.b",    mode_das,  class3|(7<<21)|(1), def },
245a5a4af3bSchristos   { "asl.l",    mode_das,  class3|(7<<21)|(4), def },
246a5a4af3bSchristos   { "asl.w",    mode_das,  class3|(7<<21)|(2), def },
247a5a4af3bSchristos   { "asld",     mode_a,    class1|(15<<21)|(1<<15)|(11<<10)|(4), def },
248a5a4af3bSchristos   { "asr.b",    mode_das,  class3|(5<<21)|(1), def },
249a5a4af3bSchristos   { "asr.l",    mode_das,  class3|(5<<21)|(4), def },
250a5a4af3bSchristos   { "asr.w",    mode_das,  class3|(5<<21)|(2), def },
251a5a4af3bSchristos   { "asrd",     mode_a,    class1|(15<<21)|(1<<15)|(9<<10)|(4), def },
252a5a4af3bSchristos   { "bmd",      mode_rrr,  class1|(3<<21)|(3<<16)|(4), gr6 },
253a5a4af3bSchristos   { "bmi",      mode_rrr,  class1|(1<<21)|(3<<16)|(4), gr6 },
254a5a4af3bSchristos   { "bra",      mode_cad,  class3|(12<<21)|(4), def },
255a5a4af3bSchristos   { "brr",      mode_ci,   class0, def },
256a5a4af3bSchristos   { "cmp.b",    mode_0ab,  class3|(2<<21)|(1), def },
257a5a4af3bSchristos   { "cmp.l",    mode_0ab,  class3|(2<<21)|(4), def },
258a5a4af3bSchristos   { "cmp.w",    mode_0ab,  class3|(2<<21)|(2), def },
259a5a4af3bSchristos   { "cmpc.b",   mode_0ab,  class3|(3<<21)|(1), def },
260a5a4af3bSchristos   { "cmpc.l",   mode_0ab,  class3|(3<<21)|(4), def },
261a5a4af3bSchristos   { "cmpc.w",   mode_0ab,  class3|(3<<21)|(2), def },
262a5a4af3bSchristos   { "divds",    mode_a,    class1|(15<<21)|(1<<15)|(6<<10)|(4), def },
263a5a4af3bSchristos   { "divdu",    mode_a,    class1|(15<<21)|(1<<15)|(7<<10)|(4), def },
264a5a4af3bSchristos   { "divs",     mode_a,    class1|(15<<21)|(1<<15)|(2<<10)|(4), def },
265a5a4af3bSchristos   { "divu",     mode_a,    class1|(15<<21)|(1<<15)|(3<<10)|(4), def },
266a5a4af3bSchristos   { "dsi",      mode_s,    class1|(4<<21)|(4), def },
267a5a4af3bSchristos   { "eamread",  mode_di,   class3|(15<<21)|(1<<15)|(1<<9)|(4), def },
268a5a4af3bSchristos   { "eamwrite", mode_iab,  class1|(15<<21)|(1<<15)|(4), def },
269a5a4af3bSchristos   { "eni",      mode_s,    class1|(5<<21)|(4), def },
270a5a4af3bSchristos   { "extb.b",   mode_da,   class3|(14<<21)|(1), def },
271a5a4af3bSchristos   { "extb.l",   mode_da,   class3|(14<<21)|(4), def },
272a5a4af3bSchristos   { "extb.w",   mode_da,   class3|(14<<21)|(2), def },
273a5a4af3bSchristos   { "extw.l",   mode_da,   class3|(4<<21)|(4), def },
274a5a4af3bSchristos   { "extw.w",   mode_da,   class3|(4<<21)|(2), def },
275a5a4af3bSchristos   { "fabs",     mode_fda,  class1|(7<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
276a5a4af3bSchristos   { "fadd",     mode_fdab, class1|(1<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
277a5a4af3bSchristos   { "fcmp",     mode_rdfab,class3|(10<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
278a5a4af3bSchristos   { "fcmpe",    mode_rdfab,class3|(11<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
279a5a4af3bSchristos   { "fdiv",     mode_fdab, class1|(4<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
280a5a4af3bSchristos   { "fload",    mode_fdra, class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
281a5a4af3bSchristos   { "fmove",    mode_fda,  class1|(12<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5},
282a5a4af3bSchristos   { "fmult",    mode_fdab, class1|(3<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
283a5a4af3bSchristos   { "fneg",     mode_fda,  class1|(6<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
284a5a4af3bSchristos   { "fpinst",   mode_ifdab,class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
285a5a4af3bSchristos   { "fpuread",  mode_idfab,class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
286a5a4af3bSchristos   { "fsqrt",    mode_fda,  class1|(5<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
287a5a4af3bSchristos   { "fstore",   mode_rdfa, class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
288a5a4af3bSchristos   { "fsub",     mode_fdab, class1|(2<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
289a5a4af3bSchristos   { "ftoi",     mode_fda,  class1|(8<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
290a5a4af3bSchristos   { "itof",     mode_fda,  class1|(9<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
291a5a4af3bSchristos   { "lsr.b",    mode_das,  class3|(6<<21)|(1), def },
292a5a4af3bSchristos   { "lsr.l",    mode_das,  class3|(6<<21)|(4), def },
293a5a4af3bSchristos   { "lsr.w",    mode_das,  class3|(6<<21)|(2), def },
294a5a4af3bSchristos   { "lsrd",     mode_a,    class1|(15<<21)|(1<<15)|(10<<10)|(4), def },
295a5a4af3bSchristos   { "move.b",   mode_da0,  class3|(9<<21)|(1), def },
296a5a4af3bSchristos   { "move.l",   mode_da0,  class3|(9<<21)|(4), def },
297a5a4af3bSchristos   { "move.w",   mode_da0,  class3|(9<<21)|(2), def },
298a5a4af3bSchristos   { "movil",    mode_ai,   class2|(4<<21), def },
299a5a4af3bSchristos   { "moviq",    mode_ai,   class2|(6<<21), def },
300a5a4af3bSchristos   { "moviu",    mode_ai,   class2|(5<<21), def },
301a5a4af3bSchristos   { "mults",    mode_ab,   class1|(15<<21)|(1<<15)|(0<<10)|(4), def },
302a5a4af3bSchristos   { "multu",    mode_ab,   class1|(15<<21)|(1<<15)|(1<<10)|(4), def },
303a5a4af3bSchristos   { "nop",      mode_s,    class0, def },
304a5a4af3bSchristos   { "not.b",    mode_da,   class3|(11<<21)|(1), def },
305a5a4af3bSchristos   { "not.l",    mode_da,   class3|(11<<21)|(4), def },
306a5a4af3bSchristos   { "not.w",    mode_da,   class3|(11<<21)|(2), def },
307a5a4af3bSchristos   { "or.b",     mode_dab,  class3|(9<<21)|(1), def },
308a5a4af3bSchristos   { "or.l",     mode_dab,  class3|(9<<21)|(4), def },
309a5a4af3bSchristos   { "or.w",     mode_dab,  class3|(9<<21)|(2), def },
310a5a4af3bSchristos   { "read.b",   mode_dax,  class3|(15<<21)|(1<<9)|(1), def },
311a5a4af3bSchristos   { "read.l",   mode_dax,  class3|(15<<21)|(1<<9)|(4), def },
312a5a4af3bSchristos   { "read.w",   mode_dax,  class3|(15<<21)|(1<<9)|(2), def },
313a5a4af3bSchristos   { "readmda",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(4), def },
314a5a4af3bSchristos   { "readmdb",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(1<<4)|(4), def },
315a5a4af3bSchristos   { "readmdc",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(2<<4)|(4), def },
316a5a4af3bSchristos   { "rfi",      mode_s,    class1|(7<<21)|(30<<16)|(29<<4)|(4), def },
317a5a4af3bSchristos   { "rflag",    mode_d,    class3|(13<<21)|(4), def },
318a5a4af3bSchristos   { "stop",     mode_ir,   class1|(0<<21)|(4), def },
319a5a4af3bSchristos   { "sub.b",    mode_dab,  class3|(2<<21)|(1), def },
320a5a4af3bSchristos   { "sub.l",    mode_dab,  class3|(2<<21)|(4), def },
321a5a4af3bSchristos   { "sub.w",    mode_dab,  class3|(2<<21)|(2), def },
322a5a4af3bSchristos   { "subc.b",   mode_dab,  class3|(3<<21)|(1), def },
323a5a4af3bSchristos   { "subc.l",   mode_dab,  class3|(3<<21)|(4), def },
324a5a4af3bSchristos   { "subc.w",   mode_dab,  class3|(3<<21)|(2), def },
325a5a4af3bSchristos   { "subi",     mode_ai,   class2|(2<<21), def },
326a5a4af3bSchristos   { "trace",    mode_ir,   class1|(13<<21), def },
327a5a4af3bSchristos   { "write.b",  mode_bax,  class1|(15<<21)|(1), def },
328a5a4af3bSchristos   { "write.l",  mode_bax,  class1|(15<<21)|(4), def },
329a5a4af3bSchristos   { "write.w",  mode_bax,  class1|(15<<21)|(2), def },
330a5a4af3bSchristos   { "writemd",  mode_ab,   class1|(15<<21)|(1<<15)|(4<<10)|(4), def },
331a5a4af3bSchristos   { "writemdc", mode_a,    class1|(15<<21)|(1<<15)|(5<<10)|(4), def },
332a5a4af3bSchristos   { "wrtl",     mode_i,    class2|(8<<21), gr6 },
333a5a4af3bSchristos   { "wrtu",     mode_i,    class2|(9<<21), gr6 },
334a5a4af3bSchristos   { "xor.b",    mode_dab,  class3|(8<<21)|(1), def },
335a5a4af3bSchristos   { "xor.l",    mode_dab,  class3|(8<<21)|(4), def },
336a5a4af3bSchristos   { "xor.w",    mode_dab,  class3|(8<<21)|(2), def },
337a5a4af3bSchristos };
338e5cb852cSchristos 
339