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