Mon Dec 7 14:33:44 1998 Dave Brolley <brolley@cygnus.com>
[deliverable/binutils-gdb.git] / opcodes / fr30-opc.c
1 /* Generic opcode table support for targets using CGEN. -*- C -*-
2 CGEN: Cpu tools GENerator
3
4 THIS FILE IS USED TO GENERATE fr30-opc.c.
5
6 Copyright (C) 1998 Free Software Foundation, Inc.
7
8 This file is part of the GNU Binutils and GDB, the GNU debugger.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
13 any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software Foundation, Inc.,
22 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
23
24 #include "sysdep.h"
25 #include <stdio.h>
26 #include "ansidecl.h"
27 #include "libiberty.h"
28 #include "bfd.h"
29 #include "symcat.h"
30 #include "fr30-opc.h"
31 #include "opintl.h"
32
33 /* Used by the ifield rtx function. */
34 #define FLD(f) (fields->f)
35
36 /* The hash functions are recorded here to help keep assembler code out of
37 the disassembler and vice versa. */
38
39 static int asm_hash_insn_p PARAMS ((const CGEN_INSN *));
40 static unsigned int asm_hash_insn PARAMS ((const char *));
41 static int dis_hash_insn_p PARAMS ((const CGEN_INSN *));
42 static unsigned int dis_hash_insn PARAMS ((const char *, CGEN_INSN_INT));
43
44 /* Look up instruction INSN_VALUE and extract its fields.
45 INSN, if non-null, is the insn table entry.
46 Otherwise INSN_VALUE is examined to compute it.
47 LENGTH is the bit length of INSN_VALUE if known, otherwise 0.
48 0 is only valid if `insn == NULL && ! CGEN_INT_INSN_P'.
49 If INSN != NULL, LENGTH must be valid.
50 ALIAS_P is non-zero if alias insns are to be included in the search.
51
52 The result is a pointer to the insn table entry, or NULL if the instruction
53 wasn't recognized. */
54
55 const CGEN_INSN *
56 fr30_cgen_lookup_insn (od, insn, insn_value, length, fields, alias_p)
57 CGEN_OPCODE_DESC od;
58 const CGEN_INSN *insn;
59 CGEN_INSN_BYTES insn_value;
60 int length;
61 CGEN_FIELDS *fields;
62 int alias_p;
63 {
64 unsigned char buf[CGEN_MAX_INSN_SIZE];
65 unsigned char *bufp;
66 CGEN_INSN_INT base_insn;
67 #if CGEN_INT_INSN_P
68 CGEN_EXTRACT_INFO *info = NULL;
69 #else
70 CGEN_EXTRACT_INFO ex_info;
71 CGEN_EXTRACT_INFO *info = &ex_info;
72 #endif
73
74 #if CGEN_INT_INSN_P
75 cgen_put_insn_value (od, buf, length, insn_value);
76 bufp = buf;
77 base_insn = insn_value; /*???*/
78 #else
79 ex_info.dis_info = NULL;
80 ex_info.insn_bytes = insn_value;
81 ex_info.valid = -1;
82 base_insn = cgen_get_insn_value (od, buf, length);
83 bufp = insn_value;
84 #endif
85
86 if (!insn)
87 {
88 const CGEN_INSN_LIST *insn_list;
89
90 /* The instructions are stored in hash lists.
91 Pick the first one and keep trying until we find the right one. */
92
93 insn_list = CGEN_DIS_LOOKUP_INSN (od, bufp, base_insn);
94 while (insn_list != NULL)
95 {
96 insn = insn_list->insn;
97
98 if (alias_p
99 || ! CGEN_INSN_ATTR (insn, CGEN_INSN_ALIAS))
100 {
101 /* Basic bit mask must be correct. */
102 /* ??? May wish to allow target to defer this check until the
103 extract handler. */
104 if ((base_insn & CGEN_INSN_BASE_MASK (insn))
105 == CGEN_INSN_BASE_VALUE (insn))
106 {
107 /* ??? 0 is passed for `pc' */
108 int elength = (*CGEN_EXTRACT_FN (insn)) (od, insn, info,
109 base_insn, fields,
110 (bfd_vma) 0);
111 if (elength > 0)
112 {
113 /* sanity check */
114 if (length != 0 && length != elength)
115 abort ();
116 return insn;
117 }
118 }
119 }
120
121 insn_list = CGEN_DIS_NEXT_INSN (insn_list);
122 }
123 }
124 else
125 {
126 /* Sanity check: can't pass an alias insn if ! alias_p. */
127 if (! alias_p
128 && CGEN_INSN_ATTR (insn, CGEN_INSN_ALIAS))
129 abort ();
130 /* Sanity check: length must be correct. */
131 if (length != CGEN_INSN_BITSIZE (insn))
132 abort ();
133
134 /* ??? 0 is passed for `pc' */
135 length = (*CGEN_EXTRACT_FN (insn)) (od, insn, info, base_insn, fields,
136 (bfd_vma) 0);
137 /* Sanity check: must succeed.
138 Could relax this later if it ever proves useful. */
139 if (length == 0)
140 abort ();
141 return insn;
142 }
143
144 return NULL;
145 }
146
147 /* Fill in the operand instances used by INSN whose operands are FIELDS.
148 INDICES is a pointer to a buffer of MAX_OPERAND_INSTANCES ints to be filled
149 in. */
150
151 void
152 fr30_cgen_get_insn_operands (od, insn, fields, indices)
153 CGEN_OPCODE_DESC od;
154 const CGEN_INSN * insn;
155 const CGEN_FIELDS * fields;
156 int *indices;
157 {
158 const CGEN_OPERAND_INSTANCE *opinst;
159 int i;
160
161 for (i = 0, opinst = CGEN_INSN_OPERANDS (insn);
162 opinst != NULL
163 && CGEN_OPERAND_INSTANCE_TYPE (opinst) != CGEN_OPERAND_INSTANCE_END;
164 ++i, ++opinst)
165 {
166 const CGEN_OPERAND *op = CGEN_OPERAND_INSTANCE_OPERAND (opinst);
167 if (op == NULL)
168 indices[i] = CGEN_OPERAND_INSTANCE_INDEX (opinst);
169 else
170 indices[i] = fr30_cgen_get_int_operand (CGEN_OPERAND_INDEX (op),
171 fields);
172 }
173 }
174
175 /* Cover function to fr30_cgen_get_insn_operands when either INSN or FIELDS
176 isn't known.
177 The INSN, INSN_VALUE, and LENGTH arguments are passed to
178 fr30_cgen_lookup_insn unchanged.
179
180 The result is the insn table entry or NULL if the instruction wasn't
181 recognized. */
182
183 const CGEN_INSN *
184 fr30_cgen_lookup_get_insn_operands (od, insn, insn_value, length, indices)
185 CGEN_OPCODE_DESC od;
186 const CGEN_INSN *insn;
187 CGEN_INSN_BYTES insn_value;
188 int length;
189 int *indices;
190 {
191 CGEN_FIELDS fields;
192
193 /* Pass non-zero for ALIAS_P only if INSN != NULL.
194 If INSN == NULL, we want a real insn. */
195 insn = fr30_cgen_lookup_insn (od, insn, insn_value, length, &fields,
196 insn != NULL);
197 if (! insn)
198 return NULL;
199
200 fr30_cgen_get_insn_operands (od, insn, &fields, indices);
201 return insn;
202 }
203 /* Attributes. */
204
205 static const CGEN_ATTR_ENTRY MACH_attr[] =
206 {
207 { "base", MACH_BASE },
208 { "fr30", MACH_FR30 },
209 { "max", MACH_MAX },
210 { 0, 0 }
211 };
212
213 const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] =
214 {
215 { "CACHE-ADDR", NULL },
216 { "FUN-ACCESS", NULL },
217 { "PC", NULL },
218 { "PROFILE", NULL },
219 { 0, 0 }
220 };
221
222 const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] =
223 {
224 { "ABS-ADDR", NULL },
225 { "HASH-PREFIX", NULL },
226 { "NEGATIVE", NULL },
227 { "PCREL-ADDR", NULL },
228 { "RELAX", NULL },
229 { "SEM-ONLY", NULL },
230 { "SIGN-OPT", NULL },
231 { "SIGNED", NULL },
232 { "UNSIGNED", NULL },
233 { "VIRTUAL", NULL },
234 { 0, 0 }
235 };
236
237 const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] =
238 {
239 { "ALIAS", NULL },
240 { "COND-CTI", NULL },
241 { "DELAY-SLOT", NULL },
242 { "NO-DIS", NULL },
243 { "NOT-IN-DELAY-SLOT", NULL },
244 { "RELAX", NULL },
245 { "RELAXABLE", NULL },
246 { "SKIP-CTI", NULL },
247 { "UNCOND-CTI", NULL },
248 { "VIRTUAL", NULL },
249 { 0, 0 }
250 };
251
252 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_gr_entries[] =
253 {
254 { "ac", 13 },
255 { "fp", 14 },
256 { "sp", 15 },
257 { "r0", 0 },
258 { "r1", 1 },
259 { "r2", 2 },
260 { "r3", 3 },
261 { "r4", 4 },
262 { "r5", 5 },
263 { "r6", 6 },
264 { "r7", 7 },
265 { "r8", 8 },
266 { "r9", 9 },
267 { "r10", 10 },
268 { "r11", 11 },
269 { "r12", 12 },
270 { "r13", 13 },
271 { "r14", 14 },
272 { "r15", 15 }
273 };
274
275 CGEN_KEYWORD fr30_cgen_opval_h_gr =
276 {
277 & fr30_cgen_opval_h_gr_entries[0],
278 19
279 };
280
281 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_cr_entries[] =
282 {
283 { "cr0", 0 },
284 { "cr1", 1 },
285 { "cr2", 2 },
286 { "cr3", 3 },
287 { "cr4", 4 },
288 { "cr5", 5 },
289 { "cr6", 6 },
290 { "cr7", 7 },
291 { "cr8", 8 },
292 { "cr9", 9 },
293 { "cr10", 10 },
294 { "cr11", 11 },
295 { "cr12", 12 },
296 { "cr13", 13 },
297 { "cr14", 14 },
298 { "cr15", 15 }
299 };
300
301 CGEN_KEYWORD fr30_cgen_opval_h_cr =
302 {
303 & fr30_cgen_opval_h_cr_entries[0],
304 16
305 };
306
307 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_dr_entries[] =
308 {
309 { "tbr", 0 },
310 { "rp", 1 },
311 { "ssp", 2 },
312 { "usp", 3 },
313 { "mdh", 4 },
314 { "mdl", 5 }
315 };
316
317 CGEN_KEYWORD fr30_cgen_opval_h_dr =
318 {
319 & fr30_cgen_opval_h_dr_entries[0],
320 6
321 };
322
323 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_ps_entries[] =
324 {
325 { "ps", 0 }
326 };
327
328 CGEN_KEYWORD fr30_cgen_opval_h_ps =
329 {
330 & fr30_cgen_opval_h_ps_entries[0],
331 1
332 };
333
334 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r13_entries[] =
335 {
336 { "r13", 0 }
337 };
338
339 CGEN_KEYWORD fr30_cgen_opval_h_r13 =
340 {
341 & fr30_cgen_opval_h_r13_entries[0],
342 1
343 };
344
345 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r14_entries[] =
346 {
347 { "r14", 0 }
348 };
349
350 CGEN_KEYWORD fr30_cgen_opval_h_r14 =
351 {
352 & fr30_cgen_opval_h_r14_entries[0],
353 1
354 };
355
356 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r15_entries[] =
357 {
358 { "r15", 0 }
359 };
360
361 CGEN_KEYWORD fr30_cgen_opval_h_r15 =
362 {
363 & fr30_cgen_opval_h_r15_entries[0],
364 1
365 };
366
367
368 /* The hardware table. */
369
370 #define HW_ENT(n) fr30_cgen_hw_entries[n]
371 static const CGEN_HW_ENTRY fr30_cgen_hw_entries[] =
372 {
373 { HW_H_PC, & HW_ENT (HW_H_PC + 1), "h-pc", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0|(1<<CGEN_HW_PROFILE)|(1<<CGEN_HW_PC), { 0 } } },
374 { HW_H_MEMORY, & HW_ENT (HW_H_MEMORY + 1), "h-memory", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
375 { HW_H_SINT, & HW_ENT (HW_H_SINT + 1), "h-sint", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
376 { HW_H_UINT, & HW_ENT (HW_H_UINT + 1), "h-uint", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
377 { HW_H_ADDR, & HW_ENT (HW_H_ADDR + 1), "h-addr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
378 { HW_H_IADDR, & HW_ENT (HW_H_IADDR + 1), "h-iaddr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
379 { HW_H_GR, & HW_ENT (HW_H_GR + 1), "h-gr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_gr, { 0, 0|(1<<CGEN_HW_CACHE_ADDR)|(1<<CGEN_HW_PROFILE), { 0 } } },
380 { HW_H_CR, & HW_ENT (HW_H_CR + 1), "h-cr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_cr, { 0, 0, { 0 } } },
381 { HW_H_DR, & HW_ENT (HW_H_DR + 1), "h-dr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_dr, { 0, 0|(1<<CGEN_HW_FUN_ACCESS), { 0 } } },
382 { HW_H_PS, & HW_ENT (HW_H_PS + 1), "h-ps", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_ps, { 0, 0|(1<<CGEN_HW_FUN_ACCESS), { 0 } } },
383 { HW_H_R13, & HW_ENT (HW_H_R13 + 1), "h-r13", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r13, { 0, 0, { 0 } } },
384 { HW_H_R14, & HW_ENT (HW_H_R14 + 1), "h-r14", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r14, { 0, 0, { 0 } } },
385 { HW_H_R15, & HW_ENT (HW_H_R15 + 1), "h-r15", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r15, { 0, 0, { 0 } } },
386 { HW_H_NBIT, & HW_ENT (HW_H_NBIT + 1), "h-nbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
387 { HW_H_ZBIT, & HW_ENT (HW_H_ZBIT + 1), "h-zbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
388 { HW_H_VBIT, & HW_ENT (HW_H_VBIT + 1), "h-vbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
389 { HW_H_CBIT, & HW_ENT (HW_H_CBIT + 1), "h-cbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
390 { HW_H_IBIT, & HW_ENT (HW_H_IBIT + 1), "h-ibit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
391 { HW_H_SBIT, & HW_ENT (HW_H_SBIT + 1), "h-sbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
392 { HW_H_CCR, & HW_ENT (HW_H_CCR + 1), "h-ccr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0|(1<<CGEN_HW_FUN_ACCESS), { 0 } } },
393 { HW_H_SCR, & HW_ENT (HW_H_SCR + 1), "h-scr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0|(1<<CGEN_HW_FUN_ACCESS), { 0 } } },
394 { HW_H_ILM, & HW_ENT (HW_H_ILM + 1), "h-ilm", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0|(1<<CGEN_HW_FUN_ACCESS), { 0 } } },
395 { 0 }
396 };
397
398 /* The instruction field table. */
399
400 static const CGEN_IFLD fr30_cgen_ifld_table[] =
401 {
402 { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { 0, 0, { 0 } } },
403 { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
404 { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
405 { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
406 { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
407 { FR30_F_OP5, "f-op5", 0, 16, 4, 1, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
408 { FR30_F_CC, "f-cc", 0, 16, 4, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
409 { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
410 { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
411 { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
412 { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
413 { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
414 { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
415 { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
416 { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
417 { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
418 { FR30_F_U4, "f-u4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
419 { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
420 { FR30_F_I4, "f-i4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
421 { FR30_F_M4, "f-m4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
422 { FR30_F_U8, "f-u8", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
423 { FR30_F_I8, "f-i8", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
424 { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
425 { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
426 { FR30_F_I32, "f-i32", 16, 32, 0, 32, { 0, 0|(1<<CGEN_IFLD_SIGN_OPT)|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
427 { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
428 { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
429 { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
430 { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
431 { FR30_F_S10, "f-s10", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
432 { FR30_F_U10, "f-u10", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
433 { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_PCREL_ADDR)|(1<<CGEN_IFLD_SIGNED), { 0 } } },
434 { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
435 { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
436 { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
437 { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { 0, 0|(1<<CGEN_IFLD_PCREL_ADDR)|(1<<CGEN_IFLD_SIGNED), { 0 } } },
438 { FR30_F_REGLIST_HI, "f-reglist_hi", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
439 { FR30_F_REGLIST_LOW, "f-reglist_low", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
440 { 0 }
441 };
442
443 /* The operand table. */
444
445 #define OPERAND(op) CONCAT2 (FR30_OPERAND_,op)
446 #define OP_ENT(op) fr30_cgen_operand_table[OPERAND (op)]
447
448 const CGEN_OPERAND fr30_cgen_operand_table[MAX_OPERANDS] =
449 {
450 /* pc: program counter */
451 { "pc", & HW_ENT (HW_H_PC), 0, 0,
452 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
453 /* Ri: destination register */
454 { "Ri", & HW_ENT (HW_H_GR), 12, 4,
455 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
456 /* Rj: source register */
457 { "Rj", & HW_ENT (HW_H_GR), 8, 4,
458 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
459 /* Ric: target register coproc insn */
460 { "Ric", & HW_ENT (HW_H_GR), 12, 4,
461 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
462 /* Rjc: source register coproc insn */
463 { "Rjc", & HW_ENT (HW_H_GR), 8, 4,
464 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
465 /* CRi: coprocessor register */
466 { "CRi", & HW_ENT (HW_H_CR), 12, 4,
467 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
468 /* CRj: coprocessor register */
469 { "CRj", & HW_ENT (HW_H_CR), 8, 4,
470 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
471 /* Rs1: dedicated register */
472 { "Rs1", & HW_ENT (HW_H_DR), 8, 4,
473 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
474 /* Rs2: dedicated register */
475 { "Rs2", & HW_ENT (HW_H_DR), 12, 4,
476 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
477 /* R13: General Register 13 */
478 { "R13", & HW_ENT (HW_H_R13), 0, 0,
479 { 0, 0, { 0 } } },
480 /* R14: General Register 14 */
481 { "R14", & HW_ENT (HW_H_R14), 0, 0,
482 { 0, 0, { 0 } } },
483 /* R15: General Register 15 */
484 { "R15", & HW_ENT (HW_H_R15), 0, 0,
485 { 0, 0, { 0 } } },
486 /* ps: Program Status register */
487 { "ps", & HW_ENT (HW_H_PS), 0, 0,
488 { 0, 0, { 0 } } },
489 /* u4: 4 bit unsigned immediate */
490 { "u4", & HW_ENT (HW_H_UINT), 8, 4,
491 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
492 /* u4c: 4 bit unsigned immediate */
493 { "u4c", & HW_ENT (HW_H_UINT), 12, 4,
494 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
495 /* u8: 8 bit unsigned immediate */
496 { "u8", & HW_ENT (HW_H_UINT), 8, 8,
497 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
498 /* i8: 8 bit unsigned immediate */
499 { "i8", & HW_ENT (HW_H_UINT), 4, 8,
500 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
501 /* udisp6: 6 bit unsigned immediate */
502 { "udisp6", & HW_ENT (HW_H_UINT), 8, 4,
503 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
504 /* disp8: 8 bit signed immediate */
505 { "disp8", & HW_ENT (HW_H_SINT), 4, 8,
506 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
507 /* disp9: 9 bit signed immediate */
508 { "disp9", & HW_ENT (HW_H_SINT), 4, 8,
509 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
510 /* disp10: 10 bit signed immediate */
511 { "disp10", & HW_ENT (HW_H_SINT), 4, 8,
512 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
513 /* s10: 10 bit signed immediate */
514 { "s10", & HW_ENT (HW_H_SINT), 8, 8,
515 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
516 /* u10: 10 bit unsigned immediate */
517 { "u10", & HW_ENT (HW_H_UINT), 8, 8,
518 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
519 /* i32: 32 bit immediate */
520 { "i32", & HW_ENT (HW_H_UINT), 0, 32,
521 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGN_OPT)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
522 /* m4: 4 bit negative immediate */
523 { "m4", & HW_ENT (HW_H_SINT), 8, 4,
524 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
525 /* i20: 20 bit immediate */
526 { "i20", & HW_ENT (HW_H_UINT), 0, 20,
527 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED)|(1<<CGEN_OPERAND_VIRTUAL), { 0 } } },
528 /* dir8: 8 bit direct address */
529 { "dir8", & HW_ENT (HW_H_UINT), 8, 8,
530 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
531 /* dir9: 9 bit direct address */
532 { "dir9", & HW_ENT (HW_H_UINT), 8, 8,
533 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
534 /* dir10: 10 bit direct address */
535 { "dir10", & HW_ENT (HW_H_UINT), 8, 8,
536 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
537 /* label9: 9 bit pc relative address */
538 { "label9", & HW_ENT (HW_H_IADDR), 8, 8,
539 { 0, 0|(1<<CGEN_OPERAND_PCREL_ADDR)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
540 /* label12: 12 bit pc relative address */
541 { "label12", & HW_ENT (HW_H_IADDR), 5, 11,
542 { 0, 0|(1<<CGEN_OPERAND_PCREL_ADDR)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
543 /* reglist_low: 8 bit register mask */
544 { "reglist_low", & HW_ENT (HW_H_UINT), 8, 8,
545 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
546 /* reglist_hi: 8 bit register mask */
547 { "reglist_hi", & HW_ENT (HW_H_UINT), 8, 8,
548 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
549 /* cc: condition codes */
550 { "cc", & HW_ENT (HW_H_UINT), 4, 4,
551 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
552 /* ccc: coprocessor calc */
553 { "ccc", & HW_ENT (HW_H_UINT), 0, 8,
554 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
555 /* nbit: negative bit */
556 { "nbit", & HW_ENT (HW_H_NBIT), 0, 0,
557 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
558 /* vbit: overflow bit */
559 { "vbit", & HW_ENT (HW_H_VBIT), 0, 0,
560 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
561 /* zbit: zero bit */
562 { "zbit", & HW_ENT (HW_H_ZBIT), 0, 0,
563 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
564 /* cbit: carry bit */
565 { "cbit", & HW_ENT (HW_H_CBIT), 0, 0,
566 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
567 /* ibit: interrupt bit */
568 { "ibit", & HW_ENT (HW_H_IBIT), 0, 0,
569 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
570 /* sbit: stack bit */
571 { "sbit", & HW_ENT (HW_H_SBIT), 0, 0,
572 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
573 /* ccr: condition code bits */
574 { "ccr", & HW_ENT (HW_H_CCR), 0, 0,
575 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
576 /* scr: system condition bits */
577 { "scr", & HW_ENT (HW_H_SCR), 0, 0,
578 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
579 /* ilm: condition code bits */
580 { "ilm", & HW_ENT (HW_H_ILM), 0, 0,
581 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
582 };
583
584 /* Operand references. */
585
586 #define INPUT CGEN_OPERAND_INSTANCE_INPUT
587 #define OUTPUT CGEN_OPERAND_INSTANCE_OUTPUT
588 #define COND_REF CGEN_OPERAND_INSTANCE_COND_REF
589
590 static const CGEN_OPERAND_INSTANCE fmt_add_ops[] = {
591 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
592 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
593 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
594 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
595 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
596 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
597 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
598 { 0 }
599 };
600
601 static const CGEN_OPERAND_INSTANCE fmt_addi_ops[] = {
602 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
603 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
604 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
605 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
606 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
607 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
608 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
609 { 0 }
610 };
611
612 static const CGEN_OPERAND_INSTANCE fmt_add2_ops[] = {
613 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
614 { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
615 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
616 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
617 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
618 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
619 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
620 { 0 }
621 };
622
623 static const CGEN_OPERAND_INSTANCE fmt_addc_ops[] = {
624 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
625 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
626 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
627 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
628 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
629 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
630 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
631 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
632 { 0 }
633 };
634
635 static const CGEN_OPERAND_INSTANCE fmt_addn_ops[] = {
636 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
637 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
638 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
639 { 0 }
640 };
641
642 static const CGEN_OPERAND_INSTANCE fmt_addni_ops[] = {
643 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
644 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
645 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
646 { 0 }
647 };
648
649 static const CGEN_OPERAND_INSTANCE fmt_addn2_ops[] = {
650 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
651 { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
652 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
653 { 0 }
654 };
655
656 static const CGEN_OPERAND_INSTANCE fmt_cmp_ops[] = {
657 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
658 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
659 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
660 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
661 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
662 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
663 { 0 }
664 };
665
666 static const CGEN_OPERAND_INSTANCE fmt_cmpi_ops[] = {
667 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
668 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
669 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
670 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
671 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
672 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
673 { 0 }
674 };
675
676 static const CGEN_OPERAND_INSTANCE fmt_cmp2_ops[] = {
677 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
678 { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
679 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
680 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
681 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
682 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
683 { 0 }
684 };
685
686 static const CGEN_OPERAND_INSTANCE fmt_and_ops[] = {
687 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
688 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
689 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
690 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
691 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
692 { 0 }
693 };
694
695 static const CGEN_OPERAND_INSTANCE fmt_andm_ops[] = {
696 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
697 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
698 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
699 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
700 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
701 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
702 { 0 }
703 };
704
705 static const CGEN_OPERAND_INSTANCE fmt_andh_ops[] = {
706 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
707 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
708 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (RJ), 0, 0 },
709 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
710 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
711 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
712 { 0 }
713 };
714
715 static const CGEN_OPERAND_INSTANCE fmt_andb_ops[] = {
716 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
717 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
718 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (RJ), 0, 0 },
719 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
720 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
721 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
722 { 0 }
723 };
724
725 static const CGEN_OPERAND_INSTANCE fmt_bandl_ops[] = {
726 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
727 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_QI, & OP_ENT (U4), 0, 0 },
728 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
729 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
730 { 0 }
731 };
732
733 static const CGEN_OPERAND_INSTANCE fmt_btstl_ops[] = {
734 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_QI, & OP_ENT (U4), 0, 0 },
735 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
736 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
737 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
738 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
739 { 0 }
740 };
741
742 static const CGEN_OPERAND_INSTANCE fmt_mul_ops[] = {
743 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
744 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
745 { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
746 { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
747 { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
748 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
749 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
750 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
751 { 0 }
752 };
753
754 static const CGEN_OPERAND_INSTANCE fmt_mulu_ops[] = {
755 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
756 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
757 { INPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
758 { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
759 { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
760 { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
761 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
762 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
763 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
764 { 0 }
765 };
766
767 static const CGEN_OPERAND_INSTANCE fmt_mulh_ops[] = {
768 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
769 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
770 { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
771 { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
772 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
773 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
774 { 0 }
775 };
776
777 static const CGEN_OPERAND_INSTANCE fmt_lsl_ops[] = {
778 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
779 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
780 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
781 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
782 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
783 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
784 { 0 }
785 };
786
787 static const CGEN_OPERAND_INSTANCE fmt_lsli_ops[] = {
788 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
789 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
790 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
791 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
792 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
793 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
794 { 0 }
795 };
796
797 static const CGEN_OPERAND_INSTANCE fmt_ldi8_ops[] = {
798 { INPUT, "i8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I8), 0, 0 },
799 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
800 { 0 }
801 };
802
803 static const CGEN_OPERAND_INSTANCE fmt_ldi20_ops[] = {
804 { INPUT, "i20", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I20), 0, 0 },
805 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
806 { 0 }
807 };
808
809 static const CGEN_OPERAND_INSTANCE fmt_ldi32_ops[] = {
810 { INPUT, "i32", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I32), 0, 0 },
811 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
812 { 0 }
813 };
814
815 static const CGEN_OPERAND_INSTANCE fmt_ld_ops[] = {
816 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
817 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
818 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
819 { 0 }
820 };
821
822 static const CGEN_OPERAND_INSTANCE fmt_lduh_ops[] = {
823 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
824 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
825 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
826 { 0 }
827 };
828
829 static const CGEN_OPERAND_INSTANCE fmt_ldub_ops[] = {
830 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
831 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
832 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
833 { 0 }
834 };
835
836 static const CGEN_OPERAND_INSTANCE fmt_ldr13_ops[] = {
837 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
838 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
839 { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
840 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
841 { 0 }
842 };
843
844 static const CGEN_OPERAND_INSTANCE fmt_ldr13uh_ops[] = {
845 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
846 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
847 { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
848 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
849 { 0 }
850 };
851
852 static const CGEN_OPERAND_INSTANCE fmt_ldr13ub_ops[] = {
853 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
854 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
855 { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
856 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
857 { 0 }
858 };
859
860 static const CGEN_OPERAND_INSTANCE fmt_ldr14_ops[] = {
861 { INPUT, "disp10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP10), 0, 0 },
862 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
863 { INPUT, "h_memory_add__VM_disp10_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
864 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
865 { 0 }
866 };
867
868 static const CGEN_OPERAND_INSTANCE fmt_ldr14uh_ops[] = {
869 { INPUT, "disp9", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP9), 0, 0 },
870 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
871 { INPUT, "h_memory_add__VM_disp9_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
872 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
873 { 0 }
874 };
875
876 static const CGEN_OPERAND_INSTANCE fmt_ldr14ub_ops[] = {
877 { INPUT, "disp8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP8), 0, 0 },
878 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
879 { INPUT, "h_memory_add__VM_disp8_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
880 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
881 { 0 }
882 };
883
884 static const CGEN_OPERAND_INSTANCE fmt_ldr15_ops[] = {
885 { INPUT, "udisp6", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UDISP6), 0, 0 },
886 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
887 { INPUT, "h_memory_add__VM_udisp6_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
888 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
889 { 0 }
890 };
891
892 static const CGEN_OPERAND_INSTANCE fmt_ldr15gr_ops[] = {
893 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
894 { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
895 { INPUT, "f_Ri", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, 0, 0, COND_REF },
896 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
897 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
898 { 0 }
899 };
900
901 static const CGEN_OPERAND_INSTANCE fmt_ldr15dr_ops[] = {
902 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
903 { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
904 { OUTPUT, "Rs2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS2), 0, 0 },
905 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
906 { 0 }
907 };
908
909 static const CGEN_OPERAND_INSTANCE fmt_ldr15ps_ops[] = {
910 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
911 { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
912 { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
913 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
914 { 0 }
915 };
916
917 static const CGEN_OPERAND_INSTANCE fmt_st_ops[] = {
918 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
919 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
920 { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
921 { 0 }
922 };
923
924 static const CGEN_OPERAND_INSTANCE fmt_sth_ops[] = {
925 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
926 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
927 { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
928 { 0 }
929 };
930
931 static const CGEN_OPERAND_INSTANCE fmt_stb_ops[] = {
932 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
933 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
934 { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
935 { 0 }
936 };
937
938 static const CGEN_OPERAND_INSTANCE fmt_str13_ops[] = {
939 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
940 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
941 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
942 { OUTPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
943 { 0 }
944 };
945
946 static const CGEN_OPERAND_INSTANCE fmt_str13h_ops[] = {
947 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
948 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
949 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
950 { OUTPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
951 { 0 }
952 };
953
954 static const CGEN_OPERAND_INSTANCE fmt_str13b_ops[] = {
955 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
956 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
957 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
958 { OUTPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
959 { 0 }
960 };
961
962 static const CGEN_OPERAND_INSTANCE fmt_str14_ops[] = {
963 { INPUT, "disp10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP10), 0, 0 },
964 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
965 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
966 { OUTPUT, "h_memory_add__VM_disp10_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
967 { 0 }
968 };
969
970 static const CGEN_OPERAND_INSTANCE fmt_str14h_ops[] = {
971 { INPUT, "disp9", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP9), 0, 0 },
972 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
973 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
974 { OUTPUT, "h_memory_add__VM_disp9_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
975 { 0 }
976 };
977
978 static const CGEN_OPERAND_INSTANCE fmt_str14b_ops[] = {
979 { INPUT, "disp8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP8), 0, 0 },
980 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
981 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
982 { OUTPUT, "h_memory_add__VM_disp8_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
983 { 0 }
984 };
985
986 static const CGEN_OPERAND_INSTANCE fmt_str15_ops[] = {
987 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
988 { INPUT, "udisp6", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UDISP6), 0, 0 },
989 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
990 { OUTPUT, "h_memory_add__VM_reg__VM_h_gr_15_udisp6", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
991 { 0 }
992 };
993
994 static const CGEN_OPERAND_INSTANCE fmt_str15gr_ops[] = {
995 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
996 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
997 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
998 { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
999 { 0 }
1000 };
1001
1002 static const CGEN_OPERAND_INSTANCE fmt_str15dr_ops[] = {
1003 { INPUT, "Rs2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS2), 0, 0 },
1004 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1005 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1006 { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1007 { 0 }
1008 };
1009
1010 static const CGEN_OPERAND_INSTANCE fmt_str15ps_ops[] = {
1011 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1012 { INPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1013 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1014 { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1015 { 0 }
1016 };
1017
1018 static const CGEN_OPERAND_INSTANCE fmt_mov_ops[] = {
1019 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
1020 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1021 { 0 }
1022 };
1023
1024 static const CGEN_OPERAND_INSTANCE fmt_movdr_ops[] = {
1025 { INPUT, "Rs1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS1), 0, 0 },
1026 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1027 { 0 }
1028 };
1029
1030 static const CGEN_OPERAND_INSTANCE fmt_movps_ops[] = {
1031 { INPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1032 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1033 { 0 }
1034 };
1035
1036 static const CGEN_OPERAND_INSTANCE fmt_mov2dr_ops[] = {
1037 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1038 { OUTPUT, "Rs1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS1), 0, 0 },
1039 { 0 }
1040 };
1041
1042 static const CGEN_OPERAND_INSTANCE fmt_mov2ps_ops[] = {
1043 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1044 { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, 0 },
1045 { 0 }
1046 };
1047
1048 static const CGEN_OPERAND_INSTANCE fmt_jmp_ops[] = {
1049 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1050 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1051 { 0 }
1052 };
1053
1054 static const CGEN_OPERAND_INSTANCE fmt_callr_ops[] = {
1055 { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1056 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1057 { OUTPUT, "h_dr_1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 1, 0 },
1058 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1059 { 0 }
1060 };
1061
1062 static const CGEN_OPERAND_INSTANCE fmt_call_ops[] = {
1063 { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1064 { INPUT, "label12", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL12), 0, 0 },
1065 { OUTPUT, "h_dr_1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 1, 0 },
1066 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1067 { 0 }
1068 };
1069
1070 static const CGEN_OPERAND_INSTANCE fmt_ret_ops[] = {
1071 { INPUT, "h_dr_1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 1, 0 },
1072 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
1073 { 0 }
1074 };
1075
1076 static const CGEN_OPERAND_INSTANCE fmt_int_ops[] = {
1077 { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1078 { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_SI, & OP_ENT (U8), 0, 0 },
1079 { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, 0 },
1080 { OUTPUT, "ibit", & HW_ENT (HW_H_IBIT), CGEN_MODE_BI, 0, 0, 0 },
1081 { OUTPUT, "sbit", & HW_ENT (HW_H_SBIT), CGEN_MODE_BI, 0, 0, 0 },
1082 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1083 { 0 }
1084 };
1085
1086 static const CGEN_OPERAND_INSTANCE fmt_inte_ops[] = {
1087 { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1088 { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, 0 },
1089 { OUTPUT, "ibit", & HW_ENT (HW_H_IBIT), CGEN_MODE_BI, 0, 0, 0 },
1090 { OUTPUT, "ilm", & HW_ENT (HW_H_ILM), CGEN_MODE_UQI, 0, 0, 0 },
1091 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
1092 { 0 }
1093 };
1094
1095 static const CGEN_OPERAND_INSTANCE fmt_reti_ops[] = {
1096 { INPUT, "sbit", & HW_ENT (HW_H_SBIT), CGEN_MODE_BI, 0, 0, 0 },
1097 { INPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, COND_REF },
1098 { INPUT, "h_memory_reg__VM_h_dr_2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_USI, 0, 0, COND_REF },
1099 { INPUT, "h_dr_3", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 3, COND_REF },
1100 { INPUT, "h_memory_reg__VM_h_dr_3", & HW_ENT (HW_H_MEMORY), CGEN_MODE_USI, 0, 0, COND_REF },
1101 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1102 { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, COND_REF },
1103 { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, COND_REF },
1104 { OUTPUT, "h_dr_3", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 3, COND_REF },
1105 { 0 }
1106 };
1107
1108 static const CGEN_OPERAND_INSTANCE fmt_bra_ops[] = {
1109 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1110 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1111 { 0 }
1112 };
1113
1114 static const CGEN_OPERAND_INSTANCE fmt_beq_ops[] = {
1115 { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1116 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1117 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1118 { 0 }
1119 };
1120
1121 static const CGEN_OPERAND_INSTANCE fmt_bc_ops[] = {
1122 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
1123 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1124 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1125 { 0 }
1126 };
1127
1128 static const CGEN_OPERAND_INSTANCE fmt_bn_ops[] = {
1129 { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
1130 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1131 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1132 { 0 }
1133 };
1134
1135 static const CGEN_OPERAND_INSTANCE fmt_bv_ops[] = {
1136 { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
1137 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1138 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1139 { 0 }
1140 };
1141
1142 static const CGEN_OPERAND_INSTANCE fmt_blt_ops[] = {
1143 { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
1144 { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
1145 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1146 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1147 { 0 }
1148 };
1149
1150 static const CGEN_OPERAND_INSTANCE fmt_ble_ops[] = {
1151 { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
1152 { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
1153 { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1154 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1155 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1156 { 0 }
1157 };
1158
1159 static const CGEN_OPERAND_INSTANCE fmt_bls_ops[] = {
1160 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
1161 { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1162 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1163 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1164 { 0 }
1165 };
1166
1167 static const CGEN_OPERAND_INSTANCE fmt_dmovr13_ops[] = {
1168 { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1169 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1170 { OUTPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1171 { 0 }
1172 };
1173
1174 static const CGEN_OPERAND_INSTANCE fmt_dmovr13h_ops[] = {
1175 { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1176 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1177 { OUTPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1178 { 0 }
1179 };
1180
1181 static const CGEN_OPERAND_INSTANCE fmt_dmovr13b_ops[] = {
1182 { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1183 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1184 { OUTPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1185 { 0 }
1186 };
1187
1188 static const CGEN_OPERAND_INSTANCE fmt_dmovr13pi_ops[] = {
1189 { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1190 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1191 { INPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1192 { OUTPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1193 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1194 { 0 }
1195 };
1196
1197 static const CGEN_OPERAND_INSTANCE fmt_dmovr13pih_ops[] = {
1198 { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1199 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1200 { INPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1201 { OUTPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1202 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1203 { 0 }
1204 };
1205
1206 static const CGEN_OPERAND_INSTANCE fmt_dmovr13pib_ops[] = {
1207 { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1208 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1209 { INPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1210 { OUTPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1211 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1212 { 0 }
1213 };
1214
1215 static const CGEN_OPERAND_INSTANCE fmt_dmovr15pi_ops[] = {
1216 { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1217 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1218 { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1219 { OUTPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1220 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1221 { 0 }
1222 };
1223
1224 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13_ops[] = {
1225 { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1226 { INPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1227 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1228 { 0 }
1229 };
1230
1231 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13h_ops[] = {
1232 { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1233 { INPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1234 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1235 { 0 }
1236 };
1237
1238 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13b_ops[] = {
1239 { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1240 { INPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1241 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1242 { 0 }
1243 };
1244
1245 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13pi_ops[] = {
1246 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1247 { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1248 { INPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1249 { OUTPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1250 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1251 { 0 }
1252 };
1253
1254 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13pih_ops[] = {
1255 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1256 { INPUT, "dir9", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR9), 0, 0 },
1257 { INPUT, "h_memory_dir9", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1258 { OUTPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
1259 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1260 { 0 }
1261 };
1262
1263 static const CGEN_OPERAND_INSTANCE fmt_dmov2r13pib_ops[] = {
1264 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1265 { INPUT, "dir8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR8), 0, 0 },
1266 { INPUT, "h_memory_dir8", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1267 { OUTPUT, "h_memory_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
1268 { OUTPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
1269 { 0 }
1270 };
1271
1272 static const CGEN_OPERAND_INSTANCE fmt_dmov2r15pd_ops[] = {
1273 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1274 { INPUT, "dir10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (DIR10), 0, 0 },
1275 { INPUT, "h_memory_dir10", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1276 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1277 { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1278 { 0 }
1279 };
1280
1281 static const CGEN_OPERAND_INSTANCE fmt_andccr_ops[] = {
1282 { INPUT, "ccr", & HW_ENT (HW_H_CCR), CGEN_MODE_UQI, 0, 0, 0 },
1283 { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U8), 0, 0 },
1284 { OUTPUT, "ccr", & HW_ENT (HW_H_CCR), CGEN_MODE_UQI, 0, 0, 0 },
1285 { 0 }
1286 };
1287
1288 static const CGEN_OPERAND_INSTANCE fmt_stilm_ops[] = {
1289 { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U8), 0, 0 },
1290 { OUTPUT, "ilm", & HW_ENT (HW_H_ILM), CGEN_MODE_UQI, 0, 0, 0 },
1291 { 0 }
1292 };
1293
1294 static const CGEN_OPERAND_INSTANCE fmt_addsp_ops[] = {
1295 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1296 { INPUT, "s10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (S10), 0, 0 },
1297 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1298 { 0 }
1299 };
1300
1301 static const CGEN_OPERAND_INSTANCE fmt_extsb_ops[] = {
1302 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (RI), 0, 0 },
1303 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1304 { 0 }
1305 };
1306
1307 static const CGEN_OPERAND_INSTANCE fmt_extub_ops[] = {
1308 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_UQI, & OP_ENT (RI), 0, 0 },
1309 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1310 { 0 }
1311 };
1312
1313 static const CGEN_OPERAND_INSTANCE fmt_extsh_ops[] = {
1314 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (RI), 0, 0 },
1315 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1316 { 0 }
1317 };
1318
1319 static const CGEN_OPERAND_INSTANCE fmt_extuh_ops[] = {
1320 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_UHI, & OP_ENT (RI), 0, 0 },
1321 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1322 { 0 }
1323 };
1324
1325 static const CGEN_OPERAND_INSTANCE fmt_stm0_ops[] = {
1326 { INPUT, "reglist_low", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (REGLIST_LOW), 0, 0 },
1327 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1328 { INPUT, "h_gr_0", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 0, COND_REF },
1329 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, COND_REF },
1330 { OUTPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, COND_REF },
1331 { 0 }
1332 };
1333
1334 static const CGEN_OPERAND_INSTANCE fmt_enter_ops[] = {
1335 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1336 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1337 { INPUT, "u10", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U10), 0, 0 },
1338 { OUTPUT, "h_memory_tmp", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1339 { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1340 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1341 { 0 }
1342 };
1343
1344 static const CGEN_OPERAND_INSTANCE fmt_leave_ops[] = {
1345 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1346 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1347 { INPUT, "h_memory_sub__VM_reg__VM_h_gr_15_const__WI_4", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
1348 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
1349 { OUTPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
1350 { 0 }
1351 };
1352
1353 static const CGEN_OPERAND_INSTANCE fmt_xchb_ops[] = {
1354 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1355 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
1356 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
1357 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
1358 { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
1359 { 0 }
1360 };
1361
1362 #undef INPUT
1363 #undef OUTPUT
1364 #undef COND_REF
1365
1366 /* Instruction formats. */
1367
1368 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
1369
1370 static const CGEN_IFMT fmt_add = {
1371 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1372 };
1373
1374 static const CGEN_IFMT fmt_addi = {
1375 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1376 };
1377
1378 static const CGEN_IFMT fmt_add2 = {
1379 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1380 };
1381
1382 static const CGEN_IFMT fmt_addc = {
1383 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1384 };
1385
1386 static const CGEN_IFMT fmt_addn = {
1387 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1388 };
1389
1390 static const CGEN_IFMT fmt_addni = {
1391 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1392 };
1393
1394 static const CGEN_IFMT fmt_addn2 = {
1395 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1396 };
1397
1398 static const CGEN_IFMT fmt_cmp = {
1399 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1400 };
1401
1402 static const CGEN_IFMT fmt_cmpi = {
1403 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1404 };
1405
1406 static const CGEN_IFMT fmt_cmp2 = {
1407 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1408 };
1409
1410 static const CGEN_IFMT fmt_and = {
1411 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1412 };
1413
1414 static const CGEN_IFMT fmt_andm = {
1415 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1416 };
1417
1418 static const CGEN_IFMT fmt_andh = {
1419 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1420 };
1421
1422 static const CGEN_IFMT fmt_andb = {
1423 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1424 };
1425
1426 static const CGEN_IFMT fmt_bandl = {
1427 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1428 };
1429
1430 static const CGEN_IFMT fmt_btstl = {
1431 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1432 };
1433
1434 static const CGEN_IFMT fmt_mul = {
1435 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1436 };
1437
1438 static const CGEN_IFMT fmt_mulu = {
1439 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1440 };
1441
1442 static const CGEN_IFMT fmt_mulh = {
1443 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1444 };
1445
1446 static const CGEN_IFMT fmt_div0s = {
1447 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1448 };
1449
1450 static const CGEN_IFMT fmt_div3 = {
1451 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1452 };
1453
1454 static const CGEN_IFMT fmt_lsl = {
1455 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1456 };
1457
1458 static const CGEN_IFMT fmt_lsli = {
1459 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1460 };
1461
1462 static const CGEN_IFMT fmt_ldi8 = {
1463 16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
1464 };
1465
1466 static const CGEN_IFMT fmt_ldi20 = {
1467 16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
1468 };
1469
1470 static const CGEN_IFMT fmt_ldi32 = {
1471 16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1472 };
1473
1474 static const CGEN_IFMT fmt_ld = {
1475 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1476 };
1477
1478 static const CGEN_IFMT fmt_lduh = {
1479 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1480 };
1481
1482 static const CGEN_IFMT fmt_ldub = {
1483 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1484 };
1485
1486 static const CGEN_IFMT fmt_ldr13 = {
1487 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1488 };
1489
1490 static const CGEN_IFMT fmt_ldr13uh = {
1491 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1492 };
1493
1494 static const CGEN_IFMT fmt_ldr13ub = {
1495 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1496 };
1497
1498 static const CGEN_IFMT fmt_ldr14 = {
1499 16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
1500 };
1501
1502 static const CGEN_IFMT fmt_ldr14uh = {
1503 16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
1504 };
1505
1506 static const CGEN_IFMT fmt_ldr14ub = {
1507 16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
1508 };
1509
1510 static const CGEN_IFMT fmt_ldr15 = {
1511 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
1512 };
1513
1514 static const CGEN_IFMT fmt_ldr15gr = {
1515 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1516 };
1517
1518 static const CGEN_IFMT fmt_ldr15dr = {
1519 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
1520 };
1521
1522 static const CGEN_IFMT fmt_ldr15ps = {
1523 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1524 };
1525
1526 static const CGEN_IFMT fmt_st = {
1527 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1528 };
1529
1530 static const CGEN_IFMT fmt_sth = {
1531 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1532 };
1533
1534 static const CGEN_IFMT fmt_stb = {
1535 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1536 };
1537
1538 static const CGEN_IFMT fmt_str13 = {
1539 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1540 };
1541
1542 static const CGEN_IFMT fmt_str13h = {
1543 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1544 };
1545
1546 static const CGEN_IFMT fmt_str13b = {
1547 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1548 };
1549
1550 static const CGEN_IFMT fmt_str14 = {
1551 16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
1552 };
1553
1554 static const CGEN_IFMT fmt_str14h = {
1555 16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
1556 };
1557
1558 static const CGEN_IFMT fmt_str14b = {
1559 16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
1560 };
1561
1562 static const CGEN_IFMT fmt_str15 = {
1563 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
1564 };
1565
1566 static const CGEN_IFMT fmt_str15gr = {
1567 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1568 };
1569
1570 static const CGEN_IFMT fmt_str15dr = {
1571 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
1572 };
1573
1574 static const CGEN_IFMT fmt_str15ps = {
1575 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1576 };
1577
1578 static const CGEN_IFMT fmt_mov = {
1579 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1580 };
1581
1582 static const CGEN_IFMT fmt_movdr = {
1583 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
1584 };
1585
1586 static const CGEN_IFMT fmt_movps = {
1587 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1588 };
1589
1590 static const CGEN_IFMT fmt_mov2dr = {
1591 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
1592 };
1593
1594 static const CGEN_IFMT fmt_mov2ps = {
1595 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1596 };
1597
1598 static const CGEN_IFMT fmt_jmp = {
1599 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1600 };
1601
1602 static const CGEN_IFMT fmt_callr = {
1603 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1604 };
1605
1606 static const CGEN_IFMT fmt_call = {
1607 16, 16, 0xf800, { F (F_OP1), F (F_OP5), F (F_REL12), 0 }
1608 };
1609
1610 static const CGEN_IFMT fmt_ret = {
1611 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1612 };
1613
1614 static const CGEN_IFMT fmt_int = {
1615 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1616 };
1617
1618 static const CGEN_IFMT fmt_inte = {
1619 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1620 };
1621
1622 static const CGEN_IFMT fmt_reti = {
1623 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1624 };
1625
1626 static const CGEN_IFMT fmt_bra = {
1627 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1628 };
1629
1630 static const CGEN_IFMT fmt_beq = {
1631 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1632 };
1633
1634 static const CGEN_IFMT fmt_bc = {
1635 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1636 };
1637
1638 static const CGEN_IFMT fmt_bn = {
1639 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1640 };
1641
1642 static const CGEN_IFMT fmt_bv = {
1643 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1644 };
1645
1646 static const CGEN_IFMT fmt_blt = {
1647 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1648 };
1649
1650 static const CGEN_IFMT fmt_ble = {
1651 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1652 };
1653
1654 static const CGEN_IFMT fmt_bls = {
1655 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1656 };
1657
1658 static const CGEN_IFMT fmt_dmovr13 = {
1659 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1660 };
1661
1662 static const CGEN_IFMT fmt_dmovr13h = {
1663 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1664 };
1665
1666 static const CGEN_IFMT fmt_dmovr13b = {
1667 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1668 };
1669
1670 static const CGEN_IFMT fmt_dmovr13pi = {
1671 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1672 };
1673
1674 static const CGEN_IFMT fmt_dmovr13pih = {
1675 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1676 };
1677
1678 static const CGEN_IFMT fmt_dmovr13pib = {
1679 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1680 };
1681
1682 static const CGEN_IFMT fmt_dmovr15pi = {
1683 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1684 };
1685
1686 static const CGEN_IFMT fmt_dmov2r13 = {
1687 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1688 };
1689
1690 static const CGEN_IFMT fmt_dmov2r13h = {
1691 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1692 };
1693
1694 static const CGEN_IFMT fmt_dmov2r13b = {
1695 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1696 };
1697
1698 static const CGEN_IFMT fmt_dmov2r13pi = {
1699 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1700 };
1701
1702 static const CGEN_IFMT fmt_dmov2r13pih = {
1703 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1704 };
1705
1706 static const CGEN_IFMT fmt_dmov2r13pib = {
1707 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1708 };
1709
1710 static const CGEN_IFMT fmt_dmov2r15pd = {
1711 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1712 };
1713
1714 static const CGEN_IFMT fmt_ldres = {
1715 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1716 };
1717
1718 static const CGEN_IFMT fmt_copop = {
1719 16, 32, 0xfff0, { F (F_OP1), F (F_CCC), F (F_OP2), F (F_OP3), F (F_CRJ), F (F_U4C), F (F_CRI), 0 }
1720 };
1721
1722 static const CGEN_IFMT fmt_copld = {
1723 16, 32, 0xfff0, { F (F_OP1), F (F_CCC), F (F_OP2), F (F_OP3), F (F_RJC), F (F_U4C), F (F_CRI), 0 }
1724 };
1725
1726 static const CGEN_IFMT fmt_copst = {
1727 16, 32, 0xfff0, { F (F_OP1), F (F_CCC), F (F_OP2), F (F_OP3), F (F_CRJ), F (F_U4C), F (F_RIC), 0 }
1728 };
1729
1730 static const CGEN_IFMT fmt_andccr = {
1731 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1732 };
1733
1734 static const CGEN_IFMT fmt_stilm = {
1735 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1736 };
1737
1738 static const CGEN_IFMT fmt_addsp = {
1739 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_S10), 0 }
1740 };
1741
1742 static const CGEN_IFMT fmt_extsb = {
1743 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1744 };
1745
1746 static const CGEN_IFMT fmt_extub = {
1747 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1748 };
1749
1750 static const CGEN_IFMT fmt_extsh = {
1751 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1752 };
1753
1754 static const CGEN_IFMT fmt_extuh = {
1755 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1756 };
1757
1758 static const CGEN_IFMT fmt_ldm0 = {
1759 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW), 0 }
1760 };
1761
1762 static const CGEN_IFMT fmt_ldm1 = {
1763 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_HI), 0 }
1764 };
1765
1766 static const CGEN_IFMT fmt_stm0 = {
1767 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW), 0 }
1768 };
1769
1770 static const CGEN_IFMT fmt_enter = {
1771 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U10), 0 }
1772 };
1773
1774 static const CGEN_IFMT fmt_leave = {
1775 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1776 };
1777
1778 static const CGEN_IFMT fmt_xchb = {
1779 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1780 };
1781
1782 #undef F
1783
1784 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
1785 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1786 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1787
1788 /* The instruction table.
1789 This is currently non-static because the simulator accesses it
1790 directly. */
1791
1792 const CGEN_INSN fr30_cgen_insn_table_entries[MAX_INSNS] =
1793 {
1794 /* Special null first entry.
1795 A `num' value of zero is thus invalid.
1796 Also, the special `invalid' insn resides here. */
1797 { { 0 }, 0 },
1798 /* add $Rj,$Ri */
1799 {
1800 { 1, 1, 1, 1 },
1801 FR30_INSN_ADD, "add", "add",
1802 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1803 & fmt_add, { 0xa600 },
1804 (PTR) & fmt_add_ops[0],
1805 { 0, 0, { 0 } }
1806 },
1807 /* add $u4,$Ri */
1808 {
1809 { 1, 1, 1, 1 },
1810 FR30_INSN_ADDI, "addi", "add",
1811 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1812 & fmt_addi, { 0xa400 },
1813 (PTR) & fmt_addi_ops[0],
1814 { 0, 0, { 0 } }
1815 },
1816 /* add2 $m4,$Ri */
1817 {
1818 { 1, 1, 1, 1 },
1819 FR30_INSN_ADD2, "add2", "add2",
1820 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1821 & fmt_add2, { 0xa500 },
1822 (PTR) & fmt_add2_ops[0],
1823 { 0, 0, { 0 } }
1824 },
1825 /* addc $Rj,$Ri */
1826 {
1827 { 1, 1, 1, 1 },
1828 FR30_INSN_ADDC, "addc", "addc",
1829 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1830 & fmt_addc, { 0xa700 },
1831 (PTR) & fmt_addc_ops[0],
1832 { 0, 0, { 0 } }
1833 },
1834 /* addn $Rj,$Ri */
1835 {
1836 { 1, 1, 1, 1 },
1837 FR30_INSN_ADDN, "addn", "addn",
1838 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1839 & fmt_addn, { 0xa200 },
1840 (PTR) & fmt_addn_ops[0],
1841 { 0, 0, { 0 } }
1842 },
1843 /* addn $u4,$Ri */
1844 {
1845 { 1, 1, 1, 1 },
1846 FR30_INSN_ADDNI, "addni", "addn",
1847 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1848 & fmt_addni, { 0xa000 },
1849 (PTR) & fmt_addni_ops[0],
1850 { 0, 0, { 0 } }
1851 },
1852 /* addn2 $m4,$Ri */
1853 {
1854 { 1, 1, 1, 1 },
1855 FR30_INSN_ADDN2, "addn2", "addn2",
1856 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1857 & fmt_addn2, { 0xa100 },
1858 (PTR) & fmt_addn2_ops[0],
1859 { 0, 0, { 0 } }
1860 },
1861 /* sub $Rj,$Ri */
1862 {
1863 { 1, 1, 1, 1 },
1864 FR30_INSN_SUB, "sub", "sub",
1865 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1866 & fmt_add, { 0xac00 },
1867 (PTR) & fmt_add_ops[0],
1868 { 0, 0, { 0 } }
1869 },
1870 /* subc $Rj,$Ri */
1871 {
1872 { 1, 1, 1, 1 },
1873 FR30_INSN_SUBC, "subc", "subc",
1874 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1875 & fmt_addc, { 0xad00 },
1876 (PTR) & fmt_addc_ops[0],
1877 { 0, 0, { 0 } }
1878 },
1879 /* subn $Rj,$Ri */
1880 {
1881 { 1, 1, 1, 1 },
1882 FR30_INSN_SUBN, "subn", "subn",
1883 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1884 & fmt_addn, { 0xae00 },
1885 (PTR) & fmt_addn_ops[0],
1886 { 0, 0, { 0 } }
1887 },
1888 /* cmp $Rj,$Ri */
1889 {
1890 { 1, 1, 1, 1 },
1891 FR30_INSN_CMP, "cmp", "cmp",
1892 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1893 & fmt_cmp, { 0xaa00 },
1894 (PTR) & fmt_cmp_ops[0],
1895 { 0, 0, { 0 } }
1896 },
1897 /* cmp $u4,$Ri */
1898 {
1899 { 1, 1, 1, 1 },
1900 FR30_INSN_CMPI, "cmpi", "cmp",
1901 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1902 & fmt_cmpi, { 0xa800 },
1903 (PTR) & fmt_cmpi_ops[0],
1904 { 0, 0, { 0 } }
1905 },
1906 /* cmp2 $m4,$Ri */
1907 {
1908 { 1, 1, 1, 1 },
1909 FR30_INSN_CMP2, "cmp2", "cmp2",
1910 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1911 & fmt_cmp2, { 0xa900 },
1912 (PTR) & fmt_cmp2_ops[0],
1913 { 0, 0, { 0 } }
1914 },
1915 /* and $Rj,$Ri */
1916 {
1917 { 1, 1, 1, 1 },
1918 FR30_INSN_AND, "and", "and",
1919 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1920 & fmt_and, { 0x8200 },
1921 (PTR) & fmt_and_ops[0],
1922 { 0, 0, { 0 } }
1923 },
1924 /* or $Rj,$Ri */
1925 {
1926 { 1, 1, 1, 1 },
1927 FR30_INSN_OR, "or", "or",
1928 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1929 & fmt_and, { 0x9200 },
1930 (PTR) & fmt_and_ops[0],
1931 { 0, 0, { 0 } }
1932 },
1933 /* eor $Rj,$Ri */
1934 {
1935 { 1, 1, 1, 1 },
1936 FR30_INSN_EOR, "eor", "eor",
1937 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1938 & fmt_and, { 0x9a00 },
1939 (PTR) & fmt_and_ops[0],
1940 { 0, 0, { 0 } }
1941 },
1942 /* and $Rj,@$Ri */
1943 {
1944 { 1, 1, 1, 1 },
1945 FR30_INSN_ANDM, "andm", "and",
1946 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1947 & fmt_andm, { 0x8400 },
1948 (PTR) & fmt_andm_ops[0],
1949 { 0, 0, { 0 } }
1950 },
1951 /* andh $Rj,@$Ri */
1952 {
1953 { 1, 1, 1, 1 },
1954 FR30_INSN_ANDH, "andh", "andh",
1955 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1956 & fmt_andh, { 0x8500 },
1957 (PTR) & fmt_andh_ops[0],
1958 { 0, 0, { 0 } }
1959 },
1960 /* andb $Rj,@$Ri */
1961 {
1962 { 1, 1, 1, 1 },
1963 FR30_INSN_ANDB, "andb", "andb",
1964 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1965 & fmt_andb, { 0x8600 },
1966 (PTR) & fmt_andb_ops[0],
1967 { 0, 0, { 0 } }
1968 },
1969 /* or $Rj,@$Ri */
1970 {
1971 { 1, 1, 1, 1 },
1972 FR30_INSN_ORM, "orm", "or",
1973 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1974 & fmt_andm, { 0x9400 },
1975 (PTR) & fmt_andm_ops[0],
1976 { 0, 0, { 0 } }
1977 },
1978 /* orh $Rj,@$Ri */
1979 {
1980 { 1, 1, 1, 1 },
1981 FR30_INSN_ORH, "orh", "orh",
1982 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1983 & fmt_andh, { 0x9500 },
1984 (PTR) & fmt_andh_ops[0],
1985 { 0, 0, { 0 } }
1986 },
1987 /* orb $Rj,@$Ri */
1988 {
1989 { 1, 1, 1, 1 },
1990 FR30_INSN_ORB, "orb", "orb",
1991 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1992 & fmt_andb, { 0x9600 },
1993 (PTR) & fmt_andb_ops[0],
1994 { 0, 0, { 0 } }
1995 },
1996 /* eor $Rj,@$Ri */
1997 {
1998 { 1, 1, 1, 1 },
1999 FR30_INSN_EORM, "eorm", "eor",
2000 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2001 & fmt_andm, { 0x9c00 },
2002 (PTR) & fmt_andm_ops[0],
2003 { 0, 0, { 0 } }
2004 },
2005 /* eorh $Rj,@$Ri */
2006 {
2007 { 1, 1, 1, 1 },
2008 FR30_INSN_EORH, "eorh", "eorh",
2009 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2010 & fmt_andh, { 0x9d00 },
2011 (PTR) & fmt_andh_ops[0],
2012 { 0, 0, { 0 } }
2013 },
2014 /* eorb $Rj,@$Ri */
2015 {
2016 { 1, 1, 1, 1 },
2017 FR30_INSN_EORB, "eorb", "eorb",
2018 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
2019 & fmt_andb, { 0x9e00 },
2020 (PTR) & fmt_andb_ops[0],
2021 { 0, 0, { 0 } }
2022 },
2023 /* bandl $u4,@$Ri */
2024 {
2025 { 1, 1, 1, 1 },
2026 FR30_INSN_BANDL, "bandl", "bandl",
2027 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2028 & fmt_bandl, { 0x8000 },
2029 (PTR) & fmt_bandl_ops[0],
2030 { 0, 0, { 0 } }
2031 },
2032 /* borl $u4,@$Ri */
2033 {
2034 { 1, 1, 1, 1 },
2035 FR30_INSN_BORL, "borl", "borl",
2036 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2037 & fmt_bandl, { 0x9000 },
2038 (PTR) & fmt_bandl_ops[0],
2039 { 0, 0, { 0 } }
2040 },
2041 /* beorl $u4,@$Ri */
2042 {
2043 { 1, 1, 1, 1 },
2044 FR30_INSN_BEORL, "beorl", "beorl",
2045 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2046 & fmt_bandl, { 0x9800 },
2047 (PTR) & fmt_bandl_ops[0],
2048 { 0, 0, { 0 } }
2049 },
2050 /* bandh $u4,@$Ri */
2051 {
2052 { 1, 1, 1, 1 },
2053 FR30_INSN_BANDH, "bandh", "bandh",
2054 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2055 & fmt_bandl, { 0x8100 },
2056 (PTR) & fmt_bandl_ops[0],
2057 { 0, 0, { 0 } }
2058 },
2059 /* borh $u4,@$Ri */
2060 {
2061 { 1, 1, 1, 1 },
2062 FR30_INSN_BORH, "borh", "borh",
2063 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2064 & fmt_bandl, { 0x9100 },
2065 (PTR) & fmt_bandl_ops[0],
2066 { 0, 0, { 0 } }
2067 },
2068 /* beorh $u4,@$Ri */
2069 {
2070 { 1, 1, 1, 1 },
2071 FR30_INSN_BEORH, "beorh", "beorh",
2072 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2073 & fmt_bandl, { 0x9900 },
2074 (PTR) & fmt_bandl_ops[0],
2075 { 0, 0, { 0 } }
2076 },
2077 /* btstl $u4,@$Ri */
2078 {
2079 { 1, 1, 1, 1 },
2080 FR30_INSN_BTSTL, "btstl", "btstl",
2081 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2082 & fmt_btstl, { 0x8800 },
2083 (PTR) & fmt_btstl_ops[0],
2084 { 0, 0, { 0 } }
2085 },
2086 /* btsth $u4,@$Ri */
2087 {
2088 { 1, 1, 1, 1 },
2089 FR30_INSN_BTSTH, "btsth", "btsth",
2090 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
2091 & fmt_btstl, { 0x8900 },
2092 (PTR) & fmt_btstl_ops[0],
2093 { 0, 0, { 0 } }
2094 },
2095 /* mul $Rj,$Ri */
2096 {
2097 { 1, 1, 1, 1 },
2098 FR30_INSN_MUL, "mul", "mul",
2099 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2100 & fmt_mul, { 0xaf00 },
2101 (PTR) & fmt_mul_ops[0],
2102 { 0, 0, { 0 } }
2103 },
2104 /* mulu $Rj,$Ri */
2105 {
2106 { 1, 1, 1, 1 },
2107 FR30_INSN_MULU, "mulu", "mulu",
2108 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2109 & fmt_mulu, { 0xab00 },
2110 (PTR) & fmt_mulu_ops[0],
2111 { 0, 0, { 0 } }
2112 },
2113 /* mulh $Rj,$Ri */
2114 {
2115 { 1, 1, 1, 1 },
2116 FR30_INSN_MULH, "mulh", "mulh",
2117 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2118 & fmt_mulh, { 0xbf00 },
2119 (PTR) & fmt_mulh_ops[0],
2120 { 0, 0, { 0 } }
2121 },
2122 /* muluh $Rj,$Ri */
2123 {
2124 { 1, 1, 1, 1 },
2125 FR30_INSN_MULUH, "muluh", "muluh",
2126 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2127 & fmt_mulh, { 0xbb00 },
2128 (PTR) & fmt_mulh_ops[0],
2129 { 0, 0, { 0 } }
2130 },
2131 /* div0s $Ri */
2132 {
2133 { 1, 1, 1, 1 },
2134 FR30_INSN_DIV0S, "div0s", "div0s",
2135 { { MNEM, ' ', OP (RI), 0 } },
2136 & fmt_div0s, { 0x9740 },
2137 (PTR) 0,
2138 { 0, 0, { 0 } }
2139 },
2140 /* div0u $Ri */
2141 {
2142 { 1, 1, 1, 1 },
2143 FR30_INSN_DIV0U, "div0u", "div0u",
2144 { { MNEM, ' ', OP (RI), 0 } },
2145 & fmt_div0s, { 0x9750 },
2146 (PTR) 0,
2147 { 0, 0, { 0 } }
2148 },
2149 /* div1 $Ri */
2150 {
2151 { 1, 1, 1, 1 },
2152 FR30_INSN_DIV1, "div1", "div1",
2153 { { MNEM, ' ', OP (RI), 0 } },
2154 & fmt_div0s, { 0x9760 },
2155 (PTR) 0,
2156 { 0, 0, { 0 } }
2157 },
2158 /* div2 $Ri */
2159 {
2160 { 1, 1, 1, 1 },
2161 FR30_INSN_DIV2, "div2", "div2",
2162 { { MNEM, ' ', OP (RI), 0 } },
2163 & fmt_div0s, { 0x9770 },
2164 (PTR) 0,
2165 { 0, 0, { 0 } }
2166 },
2167 /* div3 */
2168 {
2169 { 1, 1, 1, 1 },
2170 FR30_INSN_DIV3, "div3", "div3",
2171 { { MNEM, 0 } },
2172 & fmt_div3, { 0x9f60 },
2173 (PTR) 0,
2174 { 0, 0, { 0 } }
2175 },
2176 /* div4s */
2177 {
2178 { 1, 1, 1, 1 },
2179 FR30_INSN_DIV4S, "div4s", "div4s",
2180 { { MNEM, 0 } },
2181 & fmt_div3, { 0x9f70 },
2182 (PTR) 0,
2183 { 0, 0, { 0 } }
2184 },
2185 /* lsl $Rj,$Ri */
2186 {
2187 { 1, 1, 1, 1 },
2188 FR30_INSN_LSL, "lsl", "lsl",
2189 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2190 & fmt_lsl, { 0xb600 },
2191 (PTR) & fmt_lsl_ops[0],
2192 { 0, 0, { 0 } }
2193 },
2194 /* lsl $u4,$Ri */
2195 {
2196 { 1, 1, 1, 1 },
2197 FR30_INSN_LSLI, "lsli", "lsl",
2198 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2199 & fmt_lsli, { 0xb400 },
2200 (PTR) & fmt_lsli_ops[0],
2201 { 0, 0, { 0 } }
2202 },
2203 /* lsl2 $u4,$Ri */
2204 {
2205 { 1, 1, 1, 1 },
2206 FR30_INSN_LSL2, "lsl2", "lsl2",
2207 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2208 & fmt_lsli, { 0xb500 },
2209 (PTR) & fmt_lsli_ops[0],
2210 { 0, 0, { 0 } }
2211 },
2212 /* lsr $Rj,$Ri */
2213 {
2214 { 1, 1, 1, 1 },
2215 FR30_INSN_LSR, "lsr", "lsr",
2216 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2217 & fmt_lsl, { 0xb200 },
2218 (PTR) & fmt_lsl_ops[0],
2219 { 0, 0, { 0 } }
2220 },
2221 /* lsr $u4,$Ri */
2222 {
2223 { 1, 1, 1, 1 },
2224 FR30_INSN_LSRI, "lsri", "lsr",
2225 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2226 & fmt_lsli, { 0xb000 },
2227 (PTR) & fmt_lsli_ops[0],
2228 { 0, 0, { 0 } }
2229 },
2230 /* lsr2 $u4,$Ri */
2231 {
2232 { 1, 1, 1, 1 },
2233 FR30_INSN_LSR2, "lsr2", "lsr2",
2234 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2235 & fmt_lsli, { 0xb100 },
2236 (PTR) & fmt_lsli_ops[0],
2237 { 0, 0, { 0 } }
2238 },
2239 /* asr $Rj,$Ri */
2240 {
2241 { 1, 1, 1, 1 },
2242 FR30_INSN_ASR, "asr", "asr",
2243 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2244 & fmt_lsl, { 0xba00 },
2245 (PTR) & fmt_lsl_ops[0],
2246 { 0, 0, { 0 } }
2247 },
2248 /* asr $u4,$Ri */
2249 {
2250 { 1, 1, 1, 1 },
2251 FR30_INSN_ASRI, "asri", "asr",
2252 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2253 & fmt_lsli, { 0xb800 },
2254 (PTR) & fmt_lsli_ops[0],
2255 { 0, 0, { 0 } }
2256 },
2257 /* asr2 $u4,$Ri */
2258 {
2259 { 1, 1, 1, 1 },
2260 FR30_INSN_ASR2, "asr2", "asr2",
2261 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
2262 & fmt_lsli, { 0xb900 },
2263 (PTR) & fmt_lsli_ops[0],
2264 { 0, 0, { 0 } }
2265 },
2266 /* ldi:8 $i8,$Ri */
2267 {
2268 { 1, 1, 1, 1 },
2269 FR30_INSN_LDI8, "ldi8", "ldi:8",
2270 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
2271 & fmt_ldi8, { 0xc000 },
2272 (PTR) & fmt_ldi8_ops[0],
2273 { 0, 0, { 0 } }
2274 },
2275 /* ldi:20 $i20,$Ri */
2276 {
2277 { 1, 1, 1, 1 },
2278 FR30_INSN_LDI20, "ldi20", "ldi:20",
2279 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
2280 & fmt_ldi20, { 0x9b00 },
2281 (PTR) & fmt_ldi20_ops[0],
2282 { 0, 0|A(NOT_IN_DELAY_SLOT), { 0 } }
2283 },
2284 /* ldi:32 $i32,$Ri */
2285 {
2286 { 1, 1, 1, 1 },
2287 FR30_INSN_LDI32, "ldi32", "ldi:32",
2288 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
2289 & fmt_ldi32, { 0x9f80 },
2290 (PTR) & fmt_ldi32_ops[0],
2291 { 0, 0, { 0 } }
2292 },
2293 /* ld @$Rj,$Ri */
2294 {
2295 { 1, 1, 1, 1 },
2296 FR30_INSN_LD, "ld", "ld",
2297 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2298 & fmt_ld, { 0x400 },
2299 (PTR) & fmt_ld_ops[0],
2300 { 0, 0, { 0 } }
2301 },
2302 /* lduh @$Rj,$Ri */
2303 {
2304 { 1, 1, 1, 1 },
2305 FR30_INSN_LDUH, "lduh", "lduh",
2306 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2307 & fmt_lduh, { 0x500 },
2308 (PTR) & fmt_lduh_ops[0],
2309 { 0, 0, { 0 } }
2310 },
2311 /* ldub @$Rj,$Ri */
2312 {
2313 { 1, 1, 1, 1 },
2314 FR30_INSN_LDUB, "ldub", "ldub",
2315 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2316 & fmt_ldub, { 0x600 },
2317 (PTR) & fmt_ldub_ops[0],
2318 { 0, 0, { 0 } }
2319 },
2320 /* ld @($R13,$Rj),$Ri */
2321 {
2322 { 1, 1, 1, 1 },
2323 FR30_INSN_LDR13, "ldr13", "ld",
2324 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
2325 & fmt_ldr13, { 0x0 },
2326 (PTR) & fmt_ldr13_ops[0],
2327 { 0, 0, { 0 } }
2328 },
2329 /* lduh @($R13,$Rj),$Ri */
2330 {
2331 { 1, 1, 1, 1 },
2332 FR30_INSN_LDR13UH, "ldr13uh", "lduh",
2333 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
2334 & fmt_ldr13uh, { 0x100 },
2335 (PTR) & fmt_ldr13uh_ops[0],
2336 { 0, 0, { 0 } }
2337 },
2338 /* ldub @($R13,$Rj),$Ri */
2339 {
2340 { 1, 1, 1, 1 },
2341 FR30_INSN_LDR13UB, "ldr13ub", "ldub",
2342 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
2343 & fmt_ldr13ub, { 0x200 },
2344 (PTR) & fmt_ldr13ub_ops[0],
2345 { 0, 0, { 0 } }
2346 },
2347 /* ld @($R14,$disp10),$Ri */
2348 {
2349 { 1, 1, 1, 1 },
2350 FR30_INSN_LDR14, "ldr14", "ld",
2351 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
2352 & fmt_ldr14, { 0x2000 },
2353 (PTR) & fmt_ldr14_ops[0],
2354 { 0, 0, { 0 } }
2355 },
2356 /* lduh @($R14,$disp9),$Ri */
2357 {
2358 { 1, 1, 1, 1 },
2359 FR30_INSN_LDR14UH, "ldr14uh", "lduh",
2360 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
2361 & fmt_ldr14uh, { 0x4000 },
2362 (PTR) & fmt_ldr14uh_ops[0],
2363 { 0, 0, { 0 } }
2364 },
2365 /* ldub @($R14,$disp8),$Ri */
2366 {
2367 { 1, 1, 1, 1 },
2368 FR30_INSN_LDR14UB, "ldr14ub", "ldub",
2369 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
2370 & fmt_ldr14ub, { 0x6000 },
2371 (PTR) & fmt_ldr14ub_ops[0],
2372 { 0, 0, { 0 } }
2373 },
2374 /* ld @($R15,$udisp6),$Ri */
2375 {
2376 { 1, 1, 1, 1 },
2377 FR30_INSN_LDR15, "ldr15", "ld",
2378 { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
2379 & fmt_ldr15, { 0x300 },
2380 (PTR) & fmt_ldr15_ops[0],
2381 { 0, 0, { 0 } }
2382 },
2383 /* ld @$R15+,$Ri */
2384 {
2385 { 1, 1, 1, 1 },
2386 FR30_INSN_LDR15GR, "ldr15gr", "ld",
2387 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
2388 & fmt_ldr15gr, { 0x700 },
2389 (PTR) & fmt_ldr15gr_ops[0],
2390 { 0, 0, { 0 } }
2391 },
2392 /* ld @$R15+,$Rs2 */
2393 {
2394 { 1, 1, 1, 1 },
2395 FR30_INSN_LDR15DR, "ldr15dr", "ld",
2396 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
2397 & fmt_ldr15dr, { 0x780 },
2398 (PTR) & fmt_ldr15dr_ops[0],
2399 { 0, 0, { 0 } }
2400 },
2401 /* ld @$R15+,$ps */
2402 {
2403 { 1, 1, 1, 1 },
2404 FR30_INSN_LDR15PS, "ldr15ps", "ld",
2405 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
2406 & fmt_ldr15ps, { 0x790 },
2407 (PTR) & fmt_ldr15ps_ops[0],
2408 { 0, 0, { 0 } }
2409 },
2410 /* st $Ri,@$Rj */
2411 {
2412 { 1, 1, 1, 1 },
2413 FR30_INSN_ST, "st", "st",
2414 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
2415 & fmt_st, { 0x1400 },
2416 (PTR) & fmt_st_ops[0],
2417 { 0, 0, { 0 } }
2418 },
2419 /* sth $Ri,@$Rj */
2420 {
2421 { 1, 1, 1, 1 },
2422 FR30_INSN_STH, "sth", "sth",
2423 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
2424 & fmt_sth, { 0x1500 },
2425 (PTR) & fmt_sth_ops[0],
2426 { 0, 0, { 0 } }
2427 },
2428 /* stb $Ri,@$Rj */
2429 {
2430 { 1, 1, 1, 1 },
2431 FR30_INSN_STB, "stb", "stb",
2432 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
2433 & fmt_stb, { 0x1600 },
2434 (PTR) & fmt_stb_ops[0],
2435 { 0, 0, { 0 } }
2436 },
2437 /* st $Ri,@($R13,$Rj) */
2438 {
2439 { 1, 1, 1, 1 },
2440 FR30_INSN_STR13, "str13", "st",
2441 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
2442 & fmt_str13, { 0x1000 },
2443 (PTR) & fmt_str13_ops[0],
2444 { 0, 0, { 0 } }
2445 },
2446 /* sth $Ri,@($R13,$Rj) */
2447 {
2448 { 1, 1, 1, 1 },
2449 FR30_INSN_STR13H, "str13h", "sth",
2450 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
2451 & fmt_str13h, { 0x1100 },
2452 (PTR) & fmt_str13h_ops[0],
2453 { 0, 0, { 0 } }
2454 },
2455 /* stb $Ri,@($R13,$Rj) */
2456 {
2457 { 1, 1, 1, 1 },
2458 FR30_INSN_STR13B, "str13b", "stb",
2459 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
2460 & fmt_str13b, { 0x1200 },
2461 (PTR) & fmt_str13b_ops[0],
2462 { 0, 0, { 0 } }
2463 },
2464 /* st $Ri,@($R14,$disp10) */
2465 {
2466 { 1, 1, 1, 1 },
2467 FR30_INSN_STR14, "str14", "st",
2468 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
2469 & fmt_str14, { 0x3000 },
2470 (PTR) & fmt_str14_ops[0],
2471 { 0, 0, { 0 } }
2472 },
2473 /* sth $Ri,@($R14,$disp9) */
2474 {
2475 { 1, 1, 1, 1 },
2476 FR30_INSN_STR14H, "str14h", "sth",
2477 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
2478 & fmt_str14h, { 0x5000 },
2479 (PTR) & fmt_str14h_ops[0],
2480 { 0, 0, { 0 } }
2481 },
2482 /* stb $Ri,@($R14,$disp8) */
2483 {
2484 { 1, 1, 1, 1 },
2485 FR30_INSN_STR14B, "str14b", "stb",
2486 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
2487 & fmt_str14b, { 0x7000 },
2488 (PTR) & fmt_str14b_ops[0],
2489 { 0, 0, { 0 } }
2490 },
2491 /* st $Ri,@($R15,$udisp6) */
2492 {
2493 { 1, 1, 1, 1 },
2494 FR30_INSN_STR15, "str15", "st",
2495 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
2496 & fmt_str15, { 0x1300 },
2497 (PTR) & fmt_str15_ops[0],
2498 { 0, 0, { 0 } }
2499 },
2500 /* st $Ri,@-$R15 */
2501 {
2502 { 1, 1, 1, 1 },
2503 FR30_INSN_STR15GR, "str15gr", "st",
2504 { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
2505 & fmt_str15gr, { 0x1700 },
2506 (PTR) & fmt_str15gr_ops[0],
2507 { 0, 0, { 0 } }
2508 },
2509 /* st $Rs2,@-$R15 */
2510 {
2511 { 1, 1, 1, 1 },
2512 FR30_INSN_STR15DR, "str15dr", "st",
2513 { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
2514 & fmt_str15dr, { 0x1780 },
2515 (PTR) & fmt_str15dr_ops[0],
2516 { 0, 0, { 0 } }
2517 },
2518 /* st $ps,@-$R15 */
2519 {
2520 { 1, 1, 1, 1 },
2521 FR30_INSN_STR15PS, "str15ps", "st",
2522 { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
2523 & fmt_str15ps, { 0x1790 },
2524 (PTR) & fmt_str15ps_ops[0],
2525 { 0, 0, { 0 } }
2526 },
2527 /* mov $Rj,$Ri */
2528 {
2529 { 1, 1, 1, 1 },
2530 FR30_INSN_MOV, "mov", "mov",
2531 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2532 & fmt_mov, { 0x8b00 },
2533 (PTR) & fmt_mov_ops[0],
2534 { 0, 0, { 0 } }
2535 },
2536 /* mov $Rs1,$Ri */
2537 {
2538 { 1, 1, 1, 1 },
2539 FR30_INSN_MOVDR, "movdr", "mov",
2540 { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
2541 & fmt_movdr, { 0xb700 },
2542 (PTR) & fmt_movdr_ops[0],
2543 { 0, 0, { 0 } }
2544 },
2545 /* mov $ps,$Ri */
2546 {
2547 { 1, 1, 1, 1 },
2548 FR30_INSN_MOVPS, "movps", "mov",
2549 { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
2550 & fmt_movps, { 0x1710 },
2551 (PTR) & fmt_movps_ops[0],
2552 { 0, 0, { 0 } }
2553 },
2554 /* mov $Ri,$Rs1 */
2555 {
2556 { 1, 1, 1, 1 },
2557 FR30_INSN_MOV2DR, "mov2dr", "mov",
2558 { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
2559 & fmt_mov2dr, { 0xb300 },
2560 (PTR) & fmt_mov2dr_ops[0],
2561 { 0, 0, { 0 } }
2562 },
2563 /* mov $Ri,$ps */
2564 {
2565 { 1, 1, 1, 1 },
2566 FR30_INSN_MOV2PS, "mov2ps", "mov",
2567 { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
2568 & fmt_mov2ps, { 0x710 },
2569 (PTR) & fmt_mov2ps_ops[0],
2570 { 0, 0, { 0 } }
2571 },
2572 /* jmp @$Ri */
2573 {
2574 { 1, 1, 1, 1 },
2575 FR30_INSN_JMP, "jmp", "jmp",
2576 { { MNEM, ' ', '@', OP (RI), 0 } },
2577 & fmt_jmp, { 0x9700 },
2578 (PTR) & fmt_jmp_ops[0],
2579 { 0, 0|A(UNCOND_CTI), { 0 } }
2580 },
2581 /* jmp:d @$Ri */
2582 {
2583 { 1, 1, 1, 1 },
2584 FR30_INSN_JMPD, "jmpd", "jmp:d",
2585 { { MNEM, ' ', '@', OP (RI), 0 } },
2586 & fmt_jmp, { 0x9f00 },
2587 (PTR) & fmt_jmp_ops[0],
2588 { 0, 0|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT)|A(UNCOND_CTI), { 0 } }
2589 },
2590 /* call @$Ri */
2591 {
2592 { 1, 1, 1, 1 },
2593 FR30_INSN_CALLR, "callr", "call",
2594 { { MNEM, ' ', '@', OP (RI), 0 } },
2595 & fmt_callr, { 0x9710 },
2596 (PTR) & fmt_callr_ops[0],
2597 { 0, 0|A(UNCOND_CTI), { 0 } }
2598 },
2599 /* call:d @$Ri */
2600 {
2601 { 1, 1, 1, 1 },
2602 FR30_INSN_CALLRD, "callrd", "call:d",
2603 { { MNEM, ' ', '@', OP (RI), 0 } },
2604 & fmt_callr, { 0x9f10 },
2605 (PTR) & fmt_callr_ops[0],
2606 { 0, 0|A(DELAY_SLOT)|A(UNCOND_CTI), { 0 } }
2607 },
2608 /* call $label12 */
2609 {
2610 { 1, 1, 1, 1 },
2611 FR30_INSN_CALL, "call", "call",
2612 { { MNEM, ' ', OP (LABEL12), 0 } },
2613 & fmt_call, { 0xd000 },
2614 (PTR) & fmt_call_ops[0],
2615 { 0, 0|A(UNCOND_CTI), { 0 } }
2616 },
2617 /* call:d $label12 */
2618 {
2619 { 1, 1, 1, 1 },
2620 FR30_INSN_CALLD, "calld", "call:d",
2621 { { MNEM, ' ', OP (LABEL12), 0 } },
2622 & fmt_call, { 0xd800 },
2623 (PTR) & fmt_call_ops[0],
2624 { 0, 0|A(DELAY_SLOT)|A(UNCOND_CTI), { 0 } }
2625 },
2626 /* ret */
2627 {
2628 { 1, 1, 1, 1 },
2629 FR30_INSN_RET, "ret", "ret",
2630 { { MNEM, 0 } },
2631 & fmt_ret, { 0x9720 },
2632 (PTR) & fmt_ret_ops[0],
2633 { 0, 0|A(UNCOND_CTI), { 0 } }
2634 },
2635 /* ret:d */
2636 {
2637 { 1, 1, 1, 1 },
2638 FR30_INSN_RET_D, "ret:d", "ret:d",
2639 { { MNEM, 0 } },
2640 & fmt_ret, { 0x9f20 },
2641 (PTR) & fmt_ret_ops[0],
2642 { 0, 0|A(DELAY_SLOT)|A(UNCOND_CTI), { 0 } }
2643 },
2644 /* int $u8 */
2645 {
2646 { 1, 1, 1, 1 },
2647 FR30_INSN_INT, "int", "int",
2648 { { MNEM, ' ', OP (U8), 0 } },
2649 & fmt_int, { 0x1f00 },
2650 (PTR) & fmt_int_ops[0],
2651 { 0, 0|A(UNCOND_CTI), { 0 } }
2652 },
2653 /* inte */
2654 {
2655 { 1, 1, 1, 1 },
2656 FR30_INSN_INTE, "inte", "inte",
2657 { { MNEM, 0 } },
2658 & fmt_inte, { 0x9f30 },
2659 (PTR) & fmt_inte_ops[0],
2660 { 0, 0|A(UNCOND_CTI), { 0 } }
2661 },
2662 /* reti */
2663 {
2664 { 1, 1, 1, 1 },
2665 FR30_INSN_RETI, "reti", "reti",
2666 { { MNEM, 0 } },
2667 & fmt_reti, { 0x9730 },
2668 (PTR) & fmt_reti_ops[0],
2669 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2670 },
2671 /* bra $label9 */
2672 {
2673 { 1, 1, 1, 1 },
2674 FR30_INSN_BRA, "bra", "bra",
2675 { { MNEM, ' ', OP (LABEL9), 0 } },
2676 & fmt_bra, { 0xe000 },
2677 (PTR) & fmt_bra_ops[0],
2678 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2679 },
2680 /* bra:d $label9 */
2681 {
2682 { 1, 1, 1, 1 },
2683 FR30_INSN_BRAD, "brad", "bra:d",
2684 { { MNEM, ' ', OP (LABEL9), 0 } },
2685 & fmt_bra, { 0xf000 },
2686 (PTR) & fmt_bra_ops[0],
2687 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2688 },
2689 /* bno $label9 */
2690 {
2691 { 1, 1, 1, 1 },
2692 FR30_INSN_BNO, "bno", "bno",
2693 { { MNEM, ' ', OP (LABEL9), 0 } },
2694 & fmt_bra, { 0xe100 },
2695 (PTR) & fmt_bra_ops[0],
2696 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2697 },
2698 /* bno:d $label9 */
2699 {
2700 { 1, 1, 1, 1 },
2701 FR30_INSN_BNOD, "bnod", "bno:d",
2702 { { MNEM, ' ', OP (LABEL9), 0 } },
2703 & fmt_bra, { 0xf100 },
2704 (PTR) & fmt_bra_ops[0],
2705 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2706 },
2707 /* beq $label9 */
2708 {
2709 { 1, 1, 1, 1 },
2710 FR30_INSN_BEQ, "beq", "beq",
2711 { { MNEM, ' ', OP (LABEL9), 0 } },
2712 & fmt_beq, { 0xe200 },
2713 (PTR) & fmt_beq_ops[0],
2714 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2715 },
2716 /* beq:d $label9 */
2717 {
2718 { 1, 1, 1, 1 },
2719 FR30_INSN_BEQD, "beqd", "beq:d",
2720 { { MNEM, ' ', OP (LABEL9), 0 } },
2721 & fmt_beq, { 0xf200 },
2722 (PTR) & fmt_beq_ops[0],
2723 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2724 },
2725 /* bne $label9 */
2726 {
2727 { 1, 1, 1, 1 },
2728 FR30_INSN_BNE, "bne", "bne",
2729 { { MNEM, ' ', OP (LABEL9), 0 } },
2730 & fmt_beq, { 0xe300 },
2731 (PTR) & fmt_beq_ops[0],
2732 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2733 },
2734 /* bne:d $label9 */
2735 {
2736 { 1, 1, 1, 1 },
2737 FR30_INSN_BNED, "bned", "bne:d",
2738 { { MNEM, ' ', OP (LABEL9), 0 } },
2739 & fmt_beq, { 0xf300 },
2740 (PTR) & fmt_beq_ops[0],
2741 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2742 },
2743 /* bc $label9 */
2744 {
2745 { 1, 1, 1, 1 },
2746 FR30_INSN_BC, "bc", "bc",
2747 { { MNEM, ' ', OP (LABEL9), 0 } },
2748 & fmt_bc, { 0xe400 },
2749 (PTR) & fmt_bc_ops[0],
2750 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2751 },
2752 /* bc:d $label9 */
2753 {
2754 { 1, 1, 1, 1 },
2755 FR30_INSN_BCD, "bcd", "bc:d",
2756 { { MNEM, ' ', OP (LABEL9), 0 } },
2757 & fmt_bc, { 0xf400 },
2758 (PTR) & fmt_bc_ops[0],
2759 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2760 },
2761 /* bnc $label9 */
2762 {
2763 { 1, 1, 1, 1 },
2764 FR30_INSN_BNC, "bnc", "bnc",
2765 { { MNEM, ' ', OP (LABEL9), 0 } },
2766 & fmt_bc, { 0xe500 },
2767 (PTR) & fmt_bc_ops[0],
2768 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2769 },
2770 /* bnc:d $label9 */
2771 {
2772 { 1, 1, 1, 1 },
2773 FR30_INSN_BNCD, "bncd", "bnc:d",
2774 { { MNEM, ' ', OP (LABEL9), 0 } },
2775 & fmt_bc, { 0xf500 },
2776 (PTR) & fmt_bc_ops[0],
2777 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2778 },
2779 /* bn $label9 */
2780 {
2781 { 1, 1, 1, 1 },
2782 FR30_INSN_BN, "bn", "bn",
2783 { { MNEM, ' ', OP (LABEL9), 0 } },
2784 & fmt_bn, { 0xe600 },
2785 (PTR) & fmt_bn_ops[0],
2786 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2787 },
2788 /* bn:d $label9 */
2789 {
2790 { 1, 1, 1, 1 },
2791 FR30_INSN_BND, "bnd", "bn:d",
2792 { { MNEM, ' ', OP (LABEL9), 0 } },
2793 & fmt_bn, { 0xf600 },
2794 (PTR) & fmt_bn_ops[0],
2795 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2796 },
2797 /* bp $label9 */
2798 {
2799 { 1, 1, 1, 1 },
2800 FR30_INSN_BP, "bp", "bp",
2801 { { MNEM, ' ', OP (LABEL9), 0 } },
2802 & fmt_bn, { 0xe700 },
2803 (PTR) & fmt_bn_ops[0],
2804 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2805 },
2806 /* bp:d $label9 */
2807 {
2808 { 1, 1, 1, 1 },
2809 FR30_INSN_BPD, "bpd", "bp:d",
2810 { { MNEM, ' ', OP (LABEL9), 0 } },
2811 & fmt_bn, { 0xf700 },
2812 (PTR) & fmt_bn_ops[0],
2813 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2814 },
2815 /* bv $label9 */
2816 {
2817 { 1, 1, 1, 1 },
2818 FR30_INSN_BV, "bv", "bv",
2819 { { MNEM, ' ', OP (LABEL9), 0 } },
2820 & fmt_bv, { 0xe800 },
2821 (PTR) & fmt_bv_ops[0],
2822 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2823 },
2824 /* bv:d $label9 */
2825 {
2826 { 1, 1, 1, 1 },
2827 FR30_INSN_BVD, "bvd", "bv:d",
2828 { { MNEM, ' ', OP (LABEL9), 0 } },
2829 & fmt_bv, { 0xf800 },
2830 (PTR) & fmt_bv_ops[0],
2831 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2832 },
2833 /* bnv $label9 */
2834 {
2835 { 1, 1, 1, 1 },
2836 FR30_INSN_BNV, "bnv", "bnv",
2837 { { MNEM, ' ', OP (LABEL9), 0 } },
2838 & fmt_bv, { 0xe900 },
2839 (PTR) & fmt_bv_ops[0],
2840 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2841 },
2842 /* bnv:d $label9 */
2843 {
2844 { 1, 1, 1, 1 },
2845 FR30_INSN_BNVD, "bnvd", "bnv:d",
2846 { { MNEM, ' ', OP (LABEL9), 0 } },
2847 & fmt_bv, { 0xf900 },
2848 (PTR) & fmt_bv_ops[0],
2849 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2850 },
2851 /* blt $label9 */
2852 {
2853 { 1, 1, 1, 1 },
2854 FR30_INSN_BLT, "blt", "blt",
2855 { { MNEM, ' ', OP (LABEL9), 0 } },
2856 & fmt_blt, { 0xea00 },
2857 (PTR) & fmt_blt_ops[0],
2858 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2859 },
2860 /* blt:d $label9 */
2861 {
2862 { 1, 1, 1, 1 },
2863 FR30_INSN_BLTD, "bltd", "blt:d",
2864 { { MNEM, ' ', OP (LABEL9), 0 } },
2865 & fmt_blt, { 0xfa00 },
2866 (PTR) & fmt_blt_ops[0],
2867 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2868 },
2869 /* bge $label9 */
2870 {
2871 { 1, 1, 1, 1 },
2872 FR30_INSN_BGE, "bge", "bge",
2873 { { MNEM, ' ', OP (LABEL9), 0 } },
2874 & fmt_blt, { 0xeb00 },
2875 (PTR) & fmt_blt_ops[0],
2876 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2877 },
2878 /* bge:d $label9 */
2879 {
2880 { 1, 1, 1, 1 },
2881 FR30_INSN_BGED, "bged", "bge:d",
2882 { { MNEM, ' ', OP (LABEL9), 0 } },
2883 & fmt_blt, { 0xfb00 },
2884 (PTR) & fmt_blt_ops[0],
2885 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2886 },
2887 /* ble $label9 */
2888 {
2889 { 1, 1, 1, 1 },
2890 FR30_INSN_BLE, "ble", "ble",
2891 { { MNEM, ' ', OP (LABEL9), 0 } },
2892 & fmt_ble, { 0xec00 },
2893 (PTR) & fmt_ble_ops[0],
2894 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2895 },
2896 /* ble:d $label9 */
2897 {
2898 { 1, 1, 1, 1 },
2899 FR30_INSN_BLED, "bled", "ble:d",
2900 { { MNEM, ' ', OP (LABEL9), 0 } },
2901 & fmt_ble, { 0xfc00 },
2902 (PTR) & fmt_ble_ops[0],
2903 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2904 },
2905 /* bgt $label9 */
2906 {
2907 { 1, 1, 1, 1 },
2908 FR30_INSN_BGT, "bgt", "bgt",
2909 { { MNEM, ' ', OP (LABEL9), 0 } },
2910 & fmt_ble, { 0xed00 },
2911 (PTR) & fmt_ble_ops[0],
2912 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2913 },
2914 /* bgt:d $label9 */
2915 {
2916 { 1, 1, 1, 1 },
2917 FR30_INSN_BGTD, "bgtd", "bgt:d",
2918 { { MNEM, ' ', OP (LABEL9), 0 } },
2919 & fmt_ble, { 0xfd00 },
2920 (PTR) & fmt_ble_ops[0],
2921 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2922 },
2923 /* bls $label9 */
2924 {
2925 { 1, 1, 1, 1 },
2926 FR30_INSN_BLS, "bls", "bls",
2927 { { MNEM, ' ', OP (LABEL9), 0 } },
2928 & fmt_bls, { 0xee00 },
2929 (PTR) & fmt_bls_ops[0],
2930 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2931 },
2932 /* bls:d $label9 */
2933 {
2934 { 1, 1, 1, 1 },
2935 FR30_INSN_BLSD, "blsd", "bls:d",
2936 { { MNEM, ' ', OP (LABEL9), 0 } },
2937 & fmt_bls, { 0xfe00 },
2938 (PTR) & fmt_bls_ops[0],
2939 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2940 },
2941 /* bhi $label9 */
2942 {
2943 { 1, 1, 1, 1 },
2944 FR30_INSN_BHI, "bhi", "bhi",
2945 { { MNEM, ' ', OP (LABEL9), 0 } },
2946 & fmt_bls, { 0xef00 },
2947 (PTR) & fmt_bls_ops[0],
2948 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2949 },
2950 /* bhi:d $label9 */
2951 {
2952 { 1, 1, 1, 1 },
2953 FR30_INSN_BHID, "bhid", "bhi:d",
2954 { { MNEM, ' ', OP (LABEL9), 0 } },
2955 & fmt_bls, { 0xff00 },
2956 (PTR) & fmt_bls_ops[0],
2957 { 0, 0|A(COND_CTI)|A(DELAY_SLOT)|A(COND_CTI), { 0 } }
2958 },
2959 /* dmov $R13,@$dir10 */
2960 {
2961 { 1, 1, 1, 1 },
2962 FR30_INSN_DMOVR13, "dmovr13", "dmov",
2963 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
2964 & fmt_dmovr13, { 0x1800 },
2965 (PTR) & fmt_dmovr13_ops[0],
2966 { 0, 0, { 0 } }
2967 },
2968 /* dmovh $R13,@$dir9 */
2969 {
2970 { 1, 1, 1, 1 },
2971 FR30_INSN_DMOVR13H, "dmovr13h", "dmovh",
2972 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
2973 & fmt_dmovr13h, { 0x1900 },
2974 (PTR) & fmt_dmovr13h_ops[0],
2975 { 0, 0, { 0 } }
2976 },
2977 /* dmovb $R13,@$dir8 */
2978 {
2979 { 1, 1, 1, 1 },
2980 FR30_INSN_DMOVR13B, "dmovr13b", "dmovb",
2981 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
2982 & fmt_dmovr13b, { 0x1a00 },
2983 (PTR) & fmt_dmovr13b_ops[0],
2984 { 0, 0, { 0 } }
2985 },
2986 /* dmov @$R13+,@$dir10 */
2987 {
2988 { 1, 1, 1, 1 },
2989 FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov",
2990 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
2991 & fmt_dmovr13pi, { 0x1c00 },
2992 (PTR) & fmt_dmovr13pi_ops[0],
2993 { 0, 0, { 0 } }
2994 },
2995 /* dmovh @$R13+,@$dir9 */
2996 {
2997 { 1, 1, 1, 1 },
2998 FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh",
2999 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
3000 & fmt_dmovr13pih, { 0x1d00 },
3001 (PTR) & fmt_dmovr13pih_ops[0],
3002 { 0, 0, { 0 } }
3003 },
3004 /* dmovb @$R13+,@$dir8 */
3005 {
3006 { 1, 1, 1, 1 },
3007 FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb",
3008 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
3009 & fmt_dmovr13pib, { 0x1e00 },
3010 (PTR) & fmt_dmovr13pib_ops[0],
3011 { 0, 0, { 0 } }
3012 },
3013 /* dmov @$R15+,@$dir10 */
3014 {
3015 { 1, 1, 1, 1 },
3016 FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov",
3017 { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
3018 & fmt_dmovr15pi, { 0x1b00 },
3019 (PTR) & fmt_dmovr15pi_ops[0],
3020 { 0, 0, { 0 } }
3021 },
3022 /* dmov @$dir10,$R13 */
3023 {
3024 { 1, 1, 1, 1 },
3025 FR30_INSN_DMOV2R13, "dmov2r13", "dmov",
3026 { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
3027 & fmt_dmov2r13, { 0x800 },
3028 (PTR) & fmt_dmov2r13_ops[0],
3029 { 0, 0, { 0 } }
3030 },
3031 /* dmovh @$dir9,$R13 */
3032 {
3033 { 1, 1, 1, 1 },
3034 FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh",
3035 { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
3036 & fmt_dmov2r13h, { 0x900 },
3037 (PTR) & fmt_dmov2r13h_ops[0],
3038 { 0, 0, { 0 } }
3039 },
3040 /* dmovb @$dir8,$R13 */
3041 {
3042 { 1, 1, 1, 1 },
3043 FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb",
3044 { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
3045 & fmt_dmov2r13b, { 0xa00 },
3046 (PTR) & fmt_dmov2r13b_ops[0],
3047 { 0, 0, { 0 } }
3048 },
3049 /* dmov @$dir10,@$R13+ */
3050 {
3051 { 1, 1, 1, 1 },
3052 FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov",
3053 { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
3054 & fmt_dmov2r13pi, { 0xc00 },
3055 (PTR) & fmt_dmov2r13pi_ops[0],
3056 { 0, 0, { 0 } }
3057 },
3058 /* dmovh @$dir9,@$R13+ */
3059 {
3060 { 1, 1, 1, 1 },
3061 FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh",
3062 { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
3063 & fmt_dmov2r13pih, { 0xd00 },
3064 (PTR) & fmt_dmov2r13pih_ops[0],
3065 { 0, 0, { 0 } }
3066 },
3067 /* dmovb @$dir8,@$R13+ */
3068 {
3069 { 1, 1, 1, 1 },
3070 FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb",
3071 { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
3072 & fmt_dmov2r13pib, { 0xe00 },
3073 (PTR) & fmt_dmov2r13pib_ops[0],
3074 { 0, 0, { 0 } }
3075 },
3076 /* dmov @$dir10,@-$R15 */
3077 {
3078 { 1, 1, 1, 1 },
3079 FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov",
3080 { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
3081 & fmt_dmov2r15pd, { 0xb00 },
3082 (PTR) & fmt_dmov2r15pd_ops[0],
3083 { 0, 0, { 0 } }
3084 },
3085 /* ldres @$Ri+,$u4 */
3086 {
3087 { 1, 1, 1, 1 },
3088 FR30_INSN_LDRES, "ldres", "ldres",
3089 { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
3090 & fmt_ldres, { 0xbc00 },
3091 (PTR) 0,
3092 { 0, 0, { 0 } }
3093 },
3094 /* stres $u4,@$Ri+ */
3095 {
3096 { 1, 1, 1, 1 },
3097 FR30_INSN_STRES, "stres", "stres",
3098 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
3099 & fmt_ldres, { 0xbd00 },
3100 (PTR) 0,
3101 { 0, 0, { 0 } }
3102 },
3103 /* copop $u4c,$ccc,$CRj,$CRi */
3104 {
3105 { 1, 1, 1, 1 },
3106 FR30_INSN_COPOP, "copop", "copop",
3107 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
3108 & fmt_copop, { 0x9fc0 },
3109 (PTR) 0,
3110 { 0, 0, { 0 } }
3111 },
3112 /* copld $u4c,$ccc,$Rjc,$CRi */
3113 {
3114 { 1, 1, 1, 1 },
3115 FR30_INSN_COPLD, "copld", "copld",
3116 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
3117 & fmt_copld, { 0x9fd0 },
3118 (PTR) 0,
3119 { 0, 0, { 0 } }
3120 },
3121 /* copst $u4c,$ccc,$CRj,$Ric */
3122 {
3123 { 1, 1, 1, 1 },
3124 FR30_INSN_COPST, "copst", "copst",
3125 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
3126 & fmt_copst, { 0x9fe0 },
3127 (PTR) 0,
3128 { 0, 0, { 0 } }
3129 },
3130 /* copsv $u4c,$ccc,$CRj,$Ric */
3131 {
3132 { 1, 1, 1, 1 },
3133 FR30_INSN_COPSV, "copsv", "copsv",
3134 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
3135 & fmt_copst, { 0x9ff0 },
3136 (PTR) 0,
3137 { 0, 0, { 0 } }
3138 },
3139 /* nop */
3140 {
3141 { 1, 1, 1, 1 },
3142 FR30_INSN_NOP, "nop", "nop",
3143 { { MNEM, 0 } },
3144 & fmt_div3, { 0x9fa0 },
3145 (PTR) 0,
3146 { 0, 0, { 0 } }
3147 },
3148 /* andccr $u8 */
3149 {
3150 { 1, 1, 1, 1 },
3151 FR30_INSN_ANDCCR, "andccr", "andccr",
3152 { { MNEM, ' ', OP (U8), 0 } },
3153 & fmt_andccr, { 0x8300 },
3154 (PTR) & fmt_andccr_ops[0],
3155 { 0, 0, { 0 } }
3156 },
3157 /* orccr $u8 */
3158 {
3159 { 1, 1, 1, 1 },
3160 FR30_INSN_ORCCR, "orccr", "orccr",
3161 { { MNEM, ' ', OP (U8), 0 } },
3162 & fmt_andccr, { 0x9300 },
3163 (PTR) & fmt_andccr_ops[0],
3164 { 0, 0, { 0 } }
3165 },
3166 /* stilm $u8 */
3167 {
3168 { 1, 1, 1, 1 },
3169 FR30_INSN_STILM, "stilm", "stilm",
3170 { { MNEM, ' ', OP (U8), 0 } },
3171 & fmt_stilm, { 0x8700 },
3172 (PTR) & fmt_stilm_ops[0],
3173 { 0, 0, { 0 } }
3174 },
3175 /* addsp $s10 */
3176 {
3177 { 1, 1, 1, 1 },
3178 FR30_INSN_ADDSP, "addsp", "addsp",
3179 { { MNEM, ' ', OP (S10), 0 } },
3180 & fmt_addsp, { 0xa300 },
3181 (PTR) & fmt_addsp_ops[0],
3182 { 0, 0, { 0 } }
3183 },
3184 /* extsb $Ri */
3185 {
3186 { 1, 1, 1, 1 },
3187 FR30_INSN_EXTSB, "extsb", "extsb",
3188 { { MNEM, ' ', OP (RI), 0 } },
3189 & fmt_extsb, { 0x9780 },
3190 (PTR) & fmt_extsb_ops[0],
3191 { 0, 0, { 0 } }
3192 },
3193 /* extub $Ri */
3194 {
3195 { 1, 1, 1, 1 },
3196 FR30_INSN_EXTUB, "extub", "extub",
3197 { { MNEM, ' ', OP (RI), 0 } },
3198 & fmt_extub, { 0x9790 },
3199 (PTR) & fmt_extub_ops[0],
3200 { 0, 0, { 0 } }
3201 },
3202 /* extsh $Ri */
3203 {
3204 { 1, 1, 1, 1 },
3205 FR30_INSN_EXTSH, "extsh", "extsh",
3206 { { MNEM, ' ', OP (RI), 0 } },
3207 & fmt_extsh, { 0x97a0 },
3208 (PTR) & fmt_extsh_ops[0],
3209 { 0, 0, { 0 } }
3210 },
3211 /* extuh $Ri */
3212 {
3213 { 1, 1, 1, 1 },
3214 FR30_INSN_EXTUH, "extuh", "extuh",
3215 { { MNEM, ' ', OP (RI), 0 } },
3216 & fmt_extuh, { 0x97b0 },
3217 (PTR) & fmt_extuh_ops[0],
3218 { 0, 0, { 0 } }
3219 },
3220 /* ldm0 ($reglist_low) */
3221 {
3222 { 1, 1, 1, 1 },
3223 FR30_INSN_LDM0, "ldm0", "ldm0",
3224 { { MNEM, ' ', '(', OP (REGLIST_LOW), ')', 0 } },
3225 & fmt_ldm0, { 0x8c00 },
3226 (PTR) 0,
3227 { 0, 0, { 0 } }
3228 },
3229 /* ldm1 ($reglist_hi) */
3230 {
3231 { 1, 1, 1, 1 },
3232 FR30_INSN_LDM1, "ldm1", "ldm1",
3233 { { MNEM, ' ', '(', OP (REGLIST_HI), ')', 0 } },
3234 & fmt_ldm1, { 0x8d00 },
3235 (PTR) 0,
3236 { 0, 0, { 0 } }
3237 },
3238 /* stm0 ($reglist_low) */
3239 {
3240 { 1, 1, 1, 1 },
3241 FR30_INSN_STM0, "stm0", "stm0",
3242 { { MNEM, ' ', '(', OP (REGLIST_LOW), ')', 0 } },
3243 & fmt_stm0, { 0x8e00 },
3244 (PTR) & fmt_stm0_ops[0],
3245 { 0, 0, { 0 } }
3246 },
3247 /* stm1 ($reglist_hi) */
3248 {
3249 { 1, 1, 1, 1 },
3250 FR30_INSN_STM1, "stm1", "stm1",
3251 { { MNEM, ' ', '(', OP (REGLIST_HI), ')', 0 } },
3252 & fmt_ldm1, { 0x8f00 },
3253 (PTR) 0,
3254 { 0, 0, { 0 } }
3255 },
3256 /* enter $u10 */
3257 {
3258 { 1, 1, 1, 1 },
3259 FR30_INSN_ENTER, "enter", "enter",
3260 { { MNEM, ' ', OP (U10), 0 } },
3261 & fmt_enter, { 0xf00 },
3262 (PTR) & fmt_enter_ops[0],
3263 { 0, 0, { 0 } }
3264 },
3265 /* leave */
3266 {
3267 { 1, 1, 1, 1 },
3268 FR30_INSN_LEAVE, "leave", "leave",
3269 { { MNEM, 0 } },
3270 & fmt_leave, { 0x9f90 },
3271 (PTR) & fmt_leave_ops[0],
3272 { 0, 0, { 0 } }
3273 },
3274 /* xchb @$Rj,$Ri */
3275 {
3276 { 1, 1, 1, 1 },
3277 FR30_INSN_XCHB, "xchb", "xchb",
3278 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
3279 & fmt_xchb, { 0x8a00 },
3280 (PTR) & fmt_xchb_ops[0],
3281 { 0, 0, { 0 } }
3282 },
3283 };
3284
3285 #undef A
3286 #undef MNEM
3287 #undef OP
3288
3289 static const CGEN_INSN_TABLE insn_table =
3290 {
3291 & fr30_cgen_insn_table_entries[0],
3292 sizeof (CGEN_INSN),
3293 MAX_INSNS,
3294 NULL
3295 };
3296
3297 /* Formats for ALIAS macro-insns. */
3298
3299 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
3300
3301 static const CGEN_IFMT fmt_ldi8m = {
3302 16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
3303 };
3304
3305 static const CGEN_IFMT fmt_ldi20m = {
3306 16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
3307 };
3308
3309 static const CGEN_IFMT fmt_ldi32m = {
3310 16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
3311 };
3312
3313 #undef F
3314
3315 /* Each non-simple macro entry points to an array of expansion possibilities. */
3316
3317 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
3318 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
3319 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
3320
3321 /* The macro instruction table. */
3322
3323 static const CGEN_INSN macro_insn_table_entries[] =
3324 {
3325 /* ldi8 $i8,$Ri */
3326 {
3327 { 1, 1, 1, 1 },
3328 -1, "ldi8m", "ldi8",
3329 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
3330 & fmt_ldi8m, { 0xc000 },
3331 (PTR) 0,
3332 { 0, 0|A(NO_DIS)|A(ALIAS), { 0 } }
3333 },
3334 /* ldi20 $i20,$Ri */
3335 {
3336 { 1, 1, 1, 1 },
3337 -1, "ldi20m", "ldi20",
3338 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
3339 & fmt_ldi20m, { 0x9b00 },
3340 (PTR) 0,
3341 { 0, 0|A(NO_DIS)|A(ALIAS), { 0 } }
3342 },
3343 /* ldi32 $i32,$Ri */
3344 {
3345 { 1, 1, 1, 1 },
3346 -1, "ldi32m", "ldi32",
3347 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
3348 & fmt_ldi32m, { 0x9f80 },
3349 (PTR) 0,
3350 { 0, 0|A(NO_DIS)|A(ALIAS), { 0 } }
3351 },
3352 };
3353
3354 #undef A
3355 #undef MNEM
3356 #undef OP
3357
3358 static const CGEN_INSN_TABLE macro_insn_table =
3359 {
3360 & macro_insn_table_entries[0],
3361 sizeof (CGEN_INSN),
3362 (sizeof (macro_insn_table_entries) /
3363 sizeof (macro_insn_table_entries[0])),
3364 NULL
3365 };
3366
3367 static void
3368 init_tables ()
3369 {
3370 }
3371
3372 /* Return non-zero if INSN is to be added to the hash table.
3373 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
3374
3375 static int
3376 asm_hash_insn_p (insn)
3377 const CGEN_INSN * insn;
3378 {
3379 return CGEN_ASM_HASH_P (insn);
3380 }
3381
3382 static int
3383 dis_hash_insn_p (insn)
3384 const CGEN_INSN * insn;
3385 {
3386 /* If building the hash table and the NO-DIS attribute is present,
3387 ignore. */
3388 if (CGEN_INSN_ATTR (insn, CGEN_INSN_NO_DIS))
3389 return 0;
3390 return CGEN_DIS_HASH_P (insn);
3391 }
3392
3393 /* The result is the hash value of the insn.
3394 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
3395
3396 static unsigned int
3397 asm_hash_insn (mnem)
3398 const char * mnem;
3399 {
3400 return CGEN_ASM_HASH (mnem);
3401 }
3402
3403 /* BUF is a pointer to the insn's bytes in target order.
3404 VALUE is an integer of the first CGEN_BASE_INSN_BITSIZE bits,
3405 host order. */
3406
3407 static unsigned int
3408 dis_hash_insn (buf, value)
3409 const char * buf;
3410 CGEN_INSN_INT value;
3411 {
3412 return CGEN_DIS_HASH (buf, value);
3413 }
3414
3415 /* Initialize an opcode table and return a descriptor.
3416 It's much like opening a file, and must be the first function called. */
3417
3418 CGEN_OPCODE_DESC
3419 fr30_cgen_opcode_open (mach, endian)
3420 int mach;
3421 enum cgen_endian endian;
3422 {
3423 CGEN_OPCODE_TABLE * table = (CGEN_OPCODE_TABLE *) xmalloc (sizeof (CGEN_OPCODE_TABLE));
3424 static int init_p;
3425
3426 if (! init_p)
3427 {
3428 init_tables ();
3429 init_p = 1;
3430 }
3431
3432 memset (table, 0, sizeof (*table));
3433
3434 CGEN_OPCODE_MACH (table) = mach;
3435 CGEN_OPCODE_ENDIAN (table) = endian;
3436 /* FIXME: for the sparc case we can determine insn-endianness statically.
3437 The worry here is where both data and insn endian can be independently
3438 chosen, in which case this function will need another argument.
3439 Actually, will want to allow for more arguments in the future anyway. */
3440 CGEN_OPCODE_INSN_ENDIAN (table) = endian;
3441
3442 CGEN_OPCODE_HW_LIST (table) = & fr30_cgen_hw_entries[0];
3443
3444 CGEN_OPCODE_IFLD_TABLE (table) = & fr30_cgen_ifld_table[0];
3445
3446 CGEN_OPCODE_OPERAND_TABLE (table) = & fr30_cgen_operand_table[0];
3447
3448 * CGEN_OPCODE_INSN_TABLE (table) = insn_table;
3449
3450 * CGEN_OPCODE_MACRO_INSN_TABLE (table) = macro_insn_table;
3451
3452 CGEN_OPCODE_ASM_HASH_P (table) = asm_hash_insn_p;
3453 CGEN_OPCODE_ASM_HASH (table) = asm_hash_insn;
3454 CGEN_OPCODE_ASM_HASH_SIZE (table) = CGEN_ASM_HASH_SIZE;
3455
3456 CGEN_OPCODE_DIS_HASH_P (table) = dis_hash_insn_p;
3457 CGEN_OPCODE_DIS_HASH (table) = dis_hash_insn;
3458 CGEN_OPCODE_DIS_HASH_SIZE (table) = CGEN_DIS_HASH_SIZE;
3459
3460 return (CGEN_OPCODE_DESC) table;
3461 }
3462
3463 /* Close an opcode table. */
3464
3465 void
3466 fr30_cgen_opcode_close (desc)
3467 CGEN_OPCODE_DESC desc;
3468 {
3469 free (desc);
3470 }
3471
3472 /* Getting values from cgen_fields is handled by a collection of functions.
3473 They are distinguished by the type of the VALUE argument they return.
3474 TODO: floating point, inlining support, remove cases where result type
3475 not appropriate. */
3476
3477 int
3478 fr30_cgen_get_int_operand (opindex, fields)
3479 int opindex;
3480 const CGEN_FIELDS * fields;
3481 {
3482 int value;
3483
3484 switch (opindex)
3485 {
3486 case FR30_OPERAND_RI :
3487 value = fields->f_Ri;
3488 break;
3489 case FR30_OPERAND_RJ :
3490 value = fields->f_Rj;
3491 break;
3492 case FR30_OPERAND_RIC :
3493 value = fields->f_Ric;
3494 break;
3495 case FR30_OPERAND_RJC :
3496 value = fields->f_Rjc;
3497 break;
3498 case FR30_OPERAND_CRI :
3499 value = fields->f_CRi;
3500 break;
3501 case FR30_OPERAND_CRJ :
3502 value = fields->f_CRj;
3503 break;
3504 case FR30_OPERAND_RS1 :
3505 value = fields->f_Rs1;
3506 break;
3507 case FR30_OPERAND_RS2 :
3508 value = fields->f_Rs2;
3509 break;
3510 case FR30_OPERAND_R13 :
3511 value = fields->f_nil;
3512 break;
3513 case FR30_OPERAND_R14 :
3514 value = fields->f_nil;
3515 break;
3516 case FR30_OPERAND_R15 :
3517 value = fields->f_nil;
3518 break;
3519 case FR30_OPERAND_PS :
3520 value = fields->f_nil;
3521 break;
3522 case FR30_OPERAND_U4 :
3523 value = fields->f_u4;
3524 break;
3525 case FR30_OPERAND_U4C :
3526 value = fields->f_u4c;
3527 break;
3528 case FR30_OPERAND_U8 :
3529 value = fields->f_u8;
3530 break;
3531 case FR30_OPERAND_I8 :
3532 value = fields->f_i8;
3533 break;
3534 case FR30_OPERAND_UDISP6 :
3535 value = fields->f_udisp6;
3536 break;
3537 case FR30_OPERAND_DISP8 :
3538 value = fields->f_disp8;
3539 break;
3540 case FR30_OPERAND_DISP9 :
3541 value = fields->f_disp9;
3542 break;
3543 case FR30_OPERAND_DISP10 :
3544 value = fields->f_disp10;
3545 break;
3546 case FR30_OPERAND_S10 :
3547 value = fields->f_s10;
3548 break;
3549 case FR30_OPERAND_U10 :
3550 value = fields->f_u10;
3551 break;
3552 case FR30_OPERAND_I32 :
3553 value = fields->f_i32;
3554 break;
3555 case FR30_OPERAND_M4 :
3556 value = fields->f_m4;
3557 break;
3558 case FR30_OPERAND_I20 :
3559 value = fields->f_i20;
3560 break;
3561 case FR30_OPERAND_DIR8 :
3562 value = fields->f_dir8;
3563 break;
3564 case FR30_OPERAND_DIR9 :
3565 value = fields->f_dir9;
3566 break;
3567 case FR30_OPERAND_DIR10 :
3568 value = fields->f_dir10;
3569 break;
3570 case FR30_OPERAND_LABEL9 :
3571 value = fields->f_rel9;
3572 break;
3573 case FR30_OPERAND_LABEL12 :
3574 value = fields->f_rel12;
3575 break;
3576 case FR30_OPERAND_REGLIST_LOW :
3577 value = fields->f_reglist_low;
3578 break;
3579 case FR30_OPERAND_REGLIST_HI :
3580 value = fields->f_reglist_hi;
3581 break;
3582 case FR30_OPERAND_CC :
3583 value = fields->f_cc;
3584 break;
3585 case FR30_OPERAND_CCC :
3586 value = fields->f_ccc;
3587 break;
3588
3589 default :
3590 /* xgettext:c-format */
3591 fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
3592 opindex);
3593 abort ();
3594 }
3595
3596 return value;
3597 }
3598
3599 bfd_vma
3600 fr30_cgen_get_vma_operand (opindex, fields)
3601 int opindex;
3602 const CGEN_FIELDS * fields;
3603 {
3604 bfd_vma value;
3605
3606 switch (opindex)
3607 {
3608 case FR30_OPERAND_RI :
3609 value = fields->f_Ri;
3610 break;
3611 case FR30_OPERAND_RJ :
3612 value = fields->f_Rj;
3613 break;
3614 case FR30_OPERAND_RIC :
3615 value = fields->f_Ric;
3616 break;
3617 case FR30_OPERAND_RJC :
3618 value = fields->f_Rjc;
3619 break;
3620 case FR30_OPERAND_CRI :
3621 value = fields->f_CRi;
3622 break;
3623 case FR30_OPERAND_CRJ :
3624 value = fields->f_CRj;
3625 break;
3626 case FR30_OPERAND_RS1 :
3627 value = fields->f_Rs1;
3628 break;
3629 case FR30_OPERAND_RS2 :
3630 value = fields->f_Rs2;
3631 break;
3632 case FR30_OPERAND_R13 :
3633 value = fields->f_nil;
3634 break;
3635 case FR30_OPERAND_R14 :
3636 value = fields->f_nil;
3637 break;
3638 case FR30_OPERAND_R15 :
3639 value = fields->f_nil;
3640 break;
3641 case FR30_OPERAND_PS :
3642 value = fields->f_nil;
3643 break;
3644 case FR30_OPERAND_U4 :
3645 value = fields->f_u4;
3646 break;
3647 case FR30_OPERAND_U4C :
3648 value = fields->f_u4c;
3649 break;
3650 case FR30_OPERAND_U8 :
3651 value = fields->f_u8;
3652 break;
3653 case FR30_OPERAND_I8 :
3654 value = fields->f_i8;
3655 break;
3656 case FR30_OPERAND_UDISP6 :
3657 value = fields->f_udisp6;
3658 break;
3659 case FR30_OPERAND_DISP8 :
3660 value = fields->f_disp8;
3661 break;
3662 case FR30_OPERAND_DISP9 :
3663 value = fields->f_disp9;
3664 break;
3665 case FR30_OPERAND_DISP10 :
3666 value = fields->f_disp10;
3667 break;
3668 case FR30_OPERAND_S10 :
3669 value = fields->f_s10;
3670 break;
3671 case FR30_OPERAND_U10 :
3672 value = fields->f_u10;
3673 break;
3674 case FR30_OPERAND_I32 :
3675 value = fields->f_i32;
3676 break;
3677 case FR30_OPERAND_M4 :
3678 value = fields->f_m4;
3679 break;
3680 case FR30_OPERAND_I20 :
3681 value = fields->f_i20;
3682 break;
3683 case FR30_OPERAND_DIR8 :
3684 value = fields->f_dir8;
3685 break;
3686 case FR30_OPERAND_DIR9 :
3687 value = fields->f_dir9;
3688 break;
3689 case FR30_OPERAND_DIR10 :
3690 value = fields->f_dir10;
3691 break;
3692 case FR30_OPERAND_LABEL9 :
3693 value = fields->f_rel9;
3694 break;
3695 case FR30_OPERAND_LABEL12 :
3696 value = fields->f_rel12;
3697 break;
3698 case FR30_OPERAND_REGLIST_LOW :
3699 value = fields->f_reglist_low;
3700 break;
3701 case FR30_OPERAND_REGLIST_HI :
3702 value = fields->f_reglist_hi;
3703 break;
3704 case FR30_OPERAND_CC :
3705 value = fields->f_cc;
3706 break;
3707 case FR30_OPERAND_CCC :
3708 value = fields->f_ccc;
3709 break;
3710
3711 default :
3712 /* xgettext:c-format */
3713 fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
3714 opindex);
3715 abort ();
3716 }
3717
3718 return value;
3719 }
3720
3721 /* Stuffing values in cgen_fields is handled by a collection of functions.
3722 They are distinguished by the type of the VALUE argument they accept.
3723 TODO: floating point, inlining support, remove cases where argument type
3724 not appropriate. */
3725
3726 void
3727 fr30_cgen_set_int_operand (opindex, fields, value)
3728 int opindex;
3729 CGEN_FIELDS * fields;
3730 int value;
3731 {
3732 switch (opindex)
3733 {
3734 case FR30_OPERAND_RI :
3735 fields->f_Ri = value;
3736 break;
3737 case FR30_OPERAND_RJ :
3738 fields->f_Rj = value;
3739 break;
3740 case FR30_OPERAND_RIC :
3741 fields->f_Ric = value;
3742 break;
3743 case FR30_OPERAND_RJC :
3744 fields->f_Rjc = value;
3745 break;
3746 case FR30_OPERAND_CRI :
3747 fields->f_CRi = value;
3748 break;
3749 case FR30_OPERAND_CRJ :
3750 fields->f_CRj = value;
3751 break;
3752 case FR30_OPERAND_RS1 :
3753 fields->f_Rs1 = value;
3754 break;
3755 case FR30_OPERAND_RS2 :
3756 fields->f_Rs2 = value;
3757 break;
3758 case FR30_OPERAND_R13 :
3759 fields->f_nil = value;
3760 break;
3761 case FR30_OPERAND_R14 :
3762 fields->f_nil = value;
3763 break;
3764 case FR30_OPERAND_R15 :
3765 fields->f_nil = value;
3766 break;
3767 case FR30_OPERAND_PS :
3768 fields->f_nil = value;
3769 break;
3770 case FR30_OPERAND_U4 :
3771 fields->f_u4 = value;
3772 break;
3773 case FR30_OPERAND_U4C :
3774 fields->f_u4c = value;
3775 break;
3776 case FR30_OPERAND_U8 :
3777 fields->f_u8 = value;
3778 break;
3779 case FR30_OPERAND_I8 :
3780 fields->f_i8 = value;
3781 break;
3782 case FR30_OPERAND_UDISP6 :
3783 fields->f_udisp6 = value;
3784 break;
3785 case FR30_OPERAND_DISP8 :
3786 fields->f_disp8 = value;
3787 break;
3788 case FR30_OPERAND_DISP9 :
3789 fields->f_disp9 = value;
3790 break;
3791 case FR30_OPERAND_DISP10 :
3792 fields->f_disp10 = value;
3793 break;
3794 case FR30_OPERAND_S10 :
3795 fields->f_s10 = value;
3796 break;
3797 case FR30_OPERAND_U10 :
3798 fields->f_u10 = value;
3799 break;
3800 case FR30_OPERAND_I32 :
3801 fields->f_i32 = value;
3802 break;
3803 case FR30_OPERAND_M4 :
3804 fields->f_m4 = value;
3805 break;
3806 case FR30_OPERAND_I20 :
3807 fields->f_i20 = value;
3808 break;
3809 case FR30_OPERAND_DIR8 :
3810 fields->f_dir8 = value;
3811 break;
3812 case FR30_OPERAND_DIR9 :
3813 fields->f_dir9 = value;
3814 break;
3815 case FR30_OPERAND_DIR10 :
3816 fields->f_dir10 = value;
3817 break;
3818 case FR30_OPERAND_LABEL9 :
3819 fields->f_rel9 = value;
3820 break;
3821 case FR30_OPERAND_LABEL12 :
3822 fields->f_rel12 = value;
3823 break;
3824 case FR30_OPERAND_REGLIST_LOW :
3825 fields->f_reglist_low = value;
3826 break;
3827 case FR30_OPERAND_REGLIST_HI :
3828 fields->f_reglist_hi = value;
3829 break;
3830 case FR30_OPERAND_CC :
3831 fields->f_cc = value;
3832 break;
3833 case FR30_OPERAND_CCC :
3834 fields->f_ccc = value;
3835 break;
3836
3837 default :
3838 /* xgettext:c-format */
3839 fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
3840 opindex);
3841 abort ();
3842 }
3843 }
3844
3845 void
3846 fr30_cgen_set_vma_operand (opindex, fields, value)
3847 int opindex;
3848 CGEN_FIELDS * fields;
3849 bfd_vma value;
3850 {
3851 switch (opindex)
3852 {
3853 case FR30_OPERAND_RI :
3854 fields->f_Ri = value;
3855 break;
3856 case FR30_OPERAND_RJ :
3857 fields->f_Rj = value;
3858 break;
3859 case FR30_OPERAND_RIC :
3860 fields->f_Ric = value;
3861 break;
3862 case FR30_OPERAND_RJC :
3863 fields->f_Rjc = value;
3864 break;
3865 case FR30_OPERAND_CRI :
3866 fields->f_CRi = value;
3867 break;
3868 case FR30_OPERAND_CRJ :
3869 fields->f_CRj = value;
3870 break;
3871 case FR30_OPERAND_RS1 :
3872 fields->f_Rs1 = value;
3873 break;
3874 case FR30_OPERAND_RS2 :
3875 fields->f_Rs2 = value;
3876 break;
3877 case FR30_OPERAND_R13 :
3878 fields->f_nil = value;
3879 break;
3880 case FR30_OPERAND_R14 :
3881 fields->f_nil = value;
3882 break;
3883 case FR30_OPERAND_R15 :
3884 fields->f_nil = value;
3885 break;
3886 case FR30_OPERAND_PS :
3887 fields->f_nil = value;
3888 break;
3889 case FR30_OPERAND_U4 :
3890 fields->f_u4 = value;
3891 break;
3892 case FR30_OPERAND_U4C :
3893 fields->f_u4c = value;
3894 break;
3895 case FR30_OPERAND_U8 :
3896 fields->f_u8 = value;
3897 break;
3898 case FR30_OPERAND_I8 :
3899 fields->f_i8 = value;
3900 break;
3901 case FR30_OPERAND_UDISP6 :
3902 fields->f_udisp6 = value;
3903 break;
3904 case FR30_OPERAND_DISP8 :
3905 fields->f_disp8 = value;
3906 break;
3907 case FR30_OPERAND_DISP9 :
3908 fields->f_disp9 = value;
3909 break;
3910 case FR30_OPERAND_DISP10 :
3911 fields->f_disp10 = value;
3912 break;
3913 case FR30_OPERAND_S10 :
3914 fields->f_s10 = value;
3915 break;
3916 case FR30_OPERAND_U10 :
3917 fields->f_u10 = value;
3918 break;
3919 case FR30_OPERAND_I32 :
3920 fields->f_i32 = value;
3921 break;
3922 case FR30_OPERAND_M4 :
3923 fields->f_m4 = value;
3924 break;
3925 case FR30_OPERAND_I20 :
3926 fields->f_i20 = value;
3927 break;
3928 case FR30_OPERAND_DIR8 :
3929 fields->f_dir8 = value;
3930 break;
3931 case FR30_OPERAND_DIR9 :
3932 fields->f_dir9 = value;
3933 break;
3934 case FR30_OPERAND_DIR10 :
3935 fields->f_dir10 = value;
3936 break;
3937 case FR30_OPERAND_LABEL9 :
3938 fields->f_rel9 = value;
3939 break;
3940 case FR30_OPERAND_LABEL12 :
3941 fields->f_rel12 = value;
3942 break;
3943 case FR30_OPERAND_REGLIST_LOW :
3944 fields->f_reglist_low = value;
3945 break;
3946 case FR30_OPERAND_REGLIST_HI :
3947 fields->f_reglist_hi = value;
3948 break;
3949 case FR30_OPERAND_CC :
3950 fields->f_cc = value;
3951 break;
3952 case FR30_OPERAND_CCC :
3953 fields->f_ccc = value;
3954 break;
3955
3956 default :
3957 /* xgettext:c-format */
3958 fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
3959 opindex);
3960 abort ();
3961 }
3962 }
3963
This page took 0.130587 seconds and 5 git commands to generate.