xref: /netbsd-src/external/gpl3/gdb/dist/include/opcode/visium.h (revision aab831cebf6361fb2b518a47c70732e608d9abd2)
1968cf8f2Schristos /* Opcode table header for Visium.
2968cf8f2Schristos 
3*aab831ceSchristos    Copyright (C) 2003-2024 Free Software Foundation, Inc.
4968cf8f2Schristos 
5968cf8f2Schristos    This file is part of GDB, GAS, and GNU binutils.
6968cf8f2Schristos 
7968cf8f2Schristos    GDB, GAS and the GNU binutils are free software; you can redistribute
8968cf8f2Schristos    them and/or modify them under the terms of the GNU General Public
9968cf8f2Schristos    License as published by the Free Software Foundation; either version 3,
10968cf8f2Schristos    or (at your option) any later version.
11968cf8f2Schristos 
12968cf8f2Schristos    GDB, GAS, and the GNU binutils are distributed in the hope that they
13968cf8f2Schristos    will be useful, but WITHOUT ANY WARRANTY; without even the implied
14968cf8f2Schristos    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
15968cf8f2Schristos    the GNU General Public License for more details.
16968cf8f2Schristos 
17968cf8f2Schristos    You should have received a copy of the GNU General Public License
18968cf8f2Schristos    along with this file; see the file COPYING3.  If not, write to the Free
19968cf8f2Schristos    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
20968cf8f2Schristos    MA 02110-1301, USA.  */
21968cf8f2Schristos 
22968cf8f2Schristos enum visium_opcode_arch_val
23968cf8f2Schristos {
24968cf8f2Schristos   VISIUM_OPCODE_ARCH_DEF = 0,
25968cf8f2Schristos   VISIUM_OPCODE_ARCH_GR5,
26968cf8f2Schristos   VISIUM_OPCODE_ARCH_GR6,
27968cf8f2Schristos   VISIUM_OPCODE_ARCH_BAD
28968cf8f2Schristos };
29968cf8f2Schristos 
30968cf8f2Schristos /* The highest architecture in the table.  */
31968cf8f2Schristos #define VISIUM_OPCODE_ARCH_MAX (VISIUM_OPCODE_ARCH_BAD - 1)
32968cf8f2Schristos 
33968cf8f2Schristos /* Given an enum visium_opcode_arch_val, return the bitmask to use in
34968cf8f2Schristos    insn encoding/decoding.  */
35968cf8f2Schristos #define VISIUM_OPCODE_ARCH_MASK(arch) (1 << (arch))
36968cf8f2Schristos 
37968cf8f2Schristos /* Some defines to make life easy.  */
38968cf8f2Schristos #define MASK_DEF VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_DEF)
39968cf8f2Schristos #define MASK_GR5 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR5)
40968cf8f2Schristos #define MASK_GR6 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR6)
41968cf8f2Schristos 
42968cf8f2Schristos /* Bit masks of architectures supporting the insn.  */
43968cf8f2Schristos #define def (MASK_DEF | MASK_GR5 | MASK_GR6)
44968cf8f2Schristos #define gr5 (MASK_GR5 | MASK_GR6)
45968cf8f2Schristos #define gr6 (MASK_GR6)
46968cf8f2Schristos 
47968cf8f2Schristos /* The condition code field is not used (zero) for most instructions.
48968cf8f2Schristos    BRR and BRA make normal use of it. Floating point instructions use
49968cf8f2Schristos    it as a sub-opcode.  */
50968cf8f2Schristos #define CC_MASK (0xf << 27)
51968cf8f2Schristos 
52968cf8f2Schristos /* It seems a shame not to use these bits in a class 0 instruction,
53968cf8f2Schristos    since they could be used to extend the range of the branch.  */
54968cf8f2Schristos #define CLASS0_UNUSED_MASK (0x1f << 16)
55968cf8f2Schristos 
56968cf8f2Schristos /* For class 1 instructions the following bit is unused.  */
57968cf8f2Schristos #define CLASS1_UNUSED_MASK (1 << 9)
58968cf8f2Schristos 
59968cf8f2Schristos /* For class 1 instructions this field gives the index for a write
60968cf8f2Schristos    instruction, the specific operation for an EAM instruction, or
61968cf8f2Schristos    the floating point destination register for a floating point
62968cf8f2Schristos    instruction.  */
63968cf8f2Schristos #define CLASS1_INDEX_MASK (0x1f << 10)
64968cf8f2Schristos 
65968cf8f2Schristos /* For class 3 instructions the following field gives the destination
66968cf8f2Schristos    general register.  */
67968cf8f2Schristos #define CLASS3_DEST_MASK (0x1f << 10)
68968cf8f2Schristos 
69968cf8f2Schristos /* For class 1 and class 3 instructions the following bit selects an
70968cf8f2Schristos    EAM write/read rather than a memory write/read.  */
71968cf8f2Schristos #define EAM_SELECT_MASK (1 << 15)
72968cf8f2Schristos 
73968cf8f2Schristos /* Floating point instructions are distinguished from general EAM
74968cf8f2Schristos    instructions by the following bit.  */
75968cf8f2Schristos #define FP_SELECT_MASK (1 << 3)
76968cf8f2Schristos 
77968cf8f2Schristos /* For both class 1 and class 3 the following fields give, where
78968cf8f2Schristos    appropriate the srcA and srcB registers whether floating point
79968cf8f2Schristos    or general.  */
80968cf8f2Schristos #define SRCA_MASK (0x1f << 16)
81968cf8f2Schristos #define SRCB_MASK (0x1f << 4)
82968cf8f2Schristos 
83968cf8f2Schristos /* The class 3 interrupt bit. It turns a BRA into a SYS1, and an
84968cf8f2Schristos    RFLAG into a SYS2. This bit should not be set in the user's
85968cf8f2Schristos    class 3 instructions. This bit is also used in class 3
86968cf8f2Schristos    to distinguish between floating point and other EAM operations.
87968cf8f2Schristos    (see FP_SELECT_MASK).  */
88968cf8f2Schristos #define CLASS3_INT (1 << 3)
89968cf8f2Schristos 
90968cf8f2Schristos /* Class 3 shift instructions use this bit to indicate that the
91968cf8f2Schristos    srcB field is a 5 bit immediate shift count rather than a
92968cf8f2Schristos    register number.  */
93968cf8f2Schristos #define CLASS3_SOURCEB_IMMED (1 << 9)
94968cf8f2Schristos 
95968cf8f2Schristos #define BMD 0x02630004
96968cf8f2Schristos #define BMI 0x82230004
97968cf8f2Schristos #define DSI 0x82800004
98968cf8f2Schristos #define ENI 0x02a00004
99968cf8f2Schristos #define RFI 0x82fe01d4
100968cf8f2Schristos 
101968cf8f2Schristos struct reg_entry
102968cf8f2Schristos {
103ba340e45Schristos   const char *name;
104968cf8f2Schristos   unsigned char code;
105968cf8f2Schristos };
106968cf8f2Schristos 
107ba340e45Schristos static const struct reg_entry gen_reg_table[] ATTRIBUTE_UNUSED =
108968cf8f2Schristos {
109968cf8f2Schristos   {"fp", 0x16},
110968cf8f2Schristos   {"r0", 0x0},
111968cf8f2Schristos   {"r1", 0x1},
112968cf8f2Schristos   {"r10", 0xA},
113968cf8f2Schristos   {"r11", 0xB},
114968cf8f2Schristos   {"r12", 0xC},
115968cf8f2Schristos   {"r13", 0xD},
116968cf8f2Schristos   {"r14", 0xE},
117968cf8f2Schristos   {"r15", 0xF},
118968cf8f2Schristos   {"r16", 0x10},
119968cf8f2Schristos   {"r17", 0x11},
120968cf8f2Schristos   {"r18", 0x12},
121968cf8f2Schristos   {"r19", 0x13},
122968cf8f2Schristos   {"r2", 0x2},
123968cf8f2Schristos   {"r20", 0x14},
124968cf8f2Schristos   {"r21", 0x15},
125968cf8f2Schristos   {"r22", 0x16},
126968cf8f2Schristos   {"r23", 0x17},
127968cf8f2Schristos   {"r24", 0x18},
128968cf8f2Schristos   {"r25", 0x19},
129968cf8f2Schristos   {"r26", 0x1a},
130968cf8f2Schristos   {"r27", 0x1b},
131968cf8f2Schristos   {"r28", 0x1c},
132968cf8f2Schristos   {"r29", 0x1d},
133968cf8f2Schristos   {"r3", 0x3},
134968cf8f2Schristos   {"r30", 0x1e},
135968cf8f2Schristos   {"r31", 0x1f},
136968cf8f2Schristos   {"r4", 0x4},
137968cf8f2Schristos   {"r5", 0x5},
138968cf8f2Schristos   {"r6", 0x6},
139968cf8f2Schristos   {"r7", 0x7},
140968cf8f2Schristos   {"r8", 0x8},
141968cf8f2Schristos   {"r9", 0x9},
142968cf8f2Schristos   {"sp", 0x17},
143968cf8f2Schristos };
144968cf8f2Schristos 
145ba340e45Schristos static const struct reg_entry fp_reg_table[] ATTRIBUTE_UNUSED =
146968cf8f2Schristos {
147968cf8f2Schristos   {"f0", 0x0},
148968cf8f2Schristos   {"f1", 0x1},
149968cf8f2Schristos   {"f10", 0xa},
150968cf8f2Schristos   {"f11", 0xb},
151968cf8f2Schristos   {"f12", 0xc},
152968cf8f2Schristos   {"f13", 0xd},
153968cf8f2Schristos   {"f14", 0xe},
154968cf8f2Schristos   {"f15", 0xf},
155968cf8f2Schristos   {"f2", 0x2},
156968cf8f2Schristos   {"f3", 0x3},
157968cf8f2Schristos   {"f4", 0x4},
158968cf8f2Schristos   {"f5", 0x5},
159968cf8f2Schristos   {"f6", 0x6},
160968cf8f2Schristos   {"f7", 0x7},
161968cf8f2Schristos   {"f8", 0x8},
162968cf8f2Schristos   {"f9", 0x9},
163968cf8f2Schristos };
164968cf8f2Schristos 
165ba340e45Schristos static const struct cc_entry
166968cf8f2Schristos {
167ba340e45Schristos   const char *name;
168968cf8f2Schristos   int code;
169ba340e45Schristos } cc_table [] ATTRIBUTE_UNUSED =
170968cf8f2Schristos {
171968cf8f2Schristos   {"cc", 6},
172968cf8f2Schristos   {"cs", 2},
173968cf8f2Schristos   {"eq", 1},
174968cf8f2Schristos   {"fa", 0},
175968cf8f2Schristos   {"ge", 9},
176968cf8f2Schristos   {"gt", 10},
177968cf8f2Schristos   {"hi", 11},
178968cf8f2Schristos   {"le", 12},
179968cf8f2Schristos   {"ls", 13},
180968cf8f2Schristos   {"lt", 14},
181968cf8f2Schristos   {"nc", 8},
182968cf8f2Schristos   {"ne", 5},
183968cf8f2Schristos   {"ns", 4},
184968cf8f2Schristos   {"oc", 7},
185968cf8f2Schristos   {"os", 3},
186968cf8f2Schristos   {"tr", 15},
187968cf8f2Schristos };
188968cf8f2Schristos 
189968cf8f2Schristos enum addressing_mode
190968cf8f2Schristos {
191968cf8f2Schristos   mode_d,	/* register := */
192968cf8f2Schristos   mode_a,	/* op= register */
193968cf8f2Schristos   mode_da,	/* register := register */
194968cf8f2Schristos   mode_ab,	/* register * register */
195968cf8f2Schristos   mode_dab,	/* register := register * register */
196968cf8f2Schristos   mode_iab,	/* 5-bit immediate * register * register */
197968cf8f2Schristos   mode_0ab,	/* zero * register * register */
198968cf8f2Schristos   mode_da0,	/* register := register * zero */
199968cf8f2Schristos   mode_cad,	/* condition * register * register */
200968cf8f2Schristos   mode_das,	/* register := register * 5-bit immed/register shift count */
201968cf8f2Schristos   mode_di,	/* register := 5-bit immediate */
202968cf8f2Schristos   mode_ir,	/* 5-bit immediate * register */
203968cf8f2Schristos   mode_ai,	/* register 16-bit unsigned immediate */
204968cf8f2Schristos   mode_i,	/* 16-bit unsigned immediate */
205968cf8f2Schristos   mode_bax,	/* register * register * 5-bit immediate */
206968cf8f2Schristos   mode_dax,	/* register := register * 5-bit immediate */
207968cf8f2Schristos   mode_s,	/* special mode */
208968cf8f2Schristos   mode_sr,	/* special mode with register */
209968cf8f2Schristos   mode_ci,	/* condition * 16-bit signed word displacement */
210968cf8f2Schristos   mode_fdab,	/* float := float * float */
211968cf8f2Schristos   mode_ifdab,	/* fpinst: 4-bit immediate * float * float * float */
212968cf8f2Schristos   mode_idfab,	/* fpuread: 4-bit immediate * register * float * float */
213968cf8f2Schristos   mode_fda,	/* float := float */
214968cf8f2Schristos   mode_fdra,	/* float := register */
215968cf8f2Schristos   mode_rdfab,	/* register := float * float */
216968cf8f2Schristos   mode_rdfa,	/* register := float */
217968cf8f2Schristos   mode_rrr,	/* 3 register sources and destinations (block move) */
218968cf8f2Schristos };
219968cf8f2Schristos 
220968cf8f2Schristos #define class0 (0<<25)
221968cf8f2Schristos #define class1 (1<<25)
222968cf8f2Schristos #define class2 (2<<25)
223968cf8f2Schristos #define class3 (3<<25)
224968cf8f2Schristos 
225968cf8f2Schristos static const struct opcode_entry
226968cf8f2Schristos {
227ba340e45Schristos   const char *mnem;
228968cf8f2Schristos   enum addressing_mode mode;
229968cf8f2Schristos   unsigned code;
230968cf8f2Schristos   char flags;
231968cf8f2Schristos }
232ba340e45Schristos opcode_table[] ATTRIBUTE_UNUSED =
233968cf8f2Schristos {
234968cf8f2Schristos   { "adc.b",    mode_dab,  class3|(1<<21)|(1), def },
235968cf8f2Schristos   { "adc.l",    mode_dab,  class3|(1<<21)|(4), def },
236968cf8f2Schristos   { "adc.w",    mode_dab,  class3|(1<<21)|(2), def },
237968cf8f2Schristos   { "add.b",    mode_dab,  class3|(0<<21)|(1), def },
238968cf8f2Schristos   { "add.l",    mode_dab,  class3|(0<<21)|(4), def },
239968cf8f2Schristos   { "add.w",    mode_dab,  class3|(0<<21)|(2), def },
240968cf8f2Schristos   { "addi",     mode_ai,   class2, def },
241968cf8f2Schristos   { "and.b",    mode_dab,  class3|(10<<21)|(1), def},
242968cf8f2Schristos   { "and.l",    mode_dab,  class3|(10<<21)|(4), def },
243968cf8f2Schristos   { "and.w",    mode_dab,  class3|(10<<21)|(2), def },
244968cf8f2Schristos   { "asl.b",    mode_das,  class3|(7<<21)|(1), def },
245968cf8f2Schristos   { "asl.l",    mode_das,  class3|(7<<21)|(4), def },
246968cf8f2Schristos   { "asl.w",    mode_das,  class3|(7<<21)|(2), def },
247968cf8f2Schristos   { "asld",     mode_a,    class1|(15<<21)|(1<<15)|(11<<10)|(4), def },
248968cf8f2Schristos   { "asr.b",    mode_das,  class3|(5<<21)|(1), def },
249968cf8f2Schristos   { "asr.l",    mode_das,  class3|(5<<21)|(4), def },
250968cf8f2Schristos   { "asr.w",    mode_das,  class3|(5<<21)|(2), def },
251968cf8f2Schristos   { "asrd",     mode_a,    class1|(15<<21)|(1<<15)|(9<<10)|(4), def },
252968cf8f2Schristos   { "bmd",      mode_rrr,  class1|(3<<21)|(3<<16)|(4), gr6 },
253968cf8f2Schristos   { "bmi",      mode_rrr,  class1|(1<<21)|(3<<16)|(4), gr6 },
254968cf8f2Schristos   { "bra",      mode_cad,  class3|(12<<21)|(4), def },
255968cf8f2Schristos   { "brr",      mode_ci,   class0, def },
256968cf8f2Schristos   { "cmp.b",    mode_0ab,  class3|(2<<21)|(1), def },
257968cf8f2Schristos   { "cmp.l",    mode_0ab,  class3|(2<<21)|(4), def },
258968cf8f2Schristos   { "cmp.w",    mode_0ab,  class3|(2<<21)|(2), def },
259968cf8f2Schristos   { "cmpc.b",   mode_0ab,  class3|(3<<21)|(1), def },
260968cf8f2Schristos   { "cmpc.l",   mode_0ab,  class3|(3<<21)|(4), def },
261968cf8f2Schristos   { "cmpc.w",   mode_0ab,  class3|(3<<21)|(2), def },
262968cf8f2Schristos   { "divds",    mode_a,    class1|(15<<21)|(1<<15)|(6<<10)|(4), def },
263968cf8f2Schristos   { "divdu",    mode_a,    class1|(15<<21)|(1<<15)|(7<<10)|(4), def },
264968cf8f2Schristos   { "divs",     mode_a,    class1|(15<<21)|(1<<15)|(2<<10)|(4), def },
265968cf8f2Schristos   { "divu",     mode_a,    class1|(15<<21)|(1<<15)|(3<<10)|(4), def },
266968cf8f2Schristos   { "dsi",      mode_s,    class1|(4<<21)|(4), def },
267968cf8f2Schristos   { "eamread",  mode_di,   class3|(15<<21)|(1<<15)|(1<<9)|(4), def },
268968cf8f2Schristos   { "eamwrite", mode_iab,  class1|(15<<21)|(1<<15)|(4), def },
269968cf8f2Schristos   { "eni",      mode_s,    class1|(5<<21)|(4), def },
270968cf8f2Schristos   { "extb.b",   mode_da,   class3|(14<<21)|(1), def },
271968cf8f2Schristos   { "extb.l",   mode_da,   class3|(14<<21)|(4), def },
272968cf8f2Schristos   { "extb.w",   mode_da,   class3|(14<<21)|(2), def },
273968cf8f2Schristos   { "extw.l",   mode_da,   class3|(4<<21)|(4), def },
274968cf8f2Schristos   { "extw.w",   mode_da,   class3|(4<<21)|(2), def },
275968cf8f2Schristos   { "fabs",     mode_fda,  class1|(7<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
276968cf8f2Schristos   { "fadd",     mode_fdab, class1|(1<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
277968cf8f2Schristos   { "fcmp",     mode_rdfab,class3|(10<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
278968cf8f2Schristos   { "fcmpe",    mode_rdfab,class3|(11<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
279968cf8f2Schristos   { "fdiv",     mode_fdab, class1|(4<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
280968cf8f2Schristos   { "fload",    mode_fdra, class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
281968cf8f2Schristos   { "fmove",    mode_fda,  class1|(12<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5},
282968cf8f2Schristos   { "fmult",    mode_fdab, class1|(3<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
283968cf8f2Schristos   { "fneg",     mode_fda,  class1|(6<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
284968cf8f2Schristos   { "fpinst",   mode_ifdab,class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
285968cf8f2Schristos   { "fpuread",  mode_idfab,class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
286968cf8f2Schristos   { "fsqrt",    mode_fda,  class1|(5<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
287968cf8f2Schristos   { "fstore",   mode_rdfa, class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
288968cf8f2Schristos   { "fsub",     mode_fdab, class1|(2<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
289968cf8f2Schristos   { "ftoi",     mode_fda,  class1|(8<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
290968cf8f2Schristos   { "itof",     mode_fda,  class1|(9<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
291968cf8f2Schristos   { "lsr.b",    mode_das,  class3|(6<<21)|(1), def },
292968cf8f2Schristos   { "lsr.l",    mode_das,  class3|(6<<21)|(4), def },
293968cf8f2Schristos   { "lsr.w",    mode_das,  class3|(6<<21)|(2), def },
294968cf8f2Schristos   { "lsrd",     mode_a,    class1|(15<<21)|(1<<15)|(10<<10)|(4), def },
295968cf8f2Schristos   { "move.b",   mode_da0,  class3|(9<<21)|(1), def },
296968cf8f2Schristos   { "move.l",   mode_da0,  class3|(9<<21)|(4), def },
297968cf8f2Schristos   { "move.w",   mode_da0,  class3|(9<<21)|(2), def },
298968cf8f2Schristos   { "movil",    mode_ai,   class2|(4<<21), def },
299968cf8f2Schristos   { "moviq",    mode_ai,   class2|(6<<21), def },
300968cf8f2Schristos   { "moviu",    mode_ai,   class2|(5<<21), def },
301968cf8f2Schristos   { "mults",    mode_ab,   class1|(15<<21)|(1<<15)|(0<<10)|(4), def },
302968cf8f2Schristos   { "multu",    mode_ab,   class1|(15<<21)|(1<<15)|(1<<10)|(4), def },
303968cf8f2Schristos   { "nop",      mode_s,    class0, def },
304968cf8f2Schristos   { "not.b",    mode_da,   class3|(11<<21)|(1), def },
305968cf8f2Schristos   { "not.l",    mode_da,   class3|(11<<21)|(4), def },
306968cf8f2Schristos   { "not.w",    mode_da,   class3|(11<<21)|(2), def },
307968cf8f2Schristos   { "or.b",     mode_dab,  class3|(9<<21)|(1), def },
308968cf8f2Schristos   { "or.l",     mode_dab,  class3|(9<<21)|(4), def },
309968cf8f2Schristos   { "or.w",     mode_dab,  class3|(9<<21)|(2), def },
310968cf8f2Schristos   { "read.b",   mode_dax,  class3|(15<<21)|(1<<9)|(1), def },
311968cf8f2Schristos   { "read.l",   mode_dax,  class3|(15<<21)|(1<<9)|(4), def },
312968cf8f2Schristos   { "read.w",   mode_dax,  class3|(15<<21)|(1<<9)|(2), def },
313968cf8f2Schristos   { "readmda",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(4), def },
314968cf8f2Schristos   { "readmdb",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(1<<4)|(4), def },
315968cf8f2Schristos   { "readmdc",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(2<<4)|(4), def },
316968cf8f2Schristos   { "rfi",      mode_s,    class1|(7<<21)|(30<<16)|(29<<4)|(4), def },
317968cf8f2Schristos   { "rflag",    mode_d,    class3|(13<<21)|(4), def },
318968cf8f2Schristos   { "stop",     mode_ir,   class1|(0<<21)|(4), def },
319968cf8f2Schristos   { "sub.b",    mode_dab,  class3|(2<<21)|(1), def },
320968cf8f2Schristos   { "sub.l",    mode_dab,  class3|(2<<21)|(4), def },
321968cf8f2Schristos   { "sub.w",    mode_dab,  class3|(2<<21)|(2), def },
322968cf8f2Schristos   { "subc.b",   mode_dab,  class3|(3<<21)|(1), def },
323968cf8f2Schristos   { "subc.l",   mode_dab,  class3|(3<<21)|(4), def },
324968cf8f2Schristos   { "subc.w",   mode_dab,  class3|(3<<21)|(2), def },
325968cf8f2Schristos   { "subi",     mode_ai,   class2|(2<<21), def },
326968cf8f2Schristos   { "trace",    mode_ir,   class1|(13<<21), def },
327968cf8f2Schristos   { "write.b",  mode_bax,  class1|(15<<21)|(1), def },
328968cf8f2Schristos   { "write.l",  mode_bax,  class1|(15<<21)|(4), def },
329968cf8f2Schristos   { "write.w",  mode_bax,  class1|(15<<21)|(2), def },
330968cf8f2Schristos   { "writemd",  mode_ab,   class1|(15<<21)|(1<<15)|(4<<10)|(4), def },
331968cf8f2Schristos   { "writemdc", mode_a,    class1|(15<<21)|(1<<15)|(5<<10)|(4), def },
332968cf8f2Schristos   { "wrtl",     mode_i,    class2|(8<<21), gr6 },
333968cf8f2Schristos   { "wrtu",     mode_i,    class2|(9<<21), gr6 },
334968cf8f2Schristos   { "xor.b",    mode_dab,  class3|(8<<21)|(1), def },
335968cf8f2Schristos   { "xor.l",    mode_dab,  class3|(8<<21)|(4), def },
336968cf8f2Schristos   { "xor.w",    mode_dab,  class3|(8<<21)|(2), def },
337968cf8f2Schristos };
338ba340e45Schristos 
339