1214571Sdim/* Instruction opcode table for mep.
2214571Sdim
3214571SdimTHIS FILE IS MACHINE GENERATED WITH CGEN.
4214571Sdim
5214571SdimCopyright 1996-2005 Free Software Foundation, Inc.
6214571Sdim
7214571SdimThis file is part of the GNU Binutils and/or GDB, the GNU debugger.
8214571Sdim
9214571SdimThis program is free software; you can redistribute it and/or modify
10214571Sdimit under the terms of the GNU General Public License as published by
11214571Sdimthe Free Software Foundation; either version 2, or (at your option)
12214571Sdimany later version.
13214571Sdim
14214571SdimThis program is distributed in the hope that it will be useful,
15214571Sdimbut WITHOUT ANY WARRANTY; without even the implied warranty of
16214571SdimMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17214571SdimGNU General Public License for more details.
18214571Sdim
19214571SdimYou should have received a copy of the GNU General Public License along
20214571Sdimwith this program; if not, write to the Free Software Foundation, Inc.,
21214571Sdim51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22214571Sdim
23214571Sdim*/
24214571Sdim
25214571Sdim#include "sysdep.h"
26214571Sdim#include "ansidecl.h"
27214571Sdim#include "bfd.h"
28214571Sdim#include "symcat.h"
29214571Sdim#include "mep-desc.h"
30214571Sdim#include "mep-opc.h"
31214571Sdim#include "libiberty.h"
32214571Sdim
33214571Sdim/* -- opc.c */
34214571Sdim#include "elf/mep.h"
35214571Sdim
36214571Sdim/* A mask for all ISAs executed by the core. */
37214571SdimCGEN_ATTR_VALUE_BITSET_TYPE mep_all_core_isas_mask = {0, 0};
38214571Sdim
39214571Sdimvoid
40214571Sdiminit_mep_all_core_isas_mask (void)
41214571Sdim{
42214571Sdim  if (mep_all_core_isas_mask.length != 0)
43214571Sdim    return;
44214571Sdim  cgen_bitset_init (& mep_all_core_isas_mask, ISA_MAX);
45214571Sdim  cgen_bitset_set (& mep_all_core_isas_mask, ISA_MEP);
46214571Sdim  /* begin-all-core-isas */
47214571Sdim  cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE1);
48214571Sdim  cgen_bitset_add (& mep_all_core_isas_mask, ISA_EXT_CORE2);
49214571Sdim  /* end-all-core-isas */
50214571Sdim}
51214571Sdim
52214571SdimCGEN_ATTR_VALUE_BITSET_TYPE mep_all_cop_isas_mask = {0, 0};
53214571Sdim
54214571Sdimvoid
55214571Sdiminit_mep_all_cop_isas_mask (void)
56214571Sdim{
57214571Sdim  if (mep_all_cop_isas_mask.length != 0)
58214571Sdim    return;
59214571Sdim  cgen_bitset_init (& mep_all_cop_isas_mask, ISA_MAX);
60214571Sdim  /* begin-all-cop-isas */
61214571Sdim  cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_16);
62214571Sdim  cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_32);
63214571Sdim  cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_48);
64214571Sdim  cgen_bitset_add (& mep_all_cop_isas_mask, ISA_EXT_COP2_64);
65214571Sdim  /* end-all-cop-isas */
66214571Sdim}
67214571Sdim
68214571Sdimint
69214571Sdimmep_insn_supported_by_isa (const CGEN_INSN *insn, CGEN_ATTR_VALUE_BITSET_TYPE *isa_mask)
70214571Sdim{
71214571Sdim  CGEN_BITSET insn_isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
72214571Sdim  return cgen_bitset_intersect_p (& insn_isas, isa_mask);
73214571Sdim}
74214571Sdim
75214571Sdim#define OPTION_MASK \
76214571Sdim	( (1 << CGEN_INSN_OPTIONAL_BIT_INSN) \
77214571Sdim	| (1 << CGEN_INSN_OPTIONAL_MUL_INSN) \
78214571Sdim	| (1 << CGEN_INSN_OPTIONAL_DIV_INSN) \
79214571Sdim	| (1 << CGEN_INSN_OPTIONAL_DEBUG_INSN) \
80214571Sdim	| (1 << CGEN_INSN_OPTIONAL_LDZ_INSN) \
81214571Sdim	| (1 << CGEN_INSN_OPTIONAL_ABS_INSN) \
82214571Sdim	| (1 << CGEN_INSN_OPTIONAL_AVE_INSN) \
83214571Sdim	| (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN) \
84214571Sdim	| (1 << CGEN_INSN_OPTIONAL_CLIP_INSN) \
85214571Sdim	| (1 << CGEN_INSN_OPTIONAL_SAT_INSN) \
86214571Sdim	| (1 << CGEN_INSN_OPTIONAL_UCI_INSN) \
87214571Sdim	| (1 << CGEN_INSN_OPTIONAL_DSP_INSN) \
88214571Sdim	| (1 << CGEN_INSN_OPTIONAL_CP_INSN) \
89214571Sdim	| (1 << CGEN_INSN_OPTIONAL_CP64_INSN) )
90214571Sdim
91214571Sdim
92214571Sdimmep_config_map_struct mep_config_map[] =
93214571Sdim{
94214571Sdim  /* config-map-start */
95214571Sdim  /* Default entry: mep core only, all options enabled. */
96214571Sdim  { "", 0, EF_MEP_CPU_C2, 1, 0, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x0"}, {1,"\x80"}, OPTION_MASK },
97214571Sdim  { "simple", CONFIG_SIMPLE, EF_MEP_CPU_C2, 1, 0, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\x0" }, { 1, "\xc0" },
98214571Sdim	  0 },
99214571Sdim  { "fmax", CONFIG_FMAX, EF_MEP_CPU_C2, 1, 0, { 1, "\x10" }, { 1, "\x8" }, { 1, "\x4" }, { 1, "\x2" }, { 1, "\x1e" }, { 1, "\xa0" },
100214571Sdim	  0
101214571Sdim	| (1 << CGEN_INSN_OPTIONAL_CP_INSN)
102214571Sdim	| (1 << CGEN_INSN_OPTIONAL_MUL_INSN)
103214571Sdim	| (1 << CGEN_INSN_OPTIONAL_DIV_INSN)
104214571Sdim	| (1 << CGEN_INSN_OPTIONAL_BIT_INSN)
105214571Sdim	| (1 << CGEN_INSN_OPTIONAL_LDZ_INSN)
106214571Sdim	| (1 << CGEN_INSN_OPTIONAL_ABS_INSN)
107214571Sdim	| (1 << CGEN_INSN_OPTIONAL_AVE_INSN)
108214571Sdim	| (1 << CGEN_INSN_OPTIONAL_MINMAX_INSN)
109214571Sdim	| (1 << CGEN_INSN_OPTIONAL_CLIP_INSN)
110214571Sdim	| (1 << CGEN_INSN_OPTIONAL_SAT_INSN) },
111214571Sdim  /* config-map-end */
112214571Sdim  { 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, 0 }
113214571Sdim};
114214571Sdim
115214571Sdimint mep_config_index = 0;
116214571Sdim
117214571Sdimstatic int
118214571Sdimcheck_configured_mach (int machs)
119214571Sdim{
120214571Sdim  /* All base insns are supported.  */
121214571Sdim  int mach = 1 << MACH_BASE;
122214571Sdim  switch (MEP_CPU)
123214571Sdim    {
124214571Sdim    case EF_MEP_CPU_C2:
125214571Sdim    case EF_MEP_CPU_C3:
126214571Sdim      mach |= (1 << MACH_MEP);
127214571Sdim      break;
128214571Sdim    case EF_MEP_CPU_H1:
129214571Sdim      mach |= (1 << MACH_H1);
130214571Sdim      break;
131214571Sdim    default:
132214571Sdim      break;
133214571Sdim    }
134214571Sdim  return machs & mach;
135214571Sdim}
136214571Sdim
137214571Sdimint
138214571Sdimmep_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn)
139214571Sdim{
140214571Sdim  int iconfig = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_CONFIG);
141214571Sdim  int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
142214571Sdim  CGEN_BITSET isas = CGEN_INSN_BITSET_ATTR_VALUE (insn, CGEN_INSN_ISA);
143214571Sdim  int ok1;
144214571Sdim  int ok2;
145214571Sdim  int ok3;
146214571Sdim
147214571Sdim  /* If the insn has an option bit set that we don't want,
148214571Sdim     reject it.  */
149214571Sdim  if (CGEN_INSN_ATTRS (insn)->bool & OPTION_MASK & ~MEP_OMASK)
150214571Sdim    return 0;
151214571Sdim
152214571Sdim  /* If attributes are absent, assume no restriction. */
153214571Sdim  if (machs == 0)
154214571Sdim    machs = ~0;
155214571Sdim
156214571Sdim  ok1 = ((machs & cd->machs) && cgen_bitset_intersect_p (& isas, cd->isas));
157214571Sdim  /* If the insn is config-specific, make sure it matches.  */
158214571Sdim  ok2 =  (iconfig == 0 || iconfig == MEP_CONFIG);
159214571Sdim  /* Make sure the insn is supported by the configured mach  */
160214571Sdim  ok3 = check_configured_mach (machs);
161214571Sdim
162214571Sdim  return (ok1 && ok2 && ok3);
163214571Sdim}
164214571Sdim/* The hash functions are recorded here to help keep assembler code out of
165214571Sdim   the disassembler and vice versa.  */
166214571Sdim
167214571Sdimstatic int asm_hash_insn_p        (const CGEN_INSN *);
168214571Sdimstatic unsigned int asm_hash_insn (const char *);
169214571Sdimstatic int dis_hash_insn_p        (const CGEN_INSN *);
170214571Sdimstatic unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
171214571Sdim
172214571Sdim/* Instruction formats.  */
173214571Sdim
174214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
175214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_##f]
176214571Sdim#else
177214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_/**/f]
178214571Sdim#endif
179214571Sdimstatic const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
180214571Sdim  0, 0, 0x0, { { 0 } }
181214571Sdim};
182214571Sdim
183214571Sdimstatic const CGEN_IFMT ifmt_sb ATTRIBUTE_UNUSED = {
184214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
185214571Sdim};
186214571Sdim
187214571Sdimstatic const CGEN_IFMT ifmt_sh ATTRIBUTE_UNUSED = {
188214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
189214571Sdim};
190214571Sdim
191214571Sdimstatic const CGEN_IFMT ifmt_sw ATTRIBUTE_UNUSED = {
192214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
193214571Sdim};
194214571Sdim
195214571Sdimstatic const CGEN_IFMT ifmt_lbu ATTRIBUTE_UNUSED = {
196214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
197214571Sdim};
198214571Sdim
199214571Sdimstatic const CGEN_IFMT ifmt_lhu ATTRIBUTE_UNUSED = {
200214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
201214571Sdim};
202214571Sdim
203214571Sdimstatic const CGEN_IFMT ifmt_sw_sp ATTRIBUTE_UNUSED = {
204214571Sdim  16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
205214571Sdim};
206214571Sdim
207214571Sdimstatic const CGEN_IFMT ifmt_sb_tp ATTRIBUTE_UNUSED = {
208214571Sdim  16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } }
209214571Sdim};
210214571Sdim
211214571Sdimstatic const CGEN_IFMT ifmt_sh_tp ATTRIBUTE_UNUSED = {
212214571Sdim  16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } }
213214571Sdim};
214214571Sdim
215214571Sdimstatic const CGEN_IFMT ifmt_sw_tp ATTRIBUTE_UNUSED = {
216214571Sdim  16, 16, 0xf883, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
217214571Sdim};
218214571Sdim
219214571Sdimstatic const CGEN_IFMT ifmt_lbu_tp ATTRIBUTE_UNUSED = {
220214571Sdim  16, 16, 0xf880, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9) }, { 0 } }
221214571Sdim};
222214571Sdim
223214571Sdimstatic const CGEN_IFMT ifmt_lhu_tp ATTRIBUTE_UNUSED = {
224214571Sdim  16, 16, 0xf881, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_8) }, { F (F_7U9A2) }, { F (F_15) }, { 0 } }
225214571Sdim};
226214571Sdim
227214571Sdimstatic const CGEN_IFMT ifmt_sb16 ATTRIBUTE_UNUSED = {
228214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
229214571Sdim};
230214571Sdim
231214571Sdimstatic const CGEN_IFMT ifmt_sh16 ATTRIBUTE_UNUSED = {
232214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
233214571Sdim};
234214571Sdim
235214571Sdimstatic const CGEN_IFMT ifmt_sw16 ATTRIBUTE_UNUSED = {
236214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
237214571Sdim};
238214571Sdim
239214571Sdimstatic const CGEN_IFMT ifmt_lbu16 ATTRIBUTE_UNUSED = {
240214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
241214571Sdim};
242214571Sdim
243214571Sdimstatic const CGEN_IFMT ifmt_lhu16 ATTRIBUTE_UNUSED = {
244214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
245214571Sdim};
246214571Sdim
247214571Sdimstatic const CGEN_IFMT ifmt_sw24 ATTRIBUTE_UNUSED = {
248214571Sdim  32, 32, 0xf0030000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_24U8A4N) }, { F (F_SUB2) }, { 0 } }
249214571Sdim};
250214571Sdim
251214571Sdimstatic const CGEN_IFMT ifmt_extb ATTRIBUTE_UNUSED = {
252214571Sdim  16, 16, 0xf0ff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
253214571Sdim};
254214571Sdim
255214571Sdimstatic const CGEN_IFMT ifmt_ssarb ATTRIBUTE_UNUSED = {
256214571Sdim  16, 16, 0xfc0f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_5) }, { F (F_2U6) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
257214571Sdim};
258214571Sdim
259214571Sdimstatic const CGEN_IFMT ifmt_mov ATTRIBUTE_UNUSED = {
260214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
261214571Sdim};
262214571Sdim
263214571Sdimstatic const CGEN_IFMT ifmt_movi8 ATTRIBUTE_UNUSED = {
264214571Sdim  16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8) }, { 0 } }
265214571Sdim};
266214571Sdim
267214571Sdimstatic const CGEN_IFMT ifmt_movi16 ATTRIBUTE_UNUSED = {
268214571Sdim  32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
269214571Sdim};
270214571Sdim
271214571Sdimstatic const CGEN_IFMT ifmt_movu24 ATTRIBUTE_UNUSED = {
272214571Sdim  32, 32, 0xf8000000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_RN3) }, { F (F_24U8N) }, { 0 } }
273214571Sdim};
274214571Sdim
275214571Sdimstatic const CGEN_IFMT ifmt_movu16 ATTRIBUTE_UNUSED = {
276214571Sdim  32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
277214571Sdim};
278214571Sdim
279214571Sdimstatic const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = {
280214571Sdim  16, 16, 0xf000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_RL) }, { 0 } }
281214571Sdim};
282214571Sdim
283214571Sdimstatic const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
284214571Sdim  16, 16, 0xf003, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_6S8) }, { F (F_SUB2) }, { 0 } }
285214571Sdim};
286214571Sdim
287214571Sdimstatic const CGEN_IFMT ifmt_add3i ATTRIBUTE_UNUSED = {
288214571Sdim  16, 16, 0xf083, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_7U9A4) }, { F (F_SUB2) }, { 0 } }
289214571Sdim};
290214571Sdim
291214571Sdimstatic const CGEN_IFMT ifmt_slt3i ATTRIBUTE_UNUSED = {
292214571Sdim  16, 16, 0xf007, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_5U8) }, { F (F_SUB3) }, { 0 } }
293214571Sdim};
294214571Sdim
295214571Sdimstatic const CGEN_IFMT ifmt_add3x ATTRIBUTE_UNUSED = {
296214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
297214571Sdim};
298214571Sdim
299214571Sdimstatic const CGEN_IFMT ifmt_sltu3x ATTRIBUTE_UNUSED = {
300214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
301214571Sdim};
302214571Sdim
303214571Sdimstatic const CGEN_IFMT ifmt_bra ATTRIBUTE_UNUSED = {
304214571Sdim  16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_12S4A2) }, { F (F_15) }, { 0 } }
305214571Sdim};
306214571Sdim
307214571Sdimstatic const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = {
308214571Sdim  16, 16, 0xf001, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8S8A2) }, { F (F_15) }, { 0 } }
309214571Sdim};
310214571Sdim
311214571Sdimstatic const CGEN_IFMT ifmt_beqi ATTRIBUTE_UNUSED = {
312214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_4U8) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
313214571Sdim};
314214571Sdim
315214571Sdimstatic const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = {
316214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
317214571Sdim};
318214571Sdim
319214571Sdimstatic const CGEN_IFMT ifmt_bsr24 ATTRIBUTE_UNUSED = {
320214571Sdim  32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24S5A2N) }, { F (F_SUB4) }, { 0 } }
321214571Sdim};
322214571Sdim
323214571Sdimstatic const CGEN_IFMT ifmt_jmp ATTRIBUTE_UNUSED = {
324214571Sdim  16, 16, 0xff0f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
325214571Sdim};
326214571Sdim
327214571Sdimstatic const CGEN_IFMT ifmt_jmp24 ATTRIBUTE_UNUSED = {
328214571Sdim  32, 32, 0xf80f0000, { { F (F_MAJOR) }, { F (F_4) }, { F (F_24U5A2N) }, { F (F_SUB4) }, { 0 } }
329214571Sdim};
330214571Sdim
331214571Sdimstatic const CGEN_IFMT ifmt_ret ATTRIBUTE_UNUSED = {
332214571Sdim  16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
333214571Sdim};
334214571Sdim
335214571Sdimstatic const CGEN_IFMT ifmt_repeat ATTRIBUTE_UNUSED = {
336214571Sdim  32, 32, 0xf0ff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
337214571Sdim};
338214571Sdim
339214571Sdimstatic const CGEN_IFMT ifmt_erepeat ATTRIBUTE_UNUSED = {
340214571Sdim  32, 32, 0xffff0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
341214571Sdim};
342214571Sdim
343214571Sdimstatic const CGEN_IFMT ifmt_stc_lp ATTRIBUTE_UNUSED = {
344214571Sdim  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 } }
345214571Sdim};
346214571Sdim
347214571Sdimstatic const CGEN_IFMT ifmt_stc ATTRIBUTE_UNUSED = {
348214571Sdim  16, 16, 0xf00e, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_CSRN) }, { F (F_12) }, { F (F_13) }, { F (F_14) }, { 0 } }
349214571Sdim};
350214571Sdim
351214571Sdimstatic const CGEN_IFMT ifmt_swi ATTRIBUTE_UNUSED = {
352214571Sdim  16, 16, 0xffcf, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_8) }, { F (F_9) }, { F (F_2U10) }, { F (F_SUB4) }, { 0 } }
353214571Sdim};
354214571Sdim
355214571Sdimstatic const CGEN_IFMT ifmt_bsetm ATTRIBUTE_UNUSED = {
356214571Sdim  16, 16, 0xf80f, { { F (F_MAJOR) }, { F (F_4) }, { F (F_3U5) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
357214571Sdim};
358214571Sdim
359214571Sdimstatic const CGEN_IFMT ifmt_tas ATTRIBUTE_UNUSED = {
360214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
361214571Sdim};
362214571Sdim
363214571Sdimstatic const CGEN_IFMT ifmt_cache ATTRIBUTE_UNUSED = {
364214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
365214571Sdim};
366214571Sdim
367214571Sdimstatic const CGEN_IFMT ifmt_madd ATTRIBUTE_UNUSED = {
368214571Sdim  32, 32, 0xf00fffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16U16) }, { 0 } }
369214571Sdim};
370214571Sdim
371214571Sdimstatic const CGEN_IFMT ifmt_clip ATTRIBUTE_UNUSED = {
372214571Sdim  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 } }
373214571Sdim};
374214571Sdim
375214571Sdimstatic const CGEN_IFMT ifmt_swcp ATTRIBUTE_UNUSED = {
376214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
377214571Sdim};
378214571Sdim
379214571Sdimstatic const CGEN_IFMT ifmt_smcp ATTRIBUTE_UNUSED = {
380214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
381214571Sdim};
382214571Sdim
383214571Sdimstatic const CGEN_IFMT ifmt_swcp16 ATTRIBUTE_UNUSED = {
384214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
385214571Sdim};
386214571Sdim
387214571Sdimstatic const CGEN_IFMT ifmt_smcp16 ATTRIBUTE_UNUSED = {
388214571Sdim  32, 32, 0xf00f0000, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_16S16) }, { 0 } }
389214571Sdim};
390214571Sdim
391214571Sdimstatic const CGEN_IFMT ifmt_sbcpa ATTRIBUTE_UNUSED = {
392214571Sdim  32, 32, 0xf00fff00, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_EXT) }, { F (F_8S24) }, { 0 } }
393214571Sdim};
394214571Sdim
395214571Sdimstatic const CGEN_IFMT ifmt_shcpa ATTRIBUTE_UNUSED = {
396214571Sdim  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 } }
397214571Sdim};
398214571Sdim
399214571Sdimstatic const CGEN_IFMT ifmt_swcpa ATTRIBUTE_UNUSED = {
400214571Sdim  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 } }
401214571Sdim};
402214571Sdim
403214571Sdimstatic const CGEN_IFMT ifmt_smcpa ATTRIBUTE_UNUSED = {
404214571Sdim  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 } }
405214571Sdim};
406214571Sdim
407214571Sdimstatic const CGEN_IFMT ifmt_bcpeq ATTRIBUTE_UNUSED = {
408214571Sdim  32, 32, 0xff0f0000, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { F (F_17S16A2) }, { 0 } }
409214571Sdim};
410214571Sdim
411214571Sdimstatic const CGEN_IFMT ifmt_sim_syscall ATTRIBUTE_UNUSED = {
412214571Sdim  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 } }
413214571Sdim};
414214571Sdim
415214571Sdimstatic const CGEN_IFMT ifmt_fadds ATTRIBUTE_UNUSED = {
416214571Sdim  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 } }
417214571Sdim};
418214571Sdim
419214571Sdimstatic const CGEN_IFMT ifmt_fsqrts ATTRIBUTE_UNUSED = {
420214571Sdim  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 } }
421214571Sdim};
422214571Sdim
423214571Sdimstatic const CGEN_IFMT ifmt_froundws ATTRIBUTE_UNUSED = {
424214571Sdim  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 } }
425214571Sdim};
426214571Sdim
427214571Sdimstatic const CGEN_IFMT ifmt_fcvtsw ATTRIBUTE_UNUSED = {
428214571Sdim  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 } }
429214571Sdim};
430214571Sdim
431214571Sdimstatic const CGEN_IFMT ifmt_fcmpfs ATTRIBUTE_UNUSED = {
432214571Sdim  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 } }
433214571Sdim};
434214571Sdim
435214571Sdimstatic const CGEN_IFMT ifmt_cmov_frn_rm ATTRIBUTE_UNUSED = {
436214571Sdim  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 } }
437214571Sdim};
438214571Sdim
439214571Sdimstatic const CGEN_IFMT ifmt_cmovc_ccrn_rm ATTRIBUTE_UNUSED = {
440214571Sdim  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 } }
441214571Sdim};
442214571Sdim
443214571Sdim#undef F
444214571Sdim
445214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
446214571Sdim#define A(a) (1 << CGEN_INSN_##a)
447214571Sdim#else
448214571Sdim#define A(a) (1 << CGEN_INSN_/**/a)
449214571Sdim#endif
450214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
451214571Sdim#define OPERAND(op) MEP_OPERAND_##op
452214571Sdim#else
453214571Sdim#define OPERAND(op) MEP_OPERAND_/**/op
454214571Sdim#endif
455214571Sdim#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
456214571Sdim#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
457214571Sdim
458214571Sdim/* The instruction table.  */
459214571Sdim
460214571Sdimstatic const CGEN_OPCODE mep_cgen_insn_opcode_table[MAX_INSNS] =
461214571Sdim{
462214571Sdim  /* Special null first entry.
463214571Sdim     A `num' value of zero is thus invalid.
464214571Sdim     Also, the special `invalid' insn resides here.  */
465214571Sdim  { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
466214571Sdim/* sb $rnc,($rma) */
467214571Sdim  {
468214571Sdim    { 0, 0, 0, 0 },
469214571Sdim    { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } },
470214571Sdim    & ifmt_sb, { 0x8 }
471214571Sdim  },
472214571Sdim/* sh $rns,($rma) */
473214571Sdim  {
474214571Sdim    { 0, 0, 0, 0 },
475214571Sdim    { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } },
476214571Sdim    & ifmt_sh, { 0x9 }
477214571Sdim  },
478214571Sdim/* sw $rnl,($rma) */
479214571Sdim  {
480214571Sdim    { 0, 0, 0, 0 },
481214571Sdim    { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } },
482214571Sdim    & ifmt_sw, { 0xa }
483214571Sdim  },
484214571Sdim/* lb $rnc,($rma) */
485214571Sdim  {
486214571Sdim    { 0, 0, 0, 0 },
487214571Sdim    { { MNEM, ' ', OP (RNC), ',', '(', OP (RMA), ')', 0 } },
488214571Sdim    & ifmt_sb, { 0xc }
489214571Sdim  },
490214571Sdim/* lh $rns,($rma) */
491214571Sdim  {
492214571Sdim    { 0, 0, 0, 0 },
493214571Sdim    { { MNEM, ' ', OP (RNS), ',', '(', OP (RMA), ')', 0 } },
494214571Sdim    & ifmt_sh, { 0xd }
495214571Sdim  },
496214571Sdim/* lw $rnl,($rma) */
497214571Sdim  {
498214571Sdim    { 0, 0, 0, 0 },
499214571Sdim    { { MNEM, ' ', OP (RNL), ',', '(', OP (RMA), ')', 0 } },
500214571Sdim    & ifmt_sw, { 0xe }
501214571Sdim  },
502214571Sdim/* lbu $rnuc,($rma) */
503214571Sdim  {
504214571Sdim    { 0, 0, 0, 0 },
505214571Sdim    { { MNEM, ' ', OP (RNUC), ',', '(', OP (RMA), ')', 0 } },
506214571Sdim    & ifmt_lbu, { 0xb }
507214571Sdim  },
508214571Sdim/* lhu $rnus,($rma) */
509214571Sdim  {
510214571Sdim    { 0, 0, 0, 0 },
511214571Sdim    { { MNEM, ' ', OP (RNUS), ',', '(', OP (RMA), ')', 0 } },
512214571Sdim    & ifmt_lhu, { 0xf }
513214571Sdim  },
514214571Sdim/* sw $rnl,$udisp7a4($spr) */
515214571Sdim  {
516214571Sdim    { 0, 0, 0, 0 },
517214571Sdim    { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } },
518214571Sdim    & ifmt_sw_sp, { 0x4002 }
519214571Sdim  },
520214571Sdim/* lw $rnl,$udisp7a4($spr) */
521214571Sdim  {
522214571Sdim    { 0, 0, 0, 0 },
523214571Sdim    { { MNEM, ' ', OP (RNL), ',', OP (UDISP7A4), '(', OP (SPR), ')', 0 } },
524214571Sdim    & ifmt_sw_sp, { 0x4003 }
525214571Sdim  },
526214571Sdim/* sb $rn3c,$udisp7($tpr) */
527214571Sdim  {
528214571Sdim    { 0, 0, 0, 0 },
529214571Sdim    { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
530214571Sdim    & ifmt_sb_tp, { 0x8000 }
531214571Sdim  },
532214571Sdim/* sh $rn3s,$udisp7a2($tpr) */
533214571Sdim  {
534214571Sdim    { 0, 0, 0, 0 },
535214571Sdim    { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
536214571Sdim    & ifmt_sh_tp, { 0x8080 }
537214571Sdim  },
538214571Sdim/* sw $rn3l,$udisp7a4($tpr) */
539214571Sdim  {
540214571Sdim    { 0, 0, 0, 0 },
541214571Sdim    { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } },
542214571Sdim    & ifmt_sw_tp, { 0x4082 }
543214571Sdim  },
544214571Sdim/* lb $rn3c,$udisp7($tpr) */
545214571Sdim  {
546214571Sdim    { 0, 0, 0, 0 },
547214571Sdim    { { MNEM, ' ', OP (RN3C), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
548214571Sdim    & ifmt_sb_tp, { 0x8800 }
549214571Sdim  },
550214571Sdim/* lh $rn3s,$udisp7a2($tpr) */
551214571Sdim  {
552214571Sdim    { 0, 0, 0, 0 },
553214571Sdim    { { MNEM, ' ', OP (RN3S), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
554214571Sdim    & ifmt_sh_tp, { 0x8880 }
555214571Sdim  },
556214571Sdim/* lw $rn3l,$udisp7a4($tpr) */
557214571Sdim  {
558214571Sdim    { 0, 0, 0, 0 },
559214571Sdim    { { MNEM, ' ', OP (RN3L), ',', OP (UDISP7A4), '(', OP (TPR), ')', 0 } },
560214571Sdim    & ifmt_sw_tp, { 0x4083 }
561214571Sdim  },
562214571Sdim/* lbu $rn3uc,$udisp7($tpr) */
563214571Sdim  {
564214571Sdim    { 0, 0, 0, 0 },
565214571Sdim    { { MNEM, ' ', OP (RN3UC), ',', OP (UDISP7), '(', OP (TPR), ')', 0 } },
566214571Sdim    & ifmt_lbu_tp, { 0x4880 }
567214571Sdim  },
568214571Sdim/* lhu $rn3us,$udisp7a2($tpr) */
569214571Sdim  {
570214571Sdim    { 0, 0, 0, 0 },
571214571Sdim    { { MNEM, ' ', OP (RN3US), ',', OP (UDISP7A2), '(', OP (TPR), ')', 0 } },
572214571Sdim    & ifmt_lhu_tp, { 0x8881 }
573214571Sdim  },
574214571Sdim/* sb $rnc,$sdisp16($rma) */
575214571Sdim  {
576214571Sdim    { 0, 0, 0, 0 },
577214571Sdim    { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
578214571Sdim    & ifmt_sb16, { 0xc0080000 }
579214571Sdim  },
580214571Sdim/* sh $rns,$sdisp16($rma) */
581214571Sdim  {
582214571Sdim    { 0, 0, 0, 0 },
583214571Sdim    { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
584214571Sdim    & ifmt_sh16, { 0xc0090000 }
585214571Sdim  },
586214571Sdim/* sw $rnl,$sdisp16($rma) */
587214571Sdim  {
588214571Sdim    { 0, 0, 0, 0 },
589214571Sdim    { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
590214571Sdim    & ifmt_sw16, { 0xc00a0000 }
591214571Sdim  },
592214571Sdim/* lb $rnc,$sdisp16($rma) */
593214571Sdim  {
594214571Sdim    { 0, 0, 0, 0 },
595214571Sdim    { { MNEM, ' ', OP (RNC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
596214571Sdim    & ifmt_sb16, { 0xc00c0000 }
597214571Sdim  },
598214571Sdim/* lh $rns,$sdisp16($rma) */
599214571Sdim  {
600214571Sdim    { 0, 0, 0, 0 },
601214571Sdim    { { MNEM, ' ', OP (RNS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
602214571Sdim    & ifmt_sh16, { 0xc00d0000 }
603214571Sdim  },
604214571Sdim/* lw $rnl,$sdisp16($rma) */
605214571Sdim  {
606214571Sdim    { 0, 0, 0, 0 },
607214571Sdim    { { MNEM, ' ', OP (RNL), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
608214571Sdim    & ifmt_sw16, { 0xc00e0000 }
609214571Sdim  },
610214571Sdim/* lbu $rnuc,$sdisp16($rma) */
611214571Sdim  {
612214571Sdim    { 0, 0, 0, 0 },
613214571Sdim    { { MNEM, ' ', OP (RNUC), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
614214571Sdim    & ifmt_lbu16, { 0xc00b0000 }
615214571Sdim  },
616214571Sdim/* lhu $rnus,$sdisp16($rma) */
617214571Sdim  {
618214571Sdim    { 0, 0, 0, 0 },
619214571Sdim    { { MNEM, ' ', OP (RNUS), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
620214571Sdim    & ifmt_lhu16, { 0xc00f0000 }
621214571Sdim  },
622214571Sdim/* sw $rnl,($addr24a4) */
623214571Sdim  {
624214571Sdim    { 0, 0, 0, 0 },
625214571Sdim    { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } },
626214571Sdim    & ifmt_sw24, { 0xe0020000 }
627214571Sdim  },
628214571Sdim/* lw $rnl,($addr24a4) */
629214571Sdim  {
630214571Sdim    { 0, 0, 0, 0 },
631214571Sdim    { { MNEM, ' ', OP (RNL), ',', '(', OP (ADDR24A4), ')', 0 } },
632214571Sdim    & ifmt_sw24, { 0xe0030000 }
633214571Sdim  },
634214571Sdim/* extb $rn */
635214571Sdim  {
636214571Sdim    { 0, 0, 0, 0 },
637214571Sdim    { { MNEM, ' ', OP (RN), 0 } },
638214571Sdim    & ifmt_extb, { 0x100d }
639214571Sdim  },
640214571Sdim/* exth $rn */
641214571Sdim  {
642214571Sdim    { 0, 0, 0, 0 },
643214571Sdim    { { MNEM, ' ', OP (RN), 0 } },
644214571Sdim    & ifmt_extb, { 0x102d }
645214571Sdim  },
646214571Sdim/* extub $rn */
647214571Sdim  {
648214571Sdim    { 0, 0, 0, 0 },
649214571Sdim    { { MNEM, ' ', OP (RN), 0 } },
650214571Sdim    & ifmt_extb, { 0x108d }
651214571Sdim  },
652214571Sdim/* extuh $rn */
653214571Sdim  {
654214571Sdim    { 0, 0, 0, 0 },
655214571Sdim    { { MNEM, ' ', OP (RN), 0 } },
656214571Sdim    & ifmt_extb, { 0x10ad }
657214571Sdim  },
658214571Sdim/* ssarb $udisp2($rm) */
659214571Sdim  {
660214571Sdim    { 0, 0, 0, 0 },
661214571Sdim    { { MNEM, ' ', OP (UDISP2), '(', OP (RM), ')', 0 } },
662214571Sdim    & ifmt_ssarb, { 0x100c }
663214571Sdim  },
664214571Sdim/* mov $rn,$rm */
665214571Sdim  {
666214571Sdim    { 0, 0, 0, 0 },
667214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
668214571Sdim    & ifmt_mov, { 0x0 }
669214571Sdim  },
670214571Sdim/* mov $rn,$simm8 */
671214571Sdim  {
672214571Sdim    { 0, 0, 0, 0 },
673214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (SIMM8), 0 } },
674214571Sdim    & ifmt_movi8, { 0x5000 }
675214571Sdim  },
676214571Sdim/* mov $rn,$simm16 */
677214571Sdim  {
678214571Sdim    { 0, 0, 0, 0 },
679214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (SIMM16), 0 } },
680214571Sdim    & ifmt_movi16, { 0xc0010000 }
681214571Sdim  },
682214571Sdim/* movu $rn3,$uimm24 */
683214571Sdim  {
684214571Sdim    { 0, 0, 0, 0 },
685214571Sdim    { { MNEM, ' ', OP (RN3), ',', OP (UIMM24), 0 } },
686214571Sdim    & ifmt_movu24, { 0xd0000000 }
687214571Sdim  },
688214571Sdim/* movu $rn,$uimm16 */
689214571Sdim  {
690214571Sdim    { 0, 0, 0, 0 },
691214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
692214571Sdim    & ifmt_movu16, { 0xc0110000 }
693214571Sdim  },
694214571Sdim/* movh $rn,$uimm16 */
695214571Sdim  {
696214571Sdim    { 0, 0, 0, 0 },
697214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
698214571Sdim    & ifmt_movu16, { 0xc0210000 }
699214571Sdim  },
700214571Sdim/* add3 $rl,$rn,$rm */
701214571Sdim  {
702214571Sdim    { 0, 0, 0, 0 },
703214571Sdim    { { MNEM, ' ', OP (RL), ',', OP (RN), ',', OP (RM), 0 } },
704214571Sdim    & ifmt_add3, { 0x9000 }
705214571Sdim  },
706214571Sdim/* add $rn,$simm6 */
707214571Sdim  {
708214571Sdim    { 0, 0, 0, 0 },
709214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (SIMM6), 0 } },
710214571Sdim    & ifmt_add, { 0x6000 }
711214571Sdim  },
712214571Sdim/* add3 $rn,$spr,$uimm7a4 */
713214571Sdim  {
714214571Sdim    { 0, 0, 0, 0 },
715214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (SPR), ',', OP (UIMM7A4), 0 } },
716214571Sdim    & ifmt_add3i, { 0x4000 }
717214571Sdim  },
718214571Sdim/* advck3 \$0,$rn,$rm */
719214571Sdim  {
720214571Sdim    { 0, 0, 0, 0 },
721214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
722214571Sdim    & ifmt_mov, { 0x7 }
723214571Sdim  },
724214571Sdim/* sub $rn,$rm */
725214571Sdim  {
726214571Sdim    { 0, 0, 0, 0 },
727214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
728214571Sdim    & ifmt_mov, { 0x4 }
729214571Sdim  },
730214571Sdim/* sbvck3 \$0,$rn,$rm */
731214571Sdim  {
732214571Sdim    { 0, 0, 0, 0 },
733214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
734214571Sdim    & ifmt_mov, { 0x5 }
735214571Sdim  },
736214571Sdim/* neg $rn,$rm */
737214571Sdim  {
738214571Sdim    { 0, 0, 0, 0 },
739214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
740214571Sdim    & ifmt_mov, { 0x1 }
741214571Sdim  },
742214571Sdim/* slt3 \$0,$rn,$rm */
743214571Sdim  {
744214571Sdim    { 0, 0, 0, 0 },
745214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
746214571Sdim    & ifmt_mov, { 0x2 }
747214571Sdim  },
748214571Sdim/* sltu3 \$0,$rn,$rm */
749214571Sdim  {
750214571Sdim    { 0, 0, 0, 0 },
751214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
752214571Sdim    & ifmt_mov, { 0x3 }
753214571Sdim  },
754214571Sdim/* slt3 \$0,$rn,$uimm5 */
755214571Sdim  {
756214571Sdim    { 0, 0, 0, 0 },
757214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
758214571Sdim    & ifmt_slt3i, { 0x6001 }
759214571Sdim  },
760214571Sdim/* sltu3 \$0,$rn,$uimm5 */
761214571Sdim  {
762214571Sdim    { 0, 0, 0, 0 },
763214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
764214571Sdim    & ifmt_slt3i, { 0x6005 }
765214571Sdim  },
766214571Sdim/* sl1ad3 \$0,$rn,$rm */
767214571Sdim  {
768214571Sdim    { 0, 0, 0, 0 },
769214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
770214571Sdim    & ifmt_mov, { 0x2006 }
771214571Sdim  },
772214571Sdim/* sl2ad3 \$0,$rn,$rm */
773214571Sdim  {
774214571Sdim    { 0, 0, 0, 0 },
775214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (RM), 0 } },
776214571Sdim    & ifmt_mov, { 0x2007 }
777214571Sdim  },
778214571Sdim/* add3 $rn,$rm,$simm16 */
779214571Sdim  {
780214571Sdim    { 0, 0, 0, 0 },
781214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } },
782214571Sdim    & ifmt_add3x, { 0xc0000000 }
783214571Sdim  },
784214571Sdim/* slt3 $rn,$rm,$simm16 */
785214571Sdim  {
786214571Sdim    { 0, 0, 0, 0 },
787214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (SIMM16), 0 } },
788214571Sdim    & ifmt_add3x, { 0xc0020000 }
789214571Sdim  },
790214571Sdim/* sltu3 $rn,$rm,$uimm16 */
791214571Sdim  {
792214571Sdim    { 0, 0, 0, 0 },
793214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
794214571Sdim    & ifmt_sltu3x, { 0xc0030000 }
795214571Sdim  },
796214571Sdim/* or $rn,$rm */
797214571Sdim  {
798214571Sdim    { 0, 0, 0, 0 },
799214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
800214571Sdim    & ifmt_mov, { 0x1000 }
801214571Sdim  },
802214571Sdim/* and $rn,$rm */
803214571Sdim  {
804214571Sdim    { 0, 0, 0, 0 },
805214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
806214571Sdim    & ifmt_mov, { 0x1001 }
807214571Sdim  },
808214571Sdim/* xor $rn,$rm */
809214571Sdim  {
810214571Sdim    { 0, 0, 0, 0 },
811214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
812214571Sdim    & ifmt_mov, { 0x1002 }
813214571Sdim  },
814214571Sdim/* nor $rn,$rm */
815214571Sdim  {
816214571Sdim    { 0, 0, 0, 0 },
817214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
818214571Sdim    & ifmt_mov, { 0x1003 }
819214571Sdim  },
820214571Sdim/* or3 $rn,$rm,$uimm16 */
821214571Sdim  {
822214571Sdim    { 0, 0, 0, 0 },
823214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
824214571Sdim    & ifmt_sltu3x, { 0xc0040000 }
825214571Sdim  },
826214571Sdim/* and3 $rn,$rm,$uimm16 */
827214571Sdim  {
828214571Sdim    { 0, 0, 0, 0 },
829214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
830214571Sdim    & ifmt_sltu3x, { 0xc0050000 }
831214571Sdim  },
832214571Sdim/* xor3 $rn,$rm,$uimm16 */
833214571Sdim  {
834214571Sdim    { 0, 0, 0, 0 },
835214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (UIMM16), 0 } },
836214571Sdim    & ifmt_sltu3x, { 0xc0060000 }
837214571Sdim  },
838214571Sdim/* sra $rn,$rm */
839214571Sdim  {
840214571Sdim    { 0, 0, 0, 0 },
841214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
842214571Sdim    & ifmt_mov, { 0x200d }
843214571Sdim  },
844214571Sdim/* srl $rn,$rm */
845214571Sdim  {
846214571Sdim    { 0, 0, 0, 0 },
847214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
848214571Sdim    & ifmt_mov, { 0x200c }
849214571Sdim  },
850214571Sdim/* sll $rn,$rm */
851214571Sdim  {
852214571Sdim    { 0, 0, 0, 0 },
853214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
854214571Sdim    & ifmt_mov, { 0x200e }
855214571Sdim  },
856214571Sdim/* sra $rn,$uimm5 */
857214571Sdim  {
858214571Sdim    { 0, 0, 0, 0 },
859214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
860214571Sdim    & ifmt_slt3i, { 0x6003 }
861214571Sdim  },
862214571Sdim/* srl $rn,$uimm5 */
863214571Sdim  {
864214571Sdim    { 0, 0, 0, 0 },
865214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
866214571Sdim    & ifmt_slt3i, { 0x6002 }
867214571Sdim  },
868214571Sdim/* sll $rn,$uimm5 */
869214571Sdim  {
870214571Sdim    { 0, 0, 0, 0 },
871214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM5), 0 } },
872214571Sdim    & ifmt_slt3i, { 0x6006 }
873214571Sdim  },
874214571Sdim/* sll3 \$0,$rn,$uimm5 */
875214571Sdim  {
876214571Sdim    { 0, 0, 0, 0 },
877214571Sdim    { { MNEM, ' ', '$', '0', ',', OP (RN), ',', OP (UIMM5), 0 } },
878214571Sdim    & ifmt_slt3i, { 0x6007 }
879214571Sdim  },
880214571Sdim/* fsft $rn,$rm */
881214571Sdim  {
882214571Sdim    { 0, 0, 0, 0 },
883214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
884214571Sdim    & ifmt_mov, { 0x200f }
885214571Sdim  },
886214571Sdim/* bra $pcrel12a2 */
887214571Sdim  {
888214571Sdim    { 0, 0, 0, 0 },
889214571Sdim    { { MNEM, ' ', OP (PCREL12A2), 0 } },
890214571Sdim    & ifmt_bra, { 0xb000 }
891214571Sdim  },
892214571Sdim/* beqz $rn,$pcrel8a2 */
893214571Sdim  {
894214571Sdim    { 0, 0, 0, 0 },
895214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } },
896214571Sdim    & ifmt_beqz, { 0xa000 }
897214571Sdim  },
898214571Sdim/* bnez $rn,$pcrel8a2 */
899214571Sdim  {
900214571Sdim    { 0, 0, 0, 0 },
901214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (PCREL8A2), 0 } },
902214571Sdim    & ifmt_beqz, { 0xa001 }
903214571Sdim  },
904214571Sdim/* beqi $rn,$uimm4,$pcrel17a2 */
905214571Sdim  {
906214571Sdim    { 0, 0, 0, 0 },
907214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
908214571Sdim    & ifmt_beqi, { 0xe0000000 }
909214571Sdim  },
910214571Sdim/* bnei $rn,$uimm4,$pcrel17a2 */
911214571Sdim  {
912214571Sdim    { 0, 0, 0, 0 },
913214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
914214571Sdim    & ifmt_beqi, { 0xe0040000 }
915214571Sdim  },
916214571Sdim/* blti $rn,$uimm4,$pcrel17a2 */
917214571Sdim  {
918214571Sdim    { 0, 0, 0, 0 },
919214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
920214571Sdim    & ifmt_beqi, { 0xe00c0000 }
921214571Sdim  },
922214571Sdim/* bgei $rn,$uimm4,$pcrel17a2 */
923214571Sdim  {
924214571Sdim    { 0, 0, 0, 0 },
925214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM4), ',', OP (PCREL17A2), 0 } },
926214571Sdim    & ifmt_beqi, { 0xe0080000 }
927214571Sdim  },
928214571Sdim/* beq $rn,$rm,$pcrel17a2 */
929214571Sdim  {
930214571Sdim    { 0, 0, 0, 0 },
931214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } },
932214571Sdim    & ifmt_beq, { 0xe0010000 }
933214571Sdim  },
934214571Sdim/* bne $rn,$rm,$pcrel17a2 */
935214571Sdim  {
936214571Sdim    { 0, 0, 0, 0 },
937214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), ',', OP (PCREL17A2), 0 } },
938214571Sdim    & ifmt_beq, { 0xe0050000 }
939214571Sdim  },
940214571Sdim/* bsr $pcrel12a2 */
941214571Sdim  {
942214571Sdim    { 0, 0, 0, 0 },
943214571Sdim    { { MNEM, ' ', OP (PCREL12A2), 0 } },
944214571Sdim    & ifmt_bra, { 0xb001 }
945214571Sdim  },
946214571Sdim/* bsr $pcrel24a2 */
947214571Sdim  {
948214571Sdim    { 0, 0, 0, 0 },
949214571Sdim    { { MNEM, ' ', OP (PCREL24A2), 0 } },
950214571Sdim    & ifmt_bsr24, { 0xd8090000 }
951214571Sdim  },
952214571Sdim/* jmp $rm */
953214571Sdim  {
954214571Sdim    { 0, 0, 0, 0 },
955214571Sdim    { { MNEM, ' ', OP (RM), 0 } },
956214571Sdim    & ifmt_jmp, { 0x100e }
957214571Sdim  },
958214571Sdim/* jmp $pcabs24a2 */
959214571Sdim  {
960214571Sdim    { 0, 0, 0, 0 },
961214571Sdim    { { MNEM, ' ', OP (PCABS24A2), 0 } },
962214571Sdim    & ifmt_jmp24, { 0xd8080000 }
963214571Sdim  },
964214571Sdim/* jsr $rm */
965214571Sdim  {
966214571Sdim    { 0, 0, 0, 0 },
967214571Sdim    { { MNEM, ' ', OP (RM), 0 } },
968214571Sdim    & ifmt_jmp, { 0x100f }
969214571Sdim  },
970214571Sdim/* ret */
971214571Sdim  {
972214571Sdim    { 0, 0, 0, 0 },
973214571Sdim    { { MNEM, 0 } },
974214571Sdim    & ifmt_ret, { 0x7002 }
975214571Sdim  },
976214571Sdim/* repeat $rn,$pcrel17a2 */
977214571Sdim  {
978214571Sdim    { 0, 0, 0, 0 },
979214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (PCREL17A2), 0 } },
980214571Sdim    & ifmt_repeat, { 0xe0090000 }
981214571Sdim  },
982214571Sdim/* erepeat $pcrel17a2 */
983214571Sdim  {
984214571Sdim    { 0, 0, 0, 0 },
985214571Sdim    { { MNEM, ' ', OP (PCREL17A2), 0 } },
986214571Sdim    & ifmt_erepeat, { 0xe0190000 }
987214571Sdim  },
988214571Sdim/* stc $rn,\$lp */
989214571Sdim  {
990214571Sdim    { 0, 0, 0, 0 },
991214571Sdim    { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } },
992214571Sdim    & ifmt_stc_lp, { 0x7018 }
993214571Sdim  },
994214571Sdim/* stc $rn,\$hi */
995214571Sdim  {
996214571Sdim    { 0, 0, 0, 0 },
997214571Sdim    { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } },
998214571Sdim    & ifmt_stc_lp, { 0x7078 }
999214571Sdim  },
1000214571Sdim/* stc $rn,\$lo */
1001214571Sdim  {
1002214571Sdim    { 0, 0, 0, 0 },
1003214571Sdim    { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } },
1004214571Sdim    & ifmt_stc_lp, { 0x7088 }
1005214571Sdim  },
1006214571Sdim/* stc $rn,$csrn */
1007214571Sdim  {
1008214571Sdim    { 0, 0, 0, 0 },
1009214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } },
1010214571Sdim    & ifmt_stc, { 0x7008 }
1011214571Sdim  },
1012214571Sdim/* ldc $rn,\$lp */
1013214571Sdim  {
1014214571Sdim    { 0, 0, 0, 0 },
1015214571Sdim    { { MNEM, ' ', OP (RN), ',', '$', 'l', 'p', 0 } },
1016214571Sdim    & ifmt_stc_lp, { 0x701a }
1017214571Sdim  },
1018214571Sdim/* ldc $rn,\$hi */
1019214571Sdim  {
1020214571Sdim    { 0, 0, 0, 0 },
1021214571Sdim    { { MNEM, ' ', OP (RN), ',', '$', 'h', 'i', 0 } },
1022214571Sdim    & ifmt_stc_lp, { 0x707a }
1023214571Sdim  },
1024214571Sdim/* ldc $rn,\$lo */
1025214571Sdim  {
1026214571Sdim    { 0, 0, 0, 0 },
1027214571Sdim    { { MNEM, ' ', OP (RN), ',', '$', 'l', 'o', 0 } },
1028214571Sdim    & ifmt_stc_lp, { 0x708a }
1029214571Sdim  },
1030214571Sdim/* ldc $rn,$csrn */
1031214571Sdim  {
1032214571Sdim    { 0, 0, 0, 0 },
1033214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (CSRN), 0 } },
1034214571Sdim    & ifmt_stc, { 0x700a }
1035214571Sdim  },
1036214571Sdim/* di */
1037214571Sdim  {
1038214571Sdim    { 0, 0, 0, 0 },
1039214571Sdim    { { MNEM, 0 } },
1040214571Sdim    & ifmt_ret, { 0x7000 }
1041214571Sdim  },
1042214571Sdim/* ei */
1043214571Sdim  {
1044214571Sdim    { 0, 0, 0, 0 },
1045214571Sdim    { { MNEM, 0 } },
1046214571Sdim    & ifmt_ret, { 0x7010 }
1047214571Sdim  },
1048214571Sdim/* reti */
1049214571Sdim  {
1050214571Sdim    { 0, 0, 0, 0 },
1051214571Sdim    { { MNEM, 0 } },
1052214571Sdim    & ifmt_ret, { 0x7012 }
1053214571Sdim  },
1054214571Sdim/* halt */
1055214571Sdim  {
1056214571Sdim    { 0, 0, 0, 0 },
1057214571Sdim    { { MNEM, 0 } },
1058214571Sdim    & ifmt_ret, { 0x7022 }
1059214571Sdim  },
1060214571Sdim/* sleep */
1061214571Sdim  {
1062214571Sdim    { 0, 0, 0, 0 },
1063214571Sdim    { { MNEM, 0 } },
1064214571Sdim    & ifmt_ret, { 0x7062 }
1065214571Sdim  },
1066214571Sdim/* swi $uimm2 */
1067214571Sdim  {
1068214571Sdim    { 0, 0, 0, 0 },
1069214571Sdim    { { MNEM, ' ', OP (UIMM2), 0 } },
1070214571Sdim    & ifmt_swi, { 0x7006 }
1071214571Sdim  },
1072214571Sdim/* break */
1073214571Sdim  {
1074214571Sdim    { 0, 0, 0, 0 },
1075214571Sdim    { { MNEM, 0 } },
1076214571Sdim    & ifmt_ret, { 0x7032 }
1077214571Sdim  },
1078214571Sdim/* syncm */
1079214571Sdim  {
1080214571Sdim    { 0, 0, 0, 0 },
1081214571Sdim    { { MNEM, 0 } },
1082214571Sdim    & ifmt_ret, { 0x7011 }
1083214571Sdim  },
1084214571Sdim/* stcb $rn,$uimm16 */
1085214571Sdim  {
1086214571Sdim    { 0, 0, 0, 0 },
1087214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
1088214571Sdim    & ifmt_movu16, { 0xf0040000 }
1089214571Sdim  },
1090214571Sdim/* ldcb $rn,$uimm16 */
1091214571Sdim  {
1092214571Sdim    { 0, 0, 0, 0 },
1093214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (UIMM16), 0 } },
1094214571Sdim    & ifmt_movu16, { 0xf0140000 }
1095214571Sdim  },
1096214571Sdim/* bsetm ($rma),$uimm3 */
1097214571Sdim  {
1098214571Sdim    { 0, 0, 0, 0 },
1099214571Sdim    { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1100214571Sdim    & ifmt_bsetm, { 0x2000 }
1101214571Sdim  },
1102214571Sdim/* bclrm ($rma),$uimm3 */
1103214571Sdim  {
1104214571Sdim    { 0, 0, 0, 0 },
1105214571Sdim    { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1106214571Sdim    & ifmt_bsetm, { 0x2001 }
1107214571Sdim  },
1108214571Sdim/* bnotm ($rma),$uimm3 */
1109214571Sdim  {
1110214571Sdim    { 0, 0, 0, 0 },
1111214571Sdim    { { MNEM, ' ', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1112214571Sdim    & ifmt_bsetm, { 0x2002 }
1113214571Sdim  },
1114214571Sdim/* btstm \$0,($rma),$uimm3 */
1115214571Sdim  {
1116214571Sdim    { 0, 0, 0, 0 },
1117214571Sdim    { { MNEM, ' ', '$', '0', ',', '(', OP (RMA), ')', ',', OP (UIMM3), 0 } },
1118214571Sdim    & ifmt_bsetm, { 0x2003 }
1119214571Sdim  },
1120214571Sdim/* tas $rn,($rma) */
1121214571Sdim  {
1122214571Sdim    { 0, 0, 0, 0 },
1123214571Sdim    { { MNEM, ' ', OP (RN), ',', '(', OP (RMA), ')', 0 } },
1124214571Sdim    & ifmt_tas, { 0x2004 }
1125214571Sdim  },
1126214571Sdim/* cache $cimm4,($rma) */
1127214571Sdim  {
1128214571Sdim    { 0, 0, 0, 0 },
1129214571Sdim    { { MNEM, ' ', OP (CIMM4), ',', '(', OP (RMA), ')', 0 } },
1130214571Sdim    & ifmt_cache, { 0x7004 }
1131214571Sdim  },
1132214571Sdim/* mul $rn,$rm */
1133214571Sdim  {
1134214571Sdim    { 0, 0, 0, 0 },
1135214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1136214571Sdim    & ifmt_mov, { 0x1004 }
1137214571Sdim  },
1138214571Sdim/* mulu $rn,$rm */
1139214571Sdim  {
1140214571Sdim    { 0, 0, 0, 0 },
1141214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1142214571Sdim    & ifmt_mov, { 0x1005 }
1143214571Sdim  },
1144214571Sdim/* mulr $rn,$rm */
1145214571Sdim  {
1146214571Sdim    { 0, 0, 0, 0 },
1147214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1148214571Sdim    & ifmt_mov, { 0x1006 }
1149214571Sdim  },
1150214571Sdim/* mulru $rn,$rm */
1151214571Sdim  {
1152214571Sdim    { 0, 0, 0, 0 },
1153214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1154214571Sdim    & ifmt_mov, { 0x1007 }
1155214571Sdim  },
1156214571Sdim/* madd $rn,$rm */
1157214571Sdim  {
1158214571Sdim    { 0, 0, 0, 0 },
1159214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1160214571Sdim    & ifmt_madd, { 0xf0013004 }
1161214571Sdim  },
1162214571Sdim/* maddu $rn,$rm */
1163214571Sdim  {
1164214571Sdim    { 0, 0, 0, 0 },
1165214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1166214571Sdim    & ifmt_madd, { 0xf0013005 }
1167214571Sdim  },
1168214571Sdim/* maddr $rn,$rm */
1169214571Sdim  {
1170214571Sdim    { 0, 0, 0, 0 },
1171214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1172214571Sdim    & ifmt_madd, { 0xf0013006 }
1173214571Sdim  },
1174214571Sdim/* maddru $rn,$rm */
1175214571Sdim  {
1176214571Sdim    { 0, 0, 0, 0 },
1177214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1178214571Sdim    & ifmt_madd, { 0xf0013007 }
1179214571Sdim  },
1180214571Sdim/* div $rn,$rm */
1181214571Sdim  {
1182214571Sdim    { 0, 0, 0, 0 },
1183214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1184214571Sdim    & ifmt_mov, { 0x1008 }
1185214571Sdim  },
1186214571Sdim/* divu $rn,$rm */
1187214571Sdim  {
1188214571Sdim    { 0, 0, 0, 0 },
1189214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1190214571Sdim    & ifmt_mov, { 0x1009 }
1191214571Sdim  },
1192214571Sdim/* dret */
1193214571Sdim  {
1194214571Sdim    { 0, 0, 0, 0 },
1195214571Sdim    { { MNEM, 0 } },
1196214571Sdim    & ifmt_ret, { 0x7013 }
1197214571Sdim  },
1198214571Sdim/* dbreak */
1199214571Sdim  {
1200214571Sdim    { 0, 0, 0, 0 },
1201214571Sdim    { { MNEM, 0 } },
1202214571Sdim    & ifmt_ret, { 0x7033 }
1203214571Sdim  },
1204214571Sdim/* ldz $rn,$rm */
1205214571Sdim  {
1206214571Sdim    { 0, 0, 0, 0 },
1207214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1208214571Sdim    & ifmt_madd, { 0xf0010000 }
1209214571Sdim  },
1210214571Sdim/* abs $rn,$rm */
1211214571Sdim  {
1212214571Sdim    { 0, 0, 0, 0 },
1213214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1214214571Sdim    & ifmt_madd, { 0xf0010003 }
1215214571Sdim  },
1216214571Sdim/* ave $rn,$rm */
1217214571Sdim  {
1218214571Sdim    { 0, 0, 0, 0 },
1219214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1220214571Sdim    & ifmt_madd, { 0xf0010002 }
1221214571Sdim  },
1222214571Sdim/* min $rn,$rm */
1223214571Sdim  {
1224214571Sdim    { 0, 0, 0, 0 },
1225214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1226214571Sdim    & ifmt_madd, { 0xf0010004 }
1227214571Sdim  },
1228214571Sdim/* max $rn,$rm */
1229214571Sdim  {
1230214571Sdim    { 0, 0, 0, 0 },
1231214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1232214571Sdim    & ifmt_madd, { 0xf0010005 }
1233214571Sdim  },
1234214571Sdim/* minu $rn,$rm */
1235214571Sdim  {
1236214571Sdim    { 0, 0, 0, 0 },
1237214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1238214571Sdim    & ifmt_madd, { 0xf0010006 }
1239214571Sdim  },
1240214571Sdim/* maxu $rn,$rm */
1241214571Sdim  {
1242214571Sdim    { 0, 0, 0, 0 },
1243214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1244214571Sdim    & ifmt_madd, { 0xf0010007 }
1245214571Sdim  },
1246214571Sdim/* clip $rn,$cimm5 */
1247214571Sdim  {
1248214571Sdim    { 0, 0, 0, 0 },
1249214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } },
1250214571Sdim    & ifmt_clip, { 0xf0011000 }
1251214571Sdim  },
1252214571Sdim/* clipu $rn,$cimm5 */
1253214571Sdim  {
1254214571Sdim    { 0, 0, 0, 0 },
1255214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (CIMM5), 0 } },
1256214571Sdim    & ifmt_clip, { 0xf0011001 }
1257214571Sdim  },
1258214571Sdim/* sadd $rn,$rm */
1259214571Sdim  {
1260214571Sdim    { 0, 0, 0, 0 },
1261214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1262214571Sdim    & ifmt_madd, { 0xf0010008 }
1263214571Sdim  },
1264214571Sdim/* ssub $rn,$rm */
1265214571Sdim  {
1266214571Sdim    { 0, 0, 0, 0 },
1267214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1268214571Sdim    & ifmt_madd, { 0xf001000a }
1269214571Sdim  },
1270214571Sdim/* saddu $rn,$rm */
1271214571Sdim  {
1272214571Sdim    { 0, 0, 0, 0 },
1273214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1274214571Sdim    & ifmt_madd, { 0xf0010009 }
1275214571Sdim  },
1276214571Sdim/* ssubu $rn,$rm */
1277214571Sdim  {
1278214571Sdim    { 0, 0, 0, 0 },
1279214571Sdim    { { MNEM, ' ', OP (RN), ',', OP (RM), 0 } },
1280214571Sdim    & ifmt_madd, { 0xf001000b }
1281214571Sdim  },
1282214571Sdim/* swcp $crn,($rma) */
1283214571Sdim  {
1284214571Sdim    { 0, 0, 0, 0 },
1285214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } },
1286214571Sdim    & ifmt_swcp, { 0x3008 }
1287214571Sdim  },
1288214571Sdim/* lwcp $crn,($rma) */
1289214571Sdim  {
1290214571Sdim    { 0, 0, 0, 0 },
1291214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), ')', 0 } },
1292214571Sdim    & ifmt_swcp, { 0x3009 }
1293214571Sdim  },
1294214571Sdim/* smcp $crn64,($rma) */
1295214571Sdim  {
1296214571Sdim    { 0, 0, 0, 0 },
1297214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } },
1298214571Sdim    & ifmt_smcp, { 0x300a }
1299214571Sdim  },
1300214571Sdim/* lmcp $crn64,($rma) */
1301214571Sdim  {
1302214571Sdim    { 0, 0, 0, 0 },
1303214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), ')', 0 } },
1304214571Sdim    & ifmt_smcp, { 0x300b }
1305214571Sdim  },
1306214571Sdim/* swcpi $crn,($rma+) */
1307214571Sdim  {
1308214571Sdim    { 0, 0, 0, 0 },
1309214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } },
1310214571Sdim    & ifmt_swcp, { 0x3000 }
1311214571Sdim  },
1312214571Sdim/* lwcpi $crn,($rma+) */
1313214571Sdim  {
1314214571Sdim    { 0, 0, 0, 0 },
1315214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', 0 } },
1316214571Sdim    & ifmt_swcp, { 0x3001 }
1317214571Sdim  },
1318214571Sdim/* smcpi $crn64,($rma+) */
1319214571Sdim  {
1320214571Sdim    { 0, 0, 0, 0 },
1321214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } },
1322214571Sdim    & ifmt_smcp, { 0x3002 }
1323214571Sdim  },
1324214571Sdim/* lmcpi $crn64,($rma+) */
1325214571Sdim  {
1326214571Sdim    { 0, 0, 0, 0 },
1327214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', 0 } },
1328214571Sdim    & ifmt_smcp, { 0x3003 }
1329214571Sdim  },
1330214571Sdim/* swcp $crn,$sdisp16($rma) */
1331214571Sdim  {
1332214571Sdim    { 0, 0, 0, 0 },
1333214571Sdim    { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1334214571Sdim    & ifmt_swcp16, { 0xf00c0000 }
1335214571Sdim  },
1336214571Sdim/* lwcp $crn,$sdisp16($rma) */
1337214571Sdim  {
1338214571Sdim    { 0, 0, 0, 0 },
1339214571Sdim    { { MNEM, ' ', OP (CRN), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1340214571Sdim    & ifmt_swcp16, { 0xf00d0000 }
1341214571Sdim  },
1342214571Sdim/* smcp $crn64,$sdisp16($rma) */
1343214571Sdim  {
1344214571Sdim    { 0, 0, 0, 0 },
1345214571Sdim    { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1346214571Sdim    & ifmt_smcp16, { 0xf00e0000 }
1347214571Sdim  },
1348214571Sdim/* lmcp $crn64,$sdisp16($rma) */
1349214571Sdim  {
1350214571Sdim    { 0, 0, 0, 0 },
1351214571Sdim    { { MNEM, ' ', OP (CRN64), ',', OP (SDISP16), '(', OP (RMA), ')', 0 } },
1352214571Sdim    & ifmt_smcp16, { 0xf00f0000 }
1353214571Sdim  },
1354214571Sdim/* sbcpa $crn,($rma+),$cdisp8 */
1355214571Sdim  {
1356214571Sdim    { 0, 0, 0, 0 },
1357214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1358214571Sdim    & ifmt_sbcpa, { 0xf0050000 }
1359214571Sdim  },
1360214571Sdim/* lbcpa $crn,($rma+),$cdisp8 */
1361214571Sdim  {
1362214571Sdim    { 0, 0, 0, 0 },
1363214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1364214571Sdim    & ifmt_sbcpa, { 0xf0054000 }
1365214571Sdim  },
1366214571Sdim/* shcpa $crn,($rma+),$cdisp8a2 */
1367214571Sdim  {
1368214571Sdim    { 0, 0, 0, 0 },
1369214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1370214571Sdim    & ifmt_shcpa, { 0xf0051000 }
1371214571Sdim  },
1372214571Sdim/* lhcpa $crn,($rma+),$cdisp8a2 */
1373214571Sdim  {
1374214571Sdim    { 0, 0, 0, 0 },
1375214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1376214571Sdim    & ifmt_shcpa, { 0xf0055000 }
1377214571Sdim  },
1378214571Sdim/* swcpa $crn,($rma+),$cdisp8a4 */
1379214571Sdim  {
1380214571Sdim    { 0, 0, 0, 0 },
1381214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1382214571Sdim    & ifmt_swcpa, { 0xf0052000 }
1383214571Sdim  },
1384214571Sdim/* lwcpa $crn,($rma+),$cdisp8a4 */
1385214571Sdim  {
1386214571Sdim    { 0, 0, 0, 0 },
1387214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1388214571Sdim    & ifmt_swcpa, { 0xf0056000 }
1389214571Sdim  },
1390214571Sdim/* smcpa $crn64,($rma+),$cdisp8a8 */
1391214571Sdim  {
1392214571Sdim    { 0, 0, 0, 0 },
1393214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1394214571Sdim    & ifmt_smcpa, { 0xf0053000 }
1395214571Sdim  },
1396214571Sdim/* lmcpa $crn64,($rma+),$cdisp8a8 */
1397214571Sdim  {
1398214571Sdim    { 0, 0, 0, 0 },
1399214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1400214571Sdim    & ifmt_smcpa, { 0xf0057000 }
1401214571Sdim  },
1402214571Sdim/* sbcpm0 $crn,($rma+),$cdisp8 */
1403214571Sdim  {
1404214571Sdim    { 0, 0, 0, 0 },
1405214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1406214571Sdim    & ifmt_sbcpa, { 0xf0050800 }
1407214571Sdim  },
1408214571Sdim/* lbcpm0 $crn,($rma+),$cdisp8 */
1409214571Sdim  {
1410214571Sdim    { 0, 0, 0, 0 },
1411214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1412214571Sdim    & ifmt_sbcpa, { 0xf0054800 }
1413214571Sdim  },
1414214571Sdim/* shcpm0 $crn,($rma+),$cdisp8a2 */
1415214571Sdim  {
1416214571Sdim    { 0, 0, 0, 0 },
1417214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1418214571Sdim    & ifmt_shcpa, { 0xf0051800 }
1419214571Sdim  },
1420214571Sdim/* lhcpm0 $crn,($rma+),$cdisp8a2 */
1421214571Sdim  {
1422214571Sdim    { 0, 0, 0, 0 },
1423214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1424214571Sdim    & ifmt_shcpa, { 0xf0055800 }
1425214571Sdim  },
1426214571Sdim/* swcpm0 $crn,($rma+),$cdisp8a4 */
1427214571Sdim  {
1428214571Sdim    { 0, 0, 0, 0 },
1429214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1430214571Sdim    & ifmt_swcpa, { 0xf0052800 }
1431214571Sdim  },
1432214571Sdim/* lwcpm0 $crn,($rma+),$cdisp8a4 */
1433214571Sdim  {
1434214571Sdim    { 0, 0, 0, 0 },
1435214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1436214571Sdim    & ifmt_swcpa, { 0xf0056800 }
1437214571Sdim  },
1438214571Sdim/* smcpm0 $crn64,($rma+),$cdisp8a8 */
1439214571Sdim  {
1440214571Sdim    { 0, 0, 0, 0 },
1441214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1442214571Sdim    & ifmt_smcpa, { 0xf0053800 }
1443214571Sdim  },
1444214571Sdim/* lmcpm0 $crn64,($rma+),$cdisp8a8 */
1445214571Sdim  {
1446214571Sdim    { 0, 0, 0, 0 },
1447214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1448214571Sdim    & ifmt_smcpa, { 0xf0057800 }
1449214571Sdim  },
1450214571Sdim/* sbcpm1 $crn,($rma+),$cdisp8 */
1451214571Sdim  {
1452214571Sdim    { 0, 0, 0, 0 },
1453214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1454214571Sdim    & ifmt_sbcpa, { 0xf0050c00 }
1455214571Sdim  },
1456214571Sdim/* lbcpm1 $crn,($rma+),$cdisp8 */
1457214571Sdim  {
1458214571Sdim    { 0, 0, 0, 0 },
1459214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8), 0 } },
1460214571Sdim    & ifmt_sbcpa, { 0xf0054c00 }
1461214571Sdim  },
1462214571Sdim/* shcpm1 $crn,($rma+),$cdisp8a2 */
1463214571Sdim  {
1464214571Sdim    { 0, 0, 0, 0 },
1465214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1466214571Sdim    & ifmt_shcpa, { 0xf0051c00 }
1467214571Sdim  },
1468214571Sdim/* lhcpm1 $crn,($rma+),$cdisp8a2 */
1469214571Sdim  {
1470214571Sdim    { 0, 0, 0, 0 },
1471214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A2), 0 } },
1472214571Sdim    & ifmt_shcpa, { 0xf0055c00 }
1473214571Sdim  },
1474214571Sdim/* swcpm1 $crn,($rma+),$cdisp8a4 */
1475214571Sdim  {
1476214571Sdim    { 0, 0, 0, 0 },
1477214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1478214571Sdim    & ifmt_swcpa, { 0xf0052c00 }
1479214571Sdim  },
1480214571Sdim/* lwcpm1 $crn,($rma+),$cdisp8a4 */
1481214571Sdim  {
1482214571Sdim    { 0, 0, 0, 0 },
1483214571Sdim    { { MNEM, ' ', OP (CRN), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A4), 0 } },
1484214571Sdim    & ifmt_swcpa, { 0xf0056c00 }
1485214571Sdim  },
1486214571Sdim/* smcpm1 $crn64,($rma+),$cdisp8a8 */
1487214571Sdim  {
1488214571Sdim    { 0, 0, 0, 0 },
1489214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1490214571Sdim    & ifmt_smcpa, { 0xf0053c00 }
1491214571Sdim  },
1492214571Sdim/* lmcpm1 $crn64,($rma+),$cdisp8a8 */
1493214571Sdim  {
1494214571Sdim    { 0, 0, 0, 0 },
1495214571Sdim    { { MNEM, ' ', OP (CRN64), ',', '(', OP (RMA), '+', ')', ',', OP (CDISP8A8), 0 } },
1496214571Sdim    & ifmt_smcpa, { 0xf0057c00 }
1497214571Sdim  },
1498214571Sdim/* bcpeq $cccc,$pcrel17a2 */
1499214571Sdim  {
1500214571Sdim    { 0, 0, 0, 0 },
1501214571Sdim    { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1502214571Sdim    & ifmt_bcpeq, { 0xd8040000 }
1503214571Sdim  },
1504214571Sdim/* bcpne $cccc,$pcrel17a2 */
1505214571Sdim  {
1506214571Sdim    { 0, 0, 0, 0 },
1507214571Sdim    { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1508214571Sdim    & ifmt_bcpeq, { 0xd8050000 }
1509214571Sdim  },
1510214571Sdim/* bcpat $cccc,$pcrel17a2 */
1511214571Sdim  {
1512214571Sdim    { 0, 0, 0, 0 },
1513214571Sdim    { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1514214571Sdim    & ifmt_bcpeq, { 0xd8060000 }
1515214571Sdim  },
1516214571Sdim/* bcpaf $cccc,$pcrel17a2 */
1517214571Sdim  {
1518214571Sdim    { 0, 0, 0, 0 },
1519214571Sdim    { { MNEM, ' ', OP (CCCC), ',', OP (PCREL17A2), 0 } },
1520214571Sdim    & ifmt_bcpeq, { 0xd8070000 }
1521214571Sdim  },
1522214571Sdim/* synccp */
1523214571Sdim  {
1524214571Sdim    { 0, 0, 0, 0 },
1525214571Sdim    { { MNEM, 0 } },
1526214571Sdim    & ifmt_ret, { 0x7021 }
1527214571Sdim  },
1528214571Sdim/* jsrv $rm */
1529214571Sdim  {
1530214571Sdim    { 0, 0, 0, 0 },
1531214571Sdim    { { MNEM, ' ', OP (RM), 0 } },
1532214571Sdim    & ifmt_jmp, { 0x180f }
1533214571Sdim  },
1534214571Sdim/* bsrv $pcrel24a2 */
1535214571Sdim  {
1536214571Sdim    { 0, 0, 0, 0 },
1537214571Sdim    { { MNEM, ' ', OP (PCREL24A2), 0 } },
1538214571Sdim    & ifmt_bsr24, { 0xd80b0000 }
1539214571Sdim  },
1540214571Sdim/* --unused-- */
1541214571Sdim  {
1542214571Sdim    { 0, 0, 0, 0 },
1543214571Sdim    { { MNEM, 0 } },
1544214571Sdim    & ifmt_sim_syscall, { 0x7800 }
1545214571Sdim  },
1546214571Sdim/* --reserved-- */
1547214571Sdim  {
1548214571Sdim    { 0, 0, 0, 0 },
1549214571Sdim    { { MNEM, 0 } },
1550214571Sdim    & ifmt_mov, { 0x6 }
1551214571Sdim  },
1552214571Sdim/* --reserved-- */
1553214571Sdim  {
1554214571Sdim    { 0, 0, 0, 0 },
1555214571Sdim    { { MNEM, 0 } },
1556214571Sdim    & ifmt_mov, { 0x100a }
1557214571Sdim  },
1558214571Sdim/* --reserved-- */
1559214571Sdim  {
1560214571Sdim    { 0, 0, 0, 0 },
1561214571Sdim    { { MNEM, 0 } },
1562214571Sdim    & ifmt_mov, { 0x100b }
1563214571Sdim  },
1564214571Sdim/* --reserved-- */
1565214571Sdim  {
1566214571Sdim    { 0, 0, 0, 0 },
1567214571Sdim    { { MNEM, 0 } },
1568214571Sdim    & ifmt_mov, { 0x2005 }
1569214571Sdim  },
1570214571Sdim/* --reserved-- */
1571214571Sdim  {
1572214571Sdim    { 0, 0, 0, 0 },
1573214571Sdim    { { MNEM, 0 } },
1574214571Sdim    & ifmt_mov, { 0x2008 }
1575214571Sdim  },
1576214571Sdim/* --reserved-- */
1577214571Sdim  {
1578214571Sdim    { 0, 0, 0, 0 },
1579214571Sdim    { { MNEM, 0 } },
1580214571Sdim    & ifmt_mov, { 0x2009 }
1581214571Sdim  },
1582214571Sdim/* --reserved-- */
1583214571Sdim  {
1584214571Sdim    { 0, 0, 0, 0 },
1585214571Sdim    { { MNEM, 0 } },
1586214571Sdim    & ifmt_mov, { 0x200a }
1587214571Sdim  },
1588214571Sdim/* --reserved-- */
1589214571Sdim  {
1590214571Sdim    { 0, 0, 0, 0 },
1591214571Sdim    { { MNEM, 0 } },
1592214571Sdim    & ifmt_mov, { 0x200b }
1593214571Sdim  },
1594214571Sdim/* --reserved-- */
1595214571Sdim  {
1596214571Sdim    { 0, 0, 0, 0 },
1597214571Sdim    { { MNEM, 0 } },
1598214571Sdim    & ifmt_mov, { 0x3004 }
1599214571Sdim  },
1600214571Sdim/* --reserved-- */
1601214571Sdim  {
1602214571Sdim    { 0, 0, 0, 0 },
1603214571Sdim    { { MNEM, 0 } },
1604214571Sdim    & ifmt_mov, { 0x3005 }
1605214571Sdim  },
1606214571Sdim/* --reserved-- */
1607214571Sdim  {
1608214571Sdim    { 0, 0, 0, 0 },
1609214571Sdim    { { MNEM, 0 } },
1610214571Sdim    & ifmt_mov, { 0x3006 }
1611214571Sdim  },
1612214571Sdim/* --reserved-- */
1613214571Sdim  {
1614214571Sdim    { 0, 0, 0, 0 },
1615214571Sdim    { { MNEM, 0 } },
1616214571Sdim    & ifmt_mov, { 0x3007 }
1617214571Sdim  },
1618214571Sdim/* --reserved-- */
1619214571Sdim  {
1620214571Sdim    { 0, 0, 0, 0 },
1621214571Sdim    { { MNEM, 0 } },
1622214571Sdim    & ifmt_mov, { 0x300c }
1623214571Sdim  },
1624214571Sdim/* --reserved-- */
1625214571Sdim  {
1626214571Sdim    { 0, 0, 0, 0 },
1627214571Sdim    { { MNEM, 0 } },
1628214571Sdim    & ifmt_mov, { 0x300d }
1629214571Sdim  },
1630214571Sdim/* --reserved-- */
1631214571Sdim  {
1632214571Sdim    { 0, 0, 0, 0 },
1633214571Sdim    { { MNEM, 0 } },
1634214571Sdim    & ifmt_mov, { 0x300e }
1635214571Sdim  },
1636214571Sdim/* --reserved-- */
1637214571Sdim  {
1638214571Sdim    { 0, 0, 0, 0 },
1639214571Sdim    { { MNEM, 0 } },
1640214571Sdim    & ifmt_mov, { 0x300f }
1641214571Sdim  },
1642214571Sdim/* --reserved-- */
1643214571Sdim  {
1644214571Sdim    { 0, 0, 0, 0 },
1645214571Sdim    { { MNEM, 0 } },
1646214571Sdim    & ifmt_mov, { 0x7007 }
1647214571Sdim  },
1648214571Sdim/* --reserved-- */
1649214571Sdim  {
1650214571Sdim    { 0, 0, 0, 0 },
1651214571Sdim    { { MNEM, 0 } },
1652214571Sdim    & ifmt_mov, { 0x700e }
1653214571Sdim  },
1654214571Sdim/* --reserved-- */
1655214571Sdim  {
1656214571Sdim    { 0, 0, 0, 0 },
1657214571Sdim    { { MNEM, 0 } },
1658214571Sdim    & ifmt_mov, { 0x700f }
1659214571Sdim  },
1660214571Sdim/* --reserved-- */
1661214571Sdim  {
1662214571Sdim    { 0, 0, 0, 0 },
1663214571Sdim    { { MNEM, 0 } },
1664214571Sdim    & ifmt_mov, { 0xc007 }
1665214571Sdim  },
1666214571Sdim/* --reserved-- */
1667214571Sdim  {
1668214571Sdim    { 0, 0, 0, 0 },
1669214571Sdim    { { MNEM, 0 } },
1670214571Sdim    & ifmt_mov, { 0xe00d }
1671214571Sdim  },
1672214571Sdim/* --reserved-- */
1673214571Sdim  {
1674214571Sdim    { 0, 0, 0, 0 },
1675214571Sdim    { { MNEM, 0 } },
1676214571Sdim    & ifmt_mov, { 0xf003 }
1677214571Sdim  },
1678214571Sdim/* --reserved-- */
1679214571Sdim  {
1680214571Sdim    { 0, 0, 0, 0 },
1681214571Sdim    { { MNEM, 0 } },
1682214571Sdim    & ifmt_mov, { 0xf006 }
1683214571Sdim  },
1684214571Sdim/* --reserved-- */
1685214571Sdim  {
1686214571Sdim    { 0, 0, 0, 0 },
1687214571Sdim    { { MNEM, 0 } },
1688214571Sdim    & ifmt_mov, { 0xf008 }
1689214571Sdim  },
1690214571Sdim/* --reserved-- */
1691214571Sdim  {
1692214571Sdim    { 0, 0, 0, 0 },
1693214571Sdim    { { MNEM, 0 } },
1694214571Sdim    & ifmt_mov, { 0x7005 }
1695214571Sdim  },
1696214571Sdim/* --reserved-- */
1697214571Sdim  {
1698214571Sdim    { 0, 0, 0, 0 },
1699214571Sdim    { { MNEM, 0 } },
1700214571Sdim    & ifmt_mov, { 0x700c }
1701214571Sdim  },
1702214571Sdim/* --reserved-- */
1703214571Sdim  {
1704214571Sdim    { 0, 0, 0, 0 },
1705214571Sdim    { { MNEM, 0 } },
1706214571Sdim    & ifmt_mov, { 0x700d }
1707214571Sdim  },
1708214571Sdim/* fadds ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1709214571Sdim  {
1710214571Sdim    { 0, 0, 0, 0 },
1711214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1712214571Sdim    & ifmt_fadds, { 0xf0070000 }
1713214571Sdim  },
1714214571Sdim/* fsubs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1715214571Sdim  {
1716214571Sdim    { 0, 0, 0, 0 },
1717214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1718214571Sdim    & ifmt_fadds, { 0xf0170000 }
1719214571Sdim  },
1720214571Sdim/* fmuls ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1721214571Sdim  {
1722214571Sdim    { 0, 0, 0, 0 },
1723214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1724214571Sdim    & ifmt_fadds, { 0xf0270000 }
1725214571Sdim  },
1726214571Sdim/* fdivs ${fmax-FRd},${fmax-FRn},${fmax-FRm} */
1727214571Sdim  {
1728214571Sdim    { 0, 0, 0, 0 },
1729214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1730214571Sdim    & ifmt_fadds, { 0xf0370000 }
1731214571Sdim  },
1732214571Sdim/* fsqrts ${fmax-FRd},${fmax-FRn} */
1733214571Sdim  {
1734214571Sdim    { 0, 0, 0, 0 },
1735214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1736214571Sdim    & ifmt_fsqrts, { 0xf0470000 }
1737214571Sdim  },
1738214571Sdim/* fabss ${fmax-FRd},${fmax-FRn} */
1739214571Sdim  {
1740214571Sdim    { 0, 0, 0, 0 },
1741214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1742214571Sdim    & ifmt_fsqrts, { 0xf0570000 }
1743214571Sdim  },
1744214571Sdim/* fnegs ${fmax-FRd},${fmax-FRn} */
1745214571Sdim  {
1746214571Sdim    { 0, 0, 0, 0 },
1747214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1748214571Sdim    & ifmt_fsqrts, { 0xf0770000 }
1749214571Sdim  },
1750214571Sdim/* fmovs ${fmax-FRd},${fmax-FRn} */
1751214571Sdim  {
1752214571Sdim    { 0, 0, 0, 0 },
1753214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN), 0 } },
1754214571Sdim    & ifmt_fsqrts, { 0xf0670000 }
1755214571Sdim  },
1756214571Sdim/* froundws ${fmax-FRd-int},${fmax-FRn} */
1757214571Sdim  {
1758214571Sdim    { 0, 0, 0, 0 },
1759214571Sdim    { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1760214571Sdim    & ifmt_froundws, { 0xf0c70000 }
1761214571Sdim  },
1762214571Sdim/* ftruncws ${fmax-FRd-int},${fmax-FRn} */
1763214571Sdim  {
1764214571Sdim    { 0, 0, 0, 0 },
1765214571Sdim    { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1766214571Sdim    & ifmt_froundws, { 0xf0d70000 }
1767214571Sdim  },
1768214571Sdim/* fceilws ${fmax-FRd-int},${fmax-FRn} */
1769214571Sdim  {
1770214571Sdim    { 0, 0, 0, 0 },
1771214571Sdim    { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1772214571Sdim    & ifmt_froundws, { 0xf0e70000 }
1773214571Sdim  },
1774214571Sdim/* ffloorws ${fmax-FRd-int},${fmax-FRn} */
1775214571Sdim  {
1776214571Sdim    { 0, 0, 0, 0 },
1777214571Sdim    { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1778214571Sdim    & ifmt_froundws, { 0xf0f70000 }
1779214571Sdim  },
1780214571Sdim/* fcvtws ${fmax-FRd-int},${fmax-FRn} */
1781214571Sdim  {
1782214571Sdim    { 0, 0, 0, 0 },
1783214571Sdim    { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_FRN), 0 } },
1784214571Sdim    & ifmt_froundws, { 0xf0471000 }
1785214571Sdim  },
1786214571Sdim/* fcvtsw ${fmax-FRd},${fmax-FRn-int} */
1787214571Sdim  {
1788214571Sdim    { 0, 0, 0, 0 },
1789214571Sdim    { { MNEM, ' ', OP (FMAX_FRD), ',', OP (FMAX_FRN_INT), 0 } },
1790214571Sdim    & ifmt_fcvtsw, { 0xf0079000 }
1791214571Sdim  },
1792214571Sdim/* fcmpfs ${fmax-FRn},${fmax-FRm} */
1793214571Sdim  {
1794214571Sdim    { 0, 0, 0, 0 },
1795214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1796214571Sdim    & ifmt_fcmpfs, { 0xf0072000 }
1797214571Sdim  },
1798214571Sdim/* fcmpus ${fmax-FRn},${fmax-FRm} */
1799214571Sdim  {
1800214571Sdim    { 0, 0, 0, 0 },
1801214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1802214571Sdim    & ifmt_fcmpfs, { 0xf0172000 }
1803214571Sdim  },
1804214571Sdim/* fcmpes ${fmax-FRn},${fmax-FRm} */
1805214571Sdim  {
1806214571Sdim    { 0, 0, 0, 0 },
1807214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1808214571Sdim    & ifmt_fcmpfs, { 0xf0272000 }
1809214571Sdim  },
1810214571Sdim/* fcmpues ${fmax-FRn},${fmax-FRm} */
1811214571Sdim  {
1812214571Sdim    { 0, 0, 0, 0 },
1813214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1814214571Sdim    & ifmt_fcmpfs, { 0xf0372000 }
1815214571Sdim  },
1816214571Sdim/* fcmpls ${fmax-FRn},${fmax-FRm} */
1817214571Sdim  {
1818214571Sdim    { 0, 0, 0, 0 },
1819214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1820214571Sdim    & ifmt_fcmpfs, { 0xf0472000 }
1821214571Sdim  },
1822214571Sdim/* fcmpuls ${fmax-FRn},${fmax-FRm} */
1823214571Sdim  {
1824214571Sdim    { 0, 0, 0, 0 },
1825214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1826214571Sdim    & ifmt_fcmpfs, { 0xf0572000 }
1827214571Sdim  },
1828214571Sdim/* fcmples ${fmax-FRn},${fmax-FRm} */
1829214571Sdim  {
1830214571Sdim    { 0, 0, 0, 0 },
1831214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1832214571Sdim    & ifmt_fcmpfs, { 0xf0672000 }
1833214571Sdim  },
1834214571Sdim/* fcmpules ${fmax-FRn},${fmax-FRm} */
1835214571Sdim  {
1836214571Sdim    { 0, 0, 0, 0 },
1837214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1838214571Sdim    & ifmt_fcmpfs, { 0xf0772000 }
1839214571Sdim  },
1840214571Sdim/* fcmpfis ${fmax-FRn},${fmax-FRm} */
1841214571Sdim  {
1842214571Sdim    { 0, 0, 0, 0 },
1843214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1844214571Sdim    & ifmt_fcmpfs, { 0xf0872000 }
1845214571Sdim  },
1846214571Sdim/* fcmpuis ${fmax-FRn},${fmax-FRm} */
1847214571Sdim  {
1848214571Sdim    { 0, 0, 0, 0 },
1849214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1850214571Sdim    & ifmt_fcmpfs, { 0xf0972000 }
1851214571Sdim  },
1852214571Sdim/* fcmpeis ${fmax-FRn},${fmax-FRm} */
1853214571Sdim  {
1854214571Sdim    { 0, 0, 0, 0 },
1855214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1856214571Sdim    & ifmt_fcmpfs, { 0xf0a72000 }
1857214571Sdim  },
1858214571Sdim/* fcmpueis ${fmax-FRn},${fmax-FRm} */
1859214571Sdim  {
1860214571Sdim    { 0, 0, 0, 0 },
1861214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1862214571Sdim    & ifmt_fcmpfs, { 0xf0b72000 }
1863214571Sdim  },
1864214571Sdim/* fcmplis ${fmax-FRn},${fmax-FRm} */
1865214571Sdim  {
1866214571Sdim    { 0, 0, 0, 0 },
1867214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1868214571Sdim    & ifmt_fcmpfs, { 0xf0c72000 }
1869214571Sdim  },
1870214571Sdim/* fcmpulis ${fmax-FRn},${fmax-FRm} */
1871214571Sdim  {
1872214571Sdim    { 0, 0, 0, 0 },
1873214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1874214571Sdim    & ifmt_fcmpfs, { 0xf0d72000 }
1875214571Sdim  },
1876214571Sdim/* fcmpleis ${fmax-FRn},${fmax-FRm} */
1877214571Sdim  {
1878214571Sdim    { 0, 0, 0, 0 },
1879214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1880214571Sdim    & ifmt_fcmpfs, { 0xf0e72000 }
1881214571Sdim  },
1882214571Sdim/* fcmpuleis ${fmax-FRn},${fmax-FRm} */
1883214571Sdim  {
1884214571Sdim    { 0, 0, 0, 0 },
1885214571Sdim    { { MNEM, ' ', OP (FMAX_FRN), ',', OP (FMAX_FRM), 0 } },
1886214571Sdim    & ifmt_fcmpfs, { 0xf0f72000 }
1887214571Sdim  },
1888214571Sdim/* cmov ${fmax-FRd-int},${fmax-Rm} */
1889214571Sdim  {
1890214571Sdim    { 0, 0, 0, 0 },
1891214571Sdim    { { MNEM, ' ', OP (FMAX_FRD_INT), ',', OP (FMAX_RM), 0 } },
1892214571Sdim    & ifmt_cmov_frn_rm, { 0xf007f000 }
1893214571Sdim  },
1894214571Sdim/* cmov ${fmax-Rm},${fmax-FRd-int} */
1895214571Sdim  {
1896214571Sdim    { 0, 0, 0, 0 },
1897214571Sdim    { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_FRD_INT), 0 } },
1898214571Sdim    & ifmt_cmov_frn_rm, { 0xf007f001 }
1899214571Sdim  },
1900214571Sdim/* cmovc ${fmax-CCRn},${fmax-Rm} */
1901214571Sdim  {
1902214571Sdim    { 0, 0, 0, 0 },
1903214571Sdim    { { MNEM, ' ', OP (FMAX_CCRN), ',', OP (FMAX_RM), 0 } },
1904214571Sdim    & ifmt_cmovc_ccrn_rm, { 0xf007f002 }
1905214571Sdim  },
1906214571Sdim/* cmovc ${fmax-Rm},${fmax-CCRn} */
1907214571Sdim  {
1908214571Sdim    { 0, 0, 0, 0 },
1909214571Sdim    { { MNEM, ' ', OP (FMAX_RM), ',', OP (FMAX_CCRN), 0 } },
1910214571Sdim    & ifmt_cmovc_ccrn_rm, { 0xf007f003 }
1911214571Sdim  },
1912214571Sdim};
1913214571Sdim
1914214571Sdim#undef A
1915214571Sdim#undef OPERAND
1916214571Sdim#undef MNEM
1917214571Sdim#undef OP
1918214571Sdim
1919214571Sdim/* Formats for ALIAS macro-insns.  */
1920214571Sdim
1921214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1922214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_##f]
1923214571Sdim#else
1924214571Sdim#define F(f) & mep_cgen_ifld_table[MEP_/**/f]
1925214571Sdim#endif
1926214571Sdimstatic const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
1927214571Sdim  16, 16, 0xffff, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1928214571Sdim};
1929214571Sdim
1930214571Sdimstatic const CGEN_IFMT ifmt_sb16_0 ATTRIBUTE_UNUSED = {
1931214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1932214571Sdim};
1933214571Sdim
1934214571Sdimstatic const CGEN_IFMT ifmt_sh16_0 ATTRIBUTE_UNUSED = {
1935214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1936214571Sdim};
1937214571Sdim
1938214571Sdimstatic const CGEN_IFMT ifmt_sw16_0 ATTRIBUTE_UNUSED = {
1939214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1940214571Sdim};
1941214571Sdim
1942214571Sdimstatic const CGEN_IFMT ifmt_lb16_0 ATTRIBUTE_UNUSED = {
1943214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1944214571Sdim};
1945214571Sdim
1946214571Sdimstatic const CGEN_IFMT ifmt_lh16_0 ATTRIBUTE_UNUSED = {
1947214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1948214571Sdim};
1949214571Sdim
1950214571Sdimstatic const CGEN_IFMT ifmt_lw16_0 ATTRIBUTE_UNUSED = {
1951214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1952214571Sdim};
1953214571Sdim
1954214571Sdimstatic const CGEN_IFMT ifmt_lbu16_0 ATTRIBUTE_UNUSED = {
1955214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1956214571Sdim};
1957214571Sdim
1958214571Sdimstatic const CGEN_IFMT ifmt_lhu16_0 ATTRIBUTE_UNUSED = {
1959214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_RN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1960214571Sdim};
1961214571Sdim
1962214571Sdimstatic const CGEN_IFMT ifmt_swcp16_0 ATTRIBUTE_UNUSED = {
1963214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1964214571Sdim};
1965214571Sdim
1966214571Sdimstatic const CGEN_IFMT ifmt_lwcp16_0 ATTRIBUTE_UNUSED = {
1967214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1968214571Sdim};
1969214571Sdim
1970214571Sdimstatic const CGEN_IFMT ifmt_smcp16_0 ATTRIBUTE_UNUSED = {
1971214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1972214571Sdim};
1973214571Sdim
1974214571Sdimstatic const CGEN_IFMT ifmt_lmcp16_0 ATTRIBUTE_UNUSED = {
1975214571Sdim  16, 16, 0xf00f, { { F (F_MAJOR) }, { F (F_CRN) }, { F (F_RM) }, { F (F_SUB4) }, { 0 } }
1976214571Sdim};
1977214571Sdim
1978214571Sdim#undef F
1979214571Sdim
1980214571Sdim/* Each non-simple macro entry points to an array of expansion possibilities.  */
1981214571Sdim
1982214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1983214571Sdim#define A(a) (1 << CGEN_INSN_##a)
1984214571Sdim#else
1985214571Sdim#define A(a) (1 << CGEN_INSN_/**/a)
1986214571Sdim#endif
1987214571Sdim#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
1988214571Sdim#define OPERAND(op) MEP_OPERAND_##op
1989214571Sdim#else
1990214571Sdim#define OPERAND(op) MEP_OPERAND_/**/op
1991214571Sdim#endif
1992214571Sdim#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1993214571Sdim#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1994214571Sdim
1995214571Sdim/* The macro instruction table.  */
1996214571Sdim
1997214571Sdimstatic const CGEN_IBASE mep_cgen_macro_insn_table[] =
1998214571Sdim{
1999214571Sdim/* nop */
2000214571Sdim  {
2001214571Sdim    -1, "nop", "nop", 16,
2002214571Sdim    { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2003214571Sdim  },
2004214571Sdim/* sb $rnc,$zero($rma) */
2005214571Sdim  {
2006214571Sdim    -1, "sb16-0", "sb", 16,
2007214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2008214571Sdim  },
2009214571Sdim/* sh $rns,$zero($rma) */
2010214571Sdim  {
2011214571Sdim    -1, "sh16-0", "sh", 16,
2012214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2013214571Sdim  },
2014214571Sdim/* sw $rnl,$zero($rma) */
2015214571Sdim  {
2016214571Sdim    -1, "sw16-0", "sw", 16,
2017214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2018214571Sdim  },
2019214571Sdim/* lb $rnc,$zero($rma) */
2020214571Sdim  {
2021214571Sdim    -1, "lb16-0", "lb", 16,
2022214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2023214571Sdim  },
2024214571Sdim/* lh $rns,$zero($rma) */
2025214571Sdim  {
2026214571Sdim    -1, "lh16-0", "lh", 16,
2027214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2028214571Sdim  },
2029214571Sdim/* lw $rnl,$zero($rma) */
2030214571Sdim  {
2031214571Sdim    -1, "lw16-0", "lw", 16,
2032214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2033214571Sdim  },
2034214571Sdim/* lbu $rnuc,$zero($rma) */
2035214571Sdim  {
2036214571Sdim    -1, "lbu16-0", "lbu", 16,
2037214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2038214571Sdim  },
2039214571Sdim/* lhu $rnus,$zero($rma) */
2040214571Sdim  {
2041214571Sdim    -1, "lhu16-0", "lhu", 16,
2042214571Sdim    { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2043214571Sdim  },
2044214571Sdim/* swcp $crn,$zero($rma) */
2045214571Sdim  {
2046214571Sdim    -1, "swcp16-0", "swcp", 16,
2047214571Sdim    { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2048214571Sdim  },
2049214571Sdim/* lwcp $crn,$zero($rma) */
2050214571Sdim  {
2051214571Sdim    -1, "lwcp16-0", "lwcp", 16,
2052214571Sdim    { 0|A(NO_DIS)|A(OPTIONAL_CP_INSN)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xe0" } }, { { 0, 0 } }, { { CONFIG_NONE, 0 } } } }
2053214571Sdim  },
2054214571Sdim/* smcp $crn64,$zero($rma) */
2055214571Sdim  {
2056214571Sdim    -1, "smcp16-0", "smcp", 16,
2057214571Sdim    { 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 } } } }
2058214571Sdim  },
2059214571Sdim/* lmcp $crn64,$zero($rma) */
2060214571Sdim  {
2061214571Sdim    -1, "lmcp16-0", "lmcp", 16,
2062214571Sdim    { 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 } } } }
2063214571Sdim  },
2064214571Sdim};
2065214571Sdim
2066214571Sdim/* The macro instruction opcode table.  */
2067214571Sdim
2068214571Sdimstatic const CGEN_OPCODE mep_cgen_macro_insn_opcode_table[] =
2069214571Sdim{
2070214571Sdim/* nop */
2071214571Sdim  {
2072214571Sdim    { 0, 0, 0, 0 },
2073214571Sdim    { { MNEM, 0 } },
2074214571Sdim    & ifmt_nop, { 0x0 }
2075214571Sdim  },
2076214571Sdim/* sb $rnc,$zero($rma) */
2077214571Sdim  {
2078214571Sdim    { 0, 0, 0, 0 },
2079214571Sdim    { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2080214571Sdim    & ifmt_sb16_0, { 0x8 }
2081214571Sdim  },
2082214571Sdim/* sh $rns,$zero($rma) */
2083214571Sdim  {
2084214571Sdim    { 0, 0, 0, 0 },
2085214571Sdim    { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2086214571Sdim    & ifmt_sh16_0, { 0x9 }
2087214571Sdim  },
2088214571Sdim/* sw $rnl,$zero($rma) */
2089214571Sdim  {
2090214571Sdim    { 0, 0, 0, 0 },
2091214571Sdim    { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2092214571Sdim    & ifmt_sw16_0, { 0xa }
2093214571Sdim  },
2094214571Sdim/* lb $rnc,$zero($rma) */
2095214571Sdim  {
2096214571Sdim    { 0, 0, 0, 0 },
2097214571Sdim    { { MNEM, ' ', OP (RNC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2098214571Sdim    & ifmt_lb16_0, { 0xc }
2099214571Sdim  },
2100214571Sdim/* lh $rns,$zero($rma) */
2101214571Sdim  {
2102214571Sdim    { 0, 0, 0, 0 },
2103214571Sdim    { { MNEM, ' ', OP (RNS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2104214571Sdim    & ifmt_lh16_0, { 0xd }
2105214571Sdim  },
2106214571Sdim/* lw $rnl,$zero($rma) */
2107214571Sdim  {
2108214571Sdim    { 0, 0, 0, 0 },
2109214571Sdim    { { MNEM, ' ', OP (RNL), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2110214571Sdim    & ifmt_lw16_0, { 0xe }
2111214571Sdim  },
2112214571Sdim/* lbu $rnuc,$zero($rma) */
2113214571Sdim  {
2114214571Sdim    { 0, 0, 0, 0 },
2115214571Sdim    { { MNEM, ' ', OP (RNUC), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2116214571Sdim    & ifmt_lbu16_0, { 0xb }
2117214571Sdim  },
2118214571Sdim/* lhu $rnus,$zero($rma) */
2119214571Sdim  {
2120214571Sdim    { 0, 0, 0, 0 },
2121214571Sdim    { { MNEM, ' ', OP (RNUS), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2122214571Sdim    & ifmt_lhu16_0, { 0xf }
2123214571Sdim  },
2124214571Sdim/* swcp $crn,$zero($rma) */
2125214571Sdim  {
2126214571Sdim    { 0, 0, 0, 0 },
2127214571Sdim    { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2128214571Sdim    & ifmt_swcp16_0, { 0x3008 }
2129214571Sdim  },
2130214571Sdim/* lwcp $crn,$zero($rma) */
2131214571Sdim  {
2132214571Sdim    { 0, 0, 0, 0 },
2133214571Sdim    { { MNEM, ' ', OP (CRN), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2134214571Sdim    & ifmt_lwcp16_0, { 0x3009 }
2135214571Sdim  },
2136214571Sdim/* smcp $crn64,$zero($rma) */
2137214571Sdim  {
2138214571Sdim    { 0, 0, 0, 0 },
2139214571Sdim    { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2140214571Sdim    & ifmt_smcp16_0, { 0x300a }
2141214571Sdim  },
2142214571Sdim/* lmcp $crn64,$zero($rma) */
2143214571Sdim  {
2144214571Sdim    { 0, 0, 0, 0 },
2145214571Sdim    { { MNEM, ' ', OP (CRN64), ',', OP (ZERO), '(', OP (RMA), ')', 0 } },
2146214571Sdim    & ifmt_lmcp16_0, { 0x300b }
2147214571Sdim  },
2148214571Sdim};
2149214571Sdim
2150214571Sdim#undef A
2151214571Sdim#undef OPERAND
2152214571Sdim#undef MNEM
2153214571Sdim#undef OP
2154214571Sdim
2155214571Sdim#ifndef CGEN_ASM_HASH_P
2156214571Sdim#define CGEN_ASM_HASH_P(insn) 1
2157214571Sdim#endif
2158214571Sdim
2159214571Sdim#ifndef CGEN_DIS_HASH_P
2160214571Sdim#define CGEN_DIS_HASH_P(insn) 1
2161214571Sdim#endif
2162214571Sdim
2163214571Sdim/* Return non-zero if INSN is to be added to the hash table.
2164214571Sdim   Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
2165214571Sdim
2166214571Sdimstatic int
2167214571Sdimasm_hash_insn_p (insn)
2168214571Sdim     const CGEN_INSN *insn ATTRIBUTE_UNUSED;
2169214571Sdim{
2170214571Sdim  return CGEN_ASM_HASH_P (insn);
2171214571Sdim}
2172214571Sdim
2173214571Sdimstatic int
2174214571Sdimdis_hash_insn_p (insn)
2175214571Sdim     const CGEN_INSN *insn;
2176214571Sdim{
2177214571Sdim  /* If building the hash table and the NO-DIS attribute is present,
2178214571Sdim     ignore.  */
2179214571Sdim  if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
2180214571Sdim    return 0;
2181214571Sdim  return CGEN_DIS_HASH_P (insn);
2182214571Sdim}
2183214571Sdim
2184214571Sdim#ifndef CGEN_ASM_HASH
2185214571Sdim#define CGEN_ASM_HASH_SIZE 127
2186214571Sdim#ifdef CGEN_MNEMONIC_OPERANDS
2187214571Sdim#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
2188214571Sdim#else
2189214571Sdim#define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
2190214571Sdim#endif
2191214571Sdim#endif
2192214571Sdim
2193214571Sdim/* It doesn't make much sense to provide a default here,
2194214571Sdim   but while this is under development we do.
2195214571Sdim   BUFFER is a pointer to the bytes of the insn, target order.
2196214571Sdim   VALUE is the first base_insn_bitsize bits as an int in host order.  */
2197214571Sdim
2198214571Sdim#ifndef CGEN_DIS_HASH
2199214571Sdim#define CGEN_DIS_HASH_SIZE 256
2200214571Sdim#define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
2201214571Sdim#endif
2202214571Sdim
2203214571Sdim/* The result is the hash value of the insn.
2204214571Sdim   Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
2205214571Sdim
2206214571Sdimstatic unsigned int
2207214571Sdimasm_hash_insn (mnem)
2208214571Sdim     const char * mnem;
2209214571Sdim{
2210214571Sdim  return CGEN_ASM_HASH (mnem);
2211214571Sdim}
2212214571Sdim
2213214571Sdim/* BUF is a pointer to the bytes of the insn, target order.
2214214571Sdim   VALUE is the first base_insn_bitsize bits as an int in host order.  */
2215214571Sdim
2216214571Sdimstatic unsigned int
2217214571Sdimdis_hash_insn (buf, value)
2218214571Sdim     const char * buf ATTRIBUTE_UNUSED;
2219214571Sdim     CGEN_INSN_INT value ATTRIBUTE_UNUSED;
2220214571Sdim{
2221214571Sdim  return CGEN_DIS_HASH (buf, value);
2222214571Sdim}
2223214571Sdim
2224214571Sdim/* Set the recorded length of the insn in the CGEN_FIELDS struct.  */
2225214571Sdim
2226214571Sdimstatic void
2227214571Sdimset_fields_bitsize (CGEN_FIELDS *fields, int size)
2228214571Sdim{
2229214571Sdim  CGEN_FIELDS_BITSIZE (fields) = size;
2230214571Sdim}
2231214571Sdim
2232214571Sdim/* Function to call before using the operand instance table.
2233214571Sdim   This plugs the opcode entries and macro instructions into the cpu table.  */
2234214571Sdim
2235214571Sdimvoid
2236214571Sdimmep_cgen_init_opcode_table (CGEN_CPU_DESC cd)
2237214571Sdim{
2238214571Sdim  int i;
2239214571Sdim  int num_macros = (sizeof (mep_cgen_macro_insn_table) /
2240214571Sdim		    sizeof (mep_cgen_macro_insn_table[0]));
2241214571Sdim  const CGEN_IBASE *ib = & mep_cgen_macro_insn_table[0];
2242214571Sdim  const CGEN_OPCODE *oc = & mep_cgen_macro_insn_opcode_table[0];
2243214571Sdim  CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
2244214571Sdim
2245214571Sdim  memset (insns, 0, num_macros * sizeof (CGEN_INSN));
2246214571Sdim  for (i = 0; i < num_macros; ++i)
2247214571Sdim    {
2248214571Sdim      insns[i].base = &ib[i];
2249214571Sdim      insns[i].opcode = &oc[i];
2250214571Sdim      mep_cgen_build_insn_regex (& insns[i]);
2251214571Sdim    }
2252214571Sdim  cd->macro_insn_table.init_entries = insns;
2253214571Sdim  cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
2254214571Sdim  cd->macro_insn_table.num_init_entries = num_macros;
2255214571Sdim
2256214571Sdim  oc = & mep_cgen_insn_opcode_table[0];
2257214571Sdim  insns = (CGEN_INSN *) cd->insn_table.init_entries;
2258214571Sdim  for (i = 0; i < MAX_INSNS; ++i)
2259214571Sdim    {
2260214571Sdim      insns[i].opcode = &oc[i];
2261214571Sdim      mep_cgen_build_insn_regex (& insns[i]);
2262214571Sdim    }
2263214571Sdim
2264214571Sdim  cd->sizeof_fields = sizeof (CGEN_FIELDS);
2265214571Sdim  cd->set_fields_bitsize = set_fields_bitsize;
2266214571Sdim
2267214571Sdim  cd->asm_hash_p = asm_hash_insn_p;
2268214571Sdim  cd->asm_hash = asm_hash_insn;
2269214571Sdim  cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
2270214571Sdim
2271214571Sdim  cd->dis_hash_p = dis_hash_insn_p;
2272214571Sdim  cd->dis_hash = dis_hash_insn;
2273214571Sdim  cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
2274214571Sdim}
2275