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}
2275