]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - opcodes/mep-opc.c
Opps - forgot to include change to Makefile.am in the ChangeLog entry
[thirdparty/binutils-gdb.git] / opcodes / mep-opc.c
CommitLineData
bd2f2e55
DB
1/* Instruction opcode table for mep.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5Copyright 1996-2005 Free Software Foundation, Inc.
6
7This file is part of the GNU Binutils and/or GDB, the GNU debugger.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License along
20with this program; if not, write to the Free Software Foundation, Inc.,
2151 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
23*/
24
25#include "sysdep.h"
26#include "ansidecl.h"
27#include "bfd.h"
28#include "symcat.h"
29#include "mep-desc.h"
30#include "mep-opc.h"
31#include "libiberty.h"
32
33/* -- opc.c */
34#include "elf/mep.h"
35
36/* A mask for all ISAs executed by the core. */
37CGEN_ATTR_VALUE_BITSET_TYPE mep_all_core_isas_mask = {0, 0};
38
39void
40init_mep_all_core_isas_mask (void)
41{
42 if (mep_all_core_isas_mask.length != 0)
43 return;
44 cgen_bitset_init (& mep_all_core_isas_mask, ISA_MAX);
45 cgen_bitset_set (& mep_all_core_isas_mask, ISA_MEP);
46 /* begin-all-core-isas */
47 cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE1);
48 cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE2);
49 /* end-all-core-isas */
50}
51
52CGEN_ATTR_VALUE_BITSET_TYPE mep_all_cop_isas_mask = {0, 0};
53
54void
55init_mep_all_cop_isas_mask (void)
56{
57 if (mep_all_cop_isas_mask.length != 0)
58 return;
59 cgen_bitset_init (& mep_all_cop_isas_mask, ISA_MAX);
60 /* begin-all-cop-isas */
61 cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_16);
62 cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_32);
63 cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_48);
64 cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_64);
65 /* end-all-cop-isas */
66}
67
68int
69mep_insn_supported_by_isa (const CGEN_INSN *insn, CGEN_ATTR_VALUE_BITSET_TYPE *isa_mask)
70{
71 CGEN_BITSET insn_isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
72 return cgen_bitset_intersect_p (& insn_isas, isa_mask);
73}
74
75#define OPTION_MASK \
76 ( (1 << CGEN_INSN_OPTIONAL_BIT_INSN) \
77 | (1 << CGEN_INSN_OPTIONAL_MUL_INSN) \
78 | (1 << CGEN_INSN_OPTIONAL_DIV_INSN) \
79 | (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN) \
80 | (1 << CGEN_INSN_OPTIONAL_LDZ_INSN) \
81 | (1 << CGEN_INSN_OPTIONAL_ABS_INSN) \
82 | (1 << CGEN_INSN_OPTIONAL_AVE_INSN) \
83 | (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN) \
84 | (1 << CGEN_INSN_OPTIONAL_CLIP_INSN) \
85 | (1 << CGEN_INSN_OPTIONAL_SAT_INSN) \
86 | (1 << CGEN_INSN_OPTIONAL_UCI_INSN) \
87 | (1 << CGEN_INSN_OPTIONAL_DSP_INSN) \
88 | (1 << CGEN_INSN_OPTIONAL_CP_INSN) \
89 | (1 << CGEN_INSN_OPTIONAL_CP64_INSN) )
90
91
92mep_config_map_struct mep_config_map[] =
93{
94 /* config-map-start */
95 /* Default entry: mep core only, all options enabled. */
96 { "", 0, EF_MEP_CPU_C2, 1, 0, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x80"}, OPTION_MASK },
97 { "simple", CONFIG_SIMPLE, EF_MEP_CPU_C2, 1, 0, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\xc0" },
98 0 },
99 { "fmax", CONFIG_FMAX, EF_MEP_CPU_C2, 1, 0, { 1, "\x10" }, { 1, "\x8" }, { 1, "\x4" }, { 1, "\x2" }, { 1, "\x1e" }, { 1, "\xa0" },
100 0
101 | (1 << CGEN_INSN_OPTIONAL_CP_INSN)
102 | (1 << CGEN_INSN_OPTIONAL_MUL_INSN)
103 | (1 << CGEN_INSN_OPTIONAL_DIV_INSN)
104 | (1 << CGEN_INSN_OPTIONAL_BIT_INSN)
105 | (1 << CGEN_INSN_OPTIONAL_LDZ_INSN)
106 | (1 << CGEN_INSN_OPTIONAL_ABS_INSN)
107 | (1 << CGEN_INSN_OPTIONAL_AVE_INSN)
108 | (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN)
109 | (1 << CGEN_INSN_OPTIONAL_CLIP_INSN)
110 | (1 << CGEN_INSN_OPTIONAL_SAT_INSN) },
111 /* config-map-end */
112 { 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, 0 }
113};
114
115int mep_config_index = 0;
116
117static int
118check_configured_mach (int machs)
119{
120 /* All base insns are supported. */
121 int mach = 1 << MACH_BASE;
122 switch (MEP_CPU)
123 {
124 case EF_MEP_CPU_C2:
125 case EF_MEP_CPU_C3:
126 mach |= (1 << MACH_MEP);
127 break;
128 case EF_MEP_CPU_H1:
129 mach |= (1 << MACH_H1);
130 break;
131 default:
132 break;
133 }
134 return machs & mach;
135}
136
137int
138mep_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn)
139{
140 int iconfig = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_CONFIG);
141 int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
142 CGEN_BITSET isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
143 int ok1;
144 int ok2;
145 int ok3;
146
147 /* If the insn has an option bit set that we don't want,
148 reject it. */
149 if (CGEN_INSN_ATTRS (insn)->bool & OPTION_MASK & ~MEP_OMASK)
150 return 0;
151
152 /* If attributes are absent, assume no restriction. */
153 if (machs == 0)
154 machs = ~0;
155
156 ok1 = ((machs & cd->machs) && cgen_bitset_intersect_p (& isas, cd->isas));
157 /* If the insn is config-specific, make sure it matches. */
158 ok2 = (iconfig == 0 || iconfig == MEP_CONFIG);
159 /* Make sure the insn is supported by the configured mach */
160 ok3 = check_configured_mach (machs);
161
162 return (ok1 && ok2 && ok3);
163}
164/* The hash functions are recorded here to help keep assembler code out of
165 the disassembler and vice versa. */
166
167static int asm_hash_insn_p (const CGEN_INSN *);
168static unsigned int asm_hash_insn (const char *);
169static int dis_hash_insn_p (const CGEN_INSN *);
170static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
171
172/* Instruction formats. */
173
174#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
175#define F(f) & mep_cgen_ifld_table[MEP_##f]
176#else
177#define F(f) & mep_cgen_ifld_table[MEP_/**/f]
178#endif
179static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
180 0, 0, 0x0, { { 0 } }
181};
182
183static const CGEN_IFMT ifmt_sb ATTRIBUTE_UNUSED = {
184 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
185};
186
187static const CGEN_IFMT ifmt_sh ATTRIBUTE_UNUSED = {
188 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
189};
190
191static const CGEN_IFMT ifmt_sw ATTRIBUTE_UNUSED = {
192 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
193};
194
195static const CGEN_IFMT ifmt_lbu ATTRIBUTE_UNUSED = {
196 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
197};
198
199static const CGEN_IFMT ifmt_lhu ATTRIBUTE_UNUSED = {
200 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
201};
202
203static const CGEN_IFMT ifmt_sw_sp ATTRIBUTE_UNUSED = {
204 16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
205};
206
207static const CGEN_IFMT ifmt_sb_tp ATTRIBUTE_UNUSED = {
208 16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } }
209};
210
211static const CGEN_IFMT ifmt_sh_tp ATTRIBUTE_UNUSED = {
212 16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } }
213};
214
215static const CGEN_IFMT ifmt_sw_tp ATTRIBUTE_UNUSED = {
216 16, 16, 0xf883, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
217};
218
219static const CGEN_IFMT ifmt_lbu_tp ATTRIBUTE_UNUSED = {
220 16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } }
221};
222
223static const CGEN_IFMT ifmt_lhu_tp ATTRIBUTE_UNUSED = {
224 16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } }
225};
226
227static const CGEN_IFMT ifmt_sb16 ATTRIBUTE_UNUSED = {
228 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
229};
230
231static const CGEN_IFMT ifmt_sh16 ATTRIBUTE_UNUSED = {
232 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
233};
234
235static const CGEN_IFMT ifmt_sw16 ATTRIBUTE_UNUSED = {
236 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
237};
238
239static const CGEN_IFMT ifmt_lbu16 ATTRIBUTE_UNUSED = {
240 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
241};
242
243static const CGEN_IFMT ifmt_lhu16 ATTRIBUTE_UNUSED = {
244 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
245};
246
247static const CGEN_IFMT ifmt_sw24 ATTRIBUTE_UNUSED = {
248 32, 32, 0xf0030000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_24U8A4N) }, { F (F_SUB2) }, { 0 } }
249};
250
251static const CGEN_IFMT ifmt_extb ATTRIBUTE_UNUSED = {
252 16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
253};
254
255static const CGEN_IFMT ifmt_ssarb ATTRIBUTE_UNUSED = {
256 16, 16, 0xfc0f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_5) }, { F (F_2U6) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
257};
258
259static const CGEN_IFMT ifmt_mov ATTRIBUTE_UNUSED = {
260 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
261};
262
263static const CGEN_IFMT ifmt_movi8 ATTRIBUTE_UNUSED = {
264 16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8) }, { 0 } }
265};
266
267static const CGEN_IFMT ifmt_movi16 ATTRIBUTE_UNUSED = {
268 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
269};
270
271static const CGEN_IFMT ifmt_movu24 ATTRIBUTE_UNUSED = {
272 32, 32, 0xf8000000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_24U8N) }, { 0 } }
273};
274
275static const CGEN_IFMT ifmt_movu16 ATTRIBUTE_UNUSED = {
276 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
277};
278
279static const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = {
280 16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_RL) }, { 0 } }
281};
282
283static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
284 16, 16, 0xf003, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_6S8) }, { F (F_SUB2) }, { 0 } }
285};
286
287static const CGEN_IFMT ifmt_add3i ATTRIBUTE_UNUSED = {
288 16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
289};
290
291static const CGEN_IFMT ifmt_slt3i ATTRIBUTE_UNUSED = {
292 16, 16, 0xf007, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_5U8) }, { F (F_SUB3) }, { 0 } }
293};
294
295static const CGEN_IFMT ifmt_add3x ATTRIBUTE_UNUSED = {
296 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
297};
298
299static const CGEN_IFMT ifmt_sltu3x ATTRIBUTE_UNUSED = {
300 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
301};
302
303static const CGEN_IFMT ifmt_bra ATTRIBUTE_UNUSED = {
304 16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_12S4A2) }, { F (F_15) }, { 0 } }
305};
306
307static const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = {
308 16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8A2) }, { F (F_15) }, { 0 } }
309};
310
311static const CGEN_IFMT ifmt_beqi ATTRIBUTE_UNUSED = {
312 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_4U8) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
313};
314
315static const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = {
316 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
317};
318
319static const CGEN_IFMT ifmt_bsr24 ATTRIBUTE_UNUSED = {
320 32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24S5A2N) }, { F (F_SUB4) }, { 0 } }
321};
322
323static const CGEN_IFMT ifmt_jmp ATTRIBUTE_UNUSED = {
324 16, 16, 0xff0f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
325};
326
327static const CGEN_IFMT ifmt_jmp24 ATTRIBUTE_UNUSED = {
328 32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24U5A2N) }, { F (F_SUB4) }, { 0 } }
329};
330
331static const CGEN_IFMT ifmt_ret ATTRIBUTE_UNUSED = {
332 16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
333};
334
335static const CGEN_IFMT ifmt_repeat ATTRIBUTE_UNUSED = {
336 32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
337};
338
339static const CGEN_IFMT ifmt_erepeat ATTRIBUTE_UNUSED = {
340 32, 32, 0xffff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
341};
342
343static const CGEN_IFMT ifmt_stc_lp ATTRIBUTE_UNUSED = {
344 16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN_LO) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { F (F_CSRN_HI) }, { 0 } }
345};
346
347static const CGEN_IFMT ifmt_stc ATTRIBUTE_UNUSED = {
348 16, 16, 0xf00e, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { 0 } }
349};
350
351static const CGEN_IFMT ifmt_swi ATTRIBUTE_UNUSED = {
352 16, 16, 0xffcf, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_9) }, { F (F_2U10) }, { F (F_SUB4) }, { 0 } }
353};
354
355static const CGEN_IFMT ifmt_bsetm ATTRIBUTE_UNUSED = {
356 16, 16, 0xf80f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_3U5) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
357};
358
359static const CGEN_IFMT ifmt_tas ATTRIBUTE_UNUSED = {
360 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
361};
362
363static const CGEN_IFMT ifmt_cache ATTRIBUTE_UNUSED = {
364 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
365};
366
367static const CGEN_IFMT ifmt_madd ATTRIBUTE_UNUSED = {
368 32, 32, 0xf00fffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
369};
370
371static const CGEN_IFMT ifmt_clip ATTRIBUTE_UNUSED = {
372 32, 32, 0xf0ffff07, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_5U24) }, { F (F_29) }, { F (F_30) }, { F (F_31) }, { 0 } }
373};
374
375static const CGEN_IFMT ifmt_swcp ATTRIBUTE_UNUSED = {
376 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
377};
378
379static const CGEN_IFMT ifmt_smcp ATTRIBUTE_UNUSED = {
380 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
381};
382
383static const CGEN_IFMT ifmt_swcp16 ATTRIBUTE_UNUSED = {
384 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
385};
386
387static const CGEN_IFMT ifmt_smcp16 ATTRIBUTE_UNUSED = {
388 32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
389};
390
391static const CGEN_IFMT ifmt_sbcpa ATTRIBUTE_UNUSED = {
392 32, 32, 0xf00fff00, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24) }, { 0 } }
393};
394
395static const CGEN_IFMT ifmt_shcpa ATTRIBUTE_UNUSED = {
396 32, 32, 0xf00fff01, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A2) }, { F (F_31) }, { 0 } }
397};
398
399static const CGEN_IFMT ifmt_swcpa ATTRIBUTE_UNUSED = {
400 32, 32, 0xf00fff03, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A4) }, { F (F_30) }, { F (F_31) }, { 0 } }
401};
402
403static const CGEN_IFMT ifmt_smcpa ATTRIBUTE_UNUSED = {
404 32, 32, 0xf00fff07, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24A8) }, { F (F_29) }, { F (F_30) }, { F (F_31) }, { 0 } }
405};
406
407static const CGEN_IFMT ifmt_bcpeq ATTRIBUTE_UNUSED = {
408 32, 32, 0xff0f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
409};
410
411static const CGEN_IFMT ifmt_sim_syscall ATTRIBUTE_UNUSED = {
412 16, 16, 0xf8ef, { { F (F_MAJOR) }, { F (F_4) }, { F (F_CALLNUM) }, { F (F_8) }, { F (F_9) }, { F (F_10) }, { F (F_SUB4) }, { 0 } }
413};
414
415static const CGEN_IFMT ifmt_fadds ATTRIBUTE_UNUSED = {
416 32, 32, 0xf0fff001, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_FRM) }, { F (F_FMAX_31_1) }, { 0 } }
417};
418
419static const CGEN_IFMT ifmt_fsqrts ATTRIBUTE_UNUSED = {
420 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
421};
422
423static const CGEN_IFMT ifmt_froundws ATTRIBUTE_UNUSED = {
424 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
425};
426
427static const CGEN_IFMT ifmt_fcvtsw ATTRIBUTE_UNUSED = {
428 32, 32, 0xf0fff0f3, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_24_4) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
429};
430
431static const CGEN_IFMT ifmt_fcmpfs ATTRIBUTE_UNUSED = {
432 32, 32, 0xfffff009, { { F (F_FMAX_0_4) }, { F (F_FMAX_4_4) }, { F (F_FMAX_8_4) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_FRN) }, { F (F_FMAX_FRM) }, { F (F_FMAX_28_1) }, { F (F_FMAX_31_1) }, { 0 } }
433};
434
435static const CGEN_IFMT ifmt_cmov_frn_rm ATTRIBUTE_UNUSED = {
436 32, 32, 0xf00ffff7, { { F (F_FMAX_0_4) }, { F (F_FMAX_FRD) }, { F (F_FMAX_RM) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_20_4) }, { F (F_FMAX_24_4) }, { F (F_FMAX_29_1) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
437};
438
439static const CGEN_IFMT ifmt_cmovc_ccrn_rm ATTRIBUTE_UNUSED = {
440 32, 32, 0xf00fffff, { { F (F_FMAX_0_4) }, { F (F_FMAX_4_4) }, { F (F_FMAX_RM) }, { F (F_FMAX_12_4) }, { F (F_FMAX_16_4) }, { F (F_FMAX_20_4) }, { F (F_FMAX_24_4) }, { F (F_FMAX_28_1) }, { F (F_FMAX_29_1) }, { F (F_FMAX_30_1) }, { F (F_FMAX_31_1) }, { 0 } }
441};
442
443#undef F
444
445#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
446#define A(a) (1 << CGEN_INSN_##a)
447#else
448#define A(a) (1 << CGEN_INSN_/**/a)
449#endif
450#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
451#define OPERAND(op) MEP_OPERAND_##op
452#else
453#define OPERAND(op) MEP_OPERAND_/**/op
454#endif
455#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
456#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
457
458/* The instruction table. */
459
460static const CGEN_OPCODE mep_cgen_insn_opcode_table[MAX_INSNS] =
461{
462 /* Special null first entry.
463 A `num' value of zero is thus invalid.
464 Also, the special `invalid' insn resides here. */
465 { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
466/* sb $rnc,($rma) */
467 {
468 { 0, 0, 0, 0 },
469 { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } },
470 & ifmt_sb, { 0x8 }
471 },
472/* sh $rns,($rma) */
473 {
474 { 0, 0, 0, 0 },
475 { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } },
476 & ifmt_sh, { 0x9 }
477 },
478/* sw $rnl,($rma) */
479 {
480 { 0, 0, 0, 0 },
481 { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } },
482 & ifmt_sw, { 0xa }
483 },
484/* lb $rnc,($rma) */
485 {
486 { 0, 0, 0, 0 },
487 { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } },
488 & ifmt_sb, { 0xc }
489 },
490/* lh $rns,($rma) */
491 {
492 { 0, 0, 0, 0 },
493 { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } },
494 & ifmt_sh, { 0xd }
495 },
496/* lw $rnl,($rma) */
497 {
498 { 0, 0, 0, 0 },
499 { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } },
500 & ifmt_sw, { 0xe }
501 },
502/* lbu $rnuc,($rma) */
503 {
504 { 0, 0, 0, 0 },
505 { { MNEM, ' ', OP (RNUC), ',', '(', OP (RMA), ')', 0 } },
506 & ifmt_lbu, { 0xb }
507 },
508/* lhu $rnus,($rma) */
509 {
510 { 0, 0, 0, 0 },
511 { { MNEM, ' ', OP (RNUS), ',', '(', OP (RMA), ')', 0 } },
512 & ifmt_lhu, { 0xf }
513 },
514/* sw $rnl,$udisp7a4($spr) */
515 {
516 { 0, 0, 0, 0 },
517 { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } },
518 & ifmt_sw_sp, { 0x4002 }
519 },
520/* lw $rnl,$udisp7a4($spr) */
521 {
522 { 0, 0, 0, 0 },
523 { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } },
524 & ifmt_sw_sp, { 0x4003 }
525 },
526/* sb $rn3c,$udisp7($tpr) */
527 {
528 { 0, 0, 0, 0 },
529 { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
530 & ifmt_sb_tp, { 0x8000 }
531 },
532/* sh $rn3s,$udisp7a2($tpr) */
533 {
534 { 0, 0, 0, 0 },
535 { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
536 & ifmt_sh_tp, { 0x8080 }
537 },
538/* sw $rn3l,$udisp7a4($tpr) */
539 {
540 { 0, 0, 0, 0 },
541 { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } },
542 & ifmt_sw_tp, { 0x4082 }
543 },
544/* lb $rn3c,$udisp7($tpr) */
545 {
546 { 0, 0, 0, 0 },
547 { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
548 & ifmt_sb_tp, { 0x8800 }
549 },
550/* lh $rn3s,$udisp7a2($tpr) */
551 {
552 { 0, 0, 0, 0 },
553 { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
554 & ifmt_sh_tp, { 0x8880 }
555 },
556/* lw $rn3l,$udisp7a4($tpr) */
557 {
558 { 0, 0, 0, 0 },
559 { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } },
560 & ifmt_sw_tp, { 0x4083 }
561 },
562/* lbu $rn3uc,$udisp7($tpr) */
563 {
564 { 0, 0, 0, 0 },
565 { { MNEM, ' ', OP (RN3UC), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
566 & ifmt_lbu_tp, { 0x4880 }
567 },
568/* lhu $rn3us,$udisp7a2($tpr) */
569 {
570 { 0, 0, 0, 0 },
571 { { MNEM, ' ', OP (RN3US), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
572 & ifmt_lhu_tp, { 0x8881 }
573 },
574/* sb $rnc,$sdisp16($rma) */
575 {
576 { 0, 0, 0, 0 },
577 { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
578 & ifmt_sb16, { 0xc0080000 }
579 },
580/* sh $rns,$sdisp16($rma) */
581 {
582 { 0, 0, 0, 0 },
583 { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
584 & ifmt_sh16, { 0xc0090000 }
585 },
586/* sw $rnl,$sdisp16($rma) */
587 {
588 { 0, 0, 0, 0 },
589 { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
590 & ifmt_sw16, { 0xc00a0000 }
591 },
592/* lb $rnc,$sdisp16($rma) */
593 {
594 { 0, 0, 0, 0 },
595 { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
596 & ifmt_sb16, { 0xc00c0000 }
597 },
598/* lh $rns,$sdisp16($rma) */
599 {
600 { 0, 0, 0, 0 },
601 { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
602 & ifmt_sh16, { 0xc00d0000 }
603 },
604/* lw $rnl,$sdisp16($rma) */
605 {
606 { 0, 0, 0, 0 },
607 { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
608 & ifmt_sw16, { 0xc00e0000 }
609 },
610/* lbu $rnuc,$sdisp16($rma) */
611 {
612 { 0, 0, 0, 0 },
613 { { MNEM, ' ', OP (RNUC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
614 & ifmt_lbu16, { 0xc00b0000 }
615 },
616/* lhu $rnus,$sdisp16($rma) */
617 {
618 { 0, 0, 0, 0 },
619 { { MNEM, ' ', OP (RNUS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
620 & ifmt_lhu16, { 0xc00f0000 }
621 },
622/* sw $rnl,($addr24a4) */
623 {
624 { 0, 0, 0, 0 },
625 { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } },
626 & ifmt_sw24, { 0xe0020000 }
627 },
628/* lw $rnl,($addr24a4) */
629 {
630 { 0, 0, 0, 0 },
631 { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } },
632 & ifmt_sw24, { 0xe0030000 }
633 },
634/* extb $rn */
635 {
636 { 0, 0, 0, 0 },
637 { { MNEM, ' ', OP (RN), 0 } },
638 & ifmt_extb, { 0x100d }
639 },
640/* exth $rn */
641 {
642 { 0, 0, 0, 0 },
643 { { MNEM, ' ', OP (RN), 0 } },
644 & ifmt_extb, { 0x102d }
645 },
646/* extub $rn */
647 {
648 { 0, 0, 0, 0 },
649 { { MNEM, ' ', OP (RN), 0 } },
650 & ifmt_extb, { 0x108d }
651 },
652/* extuh $rn */
653 {
654 { 0, 0, 0, 0 },
655 { { MNEM, ' ', OP (RN), 0 } },
656 & ifmt_extb, { 0x10ad }
657 },
658/* ssarb $udisp2($rm) */
659 {
660 { 0, 0, 0, 0 },
661 { { MNEM, ' ', OP (UDISP2), '(', OP (RM), ')', 0 } },
662 & ifmt_ssarb, { 0x100c }
663 },
664/* mov $rn,$rm */
665 {
666 { 0, 0, 0, 0 },
667 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
668 & ifmt_mov, { 0x0 }
669 },
670/* mov $rn,$simm8 */
671 {
672 { 0, 0, 0, 0 },
673 { { MNEM, ' ', OP (RN), ',', OP (SIMM8), 0 } },
674 & ifmt_movi8, { 0x5000 }
675 },
676/* mov $rn,$simm16 */
677 {
678 { 0, 0, 0, 0 },
679 { { MNEM, ' ', OP (RN), ',', OP (SIMM16), 0 } },
680 & ifmt_movi16, { 0xc0010000 }
681 },
682/* movu $rn3,$uimm24 */
683 {
684 { 0, 0, 0, 0 },
685 { { MNEM, ' ', OP (RN3), ',', OP (UIMM24), 0 } },
686 & ifmt_movu24, { 0xd0000000 }
687 },
688/* movu $rn,$uimm16 */
689 {
690 { 0, 0, 0, 0 },
691 { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
692 & ifmt_movu16, { 0xc0110000 }
693 },
694/* movh $rn,$uimm16 */
695 {
696 { 0, 0, 0, 0 },
697 { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
698 & ifmt_movu16, { 0xc0210000 }
699 },
700/* add3 $rl,$rn,$rm */
701 {
702 { 0, 0, 0, 0 },
703 { { MNEM, ' ', OP (RL), ',', OP (RN), ',', OP (RM), 0 } },
704 & ifmt_add3, { 0x9000 }
705 },
706/* add $rn,$simm6 */
707 {
708 { 0, 0, 0, 0 },
709 { { MNEM, ' ', OP (RN), ',', OP (SIMM6), 0 } },
710 & ifmt_add, { 0x6000 }
711 },
712/* add3 $rn,$spr,$uimm7a4 */
713 {
714 { 0, 0, 0, 0 },
715 { { MNEM, ' ', OP (RN), ',', OP (SPR), ',', OP (UIMM7A4), 0 } },
716 & ifmt_add3i, { 0x4000 }
717 },
718/* advck3 \$0,$rn,$rm */
719 {
720 { 0, 0, 0, 0 },
721 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
722 & ifmt_mov, { 0x7 }
723 },
724/* sub $rn,$rm */
725 {
726 { 0, 0, 0, 0 },
727 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
728 & ifmt_mov, { 0x4 }
729 },
730/* sbvck3 \$0,$rn,$rm */
731 {
732 { 0, 0, 0, 0 },
733 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
734 & ifmt_mov, { 0x5 }
735 },
736/* neg $rn,$rm */
737 {
738 { 0, 0, 0, 0 },
739 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
740 & ifmt_mov, { 0x1 }
741 },
742/* slt3 \$0,$rn,$rm */
743 {
744 { 0, 0, 0, 0 },
745 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
746 & ifmt_mov, { 0x2 }
747 },
748/* sltu3 \$0,$rn,$rm */
749 {
750 { 0, 0, 0, 0 },
751 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
752 & ifmt_mov, { 0x3 }
753 },
754/* slt3 \$0,$rn,$uimm5 */
755 {
756 { 0, 0, 0, 0 },
757 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
758 & ifmt_slt3i, { 0x6001 }
759 },
760/* sltu3 \$0,$rn,$uimm5 */
761 {
762 { 0, 0, 0, 0 },
763 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
764 & ifmt_slt3i, { 0x6005 }
765 },
766/* sl1ad3 \$0,$rn,$rm */
767 {
768 { 0, 0, 0, 0 },
769 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
770 & ifmt_mov, { 0x2006 }
771 },
772/* sl2ad3 \$0,$rn,$rm */
773 {
774 { 0, 0, 0, 0 },
775 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
776 & ifmt_mov, { 0x2007 }
777 },
778/* add3 $rn,$rm,$simm16 */
779 {
780 { 0, 0, 0, 0 },
781 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } },
782 & ifmt_add3x, { 0xc0000000 }
783 },
784/* slt3 $rn,$rm,$simm16 */
785 {
786 { 0, 0, 0, 0 },
787 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } },
788 & ifmt_add3x, { 0xc0020000 }
789 },
790/* sltu3 $rn,$rm,$uimm16 */
791 {
792 { 0, 0, 0, 0 },
793 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
794 & ifmt_sltu3x, { 0xc0030000 }
795 },
796/* or $rn,$rm */
797 {
798 { 0, 0, 0, 0 },
799 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
800 & ifmt_mov, { 0x1000 }
801 },
802/* and $rn,$rm */
803 {
804 { 0, 0, 0, 0 },
805 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
806 & ifmt_mov, { 0x1001 }
807 },
808/* xor $rn,$rm */
809 {
810 { 0, 0, 0, 0 },
811 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
812 & ifmt_mov, { 0x1002 }
813 },
814/* nor $rn,$rm */
815 {
816 { 0, 0, 0, 0 },
817 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
818 & ifmt_mov, { 0x1003 }
819 },
820/* or3 $rn,$rm,$uimm16 */
821 {
822 { 0, 0, 0, 0 },
823 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
824 & ifmt_sltu3x, { 0xc0040000 }
825 },
826/* and3 $rn,$rm,$uimm16 */
827 {
828 { 0, 0, 0, 0 },
829 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
830 & ifmt_sltu3x, { 0xc0050000 }
831 },
832/* xor3 $rn,$rm,$uimm16 */
833 {
834 { 0, 0, 0, 0 },
835 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
836 & ifmt_sltu3x, { 0xc0060000 }
837 },
838/* sra $rn,$rm */
839 {
840 { 0, 0, 0, 0 },
841 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
842 & ifmt_mov, { 0x200d }
843 },
844/* srl $rn,$rm */
845 {
846 { 0, 0, 0, 0 },
847 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
848 & ifmt_mov, { 0x200c }
849 },
850/* sll $rn,$rm */
851 {
852 { 0, 0, 0, 0 },
853 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
854 & ifmt_mov, { 0x200e }
855 },
856/* sra $rn,$uimm5 */
857 {
858 { 0, 0, 0, 0 },
859 { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
860 & ifmt_slt3i, { 0x6003 }
861 },
862/* srl $rn,$uimm5 */
863 {
864 { 0, 0, 0, 0 },
865 { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
866 & ifmt_slt3i, { 0x6002 }
867 },
868/* sll $rn,$uimm5 */
869 {
870 { 0, 0, 0, 0 },
871 { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
872 & ifmt_slt3i, { 0x6006 }
873 },
874/* sll3 \$0,$rn,$uimm5 */
875 {
876 { 0, 0, 0, 0 },
877 { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
878 & ifmt_slt3i, { 0x6007 }
879 },
880/* fsft $rn,$rm */
881 {
882 { 0, 0, 0, 0 },
883 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
884 & ifmt_mov, { 0x200f }
885 },
886/* bra $pcrel12a2 */
887 {
888 { 0, 0, 0, 0 },
889 { { MNEM, ' ', OP (PCREL12A2), 0 } },
890 & ifmt_bra, { 0xb000 }
891 },
892/* beqz $rn,$pcrel8a2 */
893 {
894 { 0, 0, 0, 0 },
895 { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } },
896 & ifmt_beqz, { 0xa000 }
897 },
898/* bnez $rn,$pcrel8a2 */
899 {
900 { 0, 0, 0, 0 },
901 { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } },
902 & ifmt_beqz, { 0xa001 }
903 },
904/* beqi $rn,$uimm4,$pcrel17a2 */
905 {
906 { 0, 0, 0, 0 },
907 { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
908 & ifmt_beqi, { 0xe0000000 }
909 },
910/* bnei $rn,$uimm4,$pcrel17a2 */
911 {
912 { 0, 0, 0, 0 },
913 { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
914 & ifmt_beqi, { 0xe0040000 }
915 },
916/* blti $rn,$uimm4,$pcrel17a2 */
917 {
918 { 0, 0, 0, 0 },
919 { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
920 & ifmt_beqi, { 0xe00c0000 }
921 },
922/* bgei $rn,$uimm4,$pcrel17a2 */
923 {
924 { 0, 0, 0, 0 },
925 { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
926 & ifmt_beqi, { 0xe0080000 }
927 },
928/* beq $rn,$rm,$pcrel17a2 */
929 {
930 { 0, 0, 0, 0 },
931 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } },
932 & ifmt_beq, { 0xe0010000 }
933 },
934/* bne $rn,$rm,$pcrel17a2 */
935 {
936 { 0, 0, 0, 0 },
937 { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } },
938 & ifmt_beq, { 0xe0050000 }
939 },
940/* bsr $pcrel12a2 */
941 {
942 { 0, 0, 0, 0 },
943 { { MNEM, ' ', OP (PCREL12A2), 0 } },
944 & ifmt_bra, { 0xb001 }
945 },
946/* bsr $pcrel24a2 */
947 {
948 { 0, 0, 0, 0 },
949 { { MNEM, ' ', OP (PCREL24A2), 0 } },
950 & ifmt_bsr24, { 0xd8090000 }
951 },
952/* jmp $rm */
953 {
954 { 0, 0, 0, 0 },
955 { { MNEM, ' ', OP (RM), 0 } },
956 & ifmt_jmp, { 0x100e }
957 },
958/* jmp $pcabs24a2 */
959 {
960 { 0, 0, 0, 0 },
961 { { MNEM, ' ', OP (PCABS24A2), 0 } },
962 & ifmt_jmp24, { 0xd8080000 }
963 },
964/* jsr $rm */
965 {
966 { 0, 0, 0, 0 },
967 { { MNEM, ' ', OP (RM), 0 } },
968 & ifmt_jmp, { 0x100f }
969 },
970/* ret */
971 {
972 { 0, 0, 0, 0 },
973 { { MNEM, 0 } },
974 & ifmt_ret, { 0x7002 }
975 },
976/* repeat $rn,$pcrel17a2 */
977 {
978 { 0, 0, 0, 0 },
979 { { MNEM, ' ', OP (RN), ',', OP (PCREL17A2), 0 } },
980 & ifmt_repeat, { 0xe0090000 }
981 },
982/* erepeat $pcrel17a2 */
983 {
984 { 0, 0, 0, 0 },
985 { { MNEM, ' ', OP (PCREL17A2), 0 } },
986 & ifmt_erepeat, { 0xe0190000 }
987 },
988/* stc $rn,\$lp */
989 {
990 { 0, 0, 0, 0 },
991 { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } },
992 & ifmt_stc_lp, { 0x7018 }
993 },
994/* stc $rn,\$hi */
995 {
996 { 0, 0, 0, 0 },
997 { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } },
998 & ifmt_stc_lp, { 0x7078 }
999 },
1000/* stc $rn,\$lo */
1001 {
1002 { 0, 0, 0, 0 },
1003 { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } },
1004 & ifmt_stc_lp, { 0x7088 }
1005 },
1006/* stc $rn,$csrn */
1007 {
1008 { 0, 0, 0, 0 },
1009 { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } },
1010 & ifmt_stc, { 0x7008 }
1011 },
1012/* ldc $rn,\$lp */
1013 {
1014 { 0, 0, 0, 0 },
1015 { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } },
1016 & ifmt_stc_lp, { 0x701a }
1017 },
1018/* ldc $rn,\$hi */
1019 {
1020 { 0, 0, 0, 0 },
1021 { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } },
1022 & ifmt_stc_lp, { 0x707a }
1023 },
1024/* ldc $rn,\$lo */
1025 {
1026 { 0, 0, 0, 0 },
1027 { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } },
1028 & ifmt_stc_lp, { 0x708a }
1029 },
1030/* ldc $rn,$csrn */
1031 {
1032 { 0, 0, 0, 0 },
1033 { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } },
1034 & ifmt_stc, { 0x700a }
1035 },
1036/* di */
1037 {
1038 { 0, 0, 0, 0 },
1039 { { MNEM, 0 } },
1040 & ifmt_ret, { 0x7000 }
1041 },
1042/* ei */
1043 {
1044 { 0, 0, 0, 0 },
1045 { { MNEM, 0 } },
1046 & ifmt_ret, { 0x7010 }
1047 },
1048/* reti */
1049 {
1050 { 0, 0, 0, 0 },
1051 { { MNEM, 0 } },
1052 & ifmt_ret, { 0x7012 }
1053 },
1054/* halt */
1055 {
1056 { 0, 0, 0, 0 },
1057 { { MNEM, 0 } },
1058 & ifmt_ret, { 0x7022 }
1059 },
1060/* sleep */
1061 {
1062 { 0, 0, 0, 0 },
1063 { { MNEM, 0 } },
1064 & ifmt_ret, { 0x7062 }
1065 },
1066/* swi $uimm2 */
1067 {
1068 { 0, 0, 0, 0 },
1069 { { MNEM, ' ', OP (UIMM2), 0 } },
1070 & ifmt_swi, { 0x7006 }
1071 },
1072/* break */
1073 {
1074 { 0, 0, 0, 0 },
1075 { { MNEM, 0 } },
1076 & ifmt_ret, { 0x7032 }
1077 },
1078/* syncm */
1079 {
1080 { 0, 0, 0, 0 },
1081 { { MNEM, 0 } },
1082 & ifmt_ret, { 0x7011 }
1083 },
1084/* stcb $rn,$uimm16 */
1085 {
1086 { 0, 0, 0, 0 },
1087 { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
1088 & ifmt_movu16, { 0xf0040000 }
1089 },
1090/* ldcb $rn,$uimm16 */
1091 {
1092 { 0, 0, 0, 0 },
1093 { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
1094 & ifmt_movu16, { 0xf0140000 }
1095 },
1096/* bsetm ($rma),$uimm3 */
1097 {
1098 { 0, 0, 0, 0 },
1099 { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1100 & ifmt_bsetm, { 0x2000 }
1101 },
1102/* bclrm ($rma),$uimm3 */
1103 {
1104 { 0, 0, 0, 0 },
1105 { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1106 & ifmt_bsetm, { 0x2001 }
1107 },
1108/* bnotm ($rma),$uimm3 */
1109 {
1110 { 0, 0, 0, 0 },
1111 { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1112 & ifmt_bsetm, { 0x2002 }
1113 },
1114/* btstm \$0,($rma),$uimm3 */
1115 {
1116 { 0, 0, 0, 0 },
1117 { { MNEM, ' ', '$', '0', ',', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1118 & ifmt_bsetm, { 0x2003 }
1119 },
1120/* tas $rn,($rma) */
1121 {
1122 { 0, 0, 0, 0 },
1123 { { MNEM, ' ', OP (RN), ',', '(', OP (RMA), ')', 0 } },
1124 & ifmt_tas, { 0x2004 }
1125 },
1126/* cache $cimm4,($rma) */
1127 {
1128 { 0, 0, 0, 0 },
1129 { { MNEM, ' ', OP (CIMM4), ',', '(', OP (RMA), ')', 0 } },
1130 & ifmt_cache, { 0x7004 }
1131 },
1132/* mul $rn,$rm */
1133 {
1134 { 0, 0, 0, 0 },
1135 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1136 & ifmt_mov, { 0x1004 }
1137 },
1138/* mulu $rn,$rm */
1139 {
1140 { 0, 0, 0, 0 },
1141 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1142 & ifmt_mov, { 0x1005 }
1143 },
1144/* mulr $rn,$rm */
1145 {
1146 { 0, 0, 0, 0 },
1147 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1148 & ifmt_mov, { 0x1006 }
1149 },
1150/* mulru $rn,$rm */
1151 {
1152 { 0, 0, 0, 0 },
1153 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1154 & ifmt_mov, { 0x1007 }
1155 },
1156/* madd $rn,$rm */
1157 {
1158 { 0, 0, 0, 0 },
1159 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1160 & ifmt_madd, { 0xf0013004 }
1161 },
1162/* maddu $rn,$rm */
1163 {
1164 { 0, 0, 0, 0 },
1165 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1166 & ifmt_madd, { 0xf0013005 }
1167 },
1168/* maddr $rn,$rm */
1169 {
1170 { 0, 0, 0, 0 },
1171 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1172 & ifmt_madd, { 0xf0013006 }
1173 },
1174/* maddru $rn,$rm */
1175 {
1176 { 0, 0, 0, 0 },
1177 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1178 & ifmt_madd, { 0xf0013007 }
1179 },
1180/* div $rn,$rm */
1181 {
1182 { 0, 0, 0, 0 },
1183 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1184 & ifmt_mov, { 0x1008 }
1185 },
1186/* divu $rn,$rm */
1187 {
1188 { 0, 0, 0, 0 },
1189 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1190 & ifmt_mov, { 0x1009 }
1191 },
1192/* dret */
1193 {
1194 { 0, 0, 0, 0 },
1195 { { MNEM, 0 } },
1196 & ifmt_ret, { 0x7013 }
1197 },
1198/* dbreak */
1199 {
1200 { 0, 0, 0, 0 },
1201 { { MNEM, 0 } },
1202 & ifmt_ret, { 0x7033 }
1203 },
1204/* ldz $rn,$rm */
1205 {
1206 { 0, 0, 0, 0 },
1207 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1208 & ifmt_madd, { 0xf0010000 }
1209 },
1210/* abs $rn,$rm */
1211 {
1212 { 0, 0, 0, 0 },
1213 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1214 & ifmt_madd, { 0xf0010003 }
1215 },
1216/* ave $rn,$rm */
1217 {
1218 { 0, 0, 0, 0 },
1219 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1220 & ifmt_madd, { 0xf0010002 }
1221 },
1222/* min $rn,$rm */
1223 {
1224 { 0, 0, 0, 0 },
1225 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1226 & ifmt_madd, { 0xf0010004 }
1227 },
1228/* max $rn,$rm */
1229 {
1230 { 0, 0, 0, 0 },
1231 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1232 & ifmt_madd, { 0xf0010005 }
1233 },
1234/* minu $rn,$rm */
1235 {
1236 { 0, 0, 0, 0 },
1237 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1238 & ifmt_madd, { 0xf0010006 }
1239 },
1240/* maxu $rn,$rm */
1241 {
1242 { 0, 0, 0, 0 },
1243 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1244 & ifmt_madd, { 0xf0010007 }
1245 },
1246/* clip $rn,$cimm5 */
1247 {
1248 { 0, 0, 0, 0 },
1249 { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } },
1250 & ifmt_clip, { 0xf0011000 }
1251 },
1252/* clipu $rn,$cimm5 */
1253 {
1254 { 0, 0, 0, 0 },
1255 { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } },
1256 & ifmt_clip, { 0xf0011001 }
1257 },
1258/* sadd $rn,$rm */
1259 {
1260 { 0, 0, 0, 0 },
1261 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1262 & ifmt_madd, { 0xf0010008 }
1263 },
1264/* ssub $rn,$rm */
1265 {
1266 { 0, 0, 0, 0 },
1267 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1268 & ifmt_madd, { 0xf001000a }
1269 },
1270/* saddu $rn,$rm */
1271 {
1272 { 0, 0, 0, 0 },
1273 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1274 & ifmt_madd, { 0xf0010009 }
1275 },
1276/* ssubu $rn,$rm */
1277 {
1278 { 0, 0, 0, 0 },
1279 { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1280 & ifmt_madd, { 0xf001000b }
1281 },
1282/* swcp $crn,($rma) */
1283 {
1284 { 0, 0, 0, 0 },
1285 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } },
1286 & ifmt_swcp, { 0x3008 }
1287 },
1288/* lwcp $crn,($rma) */
1289 {
1290 { 0, 0, 0, 0 },
1291 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } },
1292 & ifmt_swcp, { 0x3009 }
1293 },
1294/* smcp $crn64,($rma) */
1295 {
1296 { 0, 0, 0, 0 },
1297 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } },
1298 & ifmt_smcp, { 0x300a }
1299 },
1300/* lmcp $crn64,($rma) */
1301 {
1302 { 0, 0, 0, 0 },
1303 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } },
1304 & ifmt_smcp, { 0x300b }
1305 },
1306/* swcpi $crn,($rma+) */
1307 {
1308 { 0, 0, 0, 0 },
1309 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } },
1310 & ifmt_swcp, { 0x3000 }
1311 },
1312/* lwcpi $crn,($rma+) */
1313 {
1314 { 0, 0, 0, 0 },
1315 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } },
1316 & ifmt_swcp, { 0x3001 }
1317 },
1318/* smcpi $crn64,($rma+) */
1319 {
1320 { 0, 0, 0, 0 },
1321 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } },
1322 & ifmt_smcp, { 0x3002 }
1323 },
1324/* lmcpi $crn64,($rma+) */
1325 {
1326 { 0, 0, 0, 0 },
1327 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } },
1328 & ifmt_smcp, { 0x3003 }
1329 },
1330/* swcp $crn,$sdisp16($rma) */
1331 {
1332 { 0, 0, 0, 0 },
1333 { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1334 & ifmt_swcp16, { 0xf00c0000 }
1335 },
1336/* lwcp $crn,$sdisp16($rma) */
1337 {
1338 { 0, 0, 0, 0 },
1339 { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1340 & ifmt_swcp16, { 0xf00d0000 }
1341 },
1342/* smcp $crn64,$sdisp16($rma) */
1343 {
1344 { 0, 0, 0, 0 },
1345 { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1346 & ifmt_smcp16, { 0xf00e0000 }
1347 },
1348/* lmcp $crn64,$sdisp16($rma) */
1349 {
1350 { 0, 0, 0, 0 },
1351 { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1352 & ifmt_smcp16, { 0xf00f0000 }
1353 },
1354/* sbcpa $crn,($rma+),$cdisp8 */
1355 {
1356 { 0, 0, 0, 0 },
1357 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1358 & ifmt_sbcpa, { 0xf0050000 }
1359 },
1360/* lbcpa $crn,($rma+),$cdisp8 */
1361 {
1362 { 0, 0, 0, 0 },
1363 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1364 & ifmt_sbcpa, { 0xf0054000 }
1365 },
1366/* shcpa $crn,($rma+),$cdisp8a2 */
1367 {
1368 { 0, 0, 0, 0 },
1369 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1370 & ifmt_shcpa, { 0xf0051000 }
1371 },
1372/* lhcpa $crn,($rma+),$cdisp8a2 */
1373 {
1374 { 0, 0, 0, 0 },
1375 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1376 & ifmt_shcpa, { 0xf0055000 }
1377 },
1378/* swcpa $crn,($rma+),$cdisp8a4 */
1379 {
1380 { 0, 0, 0, 0 },
1381 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1382 & ifmt_swcpa, { 0xf0052000 }
1383 },
1384/* lwcpa $crn,($rma+),$cdisp8a4 */
1385 {
1386 { 0, 0, 0, 0 },
1387 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1388 & ifmt_swcpa, { 0xf0056000 }
1389 },
1390/* smcpa $crn64,($rma+),$cdisp8a8 */
1391 {
1392 { 0, 0, 0, 0 },
1393 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1394 & ifmt_smcpa, { 0xf0053000 }
1395 },
1396/* lmcpa $crn64,($rma+),$cdisp8a8 */
1397 {
1398 { 0, 0, 0, 0 },
1399 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1400 & ifmt_smcpa, { 0xf0057000 }
1401 },
1402/* sbcpm0 $crn,($rma+),$cdisp8 */
1403 {
1404 { 0, 0, 0, 0 },
1405 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1406 & ifmt_sbcpa, { 0xf0050800 }
1407 },
1408/* lbcpm0 $crn,($rma+),$cdisp8 */
1409 {
1410 { 0, 0, 0, 0 },
1411 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1412 & ifmt_sbcpa, { 0xf0054800 }
1413 },
1414/* shcpm0 $crn,($rma+),$cdisp8a2 */
1415 {
1416 { 0, 0, 0, 0 },
1417 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1418 & ifmt_shcpa, { 0xf0051800 }
1419 },
1420/* lhcpm0 $crn,($rma+),$cdisp8a2 */
1421 {
1422 { 0, 0, 0, 0 },
1423 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1424 & ifmt_shcpa, { 0xf0055800 }
1425 },
1426/* swcpm0 $crn,($rma+),$cdisp8a4 */
1427 {
1428 { 0, 0, 0, 0 },
1429 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1430 & ifmt_swcpa, { 0xf0052800 }
1431 },
1432/* lwcpm0 $crn,($rma+),$cdisp8a4 */
1433 {
1434 { 0, 0, 0, 0 },
1435 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1436 & ifmt_swcpa, { 0xf0056800 }
1437 },
1438/* smcpm0 $crn64,($rma+),$cdisp8a8 */
1439 {
1440 { 0, 0, 0, 0 },
1441 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1442 & ifmt_smcpa, { 0xf0053800 }
1443 },
1444/* lmcpm0 $crn64,($rma+),$cdisp8a8 */
1445 {
1446 { 0, 0, 0, 0 },
1447 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1448 & ifmt_smcpa, { 0xf0057800 }
1449 },
1450/* sbcpm1 $crn,($rma+),$cdisp8 */
1451 {
1452 { 0, 0, 0, 0 },
1453 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1454 & ifmt_sbcpa, { 0xf0050c00 }
1455 },
1456/* lbcpm1 $crn,($rma+),$cdisp8 */
1457 {
1458 { 0, 0, 0, 0 },
1459 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1460 & ifmt_sbcpa, { 0xf0054c00 }
1461 },
1462/* shcpm1 $crn,($rma+),$cdisp8a2 */
1463 {
1464 { 0, 0, 0, 0 },
1465 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1466 & ifmt_shcpa, { 0xf0051c00 }
1467 },
1468/* lhcpm1 $crn,($rma+),$cdisp8a2 */
1469 {
1470 { 0, 0, 0, 0 },
1471 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1472 & ifmt_shcpa, { 0xf0055c00 }
1473 },
1474/* swcpm1 $crn,($rma+),$cdisp8a4 */
1475 {
1476 { 0, 0, 0, 0 },
1477 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1478 & ifmt_swcpa, { 0xf0052c00 }
1479 },
1480/* lwcpm1 $crn,($rma+),$cdisp8a4 */
1481 {
1482 { 0, 0, 0, 0 },
1483 { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1484 & ifmt_swcpa, { 0xf0056c00 }
1485 },
1486/* smcpm1 $crn64,($rma+),$cdisp8a8 */
1487 {
1488 { 0, 0, 0, 0 },
1489 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1490 & ifmt_smcpa, { 0xf0053c00 }
1491 },
1492/* lmcpm1 $crn64,($rma+),$cdisp8a8 */
1493 {
1494 { 0, 0, 0, 0 },
1495 { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1496 & ifmt_smcpa, { 0xf0057c00 }
1497 },
1498/* bcpeq $cccc,$pcrel17a2 */
1499 {
1500 { 0, 0, 0, 0 },
1501 { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1502 & ifmt_bcpeq, { 0xd8040000 }
1503 },
1504/* bcpne $cccc,$pcrel17a2 */
1505 {
1506 { 0, 0, 0, 0 },
1507 { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1508 & ifmt_bcpeq, { 0xd8050000 }
1509 },
1510/* bcpat $cccc,$pcrel17a2 */
1511 {
1512 { 0, 0, 0, 0 },
1513 { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1514 & ifmt_bcpeq, { 0xd8060000 }
1515 },
1516/* bcpaf $cccc,$pcrel17a2 */
1517 {
1518 { 0, 0, 0, 0 },
1519 { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1520 & ifmt_bcpeq, { 0xd8070000 }
1521 },
1522/* synccp */
1523 {
1524 { 0, 0, 0, 0 },
1525 { { MNEM, 0 } },
1526 & ifmt_ret, { 0x7021 }
1527 },
1528/* jsrv $rm */
1529 {
1530 { 0, 0, 0, 0 },
1531 { { MNEM, ' ', OP (RM), 0 } },
1532 & ifmt_jmp, { 0x180f }
1533 },
1534/* bsrv $pcrel24a2 */
1535 {
1536 { 0, 0, 0, 0 },
1537 { { MNEM, ' ', OP (PCREL24A2), 0 } },
1538 & ifmt_bsr24, { 0xd80b0000 }
1539 },
1540/* --unused-- */
1541 {
1542 { 0, 0, 0, 0 },
1543 { { MNEM, 0 } },
1544 & ifmt_sim_syscall, { 0x7800 }
1545 },
1546/* --reserved-- */
1547 {
1548 { 0, 0, 0, 0 },
1549 { { MNEM, 0 } },
1550 & ifmt_mov, { 0x6 }
1551 },
1552/* --reserved-- */
1553 {
1554 { 0, 0, 0, 0 },
1555 { { MNEM, 0 } },
1556 & ifmt_mov, { 0x100a }
1557 },
1558/* --reserved-- */
1559 {
1560 { 0, 0, 0, 0 },
1561 { { MNEM, 0 } },
1562 & ifmt_mov, { 0x100b }
1563 },
1564/* --reserved-- */
1565 {
1566 { 0, 0, 0, 0 },
1567 { { MNEM, 0 } },
1568 & ifmt_mov, { 0x2005 }
1569 },
1570/* --reserved-- */
1571 {
1572 { 0, 0, 0, 0 },
1573 { { MNEM, 0 } },
1574 & ifmt_mov, { 0x2008 }
1575 },
1576/* --reserved-- */
1577 {
1578 { 0, 0, 0, 0 },
1579 { { MNEM, 0 } },
1580 & ifmt_mov, { 0x2009 }
1581 },
1582/* --reserved-- */
1583 {
1584 { 0, 0, 0, 0 },
1585 { { MNEM, 0 } },
1586 & ifmt_mov, { 0x200a }
1587 },
1588/* --reserved-- */
1589 {
1590 { 0, 0, 0, 0 },
1591 { { MNEM, 0 } },
1592 & ifmt_mov, { 0x200b }
1593 },
1594/* --reserved-- */
1595 {
1596 { 0, 0, 0, 0 },
1597 { { MNEM, 0 } },
1598 & ifmt_mov, { 0x3004 }
1599 },
1600/* --reserved-- */
1601 {
1602 { 0, 0, 0, 0 },
1603 { { MNEM, 0 } },
1604 & ifmt_mov, { 0x3005 }
1605 },
1606/* --reserved-- */
1607 {
1608 { 0, 0, 0, 0 },
1609 { { MNEM, 0 } },
1610 & ifmt_mov, { 0x3006 }
1611 },
1612/* --reserved-- */
1613 {
1614 { 0, 0, 0, 0 },
1615 { { MNEM, 0 } },
1616 & ifmt_mov, { 0x3007 }
1617 },
1618/* --reserved-- */
1619 {
1620 { 0, 0, 0, 0 },
1621 { { MNEM, 0 } },
1622 & ifmt_mov, { 0x300c }
1623 },
1624/* --reserved-- */
1625 {
1626 { 0, 0, 0, 0 },
1627 { { MNEM, 0 } },
1628 & ifmt_mov, { 0x300d }
1629 },
1630/* --reserved-- */
1631 {
1632 { 0, 0, 0, 0 },
1633 { { MNEM, 0 } },
1634 & ifmt_mov, { 0x300e }
1635 },
1636/* --reserved-- */
1637 {
1638 { 0, 0, 0, 0 },
1639 { { MNEM, 0 } },
1640 & ifmt_mov, { 0x300f }
1641 },
1642/* --reserved-- */
1643 {
1644 { 0, 0, 0, 0 },
1645 { { MNEM, 0 } },
1646 & ifmt_mov, { 0x7007 }
1647 },
1648/* --reserved-- */
1649 {
1650 { 0, 0, 0, 0 },
1651 { { MNEM, 0 } },
1652 & ifmt_mov, { 0x700e }
1653 },
1654/* --reserved-- */
1655 {
1656 { 0, 0, 0, 0 },
1657 { { MNEM, 0 } },
1658 & ifmt_mov, { 0x700f }
1659 },
1660/* --reserved-- */
1661 {
1662 { 0, 0, 0, 0 },
1663 { { MNEM, 0 } },
1664 & ifmt_mov, { 0xc007 }
1665 },
1666/* --reserved-- */
1667 {
1668 { 0, 0, 0, 0 },
1669 { { MNEM, 0 } },
1670 & ifmt_mov, { 0xe00d }
1671 },
1672/* --reserved-- */
1673 {
1674 { 0, 0, 0, 0 },
1675 { { MNEM, 0 } },
1676 & ifmt_mov, { 0xf003 }
1677 },
1678/* --reserved-- */
1679 {
1680 { 0, 0, 0, 0 },
1681 { { MNEM, 0 } },
1682 & ifmt_mov, { 0xf006 }
1683 },
1684/* --reserved-- */
1685 {
1686 { 0, 0, 0, 0 },
1687 { { MNEM, 0 } },
1688 & ifmt_mov, { 0xf008 }
1689 },
1690/* --reserved-- */
1691 {
1692 { 0, 0, 0, 0 },
1693 { { MNEM, 0 } },
1694 & ifmt_mov, { 0x7005 }
1695 },
1696/* --reserved-- */
1697 {
1698 { 0, 0, 0, 0 },
1699 { { MNEM, 0 } },
1700 & ifmt_mov, { 0x700c }
1701 },
1702/* --reserved-- */
1703 {
1704 { 0, 0, 0, 0 },
1705 { { MNEM, 0 } },
1706 & ifmt_mov, { 0x700d }
1707 },
1708/* fadds ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1709 {
1710 { 0, 0, 0, 0 },
1711 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1712 & ifmt_fadds, { 0xf0070000 }
1713 },
1714/* fsubs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1715 {
1716 { 0, 0, 0, 0 },
1717 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1718 & ifmt_fadds, { 0xf0170000 }
1719 },
1720/* fmuls ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1721 {
1722 { 0, 0, 0, 0 },
1723 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1724 & ifmt_fadds, { 0xf0270000 }
1725 },
1726/* fdivs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1727 {
1728 { 0, 0, 0, 0 },
1729 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1730 & ifmt_fadds, { 0xf0370000 }
1731 },
1732/* fsqrts ${fmax-FRd},${fmax-FRn} */
1733 {
1734 { 0, 0, 0, 0 },
1735 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1736 & ifmt_fsqrts, { 0xf0470000 }
1737 },
1738/* fabss ${fmax-FRd},${fmax-FRn} */
1739 {
1740 { 0, 0, 0, 0 },
1741 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1742 & ifmt_fsqrts, { 0xf0570000 }
1743 },
1744/* fnegs ${fmax-FRd},${fmax-FRn} */
1745 {
1746 { 0, 0, 0, 0 },
1747 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1748 & ifmt_fsqrts, { 0xf0770000 }
1749 },
1750/* fmovs ${fmax-FRd},${fmax-FRn} */
1751 {
1752 { 0, 0, 0, 0 },
1753 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1754 & ifmt_fsqrts, { 0xf0670000 }
1755 },
1756/* froundws ${fmax-FRd-int},${fmax-FRn} */
1757 {
1758 { 0, 0, 0, 0 },
1759 { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1760 & ifmt_froundws, { 0xf0c70000 }
1761 },
1762/* ftruncws ${fmax-FRd-int},${fmax-FRn} */
1763 {
1764 { 0, 0, 0, 0 },
1765 { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1766 & ifmt_froundws, { 0xf0d70000 }
1767 },
1768/* fceilws ${fmax-FRd-int},${fmax-FRn} */
1769 {
1770 { 0, 0, 0, 0 },
1771 { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1772 & ifmt_froundws, { 0xf0e70000 }
1773 },
1774/* ffloorws ${fmax-FRd-int},${fmax-FRn} */
1775 {
1776 { 0, 0, 0, 0 },
1777 { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1778 & ifmt_froundws, { 0xf0f70000 }
1779 },
1780/* fcvtws ${fmax-FRd-int},${fmax-FRn} */
1781 {
1782 { 0, 0, 0, 0 },
1783 { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1784 & ifmt_froundws, { 0xf0471000 }
1785 },
1786/* fcvtsw ${fmax-FRd},${fmax-FRn-int} */
1787 {
1788 { 0, 0, 0, 0 },
1789 { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN_INT), 0 } },
1790 & ifmt_fcvtsw, { 0xf0079000 }
1791 },
1792/* fcmpfs ${fmax-FRn},${fmax-FRm} */
1793 {
1794 { 0, 0, 0, 0 },
1795 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1796 & ifmt_fcmpfs, { 0xf0072000 }
1797 },
1798/* fcmpus ${fmax-FRn},${fmax-FRm} */
1799 {
1800 { 0, 0, 0, 0 },
1801 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1802 & ifmt_fcmpfs, { 0xf0172000 }
1803 },
1804/* fcmpes ${fmax-FRn},${fmax-FRm} */
1805 {
1806 { 0, 0, 0, 0 },
1807 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1808 & ifmt_fcmpfs, { 0xf0272000 }
1809 },
1810/* fcmpues ${fmax-FRn},${fmax-FRm} */
1811 {
1812 { 0, 0, 0, 0 },
1813 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1814 & ifmt_fcmpfs, { 0xf0372000 }
1815 },
1816/* fcmpls ${fmax-FRn},${fmax-FRm} */
1817 {
1818 { 0, 0, 0, 0 },
1819 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1820 & ifmt_fcmpfs, { 0xf0472000 }
1821 },
1822/* fcmpuls ${fmax-FRn},${fmax-FRm} */
1823 {
1824 { 0, 0, 0, 0 },
1825 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1826 & ifmt_fcmpfs, { 0xf0572000 }
1827 },
1828/* fcmples ${fmax-FRn},${fmax-FRm} */
1829 {
1830 { 0, 0, 0, 0 },
1831 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1832 & ifmt_fcmpfs, { 0xf0672000 }
1833 },
1834/* fcmpules ${fmax-FRn},${fmax-FRm} */
1835 {
1836 { 0, 0, 0, 0 },
1837 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1838 & ifmt_fcmpfs, { 0xf0772000 }
1839 },
1840/* fcmpfis ${fmax-FRn},${fmax-FRm} */
1841 {
1842 { 0, 0, 0, 0 },
1843 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1844 & ifmt_fcmpfs, { 0xf0872000 }
1845 },
1846/* fcmpuis ${fmax-FRn},${fmax-FRm} */
1847 {
1848 { 0, 0, 0, 0 },
1849 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1850 & ifmt_fcmpfs, { 0xf0972000 }
1851 },
1852/* fcmpeis ${fmax-FRn},${fmax-FRm} */
1853 {
1854 { 0, 0, 0, 0 },
1855 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1856 & ifmt_fcmpfs, { 0xf0a72000 }
1857 },
1858/* fcmpueis ${fmax-FRn},${fmax-FRm} */
1859 {
1860 { 0, 0, 0, 0 },
1861 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1862 & ifmt_fcmpfs, { 0xf0b72000 }
1863 },
1864/* fcmplis ${fmax-FRn},${fmax-FRm} */
1865 {
1866 { 0, 0, 0, 0 },
1867 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1868 & ifmt_fcmpfs, { 0xf0c72000 }
1869 },
1870/* fcmpulis ${fmax-FRn},${fmax-FRm} */
1871 {
1872 { 0, 0, 0, 0 },
1873 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1874 & ifmt_fcmpfs, { 0xf0d72000 }
1875 },
1876/* fcmpleis ${fmax-FRn},${fmax-FRm} */
1877 {
1878 { 0, 0, 0, 0 },
1879 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1880 & ifmt_fcmpfs, { 0xf0e72000 }
1881 },
1882/* fcmpuleis ${fmax-FRn},${fmax-FRm} */
1883 {
1884 { 0, 0, 0, 0 },
1885 { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1886 & ifmt_fcmpfs, { 0xf0f72000 }
1887 },
1888/* cmov ${fmax-FRd-int},${fmax-Rm} */
1889 {
1890 { 0, 0, 0, 0 },
1891 { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_RM), 0 } },
1892 & ifmt_cmov_frn_rm, { 0xf007f000 }
1893 },
1894/* cmov ${fmax-Rm},${fmax-FRd-int} */
1895 {
1896 { 0, 0, 0, 0 },
1897 { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_FRD_INT), 0 } },
1898 & ifmt_cmov_frn_rm, { 0xf007f001 }
1899 },
1900/* cmovc ${fmax-CCRn},${fmax-Rm} */
1901 {
1902 { 0, 0, 0, 0 },
1903 { { MNEM, ' ', OP (FMAX_CCRN), ',', OP (FMAX_RM), 0 } },
1904 & ifmt_cmovc_ccrn_rm, { 0xf007f002 }
1905 },
1906/* cmovc ${fmax-Rm},${fmax-CCRn} */
1907 {
1908 { 0, 0, 0, 0 },
1909 { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_CCRN), 0 } },
1910 & ifmt_cmovc_ccrn_rm, { 0xf007f003 }
1911 },
1912};
1913
1914#undef A
1915#undef OPERAND
1916#undef MNEM
1917#undef OP
1918
1919/* Formats for ALIAS macro-insns. */
1920
1921#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1922#define F(f) & mep_cgen_ifld_table[MEP_##f]
1923#else
1924#define F(f) & mep_cgen_ifld_table[MEP_/**/f]
1925#endif
1926static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
1927 16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1928};
1929
1930static const CGEN_IFMT ifmt_sb16_0 ATTRIBUTE_UNUSED = {
1931 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1932};
1933
1934static const CGEN_IFMT ifmt_sh16_0 ATTRIBUTE_UNUSED = {
1935 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1936};
1937
1938static const CGEN_IFMT ifmt_sw16_0 ATTRIBUTE_UNUSED = {
1939 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1940};
1941
1942static const CGEN_IFMT ifmt_lb16_0 ATTRIBUTE_UNUSED = {
1943 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1944};
1945
1946static const CGEN_IFMT ifmt_lh16_0 ATTRIBUTE_UNUSED = {
1947 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1948};
1949
1950static const CGEN_IFMT ifmt_lw16_0 ATTRIBUTE_UNUSED = {
1951 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1952};
1953
1954static const CGEN_IFMT ifmt_lbu16_0 ATTRIBUTE_UNUSED = {
1955 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1956};
1957
1958static const CGEN_IFMT ifmt_lhu16_0 ATTRIBUTE_UNUSED = {
1959 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1960};
1961
1962static const CGEN_IFMT ifmt_swcp16_0 ATTRIBUTE_UNUSED = {
1963 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1964};
1965
1966static const CGEN_IFMT ifmt_lwcp16_0 ATTRIBUTE_UNUSED = {
1967 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1968};
1969
1970static const CGEN_IFMT ifmt_smcp16_0 ATTRIBUTE_UNUSED = {
1971 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1972};
1973
1974static const CGEN_IFMT ifmt_lmcp16_0 ATTRIBUTE_UNUSED = {
1975 16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1976};
1977
1978#undef F
1979
1980/* Each non-simple macro entry points to an array of expansion possibilities. */
1981
1982#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1983#define A(a) (1 << CGEN_INSN_##a)
1984#else
1985#define A(a) (1 << CGEN_INSN_/**/a)
1986#endif
1987#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1988#define OPERAND(op) MEP_OPERAND_##op
1989#else
1990#define OPERAND(op) MEP_OPERAND_/**/op
1991#endif
1992#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1993#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1994
1995/* The macro instruction table. */
1996
1997static const CGEN_IBASE mep_cgen_macro_insn_table[] =
1998{
1999/* nop */
2000 {
2001 -1, "nop", "nop", 16,
2002 { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2003 },
2004/* sb $rnc,$zero($rma) */
2005 {
2006 -1, "sb16-0", "sb", 16,
2007 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2008 },
2009/* sh $rns,$zero($rma) */
2010 {
2011 -1, "sh16-0", "sh", 16,
2012 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2013 },
2014/* sw $rnl,$zero($rma) */
2015 {
2016 -1, "sw16-0", "sw", 16,
2017 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2018 },
2019/* lb $rnc,$zero($rma) */
2020 {
2021 -1, "lb16-0", "lb", 16,
2022 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2023 },
2024/* lh $rns,$zero($rma) */
2025 {
2026 -1, "lh16-0", "lh", 16,
2027 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2028 },
2029/* lw $rnl,$zero($rma) */
2030 {
2031 -1, "lw16-0", "lw", 16,
2032 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2033 },
2034/* lbu $rnuc,$zero($rma) */
2035 {
2036 -1, "lbu16-0", "lbu", 16,
2037 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2038 },
2039/* lhu $rnus,$zero($rma) */
2040 {
2041 -1, "lhu16-0", "lhu", 16,
2042 { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2043 },
2044/* swcp $crn,$zero($rma) */
2045 {
2046 -1, "swcp16-0", "swcp", 16,
2047 { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2048 },
2049/* lwcp $crn,$zero($rma) */
2050 {
2051 -1, "lwcp16-0", "lwcp", 16,
2052 { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2053 },
2054/* smcp $crn64,$zero($rma) */
2055 {
2056 -1, "smcp16-0", "smcp", 16,
2057 { 0|A(NO_DIS)|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2058 },
2059/* lmcp $crn64,$zero($rma) */
2060 {
2061 -1, "lmcp16-0", "lmcp", 16,
2062 { 0|A(NO_DIS)|A(OPTIONAL_CP64_INSN)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2063 },
2064};
2065
2066/* The macro instruction opcode table. */
2067
2068static const CGEN_OPCODE mep_cgen_macro_insn_opcode_table[] =
2069{
2070/* nop */
2071 {
2072 { 0, 0, 0, 0 },
2073 { { MNEM, 0 } },
2074 & ifmt_nop, { 0x0 }
2075 },
2076/* sb $rnc,$zero($rma) */
2077 {
2078 { 0, 0, 0, 0 },
2079 { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2080 & ifmt_sb16_0, { 0x8 }
2081 },
2082/* sh $rns,$zero($rma) */
2083 {
2084 { 0, 0, 0, 0 },
2085 { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2086 & ifmt_sh16_0, { 0x9 }
2087 },
2088/* sw $rnl,$zero($rma) */
2089 {
2090 { 0, 0, 0, 0 },
2091 { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2092 & ifmt_sw16_0, { 0xa }
2093 },
2094/* lb $rnc,$zero($rma) */
2095 {
2096 { 0, 0, 0, 0 },
2097 { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2098 & ifmt_lb16_0, { 0xc }
2099 },
2100/* lh $rns,$zero($rma) */
2101 {
2102 { 0, 0, 0, 0 },
2103 { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2104 & ifmt_lh16_0, { 0xd }
2105 },
2106/* lw $rnl,$zero($rma) */
2107 {
2108 { 0, 0, 0, 0 },
2109 { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2110 & ifmt_lw16_0, { 0xe }
2111 },
2112/* lbu $rnuc,$zero($rma) */
2113 {
2114 { 0, 0, 0, 0 },
2115 { { MNEM, ' ', OP (RNUC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2116 & ifmt_lbu16_0, { 0xb }
2117 },
2118/* lhu $rnus,$zero($rma) */
2119 {
2120 { 0, 0, 0, 0 },
2121 { { MNEM, ' ', OP (RNUS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2122 & ifmt_lhu16_0, { 0xf }
2123 },
2124/* swcp $crn,$zero($rma) */
2125 {
2126 { 0, 0, 0, 0 },
2127 { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2128 & ifmt_swcp16_0, { 0x3008 }
2129 },
2130/* lwcp $crn,$zero($rma) */
2131 {
2132 { 0, 0, 0, 0 },
2133 { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2134 & ifmt_lwcp16_0, { 0x3009 }
2135 },
2136/* smcp $crn64,$zero($rma) */
2137 {
2138 { 0, 0, 0, 0 },
2139 { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2140 & ifmt_smcp16_0, { 0x300a }
2141 },
2142/* lmcp $crn64,$zero($rma) */
2143 {
2144 { 0, 0, 0, 0 },
2145 { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2146 & ifmt_lmcp16_0, { 0x300b }
2147 },
2148};
2149
2150#undef A
2151#undef OPERAND
2152#undef MNEM
2153#undef OP
2154
2155#ifndef CGEN_ASM_HASH_P
2156#define CGEN_ASM_HASH_P(insn) 1
2157#endif
2158
2159#ifndef CGEN_DIS_HASH_P
2160#define CGEN_DIS_HASH_P(insn) 1
2161#endif
2162
2163/* Return non-zero if INSN is to be added to the hash table.
2164 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
2165
2166static int
2167asm_hash_insn_p (insn)
2168 const CGEN_INSN *insn ATTRIBUTE_UNUSED;
2169{
2170 return CGEN_ASM_HASH_P (insn);
2171}
2172
2173static int
2174dis_hash_insn_p (insn)
2175 const CGEN_INSN *insn;
2176{
2177 /* If building the hash table and the NO-DIS attribute is present,
2178 ignore. */
2179 if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
2180 return 0;
2181 return CGEN_DIS_HASH_P (insn);
2182}
2183
2184#ifndef CGEN_ASM_HASH
2185#define CGEN_ASM_HASH_SIZE 127
2186#ifdef CGEN_MNEMONIC_OPERANDS
2187#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
2188#else
2189#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
2190#endif
2191#endif
2192
2193/* It doesn't make much sense to provide a default here,
2194 but while this is under development we do.
2195 BUFFER is a pointer to the bytes of the insn, target order.
2196 VALUE is the first base_insn_bitsize bits as an int in host order. */
2197
2198#ifndef CGEN_DIS_HASH
2199#define CGEN_DIS_HASH_SIZE 256
2200#define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
2201#endif
2202
2203/* The result is the hash value of the insn.
2204 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
2205
2206static unsigned int
2207asm_hash_insn (mnem)
2208 const char * mnem;
2209{
2210 return CGEN_ASM_HASH (mnem);
2211}
2212
2213/* BUF is a pointer to the bytes of the insn, target order.
2214 VALUE is the first base_insn_bitsize bits as an int in host order. */
2215
2216static unsigned int
2217dis_hash_insn (buf, value)
2218 const char * buf ATTRIBUTE_UNUSED;
2219 CGEN_INSN_INT value ATTRIBUTE_UNUSED;
2220{
2221 return CGEN_DIS_HASH (buf, value);
2222}
2223
2224/* Set the recorded length of the insn in the CGEN_FIELDS struct. */
2225
2226static void
2227set_fields_bitsize (CGEN_FIELDS *fields, int size)
2228{
2229 CGEN_FIELDS_BITSIZE (fields) = size;
2230}
2231
2232/* Function to call before using the operand instance table.
2233 This plugs the opcode entries and macro instructions into the cpu table. */
2234
2235void
2236mep_cgen_init_opcode_table (CGEN_CPU_DESC cd)
2237{
2238 int i;
2239 int num_macros = (sizeof (mep_cgen_macro_insn_table) /
2240 sizeof (mep_cgen_macro_insn_table[0]));
2241 const CGEN_IBASE *ib = & mep_cgen_macro_insn_table[0];
2242 const CGEN_OPCODE *oc = & mep_cgen_macro_insn_opcode_table[0];
2243 CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
2244
2245 memset (insns, 0, num_macros * sizeof (CGEN_INSN));
2246 for (i = 0; i < num_macros; ++i)
2247 {
2248 insns[i].base = &ib[i];
2249 insns[i].opcode = &oc[i];
2250 mep_cgen_build_insn_regex (& insns[i]);
2251 }
2252 cd->macro_insn_table.init_entries = insns;
2253 cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
2254 cd->macro_insn_table.num_init_entries = num_macros;
2255
2256 oc = & mep_cgen_insn_opcode_table[0];
2257 insns = (CGEN_INSN *) cd->insn_table.init_entries;
2258 for (i = 0; i < MAX_INSNS; ++i)
2259 {
2260 insns[i].opcode = &oc[i];
2261 mep_cgen_build_insn_regex (& insns[i]);
2262 }
2263
2264 cd->sizeof_fields = sizeof (CGEN_FIELDS);
2265 cd->set_fields_bitsize = set_fields_bitsize;
2266
2267 cd->asm_hash_p = asm_hash_insn_p;
2268 cd->asm_hash = asm_hash_insn;
2269 cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
2270
2271 cd->dis_hash_p = dis_hash_insn_p;
2272 cd->dis_hash = dis_hash_insn;
2273 cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
2274}