add sanitization of m32rx PIPE attribute, redact can do this more cleanly
[deliverable/binutils-gdb.git] / opcodes / m32r-opc.c
CommitLineData
23cf992f 1/* CGEN opcode support for m32r.
9c03036a 2
5d07b6cf 3Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
9c03036a
DE
4
5This file is part of the GNU Binutils and/or GDB, the GNU debugger.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License along
18with this program; if not, write to the Free Software Foundation, Inc.,
1959 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21*/
22
23
23cf992f 24#include "sysdep.h"
9c03036a
DE
25#include <stdio.h>
26#include "ansidecl.h"
27#include "libiberty.h"
28#include "bfd.h"
29#include "m32r-opc.h"
30
23cf992f
NC
31/* Attributes. */
32
853713a7 33static const CGEN_ATTR_ENTRY MACH_attr[] =
5d07b6cf
DE
34{
35 { "m32r", MACH_M32R },
23cf992f
NC
36 { 0, 0 }
37};
38
853713a7 39const CGEN_ATTR_TABLE m32r_cgen_operand_attr_table[] =
5d07b6cf
DE
40{
41 { "ABS-ADDR", NULL },
23cf992f
NC
42 { "FAKE", NULL },
43 { "NEGATIVE", NULL },
44 { "PC", NULL },
45 { "PCREL-ADDR", NULL },
46 { "RELAX", NULL },
47 { "RELOC", NULL },
48 { "SIGN-OPT", NULL },
49 { "UNSIGNED", NULL },
50 { 0, 0 }
51};
52
853713a7 53const CGEN_ATTR_TABLE m32r_cgen_insn_attr_table[] =
5d07b6cf
DE
54{
55 { "ALIAS", NULL },
23cf992f
NC
56 { "COND-CTI", NULL },
57 { "FILL-SLOT", NULL },
23cf992f
NC
58 { "RELAX", NULL },
59 { "RELAX-BC", NULL },
23cf992f
NC
60 { "RELAX-BL", NULL },
61 { "RELAX-BNC", NULL },
23cf992f
NC
62 { "RELAX-BRA", NULL },
63 { "RELAXABLE", NULL },
64 { "UNCOND-CTI", NULL },
65 { 0, 0 }
9c03036a
DE
66};
67
853713a7 68CGEN_KEYWORD_ENTRY m32r_cgen_opval_mach_entries[] =
5d07b6cf
DE
69{
70 { "m32r", MACH_M32R }
23cf992f
NC
71};
72
853713a7 73CGEN_KEYWORD m32r_cgen_opval_mach =
5d07b6cf
DE
74{
75 & m32r_cgen_opval_mach_entries[0],
853713a7 76 1
9c03036a
DE
77};
78
853713a7 79CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_gr_entries[] =
5d07b6cf
DE
80{
81 { "fp", 13 },
9c03036a
DE
82 { "lr", 14 },
83 { "sp", 15 },
84 { "r0", 0 },
85 { "r1", 1 },
86 { "r2", 2 },
87 { "r3", 3 },
88 { "r4", 4 },
89 { "r5", 5 },
90 { "r6", 6 },
91 { "r7", 7 },
92 { "r8", 8 },
93 { "r9", 9 },
94 { "r10", 10 },
95 { "r11", 11 },
96 { "r12", 12 },
97 { "r13", 13 },
98 { "r14", 14 },
99 { "r15", 15 }
100};
101
853713a7 102CGEN_KEYWORD m32r_cgen_opval_h_gr =
5d07b6cf
DE
103{
104 & m32r_cgen_opval_h_gr_entries[0],
9c03036a
DE
105 19
106};
107
853713a7 108CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_cr_entries[] =
5d07b6cf
DE
109{
110 { "psw", 0 },
9c03036a
DE
111 { "cbr", 1 },
112 { "spi", 2 },
113 { "spu", 3 },
114 { "bpc", 6 },
115 { "cr0", 0 },
116 { "cr1", 1 },
117 { "cr2", 2 },
118 { "cr3", 3 },
119 { "cr4", 4 },
120 { "cr5", 5 },
121 { "cr6", 6 }
122};
123
853713a7 124CGEN_KEYWORD m32r_cgen_opval_h_cr =
5d07b6cf
DE
125{
126 & m32r_cgen_opval_h_cr_entries[0],
9c03036a
DE
127 12
128};
129
23cf992f 130
853713a7 131static CGEN_HW_ENTRY m32r_cgen_hw_entries[] =
5d07b6cf
DE
132{
133 { & m32r_cgen_hw_entries[1], "h-pc", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
9c03036a
DE
134 { & m32r_cgen_hw_entries[2], "h-memory", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
135 { & m32r_cgen_hw_entries[3], "h-sint", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
136 { & m32r_cgen_hw_entries[4], "h-uint", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
137 { & m32r_cgen_hw_entries[5], "h-addr", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
138 { & m32r_cgen_hw_entries[6], "h-iaddr", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
139 { & m32r_cgen_hw_entries[7], "h-hi16", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
140 { & m32r_cgen_hw_entries[8], "h-slo16", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
141 { & m32r_cgen_hw_entries[9], "h-ulo16", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
142 { & m32r_cgen_hw_entries[10], "h-gr", CGEN_ASM_KEYWORD /*FIXME*/, & m32r_cgen_opval_h_gr },
143 { & m32r_cgen_hw_entries[11], "h-cr", CGEN_ASM_KEYWORD /*FIXME*/, & m32r_cgen_opval_h_cr },
144 { & m32r_cgen_hw_entries[12], "h-accum", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
853713a7
DE
145 { & m32r_cgen_hw_entries[13], "h-cond", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
146 { & m32r_cgen_hw_entries[14], "h-sm", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
147 { & m32r_cgen_hw_entries[15], "h-bsm", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
148 { & m32r_cgen_hw_entries[16], "h-ie", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
149 { & m32r_cgen_hw_entries[17], "h-bie", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
150 { & m32r_cgen_hw_entries[18], "h-bcond", CGEN_ASM_KEYWORD /*FIXME*/, 0 },
9c03036a
DE
151 { NULL, "h-bpc", CGEN_ASM_KEYWORD /*FIXME*/, 0 }
152};
153
154
23cf992f 155const CGEN_OPERAND m32r_cgen_operand_table[CGEN_NUM_OPERANDS] =
9c03036a 156{
23cf992f
NC
157/* pc: program counter */
158 { "pc", 0, 0, { 0, 0|(1<<CGEN_OPERAND_FAKE)|(1<<CGEN_OPERAND_PC), { 0 } } },
9c03036a
DE
159/* sr: source register */
160 { "sr", 12, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
161/* dr: destination register */
162 { "dr", 4, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
163/* src1: source register 1 */
164 { "src1", 4, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
165/* src2: source register 2 */
166 { "src2", 12, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
167/* scr: source control register */
168 { "scr", 12, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
169/* dcr: destination control register */
170 { "dcr", 4, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
171/* simm8: 8 bit signed immediate */
172 { "simm8", 8, 8, { 0, 0, { 0 } } },
173/* simm16: 16 bit signed immediate */
174 { "simm16", 16, 16, { 0, 0, { 0 } } },
175/* uimm4: 4 bit trap number */
176 { "uimm4", 12, 4, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
177/* uimm5: 5 bit shift count */
178 { "uimm5", 11, 5, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
179/* uimm16: 16 bit unsigned immediate */
180 { "uimm16", 16, 16, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
181/* hi16: high 16 bit immediate, sign optional */
182 { "hi16", 16, 16, { 0, 0|(1<<CGEN_OPERAND_SIGN_OPT)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
183/* slo16: 16 bit signed immediate, for low() */
184 { "slo16", 16, 16, { 0, 0, { 0 } } },
185/* ulo16: 16 bit unsigned immediate, for low() */
186 { "ulo16", 16, 16, { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
187/* uimm24: 24 bit address */
188 { "uimm24", 8, 24, { 0, 0|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_ABS_ADDR)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
189/* disp8: 8 bit displacement */
190 { "disp8", 8, 8, { 0, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_PCREL_ADDR), { 0 } } },
191/* disp16: 16 bit displacement */
192 { "disp16", 16, 16, { 0, 0|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_PCREL_ADDR), { 0 } } },
193/* disp24: 24 bit displacement */
194 { "disp24", 8, 24, { 0, 0|(1<<CGEN_OPERAND_RELAX)|(1<<CGEN_OPERAND_RELOC)|(1<<CGEN_OPERAND_PCREL_ADDR), { 0 } } },
23cf992f
NC
195/* condbit: condition bit */
196 { "condbit", 0, 0, { 0, 0|(1<<CGEN_OPERAND_FAKE), { 0 } } },
197/* accum: accumulator */
198 { "accum", 0, 0, { 0, 0|(1<<CGEN_OPERAND_FAKE), { 0 } } },
23cf992f
NC
199};
200
201#define OP 1 /* syntax value for mnemonic */
202
853713a7 203static const CGEN_SYNTAX syntax_table[] =
5d07b6cf
DE
204{
205/* <op> $dr,$sr */
23cf992f
NC
206/* 0 */ { OP, ' ', 130, ',', 129, 0 },
207/* <op> $dr,$sr,$slo16 */
853713a7 208/* 1 */ { OP, ' ', 130, ',', 129, ',', 141, 0 },
23cf992f
NC
209/* <op> $dr,$sr,$uimm16 */
210/* 2 */ { OP, ' ', 130, ',', 129, ',', 139, 0 },
211/* <op> $dr,$sr,$ulo16 */
853713a7 212/* 3 */ { OP, ' ', 130, ',', 129, ',', 142, 0 },
23cf992f
NC
213/* <op> $dr,$simm8 */
214/* 4 */ { OP, ' ', 130, ',', 135, 0 },
215/* <op> $dr,$sr,$simm16 */
216/* 5 */ { OP, ' ', 130, ',', 129, ',', 136, 0 },
217/* <op> $disp8 */
853713a7 218/* 6 */ { OP, ' ', 144, 0 },
23cf992f 219/* <op> $disp24 */
853713a7 220/* 7 */ { OP, ' ', 146, 0 },
23cf992f 221/* <op> $src1,$src2,$disp16 */
853713a7 222/* 8 */ { OP, ' ', 131, ',', 132, ',', 145, 0 },
23cf992f 223/* <op> $src2,$disp16 */
853713a7 224/* 9 */ { OP, ' ', 132, ',', 145, 0 },
23cf992f
NC
225/* <op> $src1,$src2 */
226/* 10 */ { OP, ' ', 131, ',', 132, 0 },
227/* <op> $src2,$simm16 */
228/* 11 */ { OP, ' ', 132, ',', 136, 0 },
229/* <op> $src2,$uimm16 */
230/* 12 */ { OP, ' ', 132, ',', 139, 0 },
23cf992f 231/* <op> $sr */
853713a7 232/* 13 */ { OP, ' ', 129, 0 },
23cf992f 233/* <op> $dr,@$sr */
853713a7 234/* 14 */ { OP, ' ', 130, ',', '@', 129, 0 },
23cf992f 235/* <op> $dr,@($sr) */
853713a7 236/* 15 */ { OP, ' ', 130, ',', '@', '(', 129, ')', 0 },
23cf992f 237/* <op> $dr,@($slo16,$sr) */
853713a7 238/* 16 */ { OP, ' ', 130, ',', '@', '(', 141, ',', 129, ')', 0 },
23cf992f 239/* <op> $dr,@($sr,$slo16) */
853713a7 240/* 17 */ { OP, ' ', 130, ',', '@', '(', 129, ',', 141, ')', 0 },
23cf992f 241/* <op> $dr,@$sr+ */
853713a7 242/* 18 */ { OP, ' ', 130, ',', '@', 129, '+', 0 },
23cf992f 243/* <op> $dr,$uimm24 */
853713a7 244/* 19 */ { OP, ' ', 130, ',', 143, 0 },
23cf992f 245/* <op> $dr,$slo16 */
853713a7 246/* 20 */ { OP, ' ', 130, ',', 141, 0 },
23cf992f 247/* <op> $dr */
853713a7 248/* 21 */ { OP, ' ', 130, 0 },
23cf992f 249/* <op> $dr,$scr */
853713a7 250/* 22 */ { OP, ' ', 130, ',', 133, 0 },
23cf992f 251/* <op> $src1 */
853713a7 252/* 23 */ { OP, ' ', 131, 0 },
23cf992f 253/* <op> $sr,$dcr */
853713a7 254/* 24 */ { OP, ' ', 129, ',', 134, 0 },
23cf992f 255/* <op> */
853713a7 256/* 25 */ { OP, 0 },
23cf992f 257/* <op> $dr,$hi16 */
853713a7 258/* 26 */ { OP, ' ', 130, ',', 140, 0 },
23cf992f 259/* <op> $dr,$uimm5 */
853713a7 260/* 27 */ { OP, ' ', 130, ',', 138, 0 },
23cf992f 261/* <op> $src1,@$src2 */
853713a7 262/* 28 */ { OP, ' ', 131, ',', '@', 132, 0 },
23cf992f 263/* <op> $src1,@($src2) */
853713a7 264/* 29 */ { OP, ' ', 131, ',', '@', '(', 132, ')', 0 },
23cf992f 265/* <op> $src1,@($slo16,$src2) */
853713a7 266/* 30 */ { OP, ' ', 131, ',', '@', '(', 141, ',', 132, ')', 0 },
23cf992f 267/* <op> $src1,@($src2,$slo16) */
853713a7 268/* 31 */ { OP, ' ', 131, ',', '@', '(', 132, ',', 141, ')', 0 },
23cf992f 269/* <op> $src1,@+$src2 */
853713a7 270/* 32 */ { OP, ' ', 131, ',', '@', '+', 132, 0 },
23cf992f 271/* <op> $src1,@-$src2 */
853713a7 272/* 33 */ { OP, ' ', 131, ',', '@', '-', 132, 0 },
23cf992f 273/* <op> $uimm4 */
853713a7 274/* 34 */ { OP, ' ', 137, 0 },
23cf992f
NC
275};
276
277#undef OP
278
853713a7 279static const CGEN_FORMAT format_table[] =
5d07b6cf
DE
280{
281/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr. */
23cf992f
NC
282/* 0 */ { 16, 16, 0xf0f0 },
283/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-simm16.slo16. */
284/* 1 */ { 32, 32, 0xf0f00000 },
285/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-uimm16.uimm16. */
286/* 2 */ { 32, 32, 0xf0f00000 },
287/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-uimm16.ulo16. */
288/* 3 */ { 32, 32, 0xf0f00000 },
289/* f-op1.number.f-r1.dr.f-simm8.simm8. */
290/* 4 */ { 16, 16, 0xf000 },
291/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-simm16.simm16. */
292/* 5 */ { 32, 32, 0xf0f00000 },
293/* f-op1.number.f-r1.number.f-disp8.disp8. */
294/* 6 */ { 16, 16, 0xff00 },
295/* f-op1.number.f-r1.number.f-disp24.disp24. */
296/* 7 */ { 32, 32, 0xff000000 },
297/* f-op1.number.f-r1.src1.f-op2.number.f-r2.src2.f-disp16.disp16. */
298/* 8 */ { 32, 32, 0xf0f00000 },
299/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2.f-disp16.disp16. */
300/* 9 */ { 32, 32, 0xfff00000 },
301/* f-op1.number.f-r1.src1.f-op2.number.f-r2.src2. */
302/* 10 */ { 16, 16, 0xf0f0 },
303/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2.f-simm16.simm16. */
304/* 11 */ { 32, 32, 0xfff00000 },
305/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2.f-uimm16.uimm16. */
306/* 12 */ { 32, 32, 0xfff00000 },
23cf992f 307/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-simm16.number. */
853713a7 308/* 13 */ { 32, 32, 0xf0f0ffff },
23cf992f 309/* f-op1.number.f-r1.number.f-op2.number.f-r2.sr. */
853713a7 310/* 14 */ { 16, 16, 0xfff0 },
23cf992f 311/* f-op1.number.f-r1.dr.f-uimm24.uimm24. */
853713a7 312/* 15 */ { 32, 32, 0xf0000000 },
23cf992f 313/* f-op1.number.f-r1.dr.f-op2.number.f-r2.number.f-simm16.slo16. */
853713a7 314/* 16 */ { 32, 32, 0xf0ff0000 },
23cf992f 315/* f-op1.number.f-r1.dr.f-op2.number.f-r2.number. */
853713a7 316/* 17 */ { 16, 16, 0xf0ff },
23cf992f 317/* f-op1.number.f-r1.dr.f-op2.number.f-r2.scr. */
853713a7 318/* 18 */ { 16, 16, 0xf0f0 },
23cf992f 319/* f-op1.number.f-r1.src1.f-op2.number.f-r2.number. */
853713a7 320/* 19 */ { 16, 16, 0xf0ff },
23cf992f 321/* f-op1.number.f-r1.dcr.f-op2.number.f-r2.sr. */
853713a7 322/* 20 */ { 16, 16, 0xf0f0 },
23cf992f 323/* f-op1.number.f-r1.number.f-op2.number.f-r2.number. */
853713a7 324/* 21 */ { 16, 16, 0xffff },
23cf992f 325/* f-op1.number.f-r1.dr.f-op2.number.f-r2.number.f-hi16.hi16. */
853713a7 326/* 22 */ { 32, 32, 0xf0ff0000 },
23cf992f 327/* f-op1.number.f-r1.dr.f-shift-op2.number.f-uimm5.uimm5. */
853713a7 328/* 23 */ { 16, 16, 0xf0e0 },
23cf992f 329/* f-op1.number.f-r1.src1.f-op2.number.f-r2.src2.f-simm16.slo16. */
853713a7 330/* 24 */ { 32, 32, 0xf0f00000 },
23cf992f 331/* f-op1.number.f-r1.number.f-op2.number.f-uimm4.uimm4. */
853713a7 332/* 25 */ { 16, 16, 0xfff0 },
9c03036a
DE
333};
334
23cf992f
NC
335#define A(a) (1 << CGEN_CAT3 (CGEN_INSN,_,a))
336#define SYN(n) (& syntax_table[n])
337#define FMT(n) (& format_table[n])
338
853713a7 339const CGEN_INSN m32r_cgen_insn_table_entries[CGEN_NUM_INSNS] =
5d07b6cf
DE
340{
341 /* null first entry, end of all hash chains */
23cf992f 342 { { 0 }, 0 },
9c03036a
DE
343/* add $dr,$sr */
344 {
23cf992f
NC
345 { 1, 1, 1, 1 },
346 "add", "add", SYN (0), FMT (0), 0xa0,
853713a7 347 { 0, 0, { 0 } }
9c03036a
DE
348 },
349/* add3 $dr,$sr,$slo16 */
350 {
23cf992f
NC
351 { 1, 1, 1, 1 },
352 "add3", "add3", SYN (1), FMT (1), 0x80a00000,
853713a7 353 { 0, 0, { 0 } }
9c03036a
DE
354 },
355/* and $dr,$sr */
356 {
23cf992f
NC
357 { 1, 1, 1, 1 },
358 "and", "and", SYN (0), FMT (0), 0xc0,
853713a7 359 { 0, 0, { 0 } }
9c03036a
DE
360 },
361/* and3 $dr,$sr,$uimm16 */
362 {
23cf992f
NC
363 { 1, 1, 1, 1 },
364 "and3", "and3", SYN (2), FMT (2), 0x80c00000,
853713a7 365 { 0, 0, { 0 } }
9c03036a
DE
366 },
367/* or $dr,$sr */
368 {
23cf992f
NC
369 { 1, 1, 1, 1 },
370 "or", "or", SYN (0), FMT (0), 0xe0,
853713a7 371 { 0, 0, { 0 } }
9c03036a
DE
372 },
373/* or3 $dr,$sr,$ulo16 */
374 {
23cf992f
NC
375 { 1, 1, 1, 1 },
376 "or3", "or3", SYN (3), FMT (3), 0x80e00000,
853713a7 377 { 0, 0, { 0 } }
9c03036a
DE
378 },
379/* xor $dr,$sr */
380 {
23cf992f
NC
381 { 1, 1, 1, 1 },
382 "xor", "xor", SYN (0), FMT (0), 0xd0,
853713a7 383 { 0, 0, { 0 } }
9c03036a
DE
384 },
385/* xor3 $dr,$sr,$uimm16 */
386 {
23cf992f
NC
387 { 1, 1, 1, 1 },
388 "xor3", "xor3", SYN (2), FMT (2), 0x80d00000,
853713a7 389 { 0, 0, { 0 } }
9c03036a
DE
390 },
391/* addi $dr,$simm8 */
392 {
23cf992f
NC
393 { 1, 1, 1, 1 },
394 "addi", "addi", SYN (4), FMT (4), 0x4000,
853713a7 395 { 0, 0, { 0 } }
9c03036a
DE
396 },
397/* addv $dr,$sr */
398 {
23cf992f
NC
399 { 1, 1, 1, 1 },
400 "addv", "addv", SYN (0), FMT (0), 0x80,
853713a7 401 { 0, 0, { 0 } }
9c03036a
DE
402 },
403/* addv3 $dr,$sr,$simm16 */
404 {
23cf992f
NC
405 { 1, 1, 1, 1 },
406 "addv3", "addv3", SYN (5), FMT (5), 0x80800000,
853713a7 407 { 0, 0, { 0 } }
9c03036a
DE
408 },
409/* addx $dr,$sr */
410 {
23cf992f
NC
411 { 1, 1, 1, 1 },
412 "addx", "addx", SYN (0), FMT (0), 0x90,
853713a7 413 { 0, 0, { 0 } }
9c03036a
DE
414 },
415/* bc $disp8 */
416 {
23cf992f
NC
417 { 1, 1, 1, 1 },
418 "bc8", "bc", SYN (6), FMT (6), 0x7c00,
853713a7 419 { 0, 0|A(RELAX_BC)|A(RELAXABLE)|A(COND_CTI), { 0 } }
9c03036a
DE
420 },
421/* bc.s $disp8 */
422 {
23cf992f
NC
423 { 1, 1, 1, 1 },
424 "bc8.s", "bc.s", SYN (6), FMT (6), 0x7c00,
853713a7 425 { 0, 0|A(ALIAS)|A(COND_CTI), { 0 } }
9c03036a
DE
426 },
427/* bc $disp24 */
428 {
23cf992f
NC
429 { 1, 1, 1, 1 },
430 "bc24", "bc", SYN (7), FMT (7), 0xfc000000,
853713a7 431 { 0, 0|A(RELAX_BC)|A(RELAX)|A(COND_CTI), { 0 } }
9c03036a
DE
432 },
433/* bc.l $disp24 */
434 {
23cf992f
NC
435 { 1, 1, 1, 1 },
436 "bc24.l", "bc.l", SYN (7), FMT (7), 0xfc000000,
853713a7 437 { 0, 0|A(ALIAS)|A(COND_CTI), { 0 } }
9c03036a
DE
438 },
439/* beq $src1,$src2,$disp16 */
440 {
23cf992f
NC
441 { 1, 1, 1, 1 },
442 "beq", "beq", SYN (8), FMT (8), 0xb0000000,
853713a7 443 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
444 },
445/* beqz $src2,$disp16 */
446 {
23cf992f
NC
447 { 1, 1, 1, 1 },
448 "beqz", "beqz", SYN (9), FMT (9), 0xb0800000,
853713a7 449 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
450 },
451/* bgez $src2,$disp16 */
452 {
23cf992f
NC
453 { 1, 1, 1, 1 },
454 "bgez", "bgez", SYN (9), FMT (9), 0xb0b00000,
853713a7 455 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
456 },
457/* bgtz $src2,$disp16 */
458 {
23cf992f
NC
459 { 1, 1, 1, 1 },
460 "bgtz", "bgtz", SYN (9), FMT (9), 0xb0d00000,
853713a7 461 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
462 },
463/* blez $src2,$disp16 */
464 {
23cf992f
NC
465 { 1, 1, 1, 1 },
466 "blez", "blez", SYN (9), FMT (9), 0xb0c00000,
853713a7 467 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
468 },
469/* bltz $src2,$disp16 */
470 {
23cf992f
NC
471 { 1, 1, 1, 1 },
472 "bltz", "bltz", SYN (9), FMT (9), 0xb0a00000,
853713a7 473 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
474 },
475/* bnez $src2,$disp16 */
476 {
23cf992f
NC
477 { 1, 1, 1, 1 },
478 "bnez", "bnez", SYN (9), FMT (9), 0xb0900000,
853713a7 479 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
480 },
481/* bl $disp8 */
482 {
23cf992f
NC
483 { 1, 1, 1, 1 },
484 "bl8", "bl", SYN (6), FMT (6), 0x7e00,
853713a7 485 { 0, 0|A(FILL_SLOT)|A(RELAX_BL)|A(RELAXABLE)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
486 },
487/* bl.s $disp8 */
488 {
23cf992f
NC
489 { 1, 1, 1, 1 },
490 "bl8.s", "bl.s", SYN (6), FMT (6), 0x7e00,
853713a7 491 { 0, 0|A(FILL_SLOT)|A(ALIAS)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
492 },
493/* bl $disp24 */
494 {
23cf992f
NC
495 { 1, 1, 1, 1 },
496 "bl24", "bl", SYN (7), FMT (7), 0xfe000000,
853713a7 497 { 0, 0|A(RELAX_BL)|A(RELAX)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
498 },
499/* bl.l $disp24 */
500 {
23cf992f
NC
501 { 1, 1, 1, 1 },
502 "bl24.l", "bl.l", SYN (7), FMT (7), 0xfe000000,
853713a7 503 { 0, 0|A(ALIAS)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
504 },
505/* bnc $disp8 */
506 {
23cf992f
NC
507 { 1, 1, 1, 1 },
508 "bnc8", "bnc", SYN (6), FMT (6), 0x7d00,
853713a7 509 { 0, 0|A(RELAX_BNC)|A(RELAXABLE)|A(COND_CTI), { 0 } }
9c03036a
DE
510 },
511/* bnc.s $disp8 */
512 {
23cf992f
NC
513 { 1, 1, 1, 1 },
514 "bnc8.s", "bnc.s", SYN (6), FMT (6), 0x7d00,
853713a7 515 { 0, 0|A(ALIAS)|A(COND_CTI), { 0 } }
9c03036a
DE
516 },
517/* bnc $disp24 */
518 {
23cf992f
NC
519 { 1, 1, 1, 1 },
520 "bnc24", "bnc", SYN (7), FMT (7), 0xfd000000,
853713a7 521 { 0, 0|A(RELAX_BNC)|A(RELAX)|A(COND_CTI), { 0 } }
9c03036a
DE
522 },
523/* bnc.l $disp24 */
524 {
23cf992f
NC
525 { 1, 1, 1, 1 },
526 "bnc24.l", "bnc.l", SYN (7), FMT (7), 0xfd000000,
853713a7 527 { 0, 0|A(ALIAS)|A(COND_CTI), { 0 } }
9c03036a
DE
528 },
529/* bne $src1,$src2,$disp16 */
530 {
23cf992f
NC
531 { 1, 1, 1, 1 },
532 "bne", "bne", SYN (8), FMT (8), 0xb0100000,
853713a7 533 { 0, 0|A(COND_CTI), { 0 } }
9c03036a
DE
534 },
535/* bra $disp8 */
536 {
23cf992f
NC
537 { 1, 1, 1, 1 },
538 "bra8", "bra", SYN (6), FMT (6), 0x7f00,
853713a7 539 { 0, 0|A(RELAX_BRA)|A(RELAXABLE)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
540 },
541/* bra.s $disp8 */
542 {
23cf992f
NC
543 { 1, 1, 1, 1 },
544 "bra8.s", "bra.s", SYN (6), FMT (6), 0x7f00,
853713a7 545 { 0, 0|A(ALIAS)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
546 },
547/* bra $disp24 */
548 {
23cf992f
NC
549 { 1, 1, 1, 1 },
550 "bra24", "bra", SYN (7), FMT (7), 0xff000000,
853713a7 551 { 0, 0|A(RELAX_BRA)|A(RELAX)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
552 },
553/* bra.l $disp24 */
554 {
23cf992f
NC
555 { 1, 1, 1, 1 },
556 "bra24.l", "bra.l", SYN (7), FMT (7), 0xff000000,
853713a7 557 { 0, 0|A(ALIAS)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
558 },
559/* cmp $src1,$src2 */
560 {
23cf992f
NC
561 { 1, 1, 1, 1 },
562 "cmp", "cmp", SYN (10), FMT (10), 0x40,
853713a7 563 { 0, 0, { 0 } }
9c03036a
DE
564 },
565/* cmpi $src2,$simm16 */
566 {
23cf992f
NC
567 { 1, 1, 1, 1 },
568 "cmpi", "cmpi", SYN (11), FMT (11), 0x80400000,
853713a7 569 { 0, 0, { 0 } }
9c03036a
DE
570 },
571/* cmpu $src1,$src2 */
572 {
23cf992f
NC
573 { 1, 1, 1, 1 },
574 "cmpu", "cmpu", SYN (10), FMT (10), 0x50,
853713a7 575 { 0, 0, { 0 } }
23cf992f
NC
576 },
577/* cmpui $src2,$uimm16 */
578 {
579 { 1, 1, 1, 1 },
580 "cmpui", "cmpui", SYN (12), FMT (12), 0x80500000,
853713a7 581 { 0, 0, { 0 } }
9c03036a
DE
582 },
583/* div $dr,$sr */
584 {
23cf992f 585 { 1, 1, 1, 1 },
853713a7
DE
586 "div", "div", SYN (0), FMT (13), 0x90000000,
587 { 0, 0, { 0 } }
9c03036a
DE
588 },
589/* divu $dr,$sr */
590 {
23cf992f 591 { 1, 1, 1, 1 },
853713a7
DE
592 "divu", "divu", SYN (0), FMT (13), 0x90100000,
593 { 0, 0, { 0 } }
9c03036a
DE
594 },
595/* rem $dr,$sr */
596 {
23cf992f 597 { 1, 1, 1, 1 },
853713a7
DE
598 "rem", "rem", SYN (0), FMT (13), 0x90200000,
599 { 0, 0, { 0 } }
9c03036a
DE
600 },
601/* remu $dr,$sr */
602 {
23cf992f 603 { 1, 1, 1, 1 },
853713a7
DE
604 "remu", "remu", SYN (0), FMT (13), 0x90300000,
605 { 0, 0, { 0 } }
9c03036a
DE
606 },
607/* jl $sr */
608 {
23cf992f 609 { 1, 1, 1, 1 },
853713a7
DE
610 "jl", "jl", SYN (13), FMT (14), 0x1ec0,
611 { 0, 0|A(FILL_SLOT)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
612 },
613/* jmp $sr */
614 {
23cf992f 615 { 1, 1, 1, 1 },
853713a7
DE
616 "jmp", "jmp", SYN (13), FMT (14), 0x1fc0,
617 { 0, 0|A(UNCOND_CTI), { 0 } }
9c03036a
DE
618 },
619/* ld $dr,@$sr */
620 {
23cf992f 621 { 1, 1, 1, 1 },
853713a7
DE
622 "ld", "ld", SYN (14), FMT (0), 0x20c0,
623 { 0, 0, { 0 } }
9c03036a
DE
624 },
625/* ld $dr,@($sr) */
626 {
23cf992f 627 { 1, 1, 1, 1 },
853713a7
DE
628 "ld-2", "ld", SYN (15), FMT (0), 0x20c0,
629 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
630 },
631/* ld $dr,@($slo16,$sr) */
632 {
23cf992f 633 { 1, 1, 1, 1 },
853713a7
DE
634 "ld-d", "ld", SYN (16), FMT (1), 0xa0c00000,
635 { 0, 0, { 0 } }
9c03036a
DE
636 },
637/* ld $dr,@($sr,$slo16) */
638 {
23cf992f 639 { 1, 1, 1, 1 },
853713a7
DE
640 "ld-d2", "ld", SYN (17), FMT (1), 0xa0c00000,
641 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
642 },
643/* ldb $dr,@$sr */
644 {
23cf992f 645 { 1, 1, 1, 1 },
853713a7
DE
646 "ldb", "ldb", SYN (14), FMT (0), 0x2080,
647 { 0, 0, { 0 } }
9c03036a
DE
648 },
649/* ldb $dr,@($sr) */
650 {
23cf992f 651 { 1, 1, 1, 1 },
853713a7
DE
652 "ldb-2", "ldb", SYN (15), FMT (0), 0x2080,
653 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
654 },
655/* ldb $dr,@($slo16,$sr) */
656 {
23cf992f 657 { 1, 1, 1, 1 },
853713a7
DE
658 "ldb-d", "ldb", SYN (16), FMT (1), 0xa0800000,
659 { 0, 0, { 0 } }
9c03036a
DE
660 },
661/* ldb $dr,@($sr,$slo16) */
662 {
23cf992f 663 { 1, 1, 1, 1 },
853713a7
DE
664 "ldb-d2", "ldb", SYN (17), FMT (1), 0xa0800000,
665 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
666 },
667/* ldh $dr,@$sr */
668 {
23cf992f 669 { 1, 1, 1, 1 },
853713a7
DE
670 "ldh", "ldh", SYN (14), FMT (0), 0x20a0,
671 { 0, 0, { 0 } }
9c03036a
DE
672 },
673/* ldh $dr,@($sr) */
674 {
23cf992f 675 { 1, 1, 1, 1 },
853713a7
DE
676 "ldh-2", "ldh", SYN (15), FMT (0), 0x20a0,
677 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
678 },
679/* ldh $dr,@($slo16,$sr) */
680 {
23cf992f 681 { 1, 1, 1, 1 },
853713a7
DE
682 "ldh-d", "ldh", SYN (16), FMT (1), 0xa0a00000,
683 { 0, 0, { 0 } }
9c03036a
DE
684 },
685/* ldh $dr,@($sr,$slo16) */
686 {
23cf992f 687 { 1, 1, 1, 1 },
853713a7
DE
688 "ldh-d2", "ldh", SYN (17), FMT (1), 0xa0a00000,
689 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
690 },
691/* ldub $dr,@$sr */
692 {
23cf992f 693 { 1, 1, 1, 1 },
853713a7
DE
694 "ldub", "ldub", SYN (14), FMT (0), 0x2090,
695 { 0, 0, { 0 } }
9c03036a
DE
696 },
697/* ldub $dr,@($sr) */
698 {
23cf992f 699 { 1, 1, 1, 1 },
853713a7
DE
700 "ldub-2", "ldub", SYN (15), FMT (0), 0x2090,
701 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
702 },
703/* ldub $dr,@($slo16,$sr) */
704 {
23cf992f 705 { 1, 1, 1, 1 },
853713a7
DE
706 "ldub-d", "ldub", SYN (16), FMT (1), 0xa0900000,
707 { 0, 0, { 0 } }
9c03036a
DE
708 },
709/* ldub $dr,@($sr,$slo16) */
710 {
23cf992f 711 { 1, 1, 1, 1 },
853713a7
DE
712 "ldub-d2", "ldub", SYN (17), FMT (1), 0xa0900000,
713 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
714 },
715/* lduh $dr,@$sr */
716 {
23cf992f 717 { 1, 1, 1, 1 },
853713a7
DE
718 "lduh", "lduh", SYN (14), FMT (0), 0x20b0,
719 { 0, 0, { 0 } }
9c03036a
DE
720 },
721/* lduh $dr,@($sr) */
722 {
23cf992f 723 { 1, 1, 1, 1 },
853713a7
DE
724 "lduh-2", "lduh", SYN (15), FMT (0), 0x20b0,
725 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
726 },
727/* lduh $dr,@($slo16,$sr) */
728 {
23cf992f 729 { 1, 1, 1, 1 },
853713a7
DE
730 "lduh-d", "lduh", SYN (16), FMT (1), 0xa0b00000,
731 { 0, 0, { 0 } }
9c03036a
DE
732 },
733/* lduh $dr,@($sr,$slo16) */
734 {
23cf992f 735 { 1, 1, 1, 1 },
853713a7
DE
736 "lduh-d2", "lduh", SYN (17), FMT (1), 0xa0b00000,
737 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
738 },
739/* ld $dr,@$sr+ */
740 {
23cf992f 741 { 1, 1, 1, 1 },
853713a7
DE
742 "ld-plus", "ld", SYN (18), FMT (0), 0x20e0,
743 { 0, 0, { 0 } }
9c03036a
DE
744 },
745/* ld24 $dr,$uimm24 */
746 {
23cf992f 747 { 1, 1, 1, 1 },
853713a7
DE
748 "ld24", "ld24", SYN (19), FMT (15), 0xe0000000,
749 { 0, 0, { 0 } }
9c03036a
DE
750 },
751/* ldi $dr,$simm8 */
752 {
23cf992f
NC
753 { 1, 1, 1, 1 },
754 "ldi8", "ldi", SYN (4), FMT (4), 0x6000,
853713a7 755 { 0, 0, { 0 } }
9c03036a
DE
756 },
757/* ldi8 $dr,$simm8 */
758 {
23cf992f
NC
759 { 1, 1, 1, 1 },
760 "ldi8a", "ldi8", SYN (4), FMT (4), 0x6000,
853713a7 761 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
762 },
763/* ldi $dr,$slo16 */
764 {
23cf992f 765 { 1, 1, 1, 1 },
853713a7
DE
766 "ldi16", "ldi", SYN (20), FMT (16), 0x90f00000,
767 { 0, 0, { 0 } }
9c03036a
DE
768 },
769/* ldi16 $dr,$slo16 */
770 {
23cf992f 771 { 1, 1, 1, 1 },
853713a7
DE
772 "ldi16a", "ldi16", SYN (20), FMT (16), 0x90f00000,
773 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
774 },
775/* lock $dr,@$sr */
776 {
23cf992f 777 { 1, 1, 1, 1 },
853713a7
DE
778 "lock", "lock", SYN (14), FMT (0), 0x20d0,
779 { 0, 0, { 0 } }
9c03036a
DE
780 },
781/* machi $src1,$src2 */
782 {
23cf992f
NC
783 { 1, 1, 1, 1 },
784 "machi", "machi", SYN (10), FMT (10), 0x3040,
853713a7 785 { 0, 0, { 0 } }
9c03036a
DE
786 },
787/* maclo $src1,$src2 */
788 {
23cf992f
NC
789 { 1, 1, 1, 1 },
790 "maclo", "maclo", SYN (10), FMT (10), 0x3050,
853713a7 791 { 0, 0, { 0 } }
9c03036a
DE
792 },
793/* macwhi $src1,$src2 */
794 {
23cf992f
NC
795 { 1, 1, 1, 1 },
796 "macwhi", "macwhi", SYN (10), FMT (10), 0x3060,
853713a7 797 { 0, 0, { 0 } }
9c03036a
DE
798 },
799/* macwlo $src1,$src2 */
800 {
23cf992f
NC
801 { 1, 1, 1, 1 },
802 "macwlo", "macwlo", SYN (10), FMT (10), 0x3070,
853713a7 803 { 0, 0, { 0 } }
9c03036a
DE
804 },
805/* mul $dr,$sr */
806 {
23cf992f
NC
807 { 1, 1, 1, 1 },
808 "mul", "mul", SYN (0), FMT (0), 0x1060,
853713a7 809 { 0, 0, { 0 } }
9c03036a
DE
810 },
811/* mulhi $src1,$src2 */
812 {
23cf992f
NC
813 { 1, 1, 1, 1 },
814 "mulhi", "mulhi", SYN (10), FMT (10), 0x3000,
853713a7 815 { 0, 0, { 0 } }
9c03036a
DE
816 },
817/* mullo $src1,$src2 */
818 {
23cf992f
NC
819 { 1, 1, 1, 1 },
820 "mullo", "mullo", SYN (10), FMT (10), 0x3010,
853713a7 821 { 0, 0, { 0 } }
9c03036a
DE
822 },
823/* mulwhi $src1,$src2 */
824 {
23cf992f
NC
825 { 1, 1, 1, 1 },
826 "mulwhi", "mulwhi", SYN (10), FMT (10), 0x3020,
853713a7 827 { 0, 0, { 0 } }
9c03036a
DE
828 },
829/* mulwlo $src1,$src2 */
830 {
23cf992f
NC
831 { 1, 1, 1, 1 },
832 "mulwlo", "mulwlo", SYN (10), FMT (10), 0x3030,
853713a7 833 { 0, 0, { 0 } }
9c03036a
DE
834 },
835/* mv $dr,$sr */
836 {
23cf992f
NC
837 { 1, 1, 1, 1 },
838 "mv", "mv", SYN (0), FMT (0), 0x1080,
853713a7 839 { 0, 0, { 0 } }
9c03036a
DE
840 },
841/* mvfachi $dr */
842 {
23cf992f 843 { 1, 1, 1, 1 },
853713a7
DE
844 "mvfachi", "mvfachi", SYN (21), FMT (17), 0x50f0,
845 { 0, 0, { 0 } }
9c03036a
DE
846 },
847/* mvfaclo $dr */
848 {
23cf992f 849 { 1, 1, 1, 1 },
853713a7
DE
850 "mvfaclo", "mvfaclo", SYN (21), FMT (17), 0x50f1,
851 { 0, 0, { 0 } }
9c03036a
DE
852 },
853/* mvfacmi $dr */
854 {
23cf992f 855 { 1, 1, 1, 1 },
853713a7
DE
856 "mvfacmi", "mvfacmi", SYN (21), FMT (17), 0x50f2,
857 { 0, 0, { 0 } }
9c03036a
DE
858 },
859/* mvfc $dr,$scr */
860 {
23cf992f 861 { 1, 1, 1, 1 },
853713a7
DE
862 "mvfc", "mvfc", SYN (22), FMT (18), 0x1090,
863 { 0, 0, { 0 } }
9c03036a
DE
864 },
865/* mvtachi $src1 */
866 {
23cf992f 867 { 1, 1, 1, 1 },
853713a7
DE
868 "mvtachi", "mvtachi", SYN (23), FMT (19), 0x5070,
869 { 0, 0, { 0 } }
9c03036a
DE
870 },
871/* mvtaclo $src1 */
872 {
23cf992f 873 { 1, 1, 1, 1 },
853713a7
DE
874 "mvtaclo", "mvtaclo", SYN (23), FMT (19), 0x5071,
875 { 0, 0, { 0 } }
9c03036a
DE
876 },
877/* mvtc $sr,$dcr */
878 {
23cf992f 879 { 1, 1, 1, 1 },
853713a7
DE
880 "mvtc", "mvtc", SYN (24), FMT (20), 0x10a0,
881 { 0, 0, { 0 } }
9c03036a
DE
882 },
883/* neg $dr,$sr */
884 {
23cf992f
NC
885 { 1, 1, 1, 1 },
886 "neg", "neg", SYN (0), FMT (0), 0x30,
853713a7 887 { 0, 0, { 0 } }
9c03036a
DE
888 },
889/* nop */
890 {
23cf992f 891 { 1, 1, 1, 1 },
853713a7
DE
892 "nop", "nop", SYN (25), FMT (21), 0x7000,
893 { 0, 0, { 0 } }
9c03036a
DE
894 },
895/* not $dr,$sr */
896 {
23cf992f
NC
897 { 1, 1, 1, 1 },
898 "not", "not", SYN (0), FMT (0), 0xb0,
853713a7 899 { 0, 0, { 0 } }
9c03036a
DE
900 },
901/* rac */
902 {
23cf992f 903 { 1, 1, 1, 1 },
853713a7
DE
904 "rac", "rac", SYN (25), FMT (21), 0x5090,
905 { 0, 0, { 0 } }
9c03036a
DE
906 },
907/* rach */
908 {
23cf992f 909 { 1, 1, 1, 1 },
853713a7
DE
910 "rach", "rach", SYN (25), FMT (21), 0x5080,
911 { 0, 0, { 0 } }
9c03036a
DE
912 },
913/* rte */
914 {
23cf992f 915 { 1, 1, 1, 1 },
853713a7
DE
916 "rte", "rte", SYN (25), FMT (21), 0x10d6,
917 { 0, 0|A(UNCOND_CTI), { 0 } }
9c03036a
DE
918 },
919/* seth $dr,$hi16 */
920 {
23cf992f 921 { 1, 1, 1, 1 },
853713a7
DE
922 "seth", "seth", SYN (26), FMT (22), 0xd0c00000,
923 { 0, 0, { 0 } }
9c03036a
DE
924 },
925/* sll $dr,$sr */
926 {
23cf992f
NC
927 { 1, 1, 1, 1 },
928 "sll", "sll", SYN (0), FMT (0), 0x1040,
853713a7 929 { 0, 0, { 0 } }
9c03036a
DE
930 },
931/* sll3 $dr,$sr,$simm16 */
932 {
23cf992f
NC
933 { 1, 1, 1, 1 },
934 "sll3", "sll3", SYN (5), FMT (5), 0x90c00000,
853713a7 935 { 0, 0, { 0 } }
9c03036a
DE
936 },
937/* slli $dr,$uimm5 */
938 {
23cf992f 939 { 1, 1, 1, 1 },
853713a7
DE
940 "slli", "slli", SYN (27), FMT (23), 0x5040,
941 { 0, 0, { 0 } }
9c03036a
DE
942 },
943/* sra $dr,$sr */
944 {
23cf992f
NC
945 { 1, 1, 1, 1 },
946 "sra", "sra", SYN (0), FMT (0), 0x1020,
853713a7 947 { 0, 0, { 0 } }
9c03036a
DE
948 },
949/* sra3 $dr,$sr,$simm16 */
950 {
23cf992f
NC
951 { 1, 1, 1, 1 },
952 "sra3", "sra3", SYN (5), FMT (5), 0x90a00000,
853713a7 953 { 0, 0, { 0 } }
9c03036a
DE
954 },
955/* srai $dr,$uimm5 */
956 {
23cf992f 957 { 1, 1, 1, 1 },
853713a7
DE
958 "srai", "srai", SYN (27), FMT (23), 0x5020,
959 { 0, 0, { 0 } }
9c03036a
DE
960 },
961/* srl $dr,$sr */
962 {
23cf992f
NC
963 { 1, 1, 1, 1 },
964 "srl", "srl", SYN (0), FMT (0), 0x1000,
853713a7 965 { 0, 0, { 0 } }
9c03036a
DE
966 },
967/* srl3 $dr,$sr,$simm16 */
968 {
23cf992f
NC
969 { 1, 1, 1, 1 },
970 "srl3", "srl3", SYN (5), FMT (5), 0x90800000,
853713a7 971 { 0, 0, { 0 } }
9c03036a
DE
972 },
973/* srli $dr,$uimm5 */
974 {
23cf992f 975 { 1, 1, 1, 1 },
853713a7
DE
976 "srli", "srli", SYN (27), FMT (23), 0x5000,
977 { 0, 0, { 0 } }
9c03036a
DE
978 },
979/* st $src1,@$src2 */
980 {
23cf992f 981 { 1, 1, 1, 1 },
853713a7
DE
982 "st", "st", SYN (28), FMT (10), 0x2040,
983 { 0, 0, { 0 } }
9c03036a
DE
984 },
985/* st $src1,@($src2) */
986 {
23cf992f 987 { 1, 1, 1, 1 },
853713a7
DE
988 "st-2", "st", SYN (29), FMT (10), 0x2040,
989 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
990 },
991/* st $src1,@($slo16,$src2) */
992 {
23cf992f 993 { 1, 1, 1, 1 },
853713a7
DE
994 "st-d", "st", SYN (30), FMT (24), 0xa0400000,
995 { 0, 0, { 0 } }
9c03036a
DE
996 },
997/* st $src1,@($src2,$slo16) */
998 {
23cf992f 999 { 1, 1, 1, 1 },
853713a7
DE
1000 "st-d2", "st", SYN (31), FMT (24), 0xa0400000,
1001 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1002 },
1003/* stb $src1,@$src2 */
1004 {
23cf992f 1005 { 1, 1, 1, 1 },
853713a7
DE
1006 "stb", "stb", SYN (28), FMT (10), 0x2000,
1007 { 0, 0, { 0 } }
9c03036a
DE
1008 },
1009/* stb $src1,@($src2) */
1010 {
23cf992f 1011 { 1, 1, 1, 1 },
853713a7
DE
1012 "stb-2", "stb", SYN (29), FMT (10), 0x2000,
1013 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1014 },
1015/* stb $src1,@($slo16,$src2) */
1016 {
23cf992f 1017 { 1, 1, 1, 1 },
853713a7
DE
1018 "stb-d", "stb", SYN (30), FMT (24), 0xa0000000,
1019 { 0, 0, { 0 } }
9c03036a
DE
1020 },
1021/* stb $src1,@($src2,$slo16) */
1022 {
23cf992f 1023 { 1, 1, 1, 1 },
853713a7
DE
1024 "stb-d2", "stb", SYN (31), FMT (24), 0xa0000000,
1025 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1026 },
1027/* sth $src1,@$src2 */
1028 {
23cf992f 1029 { 1, 1, 1, 1 },
853713a7
DE
1030 "sth", "sth", SYN (28), FMT (10), 0x2020,
1031 { 0, 0, { 0 } }
9c03036a
DE
1032 },
1033/* sth $src1,@($src2) */
1034 {
23cf992f 1035 { 1, 1, 1, 1 },
853713a7
DE
1036 "sth-2", "sth", SYN (29), FMT (10), 0x2020,
1037 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1038 },
1039/* sth $src1,@($slo16,$src2) */
1040 {
23cf992f 1041 { 1, 1, 1, 1 },
853713a7
DE
1042 "sth-d", "sth", SYN (30), FMT (24), 0xa0200000,
1043 { 0, 0, { 0 } }
9c03036a
DE
1044 },
1045/* sth $src1,@($src2,$slo16) */
1046 {
23cf992f 1047 { 1, 1, 1, 1 },
853713a7
DE
1048 "sth-d2", "sth", SYN (31), FMT (24), 0xa0200000,
1049 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1050 },
1051/* st $src1,@+$src2 */
1052 {
23cf992f 1053 { 1, 1, 1, 1 },
853713a7
DE
1054 "st-plus", "st", SYN (32), FMT (10), 0x2060,
1055 { 0, 0, { 0 } }
9c03036a
DE
1056 },
1057/* st $src1,@-$src2 */
1058 {
23cf992f 1059 { 1, 1, 1, 1 },
853713a7
DE
1060 "st-minus", "st", SYN (33), FMT (10), 0x2070,
1061 { 0, 0, { 0 } }
9c03036a
DE
1062 },
1063/* sub $dr,$sr */
1064 {
23cf992f
NC
1065 { 1, 1, 1, 1 },
1066 "sub", "sub", SYN (0), FMT (0), 0x20,
853713a7 1067 { 0, 0, { 0 } }
9c03036a
DE
1068 },
1069/* subv $dr,$sr */
1070 {
23cf992f
NC
1071 { 1, 1, 1, 1 },
1072 "subv", "subv", SYN (0), FMT (0), 0x0,
853713a7 1073 { 0, 0, { 0 } }
9c03036a
DE
1074 },
1075/* subx $dr,$sr */
1076 {
23cf992f
NC
1077 { 1, 1, 1, 1 },
1078 "subx", "subx", SYN (0), FMT (0), 0x10,
853713a7 1079 { 0, 0, { 0 } }
9c03036a
DE
1080 },
1081/* trap $uimm4 */
1082 {
23cf992f 1083 { 1, 1, 1, 1 },
853713a7
DE
1084 "trap", "trap", SYN (34), FMT (25), 0x10f0,
1085 { 0, 0|A(FILL_SLOT)|A(UNCOND_CTI), { 0 } }
9c03036a
DE
1086 },
1087/* unlock $src1,@$src2 */
1088 {
23cf992f 1089 { 1, 1, 1, 1 },
853713a7
DE
1090 "unlock", "unlock", SYN (28), FMT (10), 0x2050,
1091 { 0, 0, { 0 } }
9c03036a
DE
1092 },
1093/* push $src1 */
1094 {
23cf992f 1095 { 1, 1, 1, 1 },
853713a7
DE
1096 "push", "push", SYN (23), FMT (19), 0x207f,
1097 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1098 },
1099/* pop $dr */
1100 {
23cf992f 1101 { 1, 1, 1, 1 },
853713a7
DE
1102 "pop", "pop", SYN (21), FMT (17), 0x20ef,
1103 { 0, 0|A(ALIAS), { 0 } }
9c03036a
DE
1104 },
1105};
1106
23cf992f
NC
1107#undef A
1108#undef SYN
1109#undef FMT
1110
853713a7
DE
1111CGEN_INSN_TABLE m32r_cgen_insn_table =
1112{
9c03036a 1113 & m32r_cgen_insn_table_entries[0],
23cf992f 1114 sizeof (CGEN_INSN),
9c03036a
DE
1115 CGEN_NUM_INSNS,
1116 NULL,
1117 m32r_cgen_asm_hash_insn, CGEN_ASM_HASH_SIZE,
1118 m32r_cgen_dis_hash_insn, CGEN_DIS_HASH_SIZE
1119};
1120
1121/* The hash functions are recorded here to help keep assembler code out of
1122 the disassembler and vice versa. */
1123
1124unsigned int
1125m32r_cgen_asm_hash_insn (insn)
853713a7 1126 const char * insn;
9c03036a
DE
1127{
1128 return CGEN_ASM_HASH (insn);
1129}
1130
1131unsigned int
1132m32r_cgen_dis_hash_insn (buf, value)
5d07b6cf 1133 const char * buf;
9c03036a
DE
1134 unsigned long value;
1135{
1136 return CGEN_DIS_HASH (buf, value);
1137}
1138
853713a7 1139CGEN_OPCODE_DATA m32r_cgen_opcode_data =
5d07b6cf
DE
1140{
1141 & m32r_cgen_hw_entries[0],
9c03036a
DE
1142 & m32r_cgen_insn_table,
1143};
1144
1145void
1146m32r_cgen_init_tables (mach)
1147 int mach;
1148{
1149}
1150
1151/* Main entry point for stuffing values in cgen_fields. */
1152
1153CGEN_INLINE void
1154m32r_cgen_set_operand (opindex, valuep, fields)
1155 int opindex;
5d07b6cf 1156 const long * valuep;
853713a7 1157 CGEN_FIELDS * fields;
9c03036a
DE
1158{
1159 switch (opindex)
1160 {
23cf992f 1161 case M32R_OPERAND_SR :
853713a7 1162 fields->f_r2 = * valuep;
9c03036a 1163 break;
23cf992f 1164 case M32R_OPERAND_DR :
853713a7 1165 fields->f_r1 = * valuep;
9c03036a 1166 break;
23cf992f 1167 case M32R_OPERAND_SRC1 :
853713a7 1168 fields->f_r1 = * valuep;
9c03036a 1169 break;
23cf992f 1170 case M32R_OPERAND_SRC2 :
853713a7 1171 fields->f_r2 = * valuep;
9c03036a 1172 break;
23cf992f 1173 case M32R_OPERAND_SCR :
853713a7 1174 fields->f_r2 = * valuep;
9c03036a 1175 break;
23cf992f 1176 case M32R_OPERAND_DCR :
853713a7 1177 fields->f_r1 = * valuep;
9c03036a 1178 break;
23cf992f 1179 case M32R_OPERAND_SIMM8 :
853713a7 1180 fields->f_simm8 = * valuep;
9c03036a 1181 break;
23cf992f 1182 case M32R_OPERAND_SIMM16 :
853713a7 1183 fields->f_simm16 = * valuep;
9c03036a 1184 break;
23cf992f 1185 case M32R_OPERAND_UIMM4 :
853713a7 1186 fields->f_uimm4 = * valuep;
9c03036a 1187 break;
23cf992f 1188 case M32R_OPERAND_UIMM5 :
853713a7 1189 fields->f_uimm5 = * valuep;
9c03036a 1190 break;
23cf992f 1191 case M32R_OPERAND_UIMM16 :
853713a7 1192 fields->f_uimm16 = * valuep;
23cf992f
NC
1193 break;
1194 case M32R_OPERAND_HI16 :
853713a7 1195 fields->f_hi16 = * valuep;
9c03036a 1196 break;
23cf992f 1197 case M32R_OPERAND_SLO16 :
853713a7 1198 fields->f_simm16 = * valuep;
9c03036a 1199 break;
23cf992f 1200 case M32R_OPERAND_ULO16 :
853713a7 1201 fields->f_uimm16 = * valuep;
9c03036a 1202 break;
23cf992f 1203 case M32R_OPERAND_UIMM24 :
853713a7 1204 fields->f_uimm24 = * valuep;
9c03036a 1205 break;
23cf992f 1206 case M32R_OPERAND_DISP8 :
853713a7 1207 fields->f_disp8 = * valuep;
9c03036a 1208 break;
23cf992f 1209 case M32R_OPERAND_DISP16 :
853713a7 1210 fields->f_disp16 = * valuep;
9c03036a 1211 break;
23cf992f 1212 case M32R_OPERAND_DISP24 :
853713a7 1213 fields->f_disp24 = * valuep;
9c03036a
DE
1214 break;
1215
1216 default :
1217 fprintf (stderr, "Unrecognized field %d while setting operand.\n",
1218 opindex);
1219 abort ();
1220 }
1221}
1222
1223/* Main entry point for getting values from cgen_fields. */
1224
1225CGEN_INLINE long
1226m32r_cgen_get_operand (opindex, fields)
5d07b6cf 1227 int opindex;
853713a7 1228 const CGEN_FIELDS * fields;
9c03036a
DE
1229{
1230 long value;
1231
1232 switch (opindex)
1233 {
23cf992f 1234 case M32R_OPERAND_SR :
9c03036a
DE
1235 value = fields->f_r2;
1236 break;
23cf992f 1237 case M32R_OPERAND_DR :
9c03036a
DE
1238 value = fields->f_r1;
1239 break;
23cf992f 1240 case M32R_OPERAND_SRC1 :
9c03036a
DE
1241 value = fields->f_r1;
1242 break;
23cf992f 1243 case M32R_OPERAND_SRC2 :
9c03036a
DE
1244 value = fields->f_r2;
1245 break;
23cf992f 1246 case M32R_OPERAND_SCR :
9c03036a
DE
1247 value = fields->f_r2;
1248 break;
23cf992f 1249 case M32R_OPERAND_DCR :
9c03036a
DE
1250 value = fields->f_r1;
1251 break;
23cf992f 1252 case M32R_OPERAND_SIMM8 :
9c03036a
DE
1253 value = fields->f_simm8;
1254 break;
23cf992f 1255 case M32R_OPERAND_SIMM16 :
9c03036a
DE
1256 value = fields->f_simm16;
1257 break;
23cf992f 1258 case M32R_OPERAND_UIMM4 :
9c03036a
DE
1259 value = fields->f_uimm4;
1260 break;
23cf992f 1261 case M32R_OPERAND_UIMM5 :
9c03036a
DE
1262 value = fields->f_uimm5;
1263 break;
23cf992f 1264 case M32R_OPERAND_UIMM16 :
9c03036a
DE
1265 value = fields->f_uimm16;
1266 break;
23cf992f 1267 case M32R_OPERAND_HI16 :
9c03036a
DE
1268 value = fields->f_hi16;
1269 break;
23cf992f 1270 case M32R_OPERAND_SLO16 :
9c03036a
DE
1271 value = fields->f_simm16;
1272 break;
23cf992f 1273 case M32R_OPERAND_ULO16 :
9c03036a
DE
1274 value = fields->f_uimm16;
1275 break;
23cf992f 1276 case M32R_OPERAND_UIMM24 :
9c03036a
DE
1277 value = fields->f_uimm24;
1278 break;
23cf992f 1279 case M32R_OPERAND_DISP8 :
9c03036a
DE
1280 value = fields->f_disp8;
1281 break;
23cf992f 1282 case M32R_OPERAND_DISP16 :
9c03036a
DE
1283 value = fields->f_disp16;
1284 break;
23cf992f 1285 case M32R_OPERAND_DISP24 :
9c03036a
DE
1286 value = fields->f_disp24;
1287 break;
1288
1289 default :
1290 fprintf (stderr, "Unrecognized field %d while getting operand.\n",
1291 opindex);
1292 abort ();
1293 }
1294
1295 return value;
1296}
1297
This page took 0.110286 seconds and 4 git commands to generate.