Thu Dec 3 14:26:20 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 { 0 }
394 };
395
396 /* The instruction field table. */
397
398 static const CGEN_IFLD fr30_cgen_ifld_table[] =
399 {
400 { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { 0, 0, { 0 } } },
401 { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
402 { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
403 { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
404 { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
405 { FR30_F_OP5, "f-op5", 0, 16, 5, 1, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
406 { FR30_F_CC, "f-cc", 0, 16, 4, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
407 { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
408 { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
409 { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
410 { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
411 { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
412 { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
413 { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
414 { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
415 { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
416 { FR30_F_U4, "f-u4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
417 { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
418 { FR30_F_I4, "f-i4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
419 { FR30_F_M4, "f-m4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
420 { FR30_F_U8, "f-u8", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
421 { FR30_F_I8, "f-i8", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
422 { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
423 { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
424 { FR30_F_I32, "f-i32", 16, 32, 0, 32, { 0, 0|(1<<CGEN_IFLD_SIGN_OPT)|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
425 { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
426 { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
427 { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
428 { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
429 { FR30_F_S10, "f-s10", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_SIGNED), { 0 } } },
430 { FR30_F_U10, "f-u10", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
431 { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_PCREL_ADDR)|(1<<CGEN_IFLD_SIGNED), { 0 } } },
432 { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
433 { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
434 { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
435 { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { 0, 0|(1<<CGEN_IFLD_PCREL_ADDR)|(1<<CGEN_IFLD_SIGNED), { 0 } } },
436 { FR30_F_REGLIST_HI, "f-reglist_hi", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
437 { FR30_F_REGLIST_LOW, "f-reglist_low", 0, 16, 8, 8, { 0, 0|(1<<CGEN_IFLD_UNSIGNED), { 0 } } },
438 { 0 }
439 };
440
441 /* The operand table. */
442
443 #define OPERAND(op) CONCAT2 (FR30_OPERAND_,op)
444 #define OP_ENT(op) fr30_cgen_operand_table[OPERAND (op)]
445
446 const CGEN_OPERAND fr30_cgen_operand_table[MAX_OPERANDS] =
447 {
448 /* pc: program counter */
449 { "pc", & HW_ENT (HW_H_PC), 0, 0,
450 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
451 /* Ri: destination register */
452 { "Ri", & HW_ENT (HW_H_GR), 12, 4,
453 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
454 /* Rj: source register */
455 { "Rj", & HW_ENT (HW_H_GR), 8, 4,
456 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
457 /* Ric: target register coproc insn */
458 { "Ric", & HW_ENT (HW_H_GR), 12, 4,
459 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
460 /* Rjc: source register coproc insn */
461 { "Rjc", & HW_ENT (HW_H_GR), 8, 4,
462 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
463 /* CRi: coprocessor register */
464 { "CRi", & HW_ENT (HW_H_CR), 12, 4,
465 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
466 /* CRj: coprocessor register */
467 { "CRj", & HW_ENT (HW_H_CR), 8, 4,
468 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
469 /* Rs1: dedicated register */
470 { "Rs1", & HW_ENT (HW_H_DR), 8, 4,
471 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
472 /* Rs2: dedicated register */
473 { "Rs2", & HW_ENT (HW_H_DR), 12, 4,
474 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
475 /* R13: General Register 13 */
476 { "R13", & HW_ENT (HW_H_R13), 0, 0,
477 { 0, 0, { 0 } } },
478 /* R14: General Register 14 */
479 { "R14", & HW_ENT (HW_H_R14), 0, 0,
480 { 0, 0, { 0 } } },
481 /* R15: General Register 15 */
482 { "R15", & HW_ENT (HW_H_R15), 0, 0,
483 { 0, 0, { 0 } } },
484 /* ps: Program Status register */
485 { "ps", & HW_ENT (HW_H_PS), 0, 0,
486 { 0, 0, { 0 } } },
487 /* u4: 4 bit unsigned immediate */
488 { "u4", & HW_ENT (HW_H_UINT), 8, 4,
489 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
490 /* u4c: 4 bit unsigned immediate */
491 { "u4c", & HW_ENT (HW_H_UINT), 12, 4,
492 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
493 /* u8: 8 bit unsigned immediate */
494 { "u8", & HW_ENT (HW_H_UINT), 8, 8,
495 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
496 /* i8: 8 bit unsigned immediate */
497 { "i8", & HW_ENT (HW_H_UINT), 4, 8,
498 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
499 /* udisp6: 6 bit unsigned immediate */
500 { "udisp6", & HW_ENT (HW_H_UINT), 8, 4,
501 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
502 /* disp8: 8 bit signed immediate */
503 { "disp8", & HW_ENT (HW_H_SINT), 4, 8,
504 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
505 /* disp9: 9 bit signed immediate */
506 { "disp9", & HW_ENT (HW_H_SINT), 4, 8,
507 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
508 /* disp10: 10 bit signed immediate */
509 { "disp10", & HW_ENT (HW_H_SINT), 4, 8,
510 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
511 /* s10: 10 bit signed immediate */
512 { "s10", & HW_ENT (HW_H_SINT), 8, 8,
513 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
514 /* u10: 10 bit unsigned immediate */
515 { "u10", & HW_ENT (HW_H_UINT), 8, 8,
516 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
517 /* i32: 32 bit immediate */
518 { "i32", & HW_ENT (HW_H_UINT), 0, 32,
519 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGN_OPT)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
520 /* m4: 4 bit negative immediate */
521 { "m4", & HW_ENT (HW_H_SINT), 8, 4,
522 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
523 /* i20: 20 bit immediate */
524 { "i20", & HW_ENT (HW_H_UINT), 0, 20,
525 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED)|(1<<CGEN_OPERAND_VIRTUAL), { 0 } } },
526 /* label9: 9 bit pc relative address */
527 { "label9", & HW_ENT (HW_H_IADDR), 8, 8,
528 { 0, 0|(1<<CGEN_OPERAND_PCREL_ADDR)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
529 /* dir8: 8 bit direct address */
530 { "dir8", & HW_ENT (HW_H_UINT), 8, 8,
531 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
532 /* dir9: 9 bit direct address */
533 { "dir9", & HW_ENT (HW_H_UINT), 8, 8,
534 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
535 /* dir10: 10 bit direct address */
536 { "dir10", & HW_ENT (HW_H_UINT), 8, 8,
537 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
538 /* label12: 12 bit pc relative address */
539 { "label12", & HW_ENT (HW_H_IADDR), 5, 11,
540 { 0, 0|(1<<CGEN_OPERAND_PCREL_ADDR)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
541 /* reglist_low: 8 bit register mask */
542 { "reglist_low", & HW_ENT (HW_H_UINT), 8, 8,
543 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
544 /* reglist_hi: 8 bit register mask */
545 { "reglist_hi", & HW_ENT (HW_H_UINT), 8, 8,
546 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
547 /* cc: condition codes */
548 { "cc", & HW_ENT (HW_H_UINT), 4, 4,
549 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
550 /* ccc: coprocessor calc */
551 { "ccc", & HW_ENT (HW_H_UINT), 0, 8,
552 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
553 /* nbit: negative bit */
554 { "nbit", & HW_ENT (HW_H_NBIT), 0, 0,
555 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
556 /* vbit: overflow bit */
557 { "vbit", & HW_ENT (HW_H_VBIT), 0, 0,
558 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
559 /* zbit: zero bit */
560 { "zbit", & HW_ENT (HW_H_ZBIT), 0, 0,
561 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
562 /* cbit: carry bit */
563 { "cbit", & HW_ENT (HW_H_CBIT), 0, 0,
564 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
565 /* ibit: interrupt bit */
566 { "ibit", & HW_ENT (HW_H_IBIT), 0, 0,
567 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
568 /* sbit: stack bit */
569 { "sbit", & HW_ENT (HW_H_SBIT), 0, 0,
570 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
571 /* ccr: condition code bits */
572 { "ccr", & HW_ENT (HW_H_CCR), 0, 0,
573 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
574 };
575
576 /* Operand references. */
577
578 #define INPUT CGEN_OPERAND_INSTANCE_INPUT
579 #define OUTPUT CGEN_OPERAND_INSTANCE_OUTPUT
580 #define COND_REF CGEN_OPERAND_INSTANCE_COND_REF
581
582 static const CGEN_OPERAND_INSTANCE fmt_add_ops[] = {
583 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
584 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
585 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
586 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
587 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
588 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
589 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
590 { 0 }
591 };
592
593 static const CGEN_OPERAND_INSTANCE fmt_addi_ops[] = {
594 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
595 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
596 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
597 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
598 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
599 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
600 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
601 { 0 }
602 };
603
604 static const CGEN_OPERAND_INSTANCE fmt_add2_ops[] = {
605 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
606 { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
607 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
608 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
609 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
610 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
611 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
612 { 0 }
613 };
614
615 static const CGEN_OPERAND_INSTANCE fmt_addc_ops[] = {
616 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
617 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
618 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
619 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
620 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
621 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
622 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
623 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
624 { 0 }
625 };
626
627 static const CGEN_OPERAND_INSTANCE fmt_addn_ops[] = {
628 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
629 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
630 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
631 { 0 }
632 };
633
634 static const CGEN_OPERAND_INSTANCE fmt_addni_ops[] = {
635 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
636 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
637 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
638 { 0 }
639 };
640
641 static const CGEN_OPERAND_INSTANCE fmt_addn2_ops[] = {
642 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
643 { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
644 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
645 { 0 }
646 };
647
648 static const CGEN_OPERAND_INSTANCE fmt_cmp_ops[] = {
649 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
650 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
651 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
652 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
653 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
654 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
655 { 0 }
656 };
657
658 static const CGEN_OPERAND_INSTANCE fmt_cmpi_ops[] = {
659 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
660 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
661 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
662 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
663 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
664 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
665 { 0 }
666 };
667
668 static const CGEN_OPERAND_INSTANCE fmt_cmp2_ops[] = {
669 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
670 { INPUT, "m4", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (M4), 0, 0 },
671 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
672 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
673 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
674 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
675 { 0 }
676 };
677
678 static const CGEN_OPERAND_INSTANCE fmt_and_ops[] = {
679 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
680 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
681 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
682 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
683 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
684 { 0 }
685 };
686
687 static const CGEN_OPERAND_INSTANCE fmt_andm_ops[] = {
688 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
689 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
690 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
691 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
692 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
693 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
694 { 0 }
695 };
696
697 static const CGEN_OPERAND_INSTANCE fmt_andh_ops[] = {
698 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
699 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
700 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (RJ), 0, 0 },
701 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
702 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
703 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0, 0 },
704 { 0 }
705 };
706
707 static const CGEN_OPERAND_INSTANCE fmt_andb_ops[] = {
708 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
709 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
710 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (RJ), 0, 0 },
711 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
712 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
713 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
714 { 0 }
715 };
716
717 static const CGEN_OPERAND_INSTANCE fmt_bandl_ops[] = {
718 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
719 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_QI, & OP_ENT (U4), 0, 0 },
720 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 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_btstl_ops[] = {
726 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_QI, & OP_ENT (U4), 0, 0 },
727 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0, 0 },
728 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0, 0 },
729 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
730 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
731 { 0 }
732 };
733
734 static const CGEN_OPERAND_INSTANCE fmt_mul_ops[] = {
735 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
736 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
737 { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
738 { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
739 { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
740 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
741 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
742 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
743 { 0 }
744 };
745
746 static const CGEN_OPERAND_INSTANCE fmt_mulu_ops[] = {
747 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
748 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
749 { INPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
750 { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
751 { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
752 { OUTPUT, "h_dr_4", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 4, 0 },
753 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
754 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
755 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
756 { 0 }
757 };
758
759 static const CGEN_OPERAND_INSTANCE fmt_mulh_ops[] = {
760 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
761 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
762 { INPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
763 { OUTPUT, "h_dr_5", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 5, 0 },
764 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
765 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
766 { 0 }
767 };
768
769 static const CGEN_OPERAND_INSTANCE fmt_lsl_ops[] = {
770 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
771 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
772 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
773 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
774 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
775 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
776 { 0 }
777 };
778
779 static const CGEN_OPERAND_INSTANCE fmt_lsli_ops[] = {
780 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0, 0 },
781 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
782 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, COND_REF },
783 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, COND_REF },
784 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
785 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
786 { 0 }
787 };
788
789 static const CGEN_OPERAND_INSTANCE fmt_ldi8_ops[] = {
790 { INPUT, "i8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I8), 0, 0 },
791 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
792 { 0 }
793 };
794
795 static const CGEN_OPERAND_INSTANCE fmt_ldi20_ops[] = {
796 { INPUT, "i20", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I20), 0, 0 },
797 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
798 { 0 }
799 };
800
801 static const CGEN_OPERAND_INSTANCE fmt_ldi32_ops[] = {
802 { INPUT, "i32", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (I32), 0, 0 },
803 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
804 { 0 }
805 };
806
807 static const CGEN_OPERAND_INSTANCE fmt_ld_ops[] = {
808 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
809 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
810 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
811 { 0 }
812 };
813
814 static const CGEN_OPERAND_INSTANCE fmt_lduh_ops[] = {
815 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
816 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 0, 0, 0 },
817 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
818 { 0 }
819 };
820
821 static const CGEN_OPERAND_INSTANCE fmt_ldub_ops[] = {
822 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
823 { INPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 0, 0, 0 },
824 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
825 { 0 }
826 };
827
828 static const CGEN_OPERAND_INSTANCE fmt_ldr13_ops[] = {
829 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
830 { INPUT, "h_gr_13", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 13, 0 },
831 { INPUT, "h_memory_add__VM_Rj_reg__VM_h_gr_13", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 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_ldr13uh_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_UHI, 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_ldr13ub_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_UQI, 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_ldr14_ops[] = {
853 { INPUT, "disp10", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP10), 0, 0 },
854 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
855 { INPUT, "h_memory_add__VM_disp10_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 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_ldr14uh_ops[] = {
861 { INPUT, "disp9", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP9), 0, 0 },
862 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
863 { INPUT, "h_memory_add__VM_disp9_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UHI, 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_ldr14ub_ops[] = {
869 { INPUT, "disp8", & HW_ENT (HW_H_SINT), CGEN_MODE_SI, & OP_ENT (DISP8), 0, 0 },
870 { INPUT, "h_gr_14", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 14, 0 },
871 { INPUT, "h_memory_add__VM_disp8_reg__VM_h_gr_14", & HW_ENT (HW_H_MEMORY), CGEN_MODE_UQI, 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_ldr15_ops[] = {
877 { INPUT, "udisp6", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (UDISP6), 0, 0 },
878 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
879 { INPUT, "h_memory_add__VM_udisp6_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 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_ldr15gr_ops[] = {
885 { INPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
886 { INPUT, "h_memory_reg__VM_h_gr_15", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
887 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
888 { OUTPUT, "h_gr_15", & HW_ENT (HW_H_GR), CGEN_MODE_SI, 0, 15, 0 },
889 { 0 }
890 };
891
892 static const CGEN_OPERAND_INSTANCE fmt_st_ops[] = {
893 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RJ), 0, 0 },
894 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
895 { OUTPUT, "h_memory_Rj", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0, 0 },
896 { 0 }
897 };
898
899 static const CGEN_OPERAND_INSTANCE fmt_mov_ops[] = {
900 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0, 0 },
901 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
902 { 0 }
903 };
904
905 static const CGEN_OPERAND_INSTANCE fmt_movdr_ops[] = {
906 { INPUT, "Rs1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS1), 0, 0 },
907 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
908 { 0 }
909 };
910
911 static const CGEN_OPERAND_INSTANCE fmt_mov2dr_ops[] = {
912 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
913 { OUTPUT, "Rs1", & HW_ENT (HW_H_DR), CGEN_MODE_SI, & OP_ENT (RS1), 0, 0 },
914 { 0 }
915 };
916
917 static const CGEN_OPERAND_INSTANCE fmt_jmpd_ops[] = {
918 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0, 0 },
919 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, 0 },
920 { 0 }
921 };
922
923 static const CGEN_OPERAND_INSTANCE fmt_int_ops[] = {
924 { INPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
925 { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_SI, & OP_ENT (U8), 0, 0 },
926 { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, 0 },
927 { OUTPUT, "ibit", & HW_ENT (HW_H_IBIT), CGEN_MODE_BI, 0, 0, 0 },
928 { OUTPUT, "sbit", & HW_ENT (HW_H_SBIT), CGEN_MODE_BI, 0, 0, 0 },
929 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_SI, 0, 0, 0 },
930 { 0 }
931 };
932
933 static const CGEN_OPERAND_INSTANCE fmt_reti_ops[] = {
934 { INPUT, "sbit", & HW_ENT (HW_H_SBIT), CGEN_MODE_BI, 0, 0, 0 },
935 { INPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, COND_REF },
936 { INPUT, "h_memory_reg__VM_h_dr_2", & HW_ENT (HW_H_MEMORY), CGEN_MODE_USI, 0, 0, COND_REF },
937 { INPUT, "h_dr_3", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 3, COND_REF },
938 { INPUT, "h_memory_reg__VM_h_dr_3", & HW_ENT (HW_H_MEMORY), CGEN_MODE_USI, 0, 0, COND_REF },
939 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
940 { OUTPUT, "h_dr_2", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 2, COND_REF },
941 { OUTPUT, "ps", & HW_ENT (HW_H_PS), CGEN_MODE_USI, 0, 0, COND_REF },
942 { OUTPUT, "h_dr_3", & HW_ENT (HW_H_DR), CGEN_MODE_SI, 0, 3, COND_REF },
943 { 0 }
944 };
945
946 static const CGEN_OPERAND_INSTANCE fmt_bra_ops[] = {
947 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
948 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
949 { 0 }
950 };
951
952 static const CGEN_OPERAND_INSTANCE fmt_beq_ops[] = {
953 { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
954 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
955 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
956 { 0 }
957 };
958
959 static const CGEN_OPERAND_INSTANCE fmt_bc_ops[] = {
960 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
961 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
962 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
963 { 0 }
964 };
965
966 static const CGEN_OPERAND_INSTANCE fmt_bn_ops[] = {
967 { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
968 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
969 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
970 { 0 }
971 };
972
973 static const CGEN_OPERAND_INSTANCE fmt_bv_ops[] = {
974 { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
975 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
976 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
977 { 0 }
978 };
979
980 static const CGEN_OPERAND_INSTANCE fmt_blt_ops[] = {
981 { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
982 { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
983 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
984 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
985 { 0 }
986 };
987
988 static const CGEN_OPERAND_INSTANCE fmt_ble_ops[] = {
989 { INPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0, 0 },
990 { INPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0, 0 },
991 { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
992 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
993 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
994 { 0 }
995 };
996
997 static const CGEN_OPERAND_INSTANCE fmt_bls_ops[] = {
998 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0, 0 },
999 { INPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0, 0 },
1000 { INPUT, "label9", & HW_ENT (HW_H_IADDR), CGEN_MODE_USI, & OP_ENT (LABEL9), 0, COND_REF },
1001 { OUTPUT, "pc", & HW_ENT (HW_H_PC), CGEN_MODE_USI, 0, 0, COND_REF },
1002 { 0 }
1003 };
1004
1005 static const CGEN_OPERAND_INSTANCE fmt_andccr_ops[] = {
1006 { INPUT, "ccr", & HW_ENT (HW_H_CCR), CGEN_MODE_UQI, 0, 0, 0 },
1007 { INPUT, "u8", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U8), 0, 0 },
1008 { OUTPUT, "ccr", & HW_ENT (HW_H_CCR), CGEN_MODE_UQI, 0, 0, 0 },
1009 { 0 }
1010 };
1011
1012 #undef INPUT
1013 #undef OUTPUT
1014 #undef COND_REF
1015
1016 /* Instruction formats. */
1017
1018 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
1019
1020 static const CGEN_IFMT fmt_add = {
1021 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1022 };
1023
1024 static const CGEN_IFMT fmt_addi = {
1025 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1026 };
1027
1028 static const CGEN_IFMT fmt_add2 = {
1029 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1030 };
1031
1032 static const CGEN_IFMT fmt_addc = {
1033 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1034 };
1035
1036 static const CGEN_IFMT fmt_addn = {
1037 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1038 };
1039
1040 static const CGEN_IFMT fmt_addni = {
1041 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1042 };
1043
1044 static const CGEN_IFMT fmt_addn2 = {
1045 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1046 };
1047
1048 static const CGEN_IFMT fmt_cmp = {
1049 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1050 };
1051
1052 static const CGEN_IFMT fmt_cmpi = {
1053 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1054 };
1055
1056 static const CGEN_IFMT fmt_cmp2 = {
1057 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_M4), F (F_RI), 0 }
1058 };
1059
1060 static const CGEN_IFMT fmt_and = {
1061 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1062 };
1063
1064 static const CGEN_IFMT fmt_andm = {
1065 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1066 };
1067
1068 static const CGEN_IFMT fmt_andh = {
1069 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1070 };
1071
1072 static const CGEN_IFMT fmt_andb = {
1073 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1074 };
1075
1076 static const CGEN_IFMT fmt_bandl = {
1077 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1078 };
1079
1080 static const CGEN_IFMT fmt_btstl = {
1081 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1082 };
1083
1084 static const CGEN_IFMT fmt_mul = {
1085 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1086 };
1087
1088 static const CGEN_IFMT fmt_mulu = {
1089 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1090 };
1091
1092 static const CGEN_IFMT fmt_mulh = {
1093 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1094 };
1095
1096 static const CGEN_IFMT fmt_div0s = {
1097 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1098 };
1099
1100 static const CGEN_IFMT fmt_div3 = {
1101 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1102 };
1103
1104 static const CGEN_IFMT fmt_lsl = {
1105 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1106 };
1107
1108 static const CGEN_IFMT fmt_lsli = {
1109 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1110 };
1111
1112 static const CGEN_IFMT fmt_ldi8 = {
1113 16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
1114 };
1115
1116 static const CGEN_IFMT fmt_ldi20 = {
1117 16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
1118 };
1119
1120 static const CGEN_IFMT fmt_ldi32 = {
1121 16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1122 };
1123
1124 static const CGEN_IFMT fmt_ld = {
1125 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1126 };
1127
1128 static const CGEN_IFMT fmt_lduh = {
1129 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1130 };
1131
1132 static const CGEN_IFMT fmt_ldub = {
1133 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1134 };
1135
1136 static const CGEN_IFMT fmt_ldr13 = {
1137 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1138 };
1139
1140 static const CGEN_IFMT fmt_ldr13uh = {
1141 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1142 };
1143
1144 static const CGEN_IFMT fmt_ldr13ub = {
1145 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1146 };
1147
1148 static const CGEN_IFMT fmt_ldr14 = {
1149 16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
1150 };
1151
1152 static const CGEN_IFMT fmt_ldr14uh = {
1153 16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
1154 };
1155
1156 static const CGEN_IFMT fmt_ldr14ub = {
1157 16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
1158 };
1159
1160 static const CGEN_IFMT fmt_ldr15 = {
1161 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
1162 };
1163
1164 static const CGEN_IFMT fmt_ldr15gr = {
1165 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1166 };
1167
1168 static const CGEN_IFMT fmt_ldr15dr = {
1169 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RS2), 0 }
1170 };
1171
1172 static const CGEN_IFMT fmt_st = {
1173 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1174 };
1175
1176 static const CGEN_IFMT fmt_sth = {
1177 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1178 };
1179
1180 static const CGEN_IFMT fmt_str14 = {
1181 16, 16, 0xf000, { F (F_OP1), F (F_DISP10), F (F_RI), 0 }
1182 };
1183
1184 static const CGEN_IFMT fmt_str14h = {
1185 16, 16, 0xf000, { F (F_OP1), F (F_DISP9), F (F_RI), 0 }
1186 };
1187
1188 static const CGEN_IFMT fmt_str14b = {
1189 16, 16, 0xf000, { F (F_OP1), F (F_DISP8), F (F_RI), 0 }
1190 };
1191
1192 static const CGEN_IFMT fmt_str15 = {
1193 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_UDISP6), F (F_RI), 0 }
1194 };
1195
1196 static const CGEN_IFMT fmt_mov = {
1197 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RJ), F (F_RI), 0 }
1198 };
1199
1200 static const CGEN_IFMT fmt_movdr = {
1201 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
1202 };
1203
1204 static const CGEN_IFMT fmt_mov2dr = {
1205 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_RS1), F (F_RI), 0 }
1206 };
1207
1208 static const CGEN_IFMT fmt_jmpd = {
1209 16, 16, 0xfff0, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_RI), 0 }
1210 };
1211
1212 static const CGEN_IFMT fmt_call = {
1213 16, 16, 0xf400, { F (F_OP1), F (F_OP5), F (F_REL12), 0 }
1214 };
1215
1216 static const CGEN_IFMT fmt_int = {
1217 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1218 };
1219
1220 static const CGEN_IFMT fmt_reti = {
1221 16, 16, 0xffff, { F (F_OP1), F (F_OP2), F (F_OP3), F (F_OP4), 0 }
1222 };
1223
1224 static const CGEN_IFMT fmt_bra = {
1225 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1226 };
1227
1228 static const CGEN_IFMT fmt_beq = {
1229 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1230 };
1231
1232 static const CGEN_IFMT fmt_bc = {
1233 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1234 };
1235
1236 static const CGEN_IFMT fmt_bn = {
1237 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1238 };
1239
1240 static const CGEN_IFMT fmt_bv = {
1241 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1242 };
1243
1244 static const CGEN_IFMT fmt_blt = {
1245 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1246 };
1247
1248 static const CGEN_IFMT fmt_ble = {
1249 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1250 };
1251
1252 static const CGEN_IFMT fmt_bls = {
1253 16, 16, 0xff00, { F (F_OP1), F (F_CC), F (F_REL9), 0 }
1254 };
1255
1256 static const CGEN_IFMT fmt_dmovr13 = {
1257 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR10), 0 }
1258 };
1259
1260 static const CGEN_IFMT fmt_dmovr13h = {
1261 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR9), 0 }
1262 };
1263
1264 static const CGEN_IFMT fmt_dmovr13b = {
1265 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_DIR8), 0 }
1266 };
1267
1268 static const CGEN_IFMT fmt_ldres = {
1269 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U4), F (F_RI), 0 }
1270 };
1271
1272 static const CGEN_IFMT fmt_copop = {
1273 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 }
1274 };
1275
1276 static const CGEN_IFMT fmt_copld = {
1277 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 }
1278 };
1279
1280 static const CGEN_IFMT fmt_copst = {
1281 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 }
1282 };
1283
1284 static const CGEN_IFMT fmt_andccr = {
1285 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1286 };
1287
1288 static const CGEN_IFMT fmt_stilm = {
1289 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U8), 0 }
1290 };
1291
1292 static const CGEN_IFMT fmt_addsp = {
1293 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_S10), 0 }
1294 };
1295
1296 static const CGEN_IFMT fmt_ldm0 = {
1297 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_LOW), 0 }
1298 };
1299
1300 static const CGEN_IFMT fmt_ldm1 = {
1301 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_REGLIST_HI), 0 }
1302 };
1303
1304 static const CGEN_IFMT fmt_enter = {
1305 16, 16, 0xff00, { F (F_OP1), F (F_OP2), F (F_U10), 0 }
1306 };
1307
1308 #undef F
1309
1310 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
1311 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1312 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1313
1314 /* The instruction table.
1315 This is currently non-static because the simulator accesses it
1316 directly. */
1317
1318 const CGEN_INSN fr30_cgen_insn_table_entries[MAX_INSNS] =
1319 {
1320 /* Special null first entry.
1321 A `num' value of zero is thus invalid.
1322 Also, the special `invalid' insn resides here. */
1323 { { 0 }, 0 },
1324 /* add $Rj,$Ri */
1325 {
1326 { 1, 1, 1, 1 },
1327 FR30_INSN_ADD, "add", "add",
1328 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1329 & fmt_add, { 0xa600 },
1330 (PTR) & fmt_add_ops[0],
1331 { 0, 0, { 0 } }
1332 },
1333 /* add $u4,$Ri */
1334 {
1335 { 1, 1, 1, 1 },
1336 FR30_INSN_ADDI, "addi", "add",
1337 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1338 & fmt_addi, { 0xa400 },
1339 (PTR) & fmt_addi_ops[0],
1340 { 0, 0, { 0 } }
1341 },
1342 /* add2 $m4,$Ri */
1343 {
1344 { 1, 1, 1, 1 },
1345 FR30_INSN_ADD2, "add2", "add2",
1346 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1347 & fmt_add2, { 0xa500 },
1348 (PTR) & fmt_add2_ops[0],
1349 { 0, 0, { 0 } }
1350 },
1351 /* addc $Rj,$Ri */
1352 {
1353 { 1, 1, 1, 1 },
1354 FR30_INSN_ADDC, "addc", "addc",
1355 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1356 & fmt_addc, { 0xa700 },
1357 (PTR) & fmt_addc_ops[0],
1358 { 0, 0, { 0 } }
1359 },
1360 /* addn $Rj,$Ri */
1361 {
1362 { 1, 1, 1, 1 },
1363 FR30_INSN_ADDN, "addn", "addn",
1364 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1365 & fmt_addn, { 0xa200 },
1366 (PTR) & fmt_addn_ops[0],
1367 { 0, 0, { 0 } }
1368 },
1369 /* addn $u4,$Ri */
1370 {
1371 { 1, 1, 1, 1 },
1372 FR30_INSN_ADDNI, "addni", "addn",
1373 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1374 & fmt_addni, { 0xa000 },
1375 (PTR) & fmt_addni_ops[0],
1376 { 0, 0, { 0 } }
1377 },
1378 /* addn2 $m4,$Ri */
1379 {
1380 { 1, 1, 1, 1 },
1381 FR30_INSN_ADDN2, "addn2", "addn2",
1382 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1383 & fmt_addn2, { 0xa100 },
1384 (PTR) & fmt_addn2_ops[0],
1385 { 0, 0, { 0 } }
1386 },
1387 /* sub $Rj,$Ri */
1388 {
1389 { 1, 1, 1, 1 },
1390 FR30_INSN_SUB, "sub", "sub",
1391 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1392 & fmt_add, { 0xac00 },
1393 (PTR) & fmt_add_ops[0],
1394 { 0, 0, { 0 } }
1395 },
1396 /* subc $Rj,$Ri */
1397 {
1398 { 1, 1, 1, 1 },
1399 FR30_INSN_SUBC, "subc", "subc",
1400 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1401 & fmt_addc, { 0xad00 },
1402 (PTR) & fmt_addc_ops[0],
1403 { 0, 0, { 0 } }
1404 },
1405 /* subn $Rj,$Ri */
1406 {
1407 { 1, 1, 1, 1 },
1408 FR30_INSN_SUBN, "subn", "subn",
1409 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1410 & fmt_addn, { 0xae00 },
1411 (PTR) & fmt_addn_ops[0],
1412 { 0, 0, { 0 } }
1413 },
1414 /* cmp $Rj,$Ri */
1415 {
1416 { 1, 1, 1, 1 },
1417 FR30_INSN_CMP, "cmp", "cmp",
1418 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1419 & fmt_cmp, { 0xaa00 },
1420 (PTR) & fmt_cmp_ops[0],
1421 { 0, 0, { 0 } }
1422 },
1423 /* cmp $u4,$Ri */
1424 {
1425 { 1, 1, 1, 1 },
1426 FR30_INSN_CMPI, "cmpi", "cmp",
1427 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1428 & fmt_cmpi, { 0xa800 },
1429 (PTR) & fmt_cmpi_ops[0],
1430 { 0, 0, { 0 } }
1431 },
1432 /* cmp2 $m4,$Ri */
1433 {
1434 { 1, 1, 1, 1 },
1435 FR30_INSN_CMP2, "cmp2", "cmp2",
1436 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
1437 & fmt_cmp2, { 0xa900 },
1438 (PTR) & fmt_cmp2_ops[0],
1439 { 0, 0, { 0 } }
1440 },
1441 /* and $Rj,$Ri */
1442 {
1443 { 1, 1, 1, 1 },
1444 FR30_INSN_AND, "and", "and",
1445 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1446 & fmt_and, { 0x8200 },
1447 (PTR) & fmt_and_ops[0],
1448 { 0, 0, { 0 } }
1449 },
1450 /* or $Rj,$Ri */
1451 {
1452 { 1, 1, 1, 1 },
1453 FR30_INSN_OR, "or", "or",
1454 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1455 & fmt_and, { 0x9200 },
1456 (PTR) & fmt_and_ops[0],
1457 { 0, 0, { 0 } }
1458 },
1459 /* eor $Rj,$Ri */
1460 {
1461 { 1, 1, 1, 1 },
1462 FR30_INSN_EOR, "eor", "eor",
1463 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1464 & fmt_and, { 0x9a00 },
1465 (PTR) & fmt_and_ops[0],
1466 { 0, 0, { 0 } }
1467 },
1468 /* and $Rj,@$Ri */
1469 {
1470 { 1, 1, 1, 1 },
1471 FR30_INSN_ANDM, "andm", "and",
1472 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1473 & fmt_andm, { 0x8400 },
1474 (PTR) & fmt_andm_ops[0],
1475 { 0, 0, { 0 } }
1476 },
1477 /* andh $Rj,@$Ri */
1478 {
1479 { 1, 1, 1, 1 },
1480 FR30_INSN_ANDH, "andh", "andh",
1481 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1482 & fmt_andh, { 0x8500 },
1483 (PTR) & fmt_andh_ops[0],
1484 { 0, 0, { 0 } }
1485 },
1486 /* andb $Rj,@$Ri */
1487 {
1488 { 1, 1, 1, 1 },
1489 FR30_INSN_ANDB, "andb", "andb",
1490 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1491 & fmt_andb, { 0x8600 },
1492 (PTR) & fmt_andb_ops[0],
1493 { 0, 0, { 0 } }
1494 },
1495 /* or $Rj,@$Ri */
1496 {
1497 { 1, 1, 1, 1 },
1498 FR30_INSN_ORM, "orm", "or",
1499 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1500 & fmt_andm, { 0x9400 },
1501 (PTR) & fmt_andm_ops[0],
1502 { 0, 0, { 0 } }
1503 },
1504 /* orh $Rj,@$Ri */
1505 {
1506 { 1, 1, 1, 1 },
1507 FR30_INSN_ORH, "orh", "orh",
1508 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1509 & fmt_andh, { 0x9500 },
1510 (PTR) & fmt_andh_ops[0],
1511 { 0, 0, { 0 } }
1512 },
1513 /* orb $Rj,@$Ri */
1514 {
1515 { 1, 1, 1, 1 },
1516 FR30_INSN_ORB, "orb", "orb",
1517 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1518 & fmt_andb, { 0x9600 },
1519 (PTR) & fmt_andb_ops[0],
1520 { 0, 0, { 0 } }
1521 },
1522 /* eor $Rj,@$Ri */
1523 {
1524 { 1, 1, 1, 1 },
1525 FR30_INSN_EORM, "eorm", "eor",
1526 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1527 & fmt_andm, { 0x9c00 },
1528 (PTR) & fmt_andm_ops[0],
1529 { 0, 0, { 0 } }
1530 },
1531 /* eorh $Rj,@$Ri */
1532 {
1533 { 1, 1, 1, 1 },
1534 FR30_INSN_EORH, "eorh", "eorh",
1535 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1536 & fmt_andh, { 0x9d00 },
1537 (PTR) & fmt_andh_ops[0],
1538 { 0, 0, { 0 } }
1539 },
1540 /* eorb $Rj,@$Ri */
1541 {
1542 { 1, 1, 1, 1 },
1543 FR30_INSN_EORB, "eorb", "eorb",
1544 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
1545 & fmt_andb, { 0x9e00 },
1546 (PTR) & fmt_andb_ops[0],
1547 { 0, 0, { 0 } }
1548 },
1549 /* bandl $u4,@$Ri */
1550 {
1551 { 1, 1, 1, 1 },
1552 FR30_INSN_BANDL, "bandl", "bandl",
1553 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1554 & fmt_bandl, { 0x8000 },
1555 (PTR) & fmt_bandl_ops[0],
1556 { 0, 0, { 0 } }
1557 },
1558 /* borl $u4,@$Ri */
1559 {
1560 { 1, 1, 1, 1 },
1561 FR30_INSN_BORL, "borl", "borl",
1562 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1563 & fmt_bandl, { 0x9000 },
1564 (PTR) & fmt_bandl_ops[0],
1565 { 0, 0, { 0 } }
1566 },
1567 /* beorl $u4,@$Ri */
1568 {
1569 { 1, 1, 1, 1 },
1570 FR30_INSN_BEORL, "beorl", "beorl",
1571 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1572 & fmt_bandl, { 0x9800 },
1573 (PTR) & fmt_bandl_ops[0],
1574 { 0, 0, { 0 } }
1575 },
1576 /* bandh $u4,@$Ri */
1577 {
1578 { 1, 1, 1, 1 },
1579 FR30_INSN_BANDH, "bandh", "bandh",
1580 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1581 & fmt_bandl, { 0x8100 },
1582 (PTR) & fmt_bandl_ops[0],
1583 { 0, 0, { 0 } }
1584 },
1585 /* borh $u4,@$Ri */
1586 {
1587 { 1, 1, 1, 1 },
1588 FR30_INSN_BORH, "borh", "borh",
1589 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1590 & fmt_bandl, { 0x9100 },
1591 (PTR) & fmt_bandl_ops[0],
1592 { 0, 0, { 0 } }
1593 },
1594 /* beorh $u4,@$Ri */
1595 {
1596 { 1, 1, 1, 1 },
1597 FR30_INSN_BEORH, "beorh", "beorh",
1598 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1599 & fmt_bandl, { 0x9900 },
1600 (PTR) & fmt_bandl_ops[0],
1601 { 0, 0, { 0 } }
1602 },
1603 /* btstl $u4,@$Ri */
1604 {
1605 { 1, 1, 1, 1 },
1606 FR30_INSN_BTSTL, "btstl", "btstl",
1607 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1608 & fmt_btstl, { 0x8800 },
1609 (PTR) & fmt_btstl_ops[0],
1610 { 0, 0, { 0 } }
1611 },
1612 /* btsth $u4,@$Ri */
1613 {
1614 { 1, 1, 1, 1 },
1615 FR30_INSN_BTSTH, "btsth", "btsth",
1616 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
1617 & fmt_btstl, { 0x8900 },
1618 (PTR) & fmt_btstl_ops[0],
1619 { 0, 0, { 0 } }
1620 },
1621 /* mul $Rj,$Ri */
1622 {
1623 { 1, 1, 1, 1 },
1624 FR30_INSN_MUL, "mul", "mul",
1625 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1626 & fmt_mul, { 0xaf00 },
1627 (PTR) & fmt_mul_ops[0],
1628 { 0, 0, { 0 } }
1629 },
1630 /* mulu $Rj,$Ri */
1631 {
1632 { 1, 1, 1, 1 },
1633 FR30_INSN_MULU, "mulu", "mulu",
1634 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1635 & fmt_mulu, { 0xab00 },
1636 (PTR) & fmt_mulu_ops[0],
1637 { 0, 0, { 0 } }
1638 },
1639 /* mulh $Rj,$Ri */
1640 {
1641 { 1, 1, 1, 1 },
1642 FR30_INSN_MULH, "mulh", "mulh",
1643 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1644 & fmt_mulh, { 0xbf00 },
1645 (PTR) & fmt_mulh_ops[0],
1646 { 0, 0, { 0 } }
1647 },
1648 /* muluh $Rj,$Ri */
1649 {
1650 { 1, 1, 1, 1 },
1651 FR30_INSN_MULUH, "muluh", "muluh",
1652 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1653 & fmt_mulh, { 0xbb00 },
1654 (PTR) & fmt_mulh_ops[0],
1655 { 0, 0, { 0 } }
1656 },
1657 /* div0s $Ri */
1658 {
1659 { 1, 1, 1, 1 },
1660 FR30_INSN_DIV0S, "div0s", "div0s",
1661 { { MNEM, ' ', OP (RI), 0 } },
1662 & fmt_div0s, { 0x9740 },
1663 (PTR) 0,
1664 { 0, 0, { 0 } }
1665 },
1666 /* div0u $Ri */
1667 {
1668 { 1, 1, 1, 1 },
1669 FR30_INSN_DIV0U, "div0u", "div0u",
1670 { { MNEM, ' ', OP (RI), 0 } },
1671 & fmt_div0s, { 0x9750 },
1672 (PTR) 0,
1673 { 0, 0, { 0 } }
1674 },
1675 /* div1 $Ri */
1676 {
1677 { 1, 1, 1, 1 },
1678 FR30_INSN_DIV1, "div1", "div1",
1679 { { MNEM, ' ', OP (RI), 0 } },
1680 & fmt_div0s, { 0x9760 },
1681 (PTR) 0,
1682 { 0, 0, { 0 } }
1683 },
1684 /* div2 $Ri */
1685 {
1686 { 1, 1, 1, 1 },
1687 FR30_INSN_DIV2, "div2", "div2",
1688 { { MNEM, ' ', OP (RI), 0 } },
1689 & fmt_div0s, { 0x9770 },
1690 (PTR) 0,
1691 { 0, 0, { 0 } }
1692 },
1693 /* div3 */
1694 {
1695 { 1, 1, 1, 1 },
1696 FR30_INSN_DIV3, "div3", "div3",
1697 { { MNEM, 0 } },
1698 & fmt_div3, { 0x9f60 },
1699 (PTR) 0,
1700 { 0, 0, { 0 } }
1701 },
1702 /* div4s */
1703 {
1704 { 1, 1, 1, 1 },
1705 FR30_INSN_DIV4S, "div4s", "div4s",
1706 { { MNEM, 0 } },
1707 & fmt_div3, { 0x9f70 },
1708 (PTR) 0,
1709 { 0, 0, { 0 } }
1710 },
1711 /* lsl $Rj,$Ri */
1712 {
1713 { 1, 1, 1, 1 },
1714 FR30_INSN_LSL, "lsl", "lsl",
1715 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1716 & fmt_lsl, { 0xb600 },
1717 (PTR) & fmt_lsl_ops[0],
1718 { 0, 0, { 0 } }
1719 },
1720 /* lsl $u4,$Ri */
1721 {
1722 { 1, 1, 1, 1 },
1723 FR30_INSN_LSLI, "lsli", "lsl",
1724 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1725 & fmt_lsli, { 0xb400 },
1726 (PTR) & fmt_lsli_ops[0],
1727 { 0, 0, { 0 } }
1728 },
1729 /* lsl2 $u4,$Ri */
1730 {
1731 { 1, 1, 1, 1 },
1732 FR30_INSN_LSL2, "lsl2", "lsl2",
1733 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1734 & fmt_lsli, { 0xb500 },
1735 (PTR) & fmt_lsli_ops[0],
1736 { 0, 0, { 0 } }
1737 },
1738 /* lsr $Rj,$Ri */
1739 {
1740 { 1, 1, 1, 1 },
1741 FR30_INSN_LSR, "lsr", "lsr",
1742 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1743 & fmt_lsl, { 0xb200 },
1744 (PTR) & fmt_lsl_ops[0],
1745 { 0, 0, { 0 } }
1746 },
1747 /* lsr $u4,$Ri */
1748 {
1749 { 1, 1, 1, 1 },
1750 FR30_INSN_LSRI, "lsri", "lsr",
1751 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1752 & fmt_lsli, { 0xb000 },
1753 (PTR) & fmt_lsli_ops[0],
1754 { 0, 0, { 0 } }
1755 },
1756 /* lsr2 $u4,$Ri */
1757 {
1758 { 1, 1, 1, 1 },
1759 FR30_INSN_LSR2, "lsr2", "lsr2",
1760 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1761 & fmt_lsli, { 0xb100 },
1762 (PTR) & fmt_lsli_ops[0],
1763 { 0, 0, { 0 } }
1764 },
1765 /* asr $Rj,$Ri */
1766 {
1767 { 1, 1, 1, 1 },
1768 FR30_INSN_ASR, "asr", "asr",
1769 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1770 & fmt_lsl, { 0xba00 },
1771 (PTR) & fmt_lsl_ops[0],
1772 { 0, 0, { 0 } }
1773 },
1774 /* asr $u4,$Ri */
1775 {
1776 { 1, 1, 1, 1 },
1777 FR30_INSN_ASRI, "asri", "asr",
1778 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1779 & fmt_lsli, { 0xb800 },
1780 (PTR) & fmt_lsli_ops[0],
1781 { 0, 0, { 0 } }
1782 },
1783 /* asr2 $u4,$Ri */
1784 {
1785 { 1, 1, 1, 1 },
1786 FR30_INSN_ASR2, "asr2", "asr2",
1787 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1788 & fmt_lsli, { 0xb900 },
1789 (PTR) & fmt_lsli_ops[0],
1790 { 0, 0, { 0 } }
1791 },
1792 /* ldi:8 $i8,$Ri */
1793 {
1794 { 1, 1, 1, 1 },
1795 FR30_INSN_LDI8, "ldi8", "ldi:8",
1796 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
1797 & fmt_ldi8, { 0xc000 },
1798 (PTR) & fmt_ldi8_ops[0],
1799 { 0, 0, { 0 } }
1800 },
1801 /* ldi:20 $i20,$Ri */
1802 {
1803 { 1, 1, 1, 1 },
1804 FR30_INSN_LDI20, "ldi20", "ldi:20",
1805 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
1806 & fmt_ldi20, { 0x9b00 },
1807 (PTR) & fmt_ldi20_ops[0],
1808 { 0, 0|A(NOT_IN_DELAY_SLOT), { 0 } }
1809 },
1810 /* ldi:32 $i32,$Ri */
1811 {
1812 { 1, 1, 1, 1 },
1813 FR30_INSN_LDI32, "ldi32", "ldi:32",
1814 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
1815 & fmt_ldi32, { 0x9f80 },
1816 (PTR) & fmt_ldi32_ops[0],
1817 { 0, 0, { 0 } }
1818 },
1819 /* ld @$Rj,$Ri */
1820 {
1821 { 1, 1, 1, 1 },
1822 FR30_INSN_LD, "ld", "ld",
1823 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1824 & fmt_ld, { 0x400 },
1825 (PTR) & fmt_ld_ops[0],
1826 { 0, 0, { 0 } }
1827 },
1828 /* lduh @$Rj,$Ri */
1829 {
1830 { 1, 1, 1, 1 },
1831 FR30_INSN_LDUH, "lduh", "lduh",
1832 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1833 & fmt_lduh, { 0x500 },
1834 (PTR) & fmt_lduh_ops[0],
1835 { 0, 0, { 0 } }
1836 },
1837 /* ldub @$Rj,$Ri */
1838 {
1839 { 1, 1, 1, 1 },
1840 FR30_INSN_LDUB, "ldub", "ldub",
1841 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1842 & fmt_ldub, { 0x600 },
1843 (PTR) & fmt_ldub_ops[0],
1844 { 0, 0, { 0 } }
1845 },
1846 /* ld @($R13,$Rj),$Ri */
1847 {
1848 { 1, 1, 1, 1 },
1849 FR30_INSN_LDR13, "ldr13", "ld",
1850 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
1851 & fmt_ldr13, { 0x0 },
1852 (PTR) & fmt_ldr13_ops[0],
1853 { 0, 0, { 0 } }
1854 },
1855 /* lduh @($R13,$Rj),$Ri */
1856 {
1857 { 1, 1, 1, 1 },
1858 FR30_INSN_LDR13UH, "ldr13uh", "lduh",
1859 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
1860 & fmt_ldr13uh, { 0x100 },
1861 (PTR) & fmt_ldr13uh_ops[0],
1862 { 0, 0, { 0 } }
1863 },
1864 /* ldub @($R13,$Rj),$Ri */
1865 {
1866 { 1, 1, 1, 1 },
1867 FR30_INSN_LDR13UB, "ldr13ub", "ldub",
1868 { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } },
1869 & fmt_ldr13ub, { 0x200 },
1870 (PTR) & fmt_ldr13ub_ops[0],
1871 { 0, 0, { 0 } }
1872 },
1873 /* ld @($R14,$disp10),$Ri */
1874 {
1875 { 1, 1, 1, 1 },
1876 FR30_INSN_LDR14, "ldr14", "ld",
1877 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } },
1878 & fmt_ldr14, { 0x2000 },
1879 (PTR) & fmt_ldr14_ops[0],
1880 { 0, 0, { 0 } }
1881 },
1882 /* lduh @($R14,$disp9),$Ri */
1883 {
1884 { 1, 1, 1, 1 },
1885 FR30_INSN_LDR14UH, "ldr14uh", "lduh",
1886 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } },
1887 & fmt_ldr14uh, { 0x4000 },
1888 (PTR) & fmt_ldr14uh_ops[0],
1889 { 0, 0, { 0 } }
1890 },
1891 /* ldub @($R14,$disp8),$Ri */
1892 {
1893 { 1, 1, 1, 1 },
1894 FR30_INSN_LDR14UB, "ldr14ub", "ldub",
1895 { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } },
1896 & fmt_ldr14ub, { 0x6000 },
1897 (PTR) & fmt_ldr14ub_ops[0],
1898 { 0, 0, { 0 } }
1899 },
1900 /* ld @($R15,$udisp6),$Ri */
1901 {
1902 { 1, 1, 1, 1 },
1903 FR30_INSN_LDR15, "ldr15", "ld",
1904 { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } },
1905 & fmt_ldr15, { 0x300 },
1906 (PTR) & fmt_ldr15_ops[0],
1907 { 0, 0, { 0 } }
1908 },
1909 /* ld @$R15+,$Ri */
1910 {
1911 { 1, 1, 1, 1 },
1912 FR30_INSN_LDR15GR, "ldr15gr", "ld",
1913 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } },
1914 & fmt_ldr15gr, { 0x700 },
1915 (PTR) & fmt_ldr15gr_ops[0],
1916 { 0, 0, { 0 } }
1917 },
1918 /* ld @$R15+,$Rs2 */
1919 {
1920 { 1, 1, 1, 1 },
1921 FR30_INSN_LDR15DR, "ldr15dr", "ld",
1922 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } },
1923 & fmt_ldr15dr, { 0x780 },
1924 (PTR) 0,
1925 { 0, 0, { 0 } }
1926 },
1927 /* ld @$R15+,$ps */
1928 {
1929 { 1, 1, 1, 1 },
1930 FR30_INSN_LDR15PS, "ldr15ps", "ld",
1931 { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } },
1932 & fmt_div3, { 0x790 },
1933 (PTR) 0,
1934 { 0, 0, { 0 } }
1935 },
1936 /* st $Ri,@$Rj */
1937 {
1938 { 1, 1, 1, 1 },
1939 FR30_INSN_ST, "st", "st",
1940 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
1941 & fmt_st, { 0x1400 },
1942 (PTR) & fmt_st_ops[0],
1943 { 0, 0, { 0 } }
1944 },
1945 /* sth $Ri,@$Rj */
1946 {
1947 { 1, 1, 1, 1 },
1948 FR30_INSN_STH, "sth", "sth",
1949 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
1950 & fmt_sth, { 0x1500 },
1951 (PTR) 0,
1952 { 0, 0, { 0 } }
1953 },
1954 /* stb $Ri,@$Rj */
1955 {
1956 { 1, 1, 1, 1 },
1957 FR30_INSN_STB, "stb", "stb",
1958 { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } },
1959 & fmt_sth, { 0x1600 },
1960 (PTR) 0,
1961 { 0, 0, { 0 } }
1962 },
1963 /* st $Ri,@($R13,$Rj) */
1964 {
1965 { 1, 1, 1, 1 },
1966 FR30_INSN_STR13, "str13", "st",
1967 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
1968 & fmt_sth, { 0x1000 },
1969 (PTR) 0,
1970 { 0, 0, { 0 } }
1971 },
1972 /* sth $Ri,@($R13,$Rj) */
1973 {
1974 { 1, 1, 1, 1 },
1975 FR30_INSN_STR13H, "str13h", "sth",
1976 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
1977 & fmt_sth, { 0x1100 },
1978 (PTR) 0,
1979 { 0, 0, { 0 } }
1980 },
1981 /* stb $Ri,@($R13,$Rj) */
1982 {
1983 { 1, 1, 1, 1 },
1984 FR30_INSN_STR13B, "stR13b", "stb",
1985 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } },
1986 & fmt_sth, { 0x1200 },
1987 (PTR) 0,
1988 { 0, 0, { 0 } }
1989 },
1990 /* st $Ri,@($R14,$disp10) */
1991 {
1992 { 1, 1, 1, 1 },
1993 FR30_INSN_STR14, "str14", "st",
1994 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } },
1995 & fmt_str14, { 0x3000 },
1996 (PTR) 0,
1997 { 0, 0, { 0 } }
1998 },
1999 /* sth $Ri,@($R14,$disp9) */
2000 {
2001 { 1, 1, 1, 1 },
2002 FR30_INSN_STR14H, "str14h", "sth",
2003 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } },
2004 & fmt_str14h, { 0x5000 },
2005 (PTR) 0,
2006 { 0, 0, { 0 } }
2007 },
2008 /* stb $Ri,@($R14,$disp8) */
2009 {
2010 { 1, 1, 1, 1 },
2011 FR30_INSN_STR14B, "str14b", "stb",
2012 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } },
2013 & fmt_str14b, { 0x7000 },
2014 (PTR) 0,
2015 { 0, 0, { 0 } }
2016 },
2017 /* st $Ri,@($R15,$udisp6) */
2018 {
2019 { 1, 1, 1, 1 },
2020 FR30_INSN_STR15, "str15", "st",
2021 { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } },
2022 & fmt_str15, { 0x1300 },
2023 (PTR) 0,
2024 { 0, 0, { 0 } }
2025 },
2026 /* st $Ri,@-$R15 */
2027 {
2028 { 1, 1, 1, 1 },
2029 FR30_INSN_STR15GR, "str15gr", "st",
2030 { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } },
2031 & fmt_div0s, { 0x1700 },
2032 (PTR) 0,
2033 { 0, 0, { 0 } }
2034 },
2035 /* st $Rs2,@-$R15 */
2036 {
2037 { 1, 1, 1, 1 },
2038 FR30_INSN_STR15DR, "str15dr", "st",
2039 { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } },
2040 & fmt_ldr15dr, { 0x1780 },
2041 (PTR) 0,
2042 { 0, 0, { 0 } }
2043 },
2044 /* st $ps,@-$R15 */
2045 {
2046 { 1, 1, 1, 1 },
2047 FR30_INSN_STR15PS, "str15ps", "st",
2048 { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } },
2049 & fmt_div3, { 0x1790 },
2050 (PTR) 0,
2051 { 0, 0, { 0 } }
2052 },
2053 /* mov $Rj,$Ri */
2054 {
2055 { 1, 1, 1, 1 },
2056 FR30_INSN_MOV, "mov", "mov",
2057 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
2058 & fmt_mov, { 0x8b00 },
2059 (PTR) & fmt_mov_ops[0],
2060 { 0, 0, { 0 } }
2061 },
2062 /* mov $Rs1,$Ri */
2063 {
2064 { 1, 1, 1, 1 },
2065 FR30_INSN_MOVDR, "movdr", "mov",
2066 { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
2067 & fmt_movdr, { 0xb700 },
2068 (PTR) & fmt_movdr_ops[0],
2069 { 0, 0, { 0 } }
2070 },
2071 /* mov $ps,$Ri */
2072 {
2073 { 1, 1, 1, 1 },
2074 FR30_INSN_MOVPS, "movps", "mov",
2075 { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } },
2076 & fmt_div0s, { 0x1710 },
2077 (PTR) 0,
2078 { 0, 0, { 0 } }
2079 },
2080 /* mov $Ri,$Rs1 */
2081 {
2082 { 1, 1, 1, 1 },
2083 FR30_INSN_MOV2DR, "mov2dr", "mov",
2084 { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
2085 & fmt_mov2dr, { 0xb300 },
2086 (PTR) & fmt_mov2dr_ops[0],
2087 { 0, 0, { 0 } }
2088 },
2089 /* mov $Ri,$ps */
2090 {
2091 { 1, 1, 1, 1 },
2092 FR30_INSN_MOV2PS, "mov2ps", "mov",
2093 { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } },
2094 & fmt_div0s, { 0x710 },
2095 (PTR) 0,
2096 { 0, 0, { 0 } }
2097 },
2098 /* jmp @$Ri */
2099 {
2100 { 1, 1, 1, 1 },
2101 FR30_INSN_JMP, "jmp", "jmp",
2102 { { MNEM, ' ', '@', OP (RI), 0 } },
2103 & fmt_div0s, { 0x9700 },
2104 (PTR) 0,
2105 { 0, 0, { 0 } }
2106 },
2107 /* jmp:d @$Ri */
2108 {
2109 { 1, 1, 1, 1 },
2110 FR30_INSN_JMPD, "jmpd", "jmp:d",
2111 { { MNEM, ' ', '@', OP (RI), 0 } },
2112 & fmt_jmpd, { 0x9f00 },
2113 (PTR) & fmt_jmpd_ops[0],
2114 { 0, 0|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT)|A(UNCOND_CTI), { 0 } }
2115 },
2116 /* call @$Ri */
2117 {
2118 { 1, 1, 1, 1 },
2119 FR30_INSN_CALLR, "callr", "call",
2120 { { MNEM, ' ', '@', OP (RI), 0 } },
2121 & fmt_div0s, { 0x9710 },
2122 (PTR) 0,
2123 { 0, 0, { 0 } }
2124 },
2125 /* call:D @$Ri */
2126 {
2127 { 1, 1, 1, 1 },
2128 FR30_INSN_CALLRD, "callrd", "call:D",
2129 { { MNEM, ' ', '@', OP (RI), 0 } },
2130 & fmt_div0s, { 0x9f10 },
2131 (PTR) 0,
2132 { 0, 0, { 0 } }
2133 },
2134 /* call $label12 */
2135 {
2136 { 1, 1, 1, 1 },
2137 FR30_INSN_CALL, "call", "call",
2138 { { MNEM, ' ', OP (LABEL12), 0 } },
2139 & fmt_call, { 0xd000 },
2140 (PTR) 0,
2141 { 0, 0, { 0 } }
2142 },
2143 /* call:D $label12 */
2144 {
2145 { 1, 1, 1, 1 },
2146 FR30_INSN_CALLD, "calld", "call:D",
2147 { { MNEM, ' ', OP (LABEL12), 0 } },
2148 & fmt_call, { 0xd400 },
2149 (PTR) 0,
2150 { 0, 0, { 0 } }
2151 },
2152 /* ret */
2153 {
2154 { 1, 1, 1, 1 },
2155 FR30_INSN_RET, "ret", "ret",
2156 { { MNEM, 0 } },
2157 & fmt_div3, { 0x9720 },
2158 (PTR) 0,
2159 { 0, 0, { 0 } }
2160 },
2161 /* ret:D */
2162 {
2163 { 1, 1, 1, 1 },
2164 FR30_INSN_RETD, "retd", "ret:D",
2165 { { MNEM, 0 } },
2166 & fmt_div3, { 0x9f20 },
2167 (PTR) 0,
2168 { 0, 0, { 0 } }
2169 },
2170 /* int $u8 */
2171 {
2172 { 1, 1, 1, 1 },
2173 FR30_INSN_INT, "int", "int",
2174 { { MNEM, ' ', OP (U8), 0 } },
2175 & fmt_int, { 0x1f00 },
2176 (PTR) & fmt_int_ops[0],
2177 { 0, 0|A(UNCOND_CTI), { 0 } }
2178 },
2179 /* inte */
2180 {
2181 { 1, 1, 1, 1 },
2182 FR30_INSN_INTE, "inte", "inte",
2183 { { MNEM, 0 } },
2184 & fmt_div3, { 0x9f30 },
2185 (PTR) 0,
2186 { 0, 0, { 0 } }
2187 },
2188 /* reti */
2189 {
2190 { 1, 1, 1, 1 },
2191 FR30_INSN_RETI, "reti", "reti",
2192 { { MNEM, 0 } },
2193 & fmt_reti, { 0x9730 },
2194 (PTR) & fmt_reti_ops[0],
2195 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2196 },
2197 /* bra $label9 */
2198 {
2199 { 1, 1, 1, 1 },
2200 FR30_INSN_BRA, "bra", "bra",
2201 { { MNEM, ' ', OP (LABEL9), 0 } },
2202 & fmt_bra, { 0xe000 },
2203 (PTR) & fmt_bra_ops[0],
2204 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2205 },
2206 /* bra:D $label9 */
2207 {
2208 { 1, 1, 1, 1 },
2209 FR30_INSN_BRAD, "brad", "bra:D",
2210 { { MNEM, ' ', OP (LABEL9), 0 } },
2211 & fmt_bra, { 0xf000 },
2212 (PTR) & fmt_bra_ops[0],
2213 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2214 },
2215 /* bno $label9 */
2216 {
2217 { 1, 1, 1, 1 },
2218 FR30_INSN_BNO, "bno", "bno",
2219 { { MNEM, ' ', OP (LABEL9), 0 } },
2220 & fmt_bra, { 0xe100 },
2221 (PTR) & fmt_bra_ops[0],
2222 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2223 },
2224 /* bno:D $label9 */
2225 {
2226 { 1, 1, 1, 1 },
2227 FR30_INSN_BNOD, "bnod", "bno:D",
2228 { { MNEM, ' ', OP (LABEL9), 0 } },
2229 & fmt_bra, { 0xf100 },
2230 (PTR) & fmt_bra_ops[0],
2231 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2232 },
2233 /* beq $label9 */
2234 {
2235 { 1, 1, 1, 1 },
2236 FR30_INSN_BEQ, "beq", "beq",
2237 { { MNEM, ' ', OP (LABEL9), 0 } },
2238 & fmt_beq, { 0xe200 },
2239 (PTR) & fmt_beq_ops[0],
2240 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2241 },
2242 /* beq:D $label9 */
2243 {
2244 { 1, 1, 1, 1 },
2245 FR30_INSN_BEQD, "beqd", "beq:D",
2246 { { MNEM, ' ', OP (LABEL9), 0 } },
2247 & fmt_beq, { 0xf200 },
2248 (PTR) & fmt_beq_ops[0],
2249 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2250 },
2251 /* bne $label9 */
2252 {
2253 { 1, 1, 1, 1 },
2254 FR30_INSN_BNE, "bne", "bne",
2255 { { MNEM, ' ', OP (LABEL9), 0 } },
2256 & fmt_beq, { 0xe300 },
2257 (PTR) & fmt_beq_ops[0],
2258 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2259 },
2260 /* bne:D $label9 */
2261 {
2262 { 1, 1, 1, 1 },
2263 FR30_INSN_BNED, "bned", "bne:D",
2264 { { MNEM, ' ', OP (LABEL9), 0 } },
2265 & fmt_beq, { 0xf300 },
2266 (PTR) & fmt_beq_ops[0],
2267 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2268 },
2269 /* bc $label9 */
2270 {
2271 { 1, 1, 1, 1 },
2272 FR30_INSN_BC, "bc", "bc",
2273 { { MNEM, ' ', OP (LABEL9), 0 } },
2274 & fmt_bc, { 0xe400 },
2275 (PTR) & fmt_bc_ops[0],
2276 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2277 },
2278 /* bc:D $label9 */
2279 {
2280 { 1, 1, 1, 1 },
2281 FR30_INSN_BCD, "bcd", "bc:D",
2282 { { MNEM, ' ', OP (LABEL9), 0 } },
2283 & fmt_bc, { 0xf400 },
2284 (PTR) & fmt_bc_ops[0],
2285 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2286 },
2287 /* bnc $label9 */
2288 {
2289 { 1, 1, 1, 1 },
2290 FR30_INSN_BNC, "bnc", "bnc",
2291 { { MNEM, ' ', OP (LABEL9), 0 } },
2292 & fmt_bc, { 0xe500 },
2293 (PTR) & fmt_bc_ops[0],
2294 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2295 },
2296 /* bnc:D $label9 */
2297 {
2298 { 1, 1, 1, 1 },
2299 FR30_INSN_BNCD, "bncd", "bnc:D",
2300 { { MNEM, ' ', OP (LABEL9), 0 } },
2301 & fmt_bc, { 0xf500 },
2302 (PTR) & fmt_bc_ops[0],
2303 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2304 },
2305 /* bn $label9 */
2306 {
2307 { 1, 1, 1, 1 },
2308 FR30_INSN_BN, "bn", "bn",
2309 { { MNEM, ' ', OP (LABEL9), 0 } },
2310 & fmt_bn, { 0xe600 },
2311 (PTR) & fmt_bn_ops[0],
2312 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2313 },
2314 /* bn:D $label9 */
2315 {
2316 { 1, 1, 1, 1 },
2317 FR30_INSN_BND, "bnd", "bn:D",
2318 { { MNEM, ' ', OP (LABEL9), 0 } },
2319 & fmt_bn, { 0xf600 },
2320 (PTR) & fmt_bn_ops[0],
2321 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2322 },
2323 /* bp $label9 */
2324 {
2325 { 1, 1, 1, 1 },
2326 FR30_INSN_BP, "bp", "bp",
2327 { { MNEM, ' ', OP (LABEL9), 0 } },
2328 & fmt_bn, { 0xe700 },
2329 (PTR) & fmt_bn_ops[0],
2330 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2331 },
2332 /* bp:D $label9 */
2333 {
2334 { 1, 1, 1, 1 },
2335 FR30_INSN_BPD, "bpd", "bp:D",
2336 { { MNEM, ' ', OP (LABEL9), 0 } },
2337 & fmt_bn, { 0xf700 },
2338 (PTR) & fmt_bn_ops[0],
2339 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2340 },
2341 /* bv $label9 */
2342 {
2343 { 1, 1, 1, 1 },
2344 FR30_INSN_BV, "bv", "bv",
2345 { { MNEM, ' ', OP (LABEL9), 0 } },
2346 & fmt_bv, { 0xe800 },
2347 (PTR) & fmt_bv_ops[0],
2348 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2349 },
2350 /* bv:D $label9 */
2351 {
2352 { 1, 1, 1, 1 },
2353 FR30_INSN_BVD, "bvd", "bv:D",
2354 { { MNEM, ' ', OP (LABEL9), 0 } },
2355 & fmt_bv, { 0xf800 },
2356 (PTR) & fmt_bv_ops[0],
2357 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2358 },
2359 /* bnv $label9 */
2360 {
2361 { 1, 1, 1, 1 },
2362 FR30_INSN_BNV, "bnv", "bnv",
2363 { { MNEM, ' ', OP (LABEL9), 0 } },
2364 & fmt_bv, { 0xe900 },
2365 (PTR) & fmt_bv_ops[0],
2366 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2367 },
2368 /* bnv:D $label9 */
2369 {
2370 { 1, 1, 1, 1 },
2371 FR30_INSN_BNVD, "bnvd", "bnv:D",
2372 { { MNEM, ' ', OP (LABEL9), 0 } },
2373 & fmt_bv, { 0xf900 },
2374 (PTR) & fmt_bv_ops[0],
2375 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2376 },
2377 /* blt $label9 */
2378 {
2379 { 1, 1, 1, 1 },
2380 FR30_INSN_BLT, "blt", "blt",
2381 { { MNEM, ' ', OP (LABEL9), 0 } },
2382 & fmt_blt, { 0xea00 },
2383 (PTR) & fmt_blt_ops[0],
2384 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2385 },
2386 /* blt:D $label9 */
2387 {
2388 { 1, 1, 1, 1 },
2389 FR30_INSN_BLTD, "bltd", "blt:D",
2390 { { MNEM, ' ', OP (LABEL9), 0 } },
2391 & fmt_blt, { 0xfa00 },
2392 (PTR) & fmt_blt_ops[0],
2393 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2394 },
2395 /* bge $label9 */
2396 {
2397 { 1, 1, 1, 1 },
2398 FR30_INSN_BGE, "bge", "bge",
2399 { { MNEM, ' ', OP (LABEL9), 0 } },
2400 & fmt_blt, { 0xeb00 },
2401 (PTR) & fmt_blt_ops[0],
2402 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2403 },
2404 /* bge:D $label9 */
2405 {
2406 { 1, 1, 1, 1 },
2407 FR30_INSN_BGED, "bged", "bge:D",
2408 { { MNEM, ' ', OP (LABEL9), 0 } },
2409 & fmt_blt, { 0xfb00 },
2410 (PTR) & fmt_blt_ops[0],
2411 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2412 },
2413 /* ble $label9 */
2414 {
2415 { 1, 1, 1, 1 },
2416 FR30_INSN_BLE, "ble", "ble",
2417 { { MNEM, ' ', OP (LABEL9), 0 } },
2418 & fmt_ble, { 0xec00 },
2419 (PTR) & fmt_ble_ops[0],
2420 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2421 },
2422 /* ble:D $label9 */
2423 {
2424 { 1, 1, 1, 1 },
2425 FR30_INSN_BLED, "bled", "ble:D",
2426 { { MNEM, ' ', OP (LABEL9), 0 } },
2427 & fmt_ble, { 0xfc00 },
2428 (PTR) & fmt_ble_ops[0],
2429 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2430 },
2431 /* bgt $label9 */
2432 {
2433 { 1, 1, 1, 1 },
2434 FR30_INSN_BGT, "bgt", "bgt",
2435 { { MNEM, ' ', OP (LABEL9), 0 } },
2436 & fmt_ble, { 0xed00 },
2437 (PTR) & fmt_ble_ops[0],
2438 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2439 },
2440 /* bgt:D $label9 */
2441 {
2442 { 1, 1, 1, 1 },
2443 FR30_INSN_BGTD, "bgtd", "bgt:D",
2444 { { MNEM, ' ', OP (LABEL9), 0 } },
2445 & fmt_ble, { 0xfd00 },
2446 (PTR) & fmt_ble_ops[0],
2447 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2448 },
2449 /* bls $label9 */
2450 {
2451 { 1, 1, 1, 1 },
2452 FR30_INSN_BLS, "bls", "bls",
2453 { { MNEM, ' ', OP (LABEL9), 0 } },
2454 & fmt_bls, { 0xee00 },
2455 (PTR) & fmt_bls_ops[0],
2456 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2457 },
2458 /* bls:D $label9 */
2459 {
2460 { 1, 1, 1, 1 },
2461 FR30_INSN_BLSD, "blsd", "bls:D",
2462 { { MNEM, ' ', OP (LABEL9), 0 } },
2463 & fmt_bls, { 0xfe00 },
2464 (PTR) & fmt_bls_ops[0],
2465 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2466 },
2467 /* bhi $label9 */
2468 {
2469 { 1, 1, 1, 1 },
2470 FR30_INSN_BHI, "bhi", "bhi",
2471 { { MNEM, ' ', OP (LABEL9), 0 } },
2472 & fmt_bls, { 0xef00 },
2473 (PTR) & fmt_bls_ops[0],
2474 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2475 },
2476 /* bhi:D $label9 */
2477 {
2478 { 1, 1, 1, 1 },
2479 FR30_INSN_BHID, "bhid", "bhi:D",
2480 { { MNEM, ' ', OP (LABEL9), 0 } },
2481 & fmt_bls, { 0xff00 },
2482 (PTR) & fmt_bls_ops[0],
2483 { 0, 0|A(COND_CTI)|A(COND_CTI), { 0 } }
2484 },
2485 /* dmov $R13,@$dir10 */
2486 {
2487 { 1, 1, 1, 1 },
2488 FR30_INSN_DMOVR13, "dmovr13", "dmov",
2489 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } },
2490 & fmt_dmovr13, { 0x1800 },
2491 (PTR) 0,
2492 { 0, 0, { 0 } }
2493 },
2494 /* dmovh $R13,@$dir9 */
2495 {
2496 { 1, 1, 1, 1 },
2497 FR30_INSN_DMOVR13H, "dmovr13h", "dmovh",
2498 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } },
2499 & fmt_dmovr13h, { 0x1900 },
2500 (PTR) 0,
2501 { 0, 0, { 0 } }
2502 },
2503 /* dmovb $R13,@$dir8 */
2504 {
2505 { 1, 1, 1, 1 },
2506 FR30_INSN_DMOVR13B, "dmovr13b", "dmovb",
2507 { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } },
2508 & fmt_dmovr13b, { 0x1a00 },
2509 (PTR) 0,
2510 { 0, 0, { 0 } }
2511 },
2512 /* dmov @$R13+,@$dir10 */
2513 {
2514 { 1, 1, 1, 1 },
2515 FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov",
2516 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } },
2517 & fmt_dmovr13, { 0x1c00 },
2518 (PTR) 0,
2519 { 0, 0, { 0 } }
2520 },
2521 /* dmovh @$R13+,@$dir9 */
2522 {
2523 { 1, 1, 1, 1 },
2524 FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh",
2525 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } },
2526 & fmt_dmovr13h, { 0x1d00 },
2527 (PTR) 0,
2528 { 0, 0, { 0 } }
2529 },
2530 /* dmovb @$R13+,@$dir8 */
2531 {
2532 { 1, 1, 1, 1 },
2533 FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb",
2534 { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } },
2535 & fmt_dmovr13b, { 0x1e00 },
2536 (PTR) 0,
2537 { 0, 0, { 0 } }
2538 },
2539 /* dmov @$R15+,@$dir10 */
2540 {
2541 { 1, 1, 1, 1 },
2542 FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov",
2543 { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } },
2544 & fmt_dmovr13, { 0x1b00 },
2545 (PTR) 0,
2546 { 0, 0, { 0 } }
2547 },
2548 /* dmov @$dir10,$R13 */
2549 {
2550 { 1, 1, 1, 1 },
2551 FR30_INSN_DMOV2R13, "dmov2r13", "dmov",
2552 { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } },
2553 & fmt_dmovr13, { 0x800 },
2554 (PTR) 0,
2555 { 0, 0, { 0 } }
2556 },
2557 /* dmovh @$dir9,$R13 */
2558 {
2559 { 1, 1, 1, 1 },
2560 FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh",
2561 { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } },
2562 & fmt_dmovr13h, { 0x900 },
2563 (PTR) 0,
2564 { 0, 0, { 0 } }
2565 },
2566 /* dmovb @$dir8,$R13 */
2567 {
2568 { 1, 1, 1, 1 },
2569 FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb",
2570 { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } },
2571 & fmt_dmovr13b, { 0xa00 },
2572 (PTR) 0,
2573 { 0, 0, { 0 } }
2574 },
2575 /* dmov @$dir10,@$R13+ */
2576 {
2577 { 1, 1, 1, 1 },
2578 FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov",
2579 { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } },
2580 & fmt_dmovr13, { 0xc00 },
2581 (PTR) 0,
2582 { 0, 0, { 0 } }
2583 },
2584 /* dmovh @$dir9,@$R13+ */
2585 {
2586 { 1, 1, 1, 1 },
2587 FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh",
2588 { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } },
2589 & fmt_dmovr13h, { 0xd00 },
2590 (PTR) 0,
2591 { 0, 0, { 0 } }
2592 },
2593 /* dmovb @$dir8,@$R13+ */
2594 {
2595 { 1, 1, 1, 1 },
2596 FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb",
2597 { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } },
2598 & fmt_dmovr13b, { 0xe00 },
2599 (PTR) 0,
2600 { 0, 0, { 0 } }
2601 },
2602 /* dmov @$dir10,@-$R15 */
2603 {
2604 { 1, 1, 1, 1 },
2605 FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov",
2606 { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } },
2607 & fmt_dmovr13, { 0xb00 },
2608 (PTR) 0,
2609 { 0, 0, { 0 } }
2610 },
2611 /* ldres @$Ri+,$u4 */
2612 {
2613 { 1, 1, 1, 1 },
2614 FR30_INSN_LDRES, "ldres", "ldres",
2615 { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
2616 & fmt_ldres, { 0xbc00 },
2617 (PTR) 0,
2618 { 0, 0, { 0 } }
2619 },
2620 /* stres $u4,@$Ri+ */
2621 {
2622 { 1, 1, 1, 1 },
2623 FR30_INSN_STRES, "stres", "stres",
2624 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
2625 & fmt_ldres, { 0xbd00 },
2626 (PTR) 0,
2627 { 0, 0, { 0 } }
2628 },
2629 /* copop $u4c,$ccc,$CRj,$CRi */
2630 {
2631 { 1, 1, 1, 1 },
2632 FR30_INSN_COPOP, "copop", "copop",
2633 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } },
2634 & fmt_copop, { 0x9fc0 },
2635 (PTR) 0,
2636 { 0, 0, { 0 } }
2637 },
2638 /* copld $u4c,$ccc,$Rjc,$CRi */
2639 {
2640 { 1, 1, 1, 1 },
2641 FR30_INSN_COPLD, "copld", "copld",
2642 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } },
2643 & fmt_copld, { 0x9fd0 },
2644 (PTR) 0,
2645 { 0, 0, { 0 } }
2646 },
2647 /* copst $u4c,$ccc,$CRj,$Ric */
2648 {
2649 { 1, 1, 1, 1 },
2650 FR30_INSN_COPST, "copst", "copst",
2651 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
2652 & fmt_copst, { 0x9fe0 },
2653 (PTR) 0,
2654 { 0, 0, { 0 } }
2655 },
2656 /* copsv $u4c,$ccc,$CRj,$Ric */
2657 {
2658 { 1, 1, 1, 1 },
2659 FR30_INSN_COPSV, "copsv", "copsv",
2660 { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } },
2661 & fmt_copst, { 0x9ff0 },
2662 (PTR) 0,
2663 { 0, 0, { 0 } }
2664 },
2665 /* nop */
2666 {
2667 { 1, 1, 1, 1 },
2668 FR30_INSN_NOP, "nop", "nop",
2669 { { MNEM, 0 } },
2670 & fmt_div3, { 0x9fa0 },
2671 (PTR) 0,
2672 { 0, 0, { 0 } }
2673 },
2674 /* andccr $u8 */
2675 {
2676 { 1, 1, 1, 1 },
2677 FR30_INSN_ANDCCR, "andccr", "andccr",
2678 { { MNEM, ' ', OP (U8), 0 } },
2679 & fmt_andccr, { 0x8300 },
2680 (PTR) & fmt_andccr_ops[0],
2681 { 0, 0, { 0 } }
2682 },
2683 /* orccr $u8 */
2684 {
2685 { 1, 1, 1, 1 },
2686 FR30_INSN_ORCCR, "orccr", "orccr",
2687 { { MNEM, ' ', OP (U8), 0 } },
2688 & fmt_andccr, { 0x9300 },
2689 (PTR) & fmt_andccr_ops[0],
2690 { 0, 0, { 0 } }
2691 },
2692 /* stilm $u8 */
2693 {
2694 { 1, 1, 1, 1 },
2695 FR30_INSN_STILM, "stilm", "stilm",
2696 { { MNEM, ' ', OP (U8), 0 } },
2697 & fmt_stilm, { 0x8700 },
2698 (PTR) 0,
2699 { 0, 0, { 0 } }
2700 },
2701 /* addsp $s10 */
2702 {
2703 { 1, 1, 1, 1 },
2704 FR30_INSN_ADDSP, "addsp", "addsp",
2705 { { MNEM, ' ', OP (S10), 0 } },
2706 & fmt_addsp, { 0xa300 },
2707 (PTR) 0,
2708 { 0, 0, { 0 } }
2709 },
2710 /* extsb $Ri */
2711 {
2712 { 1, 1, 1, 1 },
2713 FR30_INSN_EXTSB, "extsb", "extsb",
2714 { { MNEM, ' ', OP (RI), 0 } },
2715 & fmt_div0s, { 0x9780 },
2716 (PTR) 0,
2717 { 0, 0, { 0 } }
2718 },
2719 /* extub $Ri */
2720 {
2721 { 1, 1, 1, 1 },
2722 FR30_INSN_EXTUB, "extub", "extub",
2723 { { MNEM, ' ', OP (RI), 0 } },
2724 & fmt_div0s, { 0x9790 },
2725 (PTR) 0,
2726 { 0, 0, { 0 } }
2727 },
2728 /* extsh $Ri */
2729 {
2730 { 1, 1, 1, 1 },
2731 FR30_INSN_EXTSH, "extsh", "extsh",
2732 { { MNEM, ' ', OP (RI), 0 } },
2733 & fmt_div0s, { 0x97a0 },
2734 (PTR) 0,
2735 { 0, 0, { 0 } }
2736 },
2737 /* extuh $Ri */
2738 {
2739 { 1, 1, 1, 1 },
2740 FR30_INSN_EXTUH, "extuh", "extuh",
2741 { { MNEM, ' ', OP (RI), 0 } },
2742 & fmt_div0s, { 0x97b0 },
2743 (PTR) 0,
2744 { 0, 0, { 0 } }
2745 },
2746 /* ldm0 ($reglist_low) */
2747 {
2748 { 1, 1, 1, 1 },
2749 FR30_INSN_LDM0, "ldm0", "ldm0",
2750 { { MNEM, ' ', '(', OP (REGLIST_LOW), ')', 0 } },
2751 & fmt_ldm0, { 0x8c00 },
2752 (PTR) 0,
2753 { 0, 0, { 0 } }
2754 },
2755 /* ldm1 ($reglist_hi) */
2756 {
2757 { 1, 1, 1, 1 },
2758 FR30_INSN_LDM1, "ldm1", "ldm1",
2759 { { MNEM, ' ', '(', OP (REGLIST_HI), ')', 0 } },
2760 & fmt_ldm1, { 0x8d00 },
2761 (PTR) 0,
2762 { 0, 0, { 0 } }
2763 },
2764 /* stm0 ($reglist_low) */
2765 {
2766 { 1, 1, 1, 1 },
2767 FR30_INSN_STM0, "stm0", "stm0",
2768 { { MNEM, ' ', '(', OP (REGLIST_LOW), ')', 0 } },
2769 & fmt_ldm0, { 0x8e00 },
2770 (PTR) 0,
2771 { 0, 0, { 0 } }
2772 },
2773 /* stm1 ($reglist_hi) */
2774 {
2775 { 1, 1, 1, 1 },
2776 FR30_INSN_STM1, "stm1", "stm1",
2777 { { MNEM, ' ', '(', OP (REGLIST_HI), ')', 0 } },
2778 & fmt_ldm1, { 0x8f00 },
2779 (PTR) 0,
2780 { 0, 0, { 0 } }
2781 },
2782 /* enter $u10 */
2783 {
2784 { 1, 1, 1, 1 },
2785 FR30_INSN_ENTER, "enter", "enter",
2786 { { MNEM, ' ', OP (U10), 0 } },
2787 & fmt_enter, { 0xf00 },
2788 (PTR) 0,
2789 { 0, 0, { 0 } }
2790 },
2791 /* leave */
2792 {
2793 { 1, 1, 1, 1 },
2794 FR30_INSN_LEAVE, "leave", "leave",
2795 { { MNEM, 0 } },
2796 & fmt_div3, { 0x9f90 },
2797 (PTR) 0,
2798 { 0, 0, { 0 } }
2799 },
2800 /* xchb @$Rj,$Ri */
2801 {
2802 { 1, 1, 1, 1 },
2803 FR30_INSN_XCHB, "xchb", "xchb",
2804 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
2805 & fmt_sth, { 0x8a00 },
2806 (PTR) 0,
2807 { 0, 0, { 0 } }
2808 },
2809 };
2810
2811 #undef A
2812 #undef MNEM
2813 #undef OP
2814
2815 static const CGEN_INSN_TABLE insn_table =
2816 {
2817 & fr30_cgen_insn_table_entries[0],
2818 sizeof (CGEN_INSN),
2819 MAX_INSNS,
2820 NULL
2821 };
2822
2823 /* Formats for ALIAS macro-insns. */
2824
2825 #define F(f) & fr30_cgen_ifld_table[CONCAT2 (FR30_,f)]
2826
2827 static const CGEN_IFMT fmt_ldi8m = {
2828 16, 16, 0xf000, { F (F_OP1), F (F_I8), F (F_RI), 0 }
2829 };
2830
2831 static const CGEN_IFMT fmt_ldi20m = {
2832 16, 32, 0xff00, { F (F_OP1), F (F_I20), F (F_OP2), F (F_RI), 0 }
2833 };
2834
2835 static const CGEN_IFMT fmt_ldi32m = {
2836 16, 48, 0xfff0, { F (F_OP1), F (F_I32), F (F_OP2), F (F_OP3), F (F_RI), 0 }
2837 };
2838
2839 #undef F
2840
2841 /* Each non-simple macro entry points to an array of expansion possibilities. */
2842
2843 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
2844 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
2845 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
2846
2847 /* The macro instruction table. */
2848
2849 static const CGEN_INSN macro_insn_table_entries[] =
2850 {
2851 /* ldi8 $i8,$Ri */
2852 {
2853 { 1, 1, 1, 1 },
2854 -1, "ldi8m", "ldi8",
2855 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
2856 & fmt_ldi8m, { 0xc000 },
2857 (PTR) 0,
2858 { 0, 0|A(NO_DIS)|A(ALIAS), { 0 } }
2859 },
2860 /* ldi20 $i20,$Ri */
2861 {
2862 { 1, 1, 1, 1 },
2863 -1, "ldi20m", "ldi20",
2864 { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } },
2865 & fmt_ldi20m, { 0x9b00 },
2866 (PTR) 0,
2867 { 0, 0|A(NO_DIS)|A(ALIAS), { 0 } }
2868 },
2869 /* ldi32 $i32,$Ri */
2870 {
2871 { 1, 1, 1, 1 },
2872 -1, "ldi32m", "ldi32",
2873 { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } },
2874 & fmt_ldi32m, { 0x9f80 },
2875 (PTR) 0,
2876 { 0, 0|A(NO_DIS)|A(ALIAS), { 0 } }
2877 },
2878 };
2879
2880 #undef A
2881 #undef MNEM
2882 #undef OP
2883
2884 static const CGEN_INSN_TABLE macro_insn_table =
2885 {
2886 & macro_insn_table_entries[0],
2887 sizeof (CGEN_INSN),
2888 (sizeof (macro_insn_table_entries) /
2889 sizeof (macro_insn_table_entries[0])),
2890 NULL
2891 };
2892
2893 static void
2894 init_tables ()
2895 {
2896 }
2897
2898 /* Return non-zero if INSN is to be added to the hash table.
2899 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
2900
2901 static int
2902 asm_hash_insn_p (insn)
2903 const CGEN_INSN * insn;
2904 {
2905 return CGEN_ASM_HASH_P (insn);
2906 }
2907
2908 static int
2909 dis_hash_insn_p (insn)
2910 const CGEN_INSN * insn;
2911 {
2912 /* If building the hash table and the NO-DIS attribute is present,
2913 ignore. */
2914 if (CGEN_INSN_ATTR (insn, CGEN_INSN_NO_DIS))
2915 return 0;
2916 return CGEN_DIS_HASH_P (insn);
2917 }
2918
2919 /* The result is the hash value of the insn.
2920 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
2921
2922 static unsigned int
2923 asm_hash_insn (mnem)
2924 const char * mnem;
2925 {
2926 return CGEN_ASM_HASH (mnem);
2927 }
2928
2929 /* BUF is a pointer to the insn's bytes in target order.
2930 VALUE is an integer of the first CGEN_BASE_INSN_BITSIZE bits,
2931 host order. */
2932
2933 static unsigned int
2934 dis_hash_insn (buf, value)
2935 const char * buf;
2936 CGEN_INSN_INT value;
2937 {
2938 return CGEN_DIS_HASH (buf, value);
2939 }
2940
2941 /* Initialize an opcode table and return a descriptor.
2942 It's much like opening a file, and must be the first function called. */
2943
2944 CGEN_OPCODE_DESC
2945 fr30_cgen_opcode_open (mach, endian)
2946 int mach;
2947 enum cgen_endian endian;
2948 {
2949 CGEN_OPCODE_TABLE * table = (CGEN_OPCODE_TABLE *) xmalloc (sizeof (CGEN_OPCODE_TABLE));
2950 static int init_p;
2951
2952 if (! init_p)
2953 {
2954 init_tables ();
2955 init_p = 1;
2956 }
2957
2958 memset (table, 0, sizeof (*table));
2959
2960 CGEN_OPCODE_MACH (table) = mach;
2961 CGEN_OPCODE_ENDIAN (table) = endian;
2962 /* FIXME: for the sparc case we can determine insn-endianness statically.
2963 The worry here is where both data and insn endian can be independently
2964 chosen, in which case this function will need another argument.
2965 Actually, will want to allow for more arguments in the future anyway. */
2966 CGEN_OPCODE_INSN_ENDIAN (table) = endian;
2967
2968 CGEN_OPCODE_HW_LIST (table) = & fr30_cgen_hw_entries[0];
2969
2970 CGEN_OPCODE_IFLD_TABLE (table) = & fr30_cgen_ifld_table[0];
2971
2972 CGEN_OPCODE_OPERAND_TABLE (table) = & fr30_cgen_operand_table[0];
2973
2974 * CGEN_OPCODE_INSN_TABLE (table) = insn_table;
2975
2976 * CGEN_OPCODE_MACRO_INSN_TABLE (table) = macro_insn_table;
2977
2978 CGEN_OPCODE_ASM_HASH_P (table) = asm_hash_insn_p;
2979 CGEN_OPCODE_ASM_HASH (table) = asm_hash_insn;
2980 CGEN_OPCODE_ASM_HASH_SIZE (table) = CGEN_ASM_HASH_SIZE;
2981
2982 CGEN_OPCODE_DIS_HASH_P (table) = dis_hash_insn_p;
2983 CGEN_OPCODE_DIS_HASH (table) = dis_hash_insn;
2984 CGEN_OPCODE_DIS_HASH_SIZE (table) = CGEN_DIS_HASH_SIZE;
2985
2986 return (CGEN_OPCODE_DESC) table;
2987 }
2988
2989 /* Close an opcode table. */
2990
2991 void
2992 fr30_cgen_opcode_close (desc)
2993 CGEN_OPCODE_DESC desc;
2994 {
2995 free (desc);
2996 }
2997
2998 /* Getting values from cgen_fields is handled by a collection of functions.
2999 They are distinguished by the type of the VALUE argument they return.
3000 TODO: floating point, inlining support, remove cases where result type
3001 not appropriate. */
3002
3003 int
3004 fr30_cgen_get_int_operand (opindex, fields)
3005 int opindex;
3006 const CGEN_FIELDS * fields;
3007 {
3008 int value;
3009
3010 switch (opindex)
3011 {
3012 case FR30_OPERAND_RI :
3013 value = fields->f_Ri;
3014 break;
3015 case FR30_OPERAND_RJ :
3016 value = fields->f_Rj;
3017 break;
3018 case FR30_OPERAND_RIC :
3019 value = fields->f_Ric;
3020 break;
3021 case FR30_OPERAND_RJC :
3022 value = fields->f_Rjc;
3023 break;
3024 case FR30_OPERAND_CRI :
3025 value = fields->f_CRi;
3026 break;
3027 case FR30_OPERAND_CRJ :
3028 value = fields->f_CRj;
3029 break;
3030 case FR30_OPERAND_RS1 :
3031 value = fields->f_Rs1;
3032 break;
3033 case FR30_OPERAND_RS2 :
3034 value = fields->f_Rs2;
3035 break;
3036 case FR30_OPERAND_R13 :
3037 value = fields->f_nil;
3038 break;
3039 case FR30_OPERAND_R14 :
3040 value = fields->f_nil;
3041 break;
3042 case FR30_OPERAND_R15 :
3043 value = fields->f_nil;
3044 break;
3045 case FR30_OPERAND_PS :
3046 value = fields->f_nil;
3047 break;
3048 case FR30_OPERAND_U4 :
3049 value = fields->f_u4;
3050 break;
3051 case FR30_OPERAND_U4C :
3052 value = fields->f_u4c;
3053 break;
3054 case FR30_OPERAND_U8 :
3055 value = fields->f_u8;
3056 break;
3057 case FR30_OPERAND_I8 :
3058 value = fields->f_i8;
3059 break;
3060 case FR30_OPERAND_UDISP6 :
3061 value = fields->f_udisp6;
3062 break;
3063 case FR30_OPERAND_DISP8 :
3064 value = fields->f_disp8;
3065 break;
3066 case FR30_OPERAND_DISP9 :
3067 value = fields->f_disp9;
3068 break;
3069 case FR30_OPERAND_DISP10 :
3070 value = fields->f_disp10;
3071 break;
3072 case FR30_OPERAND_S10 :
3073 value = fields->f_s10;
3074 break;
3075 case FR30_OPERAND_U10 :
3076 value = fields->f_u10;
3077 break;
3078 case FR30_OPERAND_I32 :
3079 value = fields->f_i32;
3080 break;
3081 case FR30_OPERAND_M4 :
3082 value = fields->f_m4;
3083 break;
3084 case FR30_OPERAND_I20 :
3085 value = fields->f_i20;
3086 break;
3087 case FR30_OPERAND_LABEL9 :
3088 value = fields->f_rel9;
3089 break;
3090 case FR30_OPERAND_DIR8 :
3091 value = fields->f_dir8;
3092 break;
3093 case FR30_OPERAND_DIR9 :
3094 value = fields->f_dir9;
3095 break;
3096 case FR30_OPERAND_DIR10 :
3097 value = fields->f_dir10;
3098 break;
3099 case FR30_OPERAND_LABEL12 :
3100 value = fields->f_rel12;
3101 break;
3102 case FR30_OPERAND_REGLIST_LOW :
3103 value = fields->f_reglist_low;
3104 break;
3105 case FR30_OPERAND_REGLIST_HI :
3106 value = fields->f_reglist_hi;
3107 break;
3108 case FR30_OPERAND_CC :
3109 value = fields->f_cc;
3110 break;
3111 case FR30_OPERAND_CCC :
3112 value = fields->f_ccc;
3113 break;
3114
3115 default :
3116 /* xgettext:c-format */
3117 fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
3118 opindex);
3119 abort ();
3120 }
3121
3122 return value;
3123 }
3124
3125 bfd_vma
3126 fr30_cgen_get_vma_operand (opindex, fields)
3127 int opindex;
3128 const CGEN_FIELDS * fields;
3129 {
3130 bfd_vma value;
3131
3132 switch (opindex)
3133 {
3134 case FR30_OPERAND_RI :
3135 value = fields->f_Ri;
3136 break;
3137 case FR30_OPERAND_RJ :
3138 value = fields->f_Rj;
3139 break;
3140 case FR30_OPERAND_RIC :
3141 value = fields->f_Ric;
3142 break;
3143 case FR30_OPERAND_RJC :
3144 value = fields->f_Rjc;
3145 break;
3146 case FR30_OPERAND_CRI :
3147 value = fields->f_CRi;
3148 break;
3149 case FR30_OPERAND_CRJ :
3150 value = fields->f_CRj;
3151 break;
3152 case FR30_OPERAND_RS1 :
3153 value = fields->f_Rs1;
3154 break;
3155 case FR30_OPERAND_RS2 :
3156 value = fields->f_Rs2;
3157 break;
3158 case FR30_OPERAND_R13 :
3159 value = fields->f_nil;
3160 break;
3161 case FR30_OPERAND_R14 :
3162 value = fields->f_nil;
3163 break;
3164 case FR30_OPERAND_R15 :
3165 value = fields->f_nil;
3166 break;
3167 case FR30_OPERAND_PS :
3168 value = fields->f_nil;
3169 break;
3170 case FR30_OPERAND_U4 :
3171 value = fields->f_u4;
3172 break;
3173 case FR30_OPERAND_U4C :
3174 value = fields->f_u4c;
3175 break;
3176 case FR30_OPERAND_U8 :
3177 value = fields->f_u8;
3178 break;
3179 case FR30_OPERAND_I8 :
3180 value = fields->f_i8;
3181 break;
3182 case FR30_OPERAND_UDISP6 :
3183 value = fields->f_udisp6;
3184 break;
3185 case FR30_OPERAND_DISP8 :
3186 value = fields->f_disp8;
3187 break;
3188 case FR30_OPERAND_DISP9 :
3189 value = fields->f_disp9;
3190 break;
3191 case FR30_OPERAND_DISP10 :
3192 value = fields->f_disp10;
3193 break;
3194 case FR30_OPERAND_S10 :
3195 value = fields->f_s10;
3196 break;
3197 case FR30_OPERAND_U10 :
3198 value = fields->f_u10;
3199 break;
3200 case FR30_OPERAND_I32 :
3201 value = fields->f_i32;
3202 break;
3203 case FR30_OPERAND_M4 :
3204 value = fields->f_m4;
3205 break;
3206 case FR30_OPERAND_I20 :
3207 value = fields->f_i20;
3208 break;
3209 case FR30_OPERAND_LABEL9 :
3210 value = fields->f_rel9;
3211 break;
3212 case FR30_OPERAND_DIR8 :
3213 value = fields->f_dir8;
3214 break;
3215 case FR30_OPERAND_DIR9 :
3216 value = fields->f_dir9;
3217 break;
3218 case FR30_OPERAND_DIR10 :
3219 value = fields->f_dir10;
3220 break;
3221 case FR30_OPERAND_LABEL12 :
3222 value = fields->f_rel12;
3223 break;
3224 case FR30_OPERAND_REGLIST_LOW :
3225 value = fields->f_reglist_low;
3226 break;
3227 case FR30_OPERAND_REGLIST_HI :
3228 value = fields->f_reglist_hi;
3229 break;
3230 case FR30_OPERAND_CC :
3231 value = fields->f_cc;
3232 break;
3233 case FR30_OPERAND_CCC :
3234 value = fields->f_ccc;
3235 break;
3236
3237 default :
3238 /* xgettext:c-format */
3239 fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
3240 opindex);
3241 abort ();
3242 }
3243
3244 return value;
3245 }
3246
3247 /* Stuffing values in cgen_fields is handled by a collection of functions.
3248 They are distinguished by the type of the VALUE argument they accept.
3249 TODO: floating point, inlining support, remove cases where argument type
3250 not appropriate. */
3251
3252 void
3253 fr30_cgen_set_int_operand (opindex, fields, value)
3254 int opindex;
3255 CGEN_FIELDS * fields;
3256 int value;
3257 {
3258 switch (opindex)
3259 {
3260 case FR30_OPERAND_RI :
3261 fields->f_Ri = value;
3262 break;
3263 case FR30_OPERAND_RJ :
3264 fields->f_Rj = value;
3265 break;
3266 case FR30_OPERAND_RIC :
3267 fields->f_Ric = value;
3268 break;
3269 case FR30_OPERAND_RJC :
3270 fields->f_Rjc = value;
3271 break;
3272 case FR30_OPERAND_CRI :
3273 fields->f_CRi = value;
3274 break;
3275 case FR30_OPERAND_CRJ :
3276 fields->f_CRj = value;
3277 break;
3278 case FR30_OPERAND_RS1 :
3279 fields->f_Rs1 = value;
3280 break;
3281 case FR30_OPERAND_RS2 :
3282 fields->f_Rs2 = value;
3283 break;
3284 case FR30_OPERAND_R13 :
3285 fields->f_nil = value;
3286 break;
3287 case FR30_OPERAND_R14 :
3288 fields->f_nil = value;
3289 break;
3290 case FR30_OPERAND_R15 :
3291 fields->f_nil = value;
3292 break;
3293 case FR30_OPERAND_PS :
3294 fields->f_nil = value;
3295 break;
3296 case FR30_OPERAND_U4 :
3297 fields->f_u4 = value;
3298 break;
3299 case FR30_OPERAND_U4C :
3300 fields->f_u4c = value;
3301 break;
3302 case FR30_OPERAND_U8 :
3303 fields->f_u8 = value;
3304 break;
3305 case FR30_OPERAND_I8 :
3306 fields->f_i8 = value;
3307 break;
3308 case FR30_OPERAND_UDISP6 :
3309 fields->f_udisp6 = value;
3310 break;
3311 case FR30_OPERAND_DISP8 :
3312 fields->f_disp8 = value;
3313 break;
3314 case FR30_OPERAND_DISP9 :
3315 fields->f_disp9 = value;
3316 break;
3317 case FR30_OPERAND_DISP10 :
3318 fields->f_disp10 = value;
3319 break;
3320 case FR30_OPERAND_S10 :
3321 fields->f_s10 = value;
3322 break;
3323 case FR30_OPERAND_U10 :
3324 fields->f_u10 = value;
3325 break;
3326 case FR30_OPERAND_I32 :
3327 fields->f_i32 = value;
3328 break;
3329 case FR30_OPERAND_M4 :
3330 fields->f_m4 = value;
3331 break;
3332 case FR30_OPERAND_I20 :
3333 fields->f_i20 = value;
3334 break;
3335 case FR30_OPERAND_LABEL9 :
3336 fields->f_rel9 = value;
3337 break;
3338 case FR30_OPERAND_DIR8 :
3339 fields->f_dir8 = value;
3340 break;
3341 case FR30_OPERAND_DIR9 :
3342 fields->f_dir9 = value;
3343 break;
3344 case FR30_OPERAND_DIR10 :
3345 fields->f_dir10 = value;
3346 break;
3347 case FR30_OPERAND_LABEL12 :
3348 fields->f_rel12 = value;
3349 break;
3350 case FR30_OPERAND_REGLIST_LOW :
3351 fields->f_reglist_low = value;
3352 break;
3353 case FR30_OPERAND_REGLIST_HI :
3354 fields->f_reglist_hi = value;
3355 break;
3356 case FR30_OPERAND_CC :
3357 fields->f_cc = value;
3358 break;
3359 case FR30_OPERAND_CCC :
3360 fields->f_ccc = value;
3361 break;
3362
3363 default :
3364 /* xgettext:c-format */
3365 fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
3366 opindex);
3367 abort ();
3368 }
3369 }
3370
3371 void
3372 fr30_cgen_set_vma_operand (opindex, fields, value)
3373 int opindex;
3374 CGEN_FIELDS * fields;
3375 bfd_vma value;
3376 {
3377 switch (opindex)
3378 {
3379 case FR30_OPERAND_RI :
3380 fields->f_Ri = value;
3381 break;
3382 case FR30_OPERAND_RJ :
3383 fields->f_Rj = value;
3384 break;
3385 case FR30_OPERAND_RIC :
3386 fields->f_Ric = value;
3387 break;
3388 case FR30_OPERAND_RJC :
3389 fields->f_Rjc = value;
3390 break;
3391 case FR30_OPERAND_CRI :
3392 fields->f_CRi = value;
3393 break;
3394 case FR30_OPERAND_CRJ :
3395 fields->f_CRj = value;
3396 break;
3397 case FR30_OPERAND_RS1 :
3398 fields->f_Rs1 = value;
3399 break;
3400 case FR30_OPERAND_RS2 :
3401 fields->f_Rs2 = value;
3402 break;
3403 case FR30_OPERAND_R13 :
3404 fields->f_nil = value;
3405 break;
3406 case FR30_OPERAND_R14 :
3407 fields->f_nil = value;
3408 break;
3409 case FR30_OPERAND_R15 :
3410 fields->f_nil = value;
3411 break;
3412 case FR30_OPERAND_PS :
3413 fields->f_nil = value;
3414 break;
3415 case FR30_OPERAND_U4 :
3416 fields->f_u4 = value;
3417 break;
3418 case FR30_OPERAND_U4C :
3419 fields->f_u4c = value;
3420 break;
3421 case FR30_OPERAND_U8 :
3422 fields->f_u8 = value;
3423 break;
3424 case FR30_OPERAND_I8 :
3425 fields->f_i8 = value;
3426 break;
3427 case FR30_OPERAND_UDISP6 :
3428 fields->f_udisp6 = value;
3429 break;
3430 case FR30_OPERAND_DISP8 :
3431 fields->f_disp8 = value;
3432 break;
3433 case FR30_OPERAND_DISP9 :
3434 fields->f_disp9 = value;
3435 break;
3436 case FR30_OPERAND_DISP10 :
3437 fields->f_disp10 = value;
3438 break;
3439 case FR30_OPERAND_S10 :
3440 fields->f_s10 = value;
3441 break;
3442 case FR30_OPERAND_U10 :
3443 fields->f_u10 = value;
3444 break;
3445 case FR30_OPERAND_I32 :
3446 fields->f_i32 = value;
3447 break;
3448 case FR30_OPERAND_M4 :
3449 fields->f_m4 = value;
3450 break;
3451 case FR30_OPERAND_I20 :
3452 fields->f_i20 = value;
3453 break;
3454 case FR30_OPERAND_LABEL9 :
3455 fields->f_rel9 = value;
3456 break;
3457 case FR30_OPERAND_DIR8 :
3458 fields->f_dir8 = value;
3459 break;
3460 case FR30_OPERAND_DIR9 :
3461 fields->f_dir9 = value;
3462 break;
3463 case FR30_OPERAND_DIR10 :
3464 fields->f_dir10 = value;
3465 break;
3466 case FR30_OPERAND_LABEL12 :
3467 fields->f_rel12 = value;
3468 break;
3469 case FR30_OPERAND_REGLIST_LOW :
3470 fields->f_reglist_low = value;
3471 break;
3472 case FR30_OPERAND_REGLIST_HI :
3473 fields->f_reglist_hi = value;
3474 break;
3475 case FR30_OPERAND_CC :
3476 fields->f_cc = value;
3477 break;
3478 case FR30_OPERAND_CCC :
3479 fields->f_ccc = value;
3480 break;
3481
3482 default :
3483 /* xgettext:c-format */
3484 fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
3485 opindex);
3486 abort ();
3487 }
3488 }
3489
This page took 0.118128 seconds and 5 git commands to generate.