Thu Nov 12 19:24:18 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 /* The hash functions are recorded here to help keep assembler code out of
34 the disassembler and vice versa. */
35
36 static int asm_hash_insn_p PARAMS ((const CGEN_INSN *));
37 static unsigned int asm_hash_insn PARAMS ((const char *));
38 static int dis_hash_insn_p PARAMS ((const CGEN_INSN *));
39 static unsigned int dis_hash_insn PARAMS ((const char *, unsigned long));
40
41 /* Cover function to read and properly byteswap an insn value. */
42
43 CGEN_INSN_INT
44 cgen_get_insn_value (od, buf, length)
45 CGEN_OPCODE_DESC od;
46 unsigned char *buf;
47 int length;
48 {
49 CGEN_INSN_INT value;
50
51 switch (length)
52 {
53 case 8:
54 value = *buf;
55 break;
56 case 16:
57 if (CGEN_OPCODE_INSN_ENDIAN (od) == CGEN_ENDIAN_BIG)
58 value = bfd_getb16 (buf);
59 else
60 value = bfd_getl16 (buf);
61 break;
62 case 32:
63 if (CGEN_OPCODE_INSN_ENDIAN (od) == CGEN_ENDIAN_BIG)
64 value = bfd_getb32 (buf);
65 else
66 value = bfd_getl32 (buf);
67 break;
68 default:
69 abort ();
70 }
71
72 return value;
73 }
74
75 /* Cover function to store an insn value properly byteswapped. */
76
77 void
78 cgen_put_insn_value (od, buf, length, value)
79 CGEN_OPCODE_DESC od;
80 unsigned char *buf;
81 int length;
82 CGEN_INSN_INT value;
83 {
84 switch (length)
85 {
86 case 8:
87 buf[0] = value;
88 break;
89 case 16:
90 if (CGEN_OPCODE_INSN_ENDIAN (od) == CGEN_ENDIAN_BIG)
91 bfd_putb16 (value, buf);
92 else
93 bfd_putl16 (value, buf);
94 break;
95 case 32:
96 if (CGEN_OPCODE_INSN_ENDIAN (od) == CGEN_ENDIAN_BIG)
97 bfd_putb32 (value, buf);
98 else
99 bfd_putl32 (value, buf);
100 break;
101 default:
102 abort ();
103 }
104 }
105
106 /* Look up instruction INSN_VALUE and extract its fields.
107 INSN, if non-null, is the insn table entry.
108 Otherwise INSN_VALUE is examined to compute it.
109 LENGTH is the bit length of INSN_VALUE if known, otherwise 0.
110 0 is only valid if `insn == NULL && ! CGEN_INT_INSN_P'.
111 If INSN != NULL, LENGTH must be valid.
112 ALIAS_P is non-zero if alias insns are to be included in the search.
113
114 The result a pointer to the insn table entry, or NULL if the instruction
115 wasn't recognized. */
116
117 const CGEN_INSN *
118 fr30_cgen_lookup_insn (od, insn, insn_value, length, fields, alias_p)
119 CGEN_OPCODE_DESC od;
120 const CGEN_INSN *insn;
121 CGEN_INSN_BYTES insn_value;
122 int length;
123 CGEN_FIELDS *fields;
124 int alias_p;
125 {
126 unsigned char buf[16];
127 unsigned char *bufp;
128 unsigned int base_insn;
129 #if CGEN_INT_INSN_P
130 CGEN_EXTRACT_INFO *info = NULL;
131 #else
132 CGEN_EXTRACT_INFO ex_info;
133 CGEN_EXTRACT_INFO *info = &ex_info;
134 #endif
135
136 #if ! CGEN_INT_INSN_P
137 ex_info.dis_info = NULL;
138 ex_info.bytes = insn_value;
139 ex_info.valid = -1;
140 #endif
141
142 if (!insn)
143 {
144 const CGEN_INSN_LIST *insn_list;
145
146 #if CGEN_INT_INSN_P
147 cgen_put_insn_value (od, buf, length, insn_value);
148 bufp = buf;
149 base_insn = insn_value; /*???*/
150 #else
151 base_insn = cgen_get_insn_value (od, buf, length);
152 bufp = insn_value;
153 #endif
154
155 /* The instructions are stored in hash lists.
156 Pick the first one and keep trying until we find the right one. */
157
158 insn_list = CGEN_DIS_LOOKUP_INSN (od, bufp, base_insn);
159 while (insn_list != NULL)
160 {
161 insn = insn_list->insn;
162
163 if (alias_p
164 || ! CGEN_INSN_ATTR (insn, CGEN_INSN_ALIAS))
165 {
166 /* Basic bit mask must be correct. */
167 /* ??? May wish to allow target to defer this check until the
168 extract handler. */
169 if ((insn_value & CGEN_INSN_MASK (insn)) == CGEN_INSN_VALUE (insn))
170 {
171 /* ??? 0 is passed for `pc' */
172 int elength = (*CGEN_EXTRACT_FN (insn)) (od, insn, info,
173 insn_value, fields,
174 (bfd_vma) 0);
175 if (elength > 0)
176 {
177 /* sanity check */
178 if (length != 0 && length != elength)
179 abort ();
180 return insn;
181 }
182 }
183 }
184
185 insn_list = CGEN_DIS_NEXT_INSN (insn_list);
186 }
187 }
188 else
189 {
190 /* Sanity check: can't pass an alias insn if ! alias_p. */
191 if (! alias_p
192 && CGEN_INSN_ATTR (insn, CGEN_INSN_ALIAS))
193 abort ();
194 /* Sanity check: length must be correct. */
195 if (length != CGEN_INSN_BITSIZE (insn))
196 abort ();
197
198 /* ??? 0 is passed for `pc' */
199 length = (*CGEN_EXTRACT_FN (insn)) (od, insn, info, insn_value, fields,
200 (bfd_vma) 0);
201 /* Sanity check: must succeed.
202 Could relax this later if it ever proves useful. */
203 if (length == 0)
204 abort ();
205 return insn;
206 }
207
208 return NULL;
209 }
210
211 /* Fill in the operand instances used by INSN whose operands are FIELDS.
212 INDICES is a pointer to a buffer of MAX_OPERAND_INSTANCES ints to be filled
213 in. */
214
215 void
216 fr30_cgen_get_insn_operands (od, insn, fields, indices)
217 CGEN_OPCODE_DESC od;
218 const CGEN_INSN * insn;
219 const CGEN_FIELDS * fields;
220 int *indices;
221 {
222 const CGEN_OPERAND_INSTANCE *opinst;
223 int i;
224
225 for (i = 0, opinst = CGEN_INSN_OPERANDS (insn);
226 opinst != NULL
227 && CGEN_OPERAND_INSTANCE_TYPE (opinst) != CGEN_OPERAND_INSTANCE_END;
228 ++i, ++opinst)
229 {
230 const CGEN_OPERAND *op = CGEN_OPERAND_INSTANCE_OPERAND (opinst);
231 if (op == NULL)
232 indices[i] = CGEN_OPERAND_INSTANCE_INDEX (opinst);
233 else
234 indices[i] = fr30_cgen_get_int_operand (CGEN_OPERAND_INDEX (op),
235 fields);
236 }
237 }
238
239 /* Cover function to fr30_cgen_get_insn_operands when either INSN or FIELDS
240 isn't known.
241 The INSN, INSN_VALUE, and LENGTH arguments are passed to
242 fr30_cgen_lookup_insn unchanged.
243
244 The result is the insn table entry or NULL if the instruction wasn't
245 recognized. */
246
247 const CGEN_INSN *
248 fr30_cgen_lookup_get_insn_operands (od, insn, insn_value, length, indices)
249 CGEN_OPCODE_DESC od;
250 const CGEN_INSN *insn;
251 CGEN_INSN_BYTES insn_value;
252 int length;
253 int *indices;
254 {
255 CGEN_FIELDS fields;
256
257 /* Pass non-zero for ALIAS_P only if INSN != NULL.
258 If INSN == NULL, we want a real insn. */
259 insn = fr30_cgen_lookup_insn (od, insn, insn_value, length, &fields,
260 insn != NULL);
261 if (! insn)
262 return NULL;
263
264 fr30_cgen_get_insn_operands (od, insn, &fields, indices);
265 return insn;
266 }
267 /* Attributes. */
268
269 static const CGEN_ATTR_ENTRY MACH_attr[] =
270 {
271 { "base", MACH_BASE },
272 { "fr30", MACH_FR30 },
273 { "max", MACH_MAX },
274 { 0, 0 }
275 };
276
277 const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] =
278 {
279 { "CACHE-ADDR", NULL },
280 { "PC", NULL },
281 { "PROFILE", NULL },
282 { 0, 0 }
283 };
284
285 const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] =
286 {
287 { "ABS-ADDR", NULL },
288 { "HASH-PREFIX", NULL },
289 { "NEGATIVE", NULL },
290 { "PCREL-ADDR", NULL },
291 { "RELAX", NULL },
292 { "SEM-ONLY", NULL },
293 { "SIGN-OPT", NULL },
294 { "SIGNED", NULL },
295 { "UNSIGNED", NULL },
296 { 0, 0 }
297 };
298
299 const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] =
300 {
301 { "ALIAS", NULL },
302 { "COND-CTI", NULL },
303 { "NO-DIS", NULL },
304 { "RELAX", NULL },
305 { "RELAXABLE", NULL },
306 { "SKIP-CTI", NULL },
307 { "UNCOND-CTI", NULL },
308 { "VIRTUAL", NULL },
309 { 0, 0 }
310 };
311
312 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_gr_entries[] =
313 {
314 { "ac", 13 },
315 { "fp", 14 },
316 { "sp", 15 },
317 { "r0", 0 },
318 { "r1", 1 },
319 { "r2", 2 },
320 { "r3", 3 },
321 { "r4", 4 },
322 { "r5", 5 },
323 { "r6", 6 },
324 { "r7", 7 },
325 { "r8", 8 },
326 { "r9", 9 },
327 { "r10", 10 },
328 { "r11", 11 },
329 { "r12", 12 },
330 { "r13", 13 },
331 { "r14", 14 },
332 { "r15", 15 }
333 };
334
335 CGEN_KEYWORD fr30_cgen_opval_h_gr =
336 {
337 & fr30_cgen_opval_h_gr_entries[0],
338 19
339 };
340
341 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_dr_entries[] =
342 {
343 { "tbr", 0 },
344 { "rp", 1 },
345 { "ssp", 2 },
346 { "usp", 3 },
347 { "mdh", 4 },
348 { "mdl", 5 }
349 };
350
351 CGEN_KEYWORD fr30_cgen_opval_h_dr =
352 {
353 & fr30_cgen_opval_h_dr_entries[0],
354 6
355 };
356
357 CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_cr_entries[] =
358 {
359 { "pc", 0 },
360 { "ps", 1 }
361 };
362
363 CGEN_KEYWORD fr30_cgen_opval_h_cr =
364 {
365 & fr30_cgen_opval_h_cr_entries[0],
366 2
367 };
368
369
370 /* The hardware table. */
371
372 #define HW_ENT(n) fr30_cgen_hw_entries[n]
373 static const CGEN_HW_ENTRY fr30_cgen_hw_entries[] =
374 {
375 { 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 } } },
376 { HW_H_MEMORY, & HW_ENT (HW_H_MEMORY + 1), "h-memory", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
377 { HW_H_SINT, & HW_ENT (HW_H_SINT + 1), "h-sint", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
378 { HW_H_UINT, & HW_ENT (HW_H_UINT + 1), "h-uint", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
379 { HW_H_ADDR, & HW_ENT (HW_H_ADDR + 1), "h-addr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
380 { HW_H_IADDR, & HW_ENT (HW_H_IADDR + 1), "h-iaddr", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
381 { 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 } } },
382 { HW_H_DR, & HW_ENT (HW_H_DR + 1), "h-dr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_dr, { 0, 0, { 0 } } },
383 { HW_H_CR, & HW_ENT (HW_H_CR + 1), "h-cr", CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_cr, { 0, 0, { 0 } } },
384 { HW_H_NBIT, & HW_ENT (HW_H_NBIT + 1), "h-nbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
385 { HW_H_ZBIT, & HW_ENT (HW_H_ZBIT + 1), "h-zbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
386 { HW_H_VBIT, & HW_ENT (HW_H_VBIT + 1), "h-vbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
387 { HW_H_CBIT, & HW_ENT (HW_H_CBIT + 1), "h-cbit", CGEN_ASM_KEYWORD, (PTR) 0, { 0, 0, { 0 } } },
388 { 0 }
389 };
390
391 /* The operand table. */
392
393 #define OPERAND(op) CONCAT2 (FR30_OPERAND_,op)
394 #define OP_ENT(op) fr30_cgen_operand_table[OPERAND (op)]
395
396 const CGEN_OPERAND fr30_cgen_operand_table[MAX_OPERANDS] =
397 {
398 /* pc: program counter */
399 { "pc", & HW_ENT (HW_H_PC), 0, 0,
400 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
401 /* Ri: destination register */
402 { "Ri", & HW_ENT (HW_H_GR), 12, 4,
403 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
404 /* Rj: source register */
405 { "Rj", & HW_ENT (HW_H_GR), 8, 4,
406 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
407 /* Rs1: dedicated register */
408 { "Rs1", & HW_ENT (HW_H_DR), 8, 4,
409 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
410 /* Rs2: dedicated register */
411 { "Rs2", & HW_ENT (HW_H_DR), 12, 4,
412 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
413 /* ps: Program Status register */
414 { "ps", & HW_ENT (HW_H_CR), 0, 0,
415 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
416 /* u4: 4 bit unsigned immediate */
417 { "u4", & HW_ENT (HW_H_UINT), 8, 4,
418 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
419 /* m4: 4 bit negative immediate */
420 { "m4", & HW_ENT (HW_H_UINT), 8, 4,
421 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
422 /* i8: 8 bit unsigned immediate */
423 { "i8", & HW_ENT (HW_H_UINT), 4, 8,
424 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
425 /* u8: 8 bit unsigned immediate */
426 { "u8", & HW_ENT (HW_H_UINT), 8, 8,
427 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
428 /* o8: 8 bit signed immediate */
429 { "o8", & HW_ENT (HW_H_SINT), 4, 8,
430 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
431 /* s10: 10 bit signed immediate */
432 { "s10", & HW_ENT (HW_H_SINT), 8, 8,
433 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
434 /* u10: 10 bit unsigned immediate */
435 { "u10", & HW_ENT (HW_H_UINT), 8, 8,
436 { 0, 0|(1<<CGEN_OPERAND_HASH_PREFIX)|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
437 /* dir8: 8 bit direct address */
438 { "dir8", & HW_ENT (HW_H_UINT), 8, 8,
439 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
440 /* dir9: 9 bit direct address */
441 { "dir9", & HW_ENT (HW_H_UINT), 8, 8,
442 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
443 /* dir10: 10 bit direct address */
444 { "dir10", & HW_ENT (HW_H_UINT), 8, 8,
445 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
446 /* label9: 9 bit pc relative address */
447 { "label9", & HW_ENT (HW_H_SINT), 8, 8,
448 { 0, 0|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
449 /* label12: 12 bit pc relative address */
450 { "label12", & HW_ENT (HW_H_SINT), 5, 11,
451 { 0, 0|(1<<CGEN_OPERAND_SIGNED), { 0 } } },
452 /* cc: condition codes */
453 { "cc", & HW_ENT (HW_H_UINT), 4, 4,
454 { 0, 0|(1<<CGEN_OPERAND_UNSIGNED), { 0 } } },
455 /* nbit: negative bit */
456 { "nbit", & HW_ENT (HW_H_NBIT), 0, 0,
457 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
458 /* vbit: overflow bit */
459 { "vbit", & HW_ENT (HW_H_VBIT), 0, 0,
460 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
461 /* zbit: zero bit */
462 { "zbit", & HW_ENT (HW_H_ZBIT), 0, 0,
463 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
464 /* cbit: carry bit */
465 { "cbit", & HW_ENT (HW_H_CBIT), 0, 0,
466 { 0, 0|(1<<CGEN_OPERAND_SEM_ONLY), { 0 } } },
467 };
468
469 /* Operand references. */
470
471 #define INPUT CGEN_OPERAND_INSTANCE_INPUT
472 #define OUTPUT CGEN_OPERAND_INSTANCE_OUTPUT
473
474 static const CGEN_OPERAND_INSTANCE fmt_add_ops[] = {
475 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
476 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0 },
477 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
478 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
479 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
480 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
481 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
482 { 0 }
483 };
484
485 static const CGEN_OPERAND_INSTANCE fmt_addi_ops[] = {
486 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
487 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0 },
488 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
489 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
490 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
491 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
492 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
493 { 0 }
494 };
495
496 static const CGEN_OPERAND_INSTANCE fmt_add2_ops[] = {
497 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
498 { INPUT, "m4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (M4), 0 },
499 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
500 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
501 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
502 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
503 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
504 { 0 }
505 };
506
507 static const CGEN_OPERAND_INSTANCE fmt_addc_ops[] = {
508 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
509 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0 },
510 { INPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
511 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
512 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
513 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
514 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
515 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
516 { 0 }
517 };
518
519 static const CGEN_OPERAND_INSTANCE fmt_addn_ops[] = {
520 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
521 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0 },
522 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
523 { 0 }
524 };
525
526 static const CGEN_OPERAND_INSTANCE fmt_addni_ops[] = {
527 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
528 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0 },
529 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
530 { 0 }
531 };
532
533 static const CGEN_OPERAND_INSTANCE fmt_addn2_ops[] = {
534 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
535 { INPUT, "m4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (M4), 0 },
536 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
537 { 0 }
538 };
539
540 static const CGEN_OPERAND_INSTANCE fmt_cmp_ops[] = {
541 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
542 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0 },
543 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
544 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
545 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
546 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
547 { 0 }
548 };
549
550 static const CGEN_OPERAND_INSTANCE fmt_cmpi_ops[] = {
551 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
552 { INPUT, "u4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (U4), 0 },
553 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
554 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
555 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
556 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
557 { 0 }
558 };
559
560 static const CGEN_OPERAND_INSTANCE fmt_cmp2_ops[] = {
561 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
562 { INPUT, "m4", & HW_ENT (HW_H_UINT), CGEN_MODE_USI, & OP_ENT (M4), 0 },
563 { OUTPUT, "vbit", & HW_ENT (HW_H_VBIT), CGEN_MODE_BI, 0, 0 },
564 { OUTPUT, "cbit", & HW_ENT (HW_H_CBIT), CGEN_MODE_BI, 0, 0 },
565 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
566 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
567 { 0 }
568 };
569
570 static const CGEN_OPERAND_INSTANCE fmt_and_ops[] = {
571 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
572 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0 },
573 { OUTPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RI), 0 },
574 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
575 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
576 { 0 }
577 };
578
579 static const CGEN_OPERAND_INSTANCE fmt_andm_ops[] = {
580 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0 },
581 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0 },
582 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_SI, & OP_ENT (RJ), 0 },
583 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
584 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
585 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_SI, 0, 0 },
586 { 0 }
587 };
588
589 static const CGEN_OPERAND_INSTANCE fmt_andh_ops[] = {
590 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0 },
591 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0 },
592 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_HI, & OP_ENT (RJ), 0 },
593 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
594 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
595 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_HI, 0, 0 },
596 { 0 }
597 };
598
599 static const CGEN_OPERAND_INSTANCE fmt_andb_ops[] = {
600 { INPUT, "Ri", & HW_ENT (HW_H_GR), CGEN_MODE_USI, & OP_ENT (RI), 0 },
601 { INPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0 },
602 { INPUT, "Rj", & HW_ENT (HW_H_GR), CGEN_MODE_QI, & OP_ENT (RJ), 0 },
603 { OUTPUT, "zbit", & HW_ENT (HW_H_ZBIT), CGEN_MODE_BI, 0, 0 },
604 { OUTPUT, "nbit", & HW_ENT (HW_H_NBIT), CGEN_MODE_BI, 0, 0 },
605 { OUTPUT, "h_memory_Ri", & HW_ENT (HW_H_MEMORY), CGEN_MODE_QI, 0, 0 },
606 { 0 }
607 };
608
609 #undef INPUT
610 #undef OUTPUT
611
612 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
613 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
614 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
615
616 /* The instruction table.
617 This is currently non-static because the simulator accesses it
618 directly. */
619
620 const CGEN_INSN fr30_cgen_insn_table_entries[MAX_INSNS] =
621 {
622 /* Special null first entry.
623 A `num' value of zero is thus invalid.
624 Also, the special `invalid' insn resides here. */
625 { { 0 }, 0 },
626 /* add $Rj,$Ri */
627 {
628 { 1, 1, 1, 1 },
629 FR30_INSN_ADD, "add", "add",
630 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
631 { 16, 16, 0xff00 }, 0xa600,
632 (PTR) & fmt_add_ops[0],
633 { 0, 0, { 0 } }
634 },
635 /* add $u4,$Ri */
636 {
637 { 1, 1, 1, 1 },
638 FR30_INSN_ADDI, "addi", "add",
639 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
640 { 16, 16, 0xff00 }, 0xa400,
641 (PTR) & fmt_addi_ops[0],
642 { 0, 0, { 0 } }
643 },
644 /* add2 $m4,$Ri */
645 {
646 { 1, 1, 1, 1 },
647 FR30_INSN_ADD2, "add2", "add2",
648 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
649 { 16, 16, 0xff00 }, 0xa500,
650 (PTR) & fmt_add2_ops[0],
651 { 0, 0, { 0 } }
652 },
653 /* addc $Rj,$Ri */
654 {
655 { 1, 1, 1, 1 },
656 FR30_INSN_ADDC, "addc", "addc",
657 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
658 { 16, 16, 0xff00 }, 0xa700,
659 (PTR) & fmt_addc_ops[0],
660 { 0, 0, { 0 } }
661 },
662 /* addn $Rj,$Ri */
663 {
664 { 1, 1, 1, 1 },
665 FR30_INSN_ADDN, "addn", "addn",
666 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
667 { 16, 16, 0xff00 }, 0xa200,
668 (PTR) & fmt_addn_ops[0],
669 { 0, 0, { 0 } }
670 },
671 /* addn $u4,$Ri */
672 {
673 { 1, 1, 1, 1 },
674 FR30_INSN_ADDNI, "addni", "addn",
675 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
676 { 16, 16, 0xff00 }, 0xa000,
677 (PTR) & fmt_addni_ops[0],
678 { 0, 0, { 0 } }
679 },
680 /* addn2 $m4,$Ri */
681 {
682 { 1, 1, 1, 1 },
683 FR30_INSN_ADDN2, "addn2", "addn2",
684 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
685 { 16, 16, 0xff00 }, 0xa100,
686 (PTR) & fmt_addn2_ops[0],
687 { 0, 0, { 0 } }
688 },
689 /* sub $Rj,$Ri */
690 {
691 { 1, 1, 1, 1 },
692 FR30_INSN_SUB, "sub", "sub",
693 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
694 { 16, 16, 0xff00 }, 0xac00,
695 (PTR) & fmt_add_ops[0],
696 { 0, 0, { 0 } }
697 },
698 /* subc $Rj,$Ri */
699 {
700 { 1, 1, 1, 1 },
701 FR30_INSN_SUBC, "subc", "subc",
702 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
703 { 16, 16, 0xff00 }, 0xad00,
704 (PTR) & fmt_addc_ops[0],
705 { 0, 0, { 0 } }
706 },
707 /* subn $Rj,$Ri */
708 {
709 { 1, 1, 1, 1 },
710 FR30_INSN_SUBN, "subn", "subn",
711 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
712 { 16, 16, 0xff00 }, 0xae00,
713 (PTR) & fmt_addn_ops[0],
714 { 0, 0, { 0 } }
715 },
716 /* cmp $Rj,$Ri */
717 {
718 { 1, 1, 1, 1 },
719 FR30_INSN_CMP, "cmp", "cmp",
720 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
721 { 16, 16, 0xff00 }, 0xaa00,
722 (PTR) & fmt_cmp_ops[0],
723 { 0, 0, { 0 } }
724 },
725 /* cmp $u4,$Ri */
726 {
727 { 1, 1, 1, 1 },
728 FR30_INSN_CMPI, "cmpi", "cmp",
729 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
730 { 16, 16, 0xff00 }, 0xa800,
731 (PTR) & fmt_cmpi_ops[0],
732 { 0, 0, { 0 } }
733 },
734 /* cmp2 $m4,$Ri */
735 {
736 { 1, 1, 1, 1 },
737 FR30_INSN_CMP2, "cmp2", "cmp2",
738 { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } },
739 { 16, 16, 0xff00 }, 0xa900,
740 (PTR) & fmt_cmp2_ops[0],
741 { 0, 0, { 0 } }
742 },
743 /* and $Rj,$Ri */
744 {
745 { 1, 1, 1, 1 },
746 FR30_INSN_AND, "and", "and",
747 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
748 { 16, 16, 0xff00 }, 0x8200,
749 (PTR) & fmt_and_ops[0],
750 { 0, 0, { 0 } }
751 },
752 /* or $Rj,$Ri */
753 {
754 { 1, 1, 1, 1 },
755 FR30_INSN_OR, "or", "or",
756 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
757 { 16, 16, 0xff00 }, 0x9200,
758 (PTR) & fmt_and_ops[0],
759 { 0, 0, { 0 } }
760 },
761 /* eor $Rj,$Ri */
762 {
763 { 1, 1, 1, 1 },
764 FR30_INSN_EOR, "eor", "eor",
765 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
766 { 16, 16, 0xff00 }, 0x9a00,
767 (PTR) & fmt_and_ops[0],
768 { 0, 0, { 0 } }
769 },
770 /* and $Rj,@$Ri */
771 {
772 { 1, 1, 1, 1 },
773 FR30_INSN_ANDM, "andm", "and",
774 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
775 { 16, 16, 0xff00 }, 0x8400,
776 (PTR) & fmt_andm_ops[0],
777 { 0, 0, { 0 } }
778 },
779 /* andh $Rj,@$Ri */
780 {
781 { 1, 1, 1, 1 },
782 FR30_INSN_ANDH, "andh", "andh",
783 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
784 { 16, 16, 0xff00 }, 0x8500,
785 (PTR) & fmt_andh_ops[0],
786 { 0, 0, { 0 } }
787 },
788 /* andb $Rj,@$Ri */
789 {
790 { 1, 1, 1, 1 },
791 FR30_INSN_ANDB, "andb", "andb",
792 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
793 { 16, 16, 0xff00 }, 0x8600,
794 (PTR) & fmt_andb_ops[0],
795 { 0, 0, { 0 } }
796 },
797 /* or $Rj,@$Ri */
798 {
799 { 1, 1, 1, 1 },
800 FR30_INSN_ORM, "orm", "or",
801 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
802 { 16, 16, 0xff00 }, 0x9400,
803 (PTR) & fmt_andm_ops[0],
804 { 0, 0, { 0 } }
805 },
806 /* orh $Rj,@$Ri */
807 {
808 { 1, 1, 1, 1 },
809 FR30_INSN_ORH, "orh", "orh",
810 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
811 { 16, 16, 0xff00 }, 0x9500,
812 (PTR) & fmt_andh_ops[0],
813 { 0, 0, { 0 } }
814 },
815 /* orb $Rj,@$Ri */
816 {
817 { 1, 1, 1, 1 },
818 FR30_INSN_ORB, "orb", "orb",
819 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
820 { 16, 16, 0xff00 }, 0x9600,
821 (PTR) & fmt_andb_ops[0],
822 { 0, 0, { 0 } }
823 },
824 /* eor $Rj,@$Ri */
825 {
826 { 1, 1, 1, 1 },
827 FR30_INSN_EORM, "eorm", "eor",
828 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
829 { 16, 16, 0xff00 }, 0x9c00,
830 (PTR) & fmt_andm_ops[0],
831 { 0, 0, { 0 } }
832 },
833 /* eorh $Rj,@$Ri */
834 {
835 { 1, 1, 1, 1 },
836 FR30_INSN_EORH, "eorh", "eorh",
837 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
838 { 16, 16, 0xff00 }, 0x9d00,
839 (PTR) & fmt_andh_ops[0],
840 { 0, 0, { 0 } }
841 },
842 /* eorb $Rj,@$Ri */
843 {
844 { 1, 1, 1, 1 },
845 FR30_INSN_EORB, "eorb", "eorb",
846 { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } },
847 { 16, 16, 0xff00 }, 0x9e00,
848 (PTR) & fmt_andb_ops[0],
849 { 0, 0, { 0 } }
850 },
851 /* bandl $u4,@$Ri */
852 {
853 { 1, 1, 1, 1 },
854 FR30_INSN_BANDL, "bandl", "bandl",
855 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
856 { 16, 16, 0xff00 }, 0x8000,
857 (PTR) 0,
858 { 0, 0, { 0 } }
859 },
860 /* borl $u4,@$Ri */
861 {
862 { 1, 1, 1, 1 },
863 FR30_INSN_BORL, "borl", "borl",
864 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
865 { 16, 16, 0xff00 }, 0x9000,
866 (PTR) 0,
867 { 0, 0, { 0 } }
868 },
869 /* beorl $u4,@$Ri */
870 {
871 { 1, 1, 1, 1 },
872 FR30_INSN_BEORL, "beorl", "beorl",
873 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
874 { 16, 16, 0xff00 }, 0x9800,
875 (PTR) 0,
876 { 0, 0, { 0 } }
877 },
878 /* bandh $u4,@$Ri */
879 {
880 { 1, 1, 1, 1 },
881 FR30_INSN_BANDH, "bandh", "bandh",
882 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
883 { 16, 16, 0xff00 }, 0x8100,
884 (PTR) 0,
885 { 0, 0, { 0 } }
886 },
887 /* borh $u4,@$Ri */
888 {
889 { 1, 1, 1, 1 },
890 FR30_INSN_BORH, "borh", "borh",
891 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
892 { 16, 16, 0xff00 }, 0x9100,
893 (PTR) 0,
894 { 0, 0, { 0 } }
895 },
896 /* beorh $u4,@$Ri */
897 {
898 { 1, 1, 1, 1 },
899 FR30_INSN_BEORH, "beorh", "beorh",
900 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
901 { 16, 16, 0xff00 }, 0x9900,
902 (PTR) 0,
903 { 0, 0, { 0 } }
904 },
905 /* btstl $u4,@$Ri */
906 {
907 { 1, 1, 1, 1 },
908 FR30_INSN_BTSTL, "btstl", "btstl",
909 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
910 { 16, 16, 0xff00 }, 0x8800,
911 (PTR) 0,
912 { 0, 0, { 0 } }
913 },
914 /* btsth $u4,@$Ri */
915 {
916 { 1, 1, 1, 1 },
917 FR30_INSN_BTSTH, "btsth", "btsth",
918 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } },
919 { 16, 16, 0xff00 }, 0x8900,
920 (PTR) 0,
921 { 0, 0, { 0 } }
922 },
923 /* mul $Rj,$Ri */
924 {
925 { 1, 1, 1, 1 },
926 FR30_INSN_MUL, "mul", "mul",
927 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
928 { 16, 16, 0xff00 }, 0xaf00,
929 (PTR) 0,
930 { 0, 0, { 0 } }
931 },
932 /* mulu $Rj,$Ri */
933 {
934 { 1, 1, 1, 1 },
935 FR30_INSN_MULU, "mulu", "mulu",
936 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
937 { 16, 16, 0xff00 }, 0xab00,
938 (PTR) 0,
939 { 0, 0, { 0 } }
940 },
941 /* mulh $Rj,$Ri */
942 {
943 { 1, 1, 1, 1 },
944 FR30_INSN_MULH, "mulh", "mulh",
945 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
946 { 16, 16, 0xff00 }, 0xbf00,
947 (PTR) 0,
948 { 0, 0, { 0 } }
949 },
950 /* muluh $Rj,$Ri */
951 {
952 { 1, 1, 1, 1 },
953 FR30_INSN_MULUH, "muluh", "muluh",
954 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
955 { 16, 16, 0xff00 }, 0xbb00,
956 (PTR) 0,
957 { 0, 0, { 0 } }
958 },
959 /* div0s $Ri */
960 {
961 { 1, 1, 1, 1 },
962 FR30_INSN_DIV0S, "div0s", "div0s",
963 { { MNEM, ' ', OP (RI), 0 } },
964 { 16, 16, 0xfff0 }, 0x9740,
965 (PTR) 0,
966 { 0, 0, { 0 } }
967 },
968 /* div0u $Ri */
969 {
970 { 1, 1, 1, 1 },
971 FR30_INSN_DIV0U, "div0u", "div0u",
972 { { MNEM, ' ', OP (RI), 0 } },
973 { 16, 16, 0xfff0 }, 0x9750,
974 (PTR) 0,
975 { 0, 0, { 0 } }
976 },
977 /* div1 $Ri */
978 {
979 { 1, 1, 1, 1 },
980 FR30_INSN_DIV1, "div1", "div1",
981 { { MNEM, ' ', OP (RI), 0 } },
982 { 16, 16, 0xfff0 }, 0x9760,
983 (PTR) 0,
984 { 0, 0, { 0 } }
985 },
986 /* div2 $Ri */
987 {
988 { 1, 1, 1, 1 },
989 FR30_INSN_DIV2, "div2", "div2",
990 { { MNEM, ' ', OP (RI), 0 } },
991 { 16, 16, 0xfff0 }, 0x9770,
992 (PTR) 0,
993 { 0, 0, { 0 } }
994 },
995 /* div3 */
996 {
997 { 1, 1, 1, 1 },
998 FR30_INSN_DIV3, "div3", "div3",
999 { { MNEM, 0 } },
1000 { 16, 16, 0xffff }, 0x9f60,
1001 (PTR) 0,
1002 { 0, 0, { 0 } }
1003 },
1004 /* div4s */
1005 {
1006 { 1, 1, 1, 1 },
1007 FR30_INSN_DIV4S, "div4s", "div4s",
1008 { { MNEM, 0 } },
1009 { 16, 16, 0xffff }, 0x9f70,
1010 (PTR) 0,
1011 { 0, 0, { 0 } }
1012 },
1013 /* lsl $Rj,$Ri */
1014 {
1015 { 1, 1, 1, 1 },
1016 FR30_INSN_LSL, "lsl", "lsl",
1017 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1018 { 16, 16, 0xff00 }, 0xb600,
1019 (PTR) 0,
1020 { 0, 0, { 0 } }
1021 },
1022 /* lsl $u4,$Ri */
1023 {
1024 { 1, 1, 1, 1 },
1025 FR30_INSN_LSLI, "lsli", "lsl",
1026 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1027 { 16, 16, 0xff00 }, 0xb400,
1028 (PTR) 0,
1029 { 0, 0, { 0 } }
1030 },
1031 /* lsl2 $u4,$Ri */
1032 {
1033 { 1, 1, 1, 1 },
1034 FR30_INSN_LSL2, "lsl2", "lsl2",
1035 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1036 { 16, 16, 0xff00 }, 0xb500,
1037 (PTR) 0,
1038 { 0, 0, { 0 } }
1039 },
1040 /* lsr $Rj,$Ri */
1041 {
1042 { 1, 1, 1, 1 },
1043 FR30_INSN_LSR, "lsr", "lsr",
1044 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1045 { 16, 16, 0xff00 }, 0xb200,
1046 (PTR) 0,
1047 { 0, 0, { 0 } }
1048 },
1049 /* lsr $u4,$Ri */
1050 {
1051 { 1, 1, 1, 1 },
1052 FR30_INSN_LSRI, "lsri", "lsr",
1053 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1054 { 16, 16, 0xff00 }, 0xb000,
1055 (PTR) 0,
1056 { 0, 0, { 0 } }
1057 },
1058 /* lsr2 $u4,$Ri */
1059 {
1060 { 1, 1, 1, 1 },
1061 FR30_INSN_LSR2, "lsr2", "lsr2",
1062 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1063 { 16, 16, 0xff00 }, 0xb100,
1064 (PTR) 0,
1065 { 0, 0, { 0 } }
1066 },
1067 /* asr $Rj,$Ri */
1068 {
1069 { 1, 1, 1, 1 },
1070 FR30_INSN_ASR, "asr", "asr",
1071 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1072 { 16, 16, 0xff00 }, 0xba00,
1073 (PTR) 0,
1074 { 0, 0, { 0 } }
1075 },
1076 /* asr $u4,$Ri */
1077 {
1078 { 1, 1, 1, 1 },
1079 FR30_INSN_ASRI, "asri", "asr",
1080 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1081 { 16, 16, 0xff00 }, 0xb800,
1082 (PTR) 0,
1083 { 0, 0, { 0 } }
1084 },
1085 /* asr2 $u4,$Ri */
1086 {
1087 { 1, 1, 1, 1 },
1088 FR30_INSN_ASR2, "asr2", "asr2",
1089 { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } },
1090 { 16, 16, 0xff00 }, 0xb900,
1091 (PTR) 0,
1092 { 0, 0, { 0 } }
1093 },
1094 /* ldi:8 $i8,$Ri */
1095 {
1096 { 1, 1, 1, 1 },
1097 FR30_INSN_LDI_8, "ldi:8", "ldi:8",
1098 { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } },
1099 { 16, 16, 0xf000 }, 0xc000,
1100 (PTR) 0,
1101 { 0, 0, { 0 } }
1102 },
1103 /* ld @$Rj,$Ri */
1104 {
1105 { 1, 1, 1, 1 },
1106 FR30_INSN_LD, "ld", "ld",
1107 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1108 { 16, 16, 0xff00 }, 0x400,
1109 (PTR) 0,
1110 { 0, 0, { 0 } }
1111 },
1112 /* lduh @$Rj,$Ri */
1113 {
1114 { 1, 1, 1, 1 },
1115 FR30_INSN_LDUH, "lduh", "lduh",
1116 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1117 { 16, 16, 0xff00 }, 0x500,
1118 (PTR) 0,
1119 { 0, 0, { 0 } }
1120 },
1121 /* ldub @$Rj,$Ri */
1122 {
1123 { 1, 1, 1, 1 },
1124 FR30_INSN_LDUB, "ldub", "ldub",
1125 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1126 { 16, 16, 0xff00 }, 0x600,
1127 (PTR) 0,
1128 { 0, 0, { 0 } }
1129 },
1130 /* ld @(R13,$Rj),$Ri */
1131 {
1132 { 1, 1, 1, 1 },
1133 FR30_INSN_LDR13, "ldr13", "ld",
1134 { { MNEM, ' ', '@', '(', 'R', '1', '3', ',', OP (RJ), ')', ',', OP (RI), 0 } },
1135 { 16, 16, 0xff00 }, 0x0,
1136 (PTR) 0,
1137 { 0, 0, { 0 } }
1138 },
1139 /* lduh @(R13,$Rj),$Ri */
1140 {
1141 { 1, 1, 1, 1 },
1142 FR30_INSN_LDR13UH, "ldr13uh", "lduh",
1143 { { MNEM, ' ', '@', '(', 'R', '1', '3', ',', OP (RJ), ')', ',', OP (RI), 0 } },
1144 { 16, 16, 0xff00 }, 0x100,
1145 (PTR) 0,
1146 { 0, 0, { 0 } }
1147 },
1148 /* ldub @(R13,$Rj),$Ri */
1149 {
1150 { 1, 1, 1, 1 },
1151 FR30_INSN_LDR13UB, "ldr13ub", "ldub",
1152 { { MNEM, ' ', '@', '(', 'R', '1', '3', ',', OP (RJ), ')', ',', OP (RI), 0 } },
1153 { 16, 16, 0xff00 }, 0x200,
1154 (PTR) 0,
1155 { 0, 0, { 0 } }
1156 },
1157 /* ld @(R14,$o8),$Ri */
1158 {
1159 { 1, 1, 1, 1 },
1160 FR30_INSN_LDR14, "ldr14", "ld",
1161 { { MNEM, ' ', '@', '(', 'R', '1', '4', ',', OP (O8), ')', ',', OP (RI), 0 } },
1162 { 16, 16, 0xf000 }, 0x2000,
1163 (PTR) 0,
1164 { 0, 0, { 0 } }
1165 },
1166 /* lduh @(R14,$o8),$Ri */
1167 {
1168 { 1, 1, 1, 1 },
1169 FR30_INSN_LDR14UH, "ldr14uh", "lduh",
1170 { { MNEM, ' ', '@', '(', 'R', '1', '4', ',', OP (O8), ')', ',', OP (RI), 0 } },
1171 { 16, 16, 0xf000 }, 0x4000,
1172 (PTR) 0,
1173 { 0, 0, { 0 } }
1174 },
1175 /* ldub @(R14,$o8),$Ri */
1176 {
1177 { 1, 1, 1, 1 },
1178 FR30_INSN_LDR14UB, "ldr14ub", "ldub",
1179 { { MNEM, ' ', '@', '(', 'R', '1', '4', ',', OP (O8), ')', ',', OP (RI), 0 } },
1180 { 16, 16, 0xf000 }, 0x6000,
1181 (PTR) 0,
1182 { 0, 0, { 0 } }
1183 },
1184 /* ld @(R15,$u4),$Ri */
1185 {
1186 { 1, 1, 1, 1 },
1187 FR30_INSN_LDR15, "ldr15", "ld",
1188 { { MNEM, ' ', '@', '(', 'R', '1', '5', ',', OP (U4), ')', ',', OP (RI), 0 } },
1189 { 16, 16, 0xff00 }, 0x300,
1190 (PTR) 0,
1191 { 0, 0, { 0 } }
1192 },
1193 /* ld @R15+,$Ri */
1194 {
1195 { 1, 1, 1, 1 },
1196 FR30_INSN_LDR15GR, "ldr15gr", "ld",
1197 { { MNEM, ' ', '@', 'R', '1', '5', '+', ',', OP (RI), 0 } },
1198 { 16, 16, 0xfff0 }, 0x700,
1199 (PTR) 0,
1200 { 0, 0, { 0 } }
1201 },
1202 /* ld @R15+,$Rs2 */
1203 {
1204 { 1, 1, 1, 1 },
1205 FR30_INSN_LDR15DR, "ldr15dr", "ld",
1206 { { MNEM, ' ', '@', 'R', '1', '5', '+', ',', OP (RS2), 0 } },
1207 { 16, 16, 0xfff0 }, 0x780,
1208 (PTR) 0,
1209 { 0, 0, { 0 } }
1210 },
1211 /* ld @R15+,ps */
1212 {
1213 { 1, 1, 1, 1 },
1214 FR30_INSN_LDR15PS, "ldr15ps", "ld",
1215 { { MNEM, ' ', '@', 'R', '1', '5', '+', ',', 'p', 's', 0 } },
1216 { 16, 16, 0xffff }, 0x790,
1217 (PTR) 0,
1218 { 0, 0, { 0 } }
1219 },
1220 /* st $Ri,@Rj */
1221 {
1222 { 1, 1, 1, 1 },
1223 FR30_INSN_ST, "st", "st",
1224 { { MNEM, ' ', OP (RI), ',', '@', 'R', 'j', 0 } },
1225 { 16, 16, 0xff00 }, 0x1400,
1226 (PTR) 0,
1227 { 0, 0, { 0 } }
1228 },
1229 /* sth $Ri,@Rj */
1230 {
1231 { 1, 1, 1, 1 },
1232 FR30_INSN_STH, "sth", "sth",
1233 { { MNEM, ' ', OP (RI), ',', '@', 'R', 'j', 0 } },
1234 { 16, 16, 0xff00 }, 0x1500,
1235 (PTR) 0,
1236 { 0, 0, { 0 } }
1237 },
1238 /* stb $Ri,@Rj */
1239 {
1240 { 1, 1, 1, 1 },
1241 FR30_INSN_STB, "stb", "stb",
1242 { { MNEM, ' ', OP (RI), ',', '@', 'R', 'j', 0 } },
1243 { 16, 16, 0xff00 }, 0x1600,
1244 (PTR) 0,
1245 { 0, 0, { 0 } }
1246 },
1247 /* st $Ri,@(R13,$Rj) */
1248 {
1249 { 1, 1, 1, 1 },
1250 FR30_INSN_STR13, "str13", "st",
1251 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '3', ',', OP (RJ), ')', 0 } },
1252 { 16, 16, 0xff00 }, 0x1000,
1253 (PTR) 0,
1254 { 0, 0, { 0 } }
1255 },
1256 /* sth $Ri,@(R13,$Rj) */
1257 {
1258 { 1, 1, 1, 1 },
1259 FR30_INSN_STR13H, "str13h", "sth",
1260 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '3', ',', OP (RJ), ')', 0 } },
1261 { 16, 16, 0xff00 }, 0x1100,
1262 (PTR) 0,
1263 { 0, 0, { 0 } }
1264 },
1265 /* stb $Ri,@(R13,$Rj) */
1266 {
1267 { 1, 1, 1, 1 },
1268 FR30_INSN_STR13B, "str13b", "stb",
1269 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '3', ',', OP (RJ), ')', 0 } },
1270 { 16, 16, 0xff00 }, 0x1200,
1271 (PTR) 0,
1272 { 0, 0, { 0 } }
1273 },
1274 /* st $Ri,@(R14,$o8) */
1275 {
1276 { 1, 1, 1, 1 },
1277 FR30_INSN_STR14, "str14", "st",
1278 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '4', ',', OP (O8), ')', 0 } },
1279 { 16, 16, 0xf000 }, 0x3000,
1280 (PTR) 0,
1281 { 0, 0, { 0 } }
1282 },
1283 /* sth $Ri,@(R14,$o8) */
1284 {
1285 { 1, 1, 1, 1 },
1286 FR30_INSN_STR14H, "str14h", "sth",
1287 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '4', ',', OP (O8), ')', 0 } },
1288 { 16, 16, 0xf000 }, 0x5000,
1289 (PTR) 0,
1290 { 0, 0, { 0 } }
1291 },
1292 /* stb $Ri,@(R14,$o8) */
1293 {
1294 { 1, 1, 1, 1 },
1295 FR30_INSN_STR14B, "str14b", "stb",
1296 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '4', ',', OP (O8), ')', 0 } },
1297 { 16, 16, 0xf000 }, 0x7000,
1298 (PTR) 0,
1299 { 0, 0, { 0 } }
1300 },
1301 /* st $Ri,@(R15,$u4) */
1302 {
1303 { 1, 1, 1, 1 },
1304 FR30_INSN_STR15, "str15", "st",
1305 { { MNEM, ' ', OP (RI), ',', '@', '(', 'R', '1', '5', ',', OP (U4), ')', 0 } },
1306 { 16, 16, 0xff00 }, 0x1300,
1307 (PTR) 0,
1308 { 0, 0, { 0 } }
1309 },
1310 /* st $Ri,@-R15 */
1311 {
1312 { 1, 1, 1, 1 },
1313 FR30_INSN_STR15GR, "str15gr", "st",
1314 { { MNEM, ' ', OP (RI), ',', '@', '-', 'R', '1', '5', 0 } },
1315 { 16, 16, 0xfff0 }, 0x1700,
1316 (PTR) 0,
1317 { 0, 0, { 0 } }
1318 },
1319 /* st $Rs2,@-R15 */
1320 {
1321 { 1, 1, 1, 1 },
1322 FR30_INSN_STR15DR, "str15dr", "st",
1323 { { MNEM, ' ', OP (RS2), ',', '@', '-', 'R', '1', '5', 0 } },
1324 { 16, 16, 0xfff0 }, 0x1780,
1325 (PTR) 0,
1326 { 0, 0, { 0 } }
1327 },
1328 /* st ps,@-R15 */
1329 {
1330 { 1, 1, 1, 1 },
1331 FR30_INSN_STR15PS, "str15ps", "st",
1332 { { MNEM, ' ', 'p', 's', ',', '@', '-', 'R', '1', '5', 0 } },
1333 { 16, 16, 0xffff }, 0x1790,
1334 (PTR) 0,
1335 { 0, 0, { 0 } }
1336 },
1337 /* mov $Rj,$Ri */
1338 {
1339 { 1, 1, 1, 1 },
1340 FR30_INSN_MOV, "mov", "mov",
1341 { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } },
1342 { 16, 16, 0xff00 }, 0x8b00,
1343 (PTR) 0,
1344 { 0, 0, { 0 } }
1345 },
1346 /* mov $Rs1,$Ri */
1347 {
1348 { 1, 1, 1, 1 },
1349 FR30_INSN_MOVDR, "movdr", "mov",
1350 { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } },
1351 { 16, 16, 0xff00 }, 0xb700,
1352 (PTR) 0,
1353 { 0, 0, { 0 } }
1354 },
1355 /* mov ps,$Ri */
1356 {
1357 { 1, 1, 1, 1 },
1358 FR30_INSN_MOVPS, "movps", "mov",
1359 { { MNEM, ' ', 'p', 's', ',', OP (RI), 0 } },
1360 { 16, 16, 0xfff0 }, 0x1710,
1361 (PTR) 0,
1362 { 0, 0, { 0 } }
1363 },
1364 /* mov $Ri,$Rs1 */
1365 {
1366 { 1, 1, 1, 1 },
1367 FR30_INSN_MOV2DR, "mov2dr", "mov",
1368 { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } },
1369 { 16, 16, 0xff00 }, 0xb300,
1370 (PTR) 0,
1371 { 0, 0, { 0 } }
1372 },
1373 /* mov $Ri,ps */
1374 {
1375 { 1, 1, 1, 1 },
1376 FR30_INSN_MOV2PS, "mov2ps", "mov",
1377 { { MNEM, ' ', OP (RI), ',', 'p', 's', 0 } },
1378 { 16, 16, 0xfff0 }, 0x710,
1379 (PTR) 0,
1380 { 0, 0, { 0 } }
1381 },
1382 /* jmp @$Ri */
1383 {
1384 { 1, 1, 1, 1 },
1385 FR30_INSN_JMP, "jmp", "jmp",
1386 { { MNEM, ' ', '@', OP (RI), 0 } },
1387 { 16, 16, 0xfff0 }, 0x9700,
1388 (PTR) 0,
1389 { 0, 0, { 0 } }
1390 },
1391 /* call $label12 */
1392 {
1393 { 1, 1, 1, 1 },
1394 FR30_INSN_CALL, "call", "call",
1395 { { MNEM, ' ', OP (LABEL12), 0 } },
1396 { 16, 16, 0xf400 }, 0xd000,
1397 (PTR) 0,
1398 { 0, 0, { 0 } }
1399 },
1400 /* call @$Ri */
1401 {
1402 { 1, 1, 1, 1 },
1403 FR30_INSN_CALLR, "callr", "call",
1404 { { MNEM, ' ', '@', OP (RI), 0 } },
1405 { 16, 16, 0xfff0 }, 0x9710,
1406 (PTR) 0,
1407 { 0, 0, { 0 } }
1408 },
1409 /* ret */
1410 {
1411 { 1, 1, 1, 1 },
1412 FR30_INSN_RET, "ret", "ret",
1413 { { MNEM, 0 } },
1414 { 16, 16, 0xffff }, 0x9720,
1415 (PTR) 0,
1416 { 0, 0, { 0 } }
1417 },
1418 /* int $u8 */
1419 {
1420 { 1, 1, 1, 1 },
1421 FR30_INSN_INT, "int", "int",
1422 { { MNEM, ' ', OP (U8), 0 } },
1423 { 16, 16, 0xff00 }, 0x1f00,
1424 (PTR) 0,
1425 { 0, 0, { 0 } }
1426 },
1427 /* int3 */
1428 {
1429 { 1, 1, 1, 1 },
1430 FR30_INSN_INTE, "inte", "int3",
1431 { { MNEM, 0 } },
1432 { 16, 16, 0xffff }, 0x9f30,
1433 (PTR) 0,
1434 { 0, 0, { 0 } }
1435 },
1436 /* reti */
1437 {
1438 { 1, 1, 1, 1 },
1439 FR30_INSN_RETI, "reti", "reti",
1440 { { MNEM, 0 } },
1441 { 16, 16, 0xffff }, 0x9730,
1442 (PTR) 0,
1443 { 0, 0, { 0 } }
1444 },
1445 /* bra:D $label9 */
1446 {
1447 { 1, 1, 1, 1 },
1448 FR30_INSN_BRA, "bra", "bra:D",
1449 { { MNEM, ' ', OP (LABEL9), 0 } },
1450 { 16, 16, 0xff00 }, 0xe000,
1451 (PTR) 0,
1452 { 0, 0, { 0 } }
1453 },
1454 /* bno:D $label9 */
1455 {
1456 { 1, 1, 1, 1 },
1457 FR30_INSN_BNO, "bno", "bno:D",
1458 { { MNEM, ' ', OP (LABEL9), 0 } },
1459 { 16, 16, 0xff00 }, 0xe100,
1460 (PTR) 0,
1461 { 0, 0, { 0 } }
1462 },
1463 /* beq:D $label9 */
1464 {
1465 { 1, 1, 1, 1 },
1466 FR30_INSN_BEQ, "beq", "beq:D",
1467 { { MNEM, ' ', OP (LABEL9), 0 } },
1468 { 16, 16, 0xff00 }, 0xe200,
1469 (PTR) 0,
1470 { 0, 0, { 0 } }
1471 },
1472 /* bne:D $label9 */
1473 {
1474 { 1, 1, 1, 1 },
1475 FR30_INSN_BNE, "bne", "bne:D",
1476 { { MNEM, ' ', OP (LABEL9), 0 } },
1477 { 16, 16, 0xff00 }, 0xe300,
1478 (PTR) 0,
1479 { 0, 0, { 0 } }
1480 },
1481 /* bc:D $label9 */
1482 {
1483 { 1, 1, 1, 1 },
1484 FR30_INSN_BC, "bc", "bc:D",
1485 { { MNEM, ' ', OP (LABEL9), 0 } },
1486 { 16, 16, 0xff00 }, 0xe400,
1487 (PTR) 0,
1488 { 0, 0, { 0 } }
1489 },
1490 /* bnc:D $label9 */
1491 {
1492 { 1, 1, 1, 1 },
1493 FR30_INSN_BNC, "bnc", "bnc:D",
1494 { { MNEM, ' ', OP (LABEL9), 0 } },
1495 { 16, 16, 0xff00 }, 0xe500,
1496 (PTR) 0,
1497 { 0, 0, { 0 } }
1498 },
1499 /* bn:D $label9 */
1500 {
1501 { 1, 1, 1, 1 },
1502 FR30_INSN_BN, "bn", "bn:D",
1503 { { MNEM, ' ', OP (LABEL9), 0 } },
1504 { 16, 16, 0xff00 }, 0xe600,
1505 (PTR) 0,
1506 { 0, 0, { 0 } }
1507 },
1508 /* bp:D $label9 */
1509 {
1510 { 1, 1, 1, 1 },
1511 FR30_INSN_BP, "bp", "bp:D",
1512 { { MNEM, ' ', OP (LABEL9), 0 } },
1513 { 16, 16, 0xff00 }, 0xe700,
1514 (PTR) 0,
1515 { 0, 0, { 0 } }
1516 },
1517 /* bv:D $label9 */
1518 {
1519 { 1, 1, 1, 1 },
1520 FR30_INSN_BV, "bv", "bv:D",
1521 { { MNEM, ' ', OP (LABEL9), 0 } },
1522 { 16, 16, 0xff00 }, 0xe800,
1523 (PTR) 0,
1524 { 0, 0, { 0 } }
1525 },
1526 /* bnv:D $label9 */
1527 {
1528 { 1, 1, 1, 1 },
1529 FR30_INSN_BNV, "bnv", "bnv:D",
1530 { { MNEM, ' ', OP (LABEL9), 0 } },
1531 { 16, 16, 0xff00 }, 0xe900,
1532 (PTR) 0,
1533 { 0, 0, { 0 } }
1534 },
1535 /* blt:D $label9 */
1536 {
1537 { 1, 1, 1, 1 },
1538 FR30_INSN_BLT, "blt", "blt:D",
1539 { { MNEM, ' ', OP (LABEL9), 0 } },
1540 { 16, 16, 0xff00 }, 0xea00,
1541 (PTR) 0,
1542 { 0, 0, { 0 } }
1543 },
1544 /* bge:D $label9 */
1545 {
1546 { 1, 1, 1, 1 },
1547 FR30_INSN_BGE, "bge", "bge:D",
1548 { { MNEM, ' ', OP (LABEL9), 0 } },
1549 { 16, 16, 0xff00 }, 0xeb00,
1550 (PTR) 0,
1551 { 0, 0, { 0 } }
1552 },
1553 /* ble:D $label9 */
1554 {
1555 { 1, 1, 1, 1 },
1556 FR30_INSN_BLE, "ble", "ble:D",
1557 { { MNEM, ' ', OP (LABEL9), 0 } },
1558 { 16, 16, 0xff00 }, 0xec00,
1559 (PTR) 0,
1560 { 0, 0, { 0 } }
1561 },
1562 /* bgt:D $label9 */
1563 {
1564 { 1, 1, 1, 1 },
1565 FR30_INSN_BGT, "bgt", "bgt:D",
1566 { { MNEM, ' ', OP (LABEL9), 0 } },
1567 { 16, 16, 0xff00 }, 0xed00,
1568 (PTR) 0,
1569 { 0, 0, { 0 } }
1570 },
1571 /* bls:D $label9 */
1572 {
1573 { 1, 1, 1, 1 },
1574 FR30_INSN_BLS, "bls", "bls:D",
1575 { { MNEM, ' ', OP (LABEL9), 0 } },
1576 { 16, 16, 0xff00 }, 0xee00,
1577 (PTR) 0,
1578 { 0, 0, { 0 } }
1579 },
1580 /* bhi:D $label9 */
1581 {
1582 { 1, 1, 1, 1 },
1583 FR30_INSN_BHI, "bhi", "bhi:D",
1584 { { MNEM, ' ', OP (LABEL9), 0 } },
1585 { 16, 16, 0xff00 }, 0xef00,
1586 (PTR) 0,
1587 { 0, 0, { 0 } }
1588 },
1589 /* dmov @$dir10,R13 */
1590 {
1591 { 1, 1, 1, 1 },
1592 FR30_INSN_DMOV2R13, "dmov2r13", "dmov",
1593 { { MNEM, ' ', '@', OP (DIR10), ',', 'R', '1', '3', 0 } },
1594 { 16, 16, 0xff00 }, 0x800,
1595 (PTR) 0,
1596 { 0, 0, { 0 } }
1597 },
1598 /* dmovh @$dir10,R13 */
1599 {
1600 { 1, 1, 1, 1 },
1601 FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh",
1602 { { MNEM, ' ', '@', OP (DIR10), ',', 'R', '1', '3', 0 } },
1603 { 16, 16, 0xff00 }, 0x900,
1604 (PTR) 0,
1605 { 0, 0, { 0 } }
1606 },
1607 /* dmovb @$dir10,R13 */
1608 {
1609 { 1, 1, 1, 1 },
1610 FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb",
1611 { { MNEM, ' ', '@', OP (DIR10), ',', 'R', '1', '3', 0 } },
1612 { 16, 16, 0xff00 }, 0xa00,
1613 (PTR) 0,
1614 { 0, 0, { 0 } }
1615 },
1616 /* dmov R13,@$dir10 */
1617 {
1618 { 1, 1, 1, 1 },
1619 FR30_INSN_DMOVR13, "dmovr13", "dmov",
1620 { { MNEM, ' ', 'R', '1', '3', ',', '@', OP (DIR10), 0 } },
1621 { 16, 16, 0xff00 }, 0x1800,
1622 (PTR) 0,
1623 { 0, 0, { 0 } }
1624 },
1625 /* dmovh R13,@$dir10 */
1626 {
1627 { 1, 1, 1, 1 },
1628 FR30_INSN_DMOVR13H, "dmovr13h", "dmovh",
1629 { { MNEM, ' ', 'R', '1', '3', ',', '@', OP (DIR10), 0 } },
1630 { 16, 16, 0xff00 }, 0x1900,
1631 (PTR) 0,
1632 { 0, 0, { 0 } }
1633 },
1634 /* dmovb R13,@$dir10 */
1635 {
1636 { 1, 1, 1, 1 },
1637 FR30_INSN_DMOVR13B, "dmovr13b", "dmovb",
1638 { { MNEM, ' ', 'R', '1', '3', ',', '@', OP (DIR10), 0 } },
1639 { 16, 16, 0xff00 }, 0x1a00,
1640 (PTR) 0,
1641 { 0, 0, { 0 } }
1642 },
1643 /* dmov @$dir10,R13+ */
1644 {
1645 { 1, 1, 1, 1 },
1646 FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov",
1647 { { MNEM, ' ', '@', OP (DIR10), ',', 'R', '1', '3', '+', 0 } },
1648 { 16, 16, 0xff00 }, 0xc00,
1649 (PTR) 0,
1650 { 0, 0, { 0 } }
1651 },
1652 /* dmovh @$dir10,R13+ */
1653 {
1654 { 1, 1, 1, 1 },
1655 FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh",
1656 { { MNEM, ' ', '@', OP (DIR10), ',', 'R', '1', '3', '+', 0 } },
1657 { 16, 16, 0xff00 }, 0xd00,
1658 (PTR) 0,
1659 { 0, 0, { 0 } }
1660 },
1661 /* dmovb @$dir10,R13+ */
1662 {
1663 { 1, 1, 1, 1 },
1664 FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb",
1665 { { MNEM, ' ', '@', OP (DIR10), ',', 'R', '1', '3', '+', 0 } },
1666 { 16, 16, 0xff00 }, 0xe00,
1667 (PTR) 0,
1668 { 0, 0, { 0 } }
1669 },
1670 /* dmov R13+,@$dir10 */
1671 {
1672 { 1, 1, 1, 1 },
1673 FR30_INSN_DMOV13PI, "dmov13pi", "dmov",
1674 { { MNEM, ' ', 'R', '1', '3', '+', ',', '@', OP (DIR10), 0 } },
1675 { 16, 16, 0xff00 }, 0x1c00,
1676 (PTR) 0,
1677 { 0, 0, { 0 } }
1678 },
1679 /* dmovh R13+,@$dir10 */
1680 {
1681 { 1, 1, 1, 1 },
1682 FR30_INSN_DMOV13PIH, "dmov13pih", "dmovh",
1683 { { MNEM, ' ', 'R', '1', '3', '+', ',', '@', OP (DIR10), 0 } },
1684 { 16, 16, 0xff00 }, 0x1d00,
1685 (PTR) 0,
1686 { 0, 0, { 0 } }
1687 },
1688 /* dmovb R13+,@$dir10 */
1689 {
1690 { 1, 1, 1, 1 },
1691 FR30_INSN_DMOV13PIB, "dmov13pib", "dmovb",
1692 { { MNEM, ' ', 'R', '1', '3', '+', ',', '@', OP (DIR10), 0 } },
1693 { 16, 16, 0xff00 }, 0x1e00,
1694 (PTR) 0,
1695 { 0, 0, { 0 } }
1696 },
1697 /* dmov @$dir10,-R15 */
1698 {
1699 { 1, 1, 1, 1 },
1700 FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov",
1701 { { MNEM, ' ', '@', OP (DIR10), ',', '-', 'R', '1', '5', 0 } },
1702 { 16, 16, 0xff00 }, 0xb00,
1703 (PTR) 0,
1704 { 0, 0, { 0 } }
1705 },
1706 /* dmov R15+,@$dir10 */
1707 {
1708 { 1, 1, 1, 1 },
1709 FR30_INSN_DMOV15PI, "dmov15pi", "dmov",
1710 { { MNEM, ' ', 'R', '1', '5', '+', ',', '@', OP (DIR10), 0 } },
1711 { 16, 16, 0xff00 }, 0x1b00,
1712 (PTR) 0,
1713 { 0, 0, { 0 } }
1714 },
1715 /* ldres @$Ri+,$u4 */
1716 {
1717 { 1, 1, 1, 1 },
1718 FR30_INSN_LDRES, "ldres", "ldres",
1719 { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } },
1720 { 16, 16, 0xff00 }, 0xbc00,
1721 (PTR) 0,
1722 { 0, 0, { 0 } }
1723 },
1724 /* ldres $u4,@$Ri+ */
1725 {
1726 { 1, 1, 1, 1 },
1727 FR30_INSN_STRES, "stres", "ldres",
1728 { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } },
1729 { 16, 16, 0xff00 }, 0xbd00,
1730 (PTR) 0,
1731 { 0, 0, { 0 } }
1732 },
1733 /* nop */
1734 {
1735 { 1, 1, 1, 1 },
1736 FR30_INSN_NOP, "nop", "nop",
1737 { { MNEM, 0 } },
1738 { 16, 16, 0xffff }, 0x9fa0,
1739 (PTR) 0,
1740 { 0, 0, { 0 } }
1741 },
1742 /* andccr $u8 */
1743 {
1744 { 1, 1, 1, 1 },
1745 FR30_INSN_ANDCCR, "andccr", "andccr",
1746 { { MNEM, ' ', OP (U8), 0 } },
1747 { 16, 16, 0xff00 }, 0x8300,
1748 (PTR) 0,
1749 { 0, 0, { 0 } }
1750 },
1751 /* orccr $u8 */
1752 {
1753 { 1, 1, 1, 1 },
1754 FR30_INSN_ORCCR, "orccr", "orccr",
1755 { { MNEM, ' ', OP (U8), 0 } },
1756 { 16, 16, 0xff00 }, 0x9300,
1757 (PTR) 0,
1758 { 0, 0, { 0 } }
1759 },
1760 /* stilm $u8 */
1761 {
1762 { 1, 1, 1, 1 },
1763 FR30_INSN_STILM, "stilm", "stilm",
1764 { { MNEM, ' ', OP (U8), 0 } },
1765 { 16, 16, 0xff00 }, 0x8700,
1766 (PTR) 0,
1767 { 0, 0, { 0 } }
1768 },
1769 /* addsp $s10 */
1770 {
1771 { 1, 1, 1, 1 },
1772 FR30_INSN_ADDSP, "addsp", "addsp",
1773 { { MNEM, ' ', OP (S10), 0 } },
1774 { 16, 16, 0xff00 }, 0xa300,
1775 (PTR) 0,
1776 { 0, 0, { 0 } }
1777 },
1778 /* extsb $Ri */
1779 {
1780 { 1, 1, 1, 1 },
1781 FR30_INSN_EXTSB, "extsb", "extsb",
1782 { { MNEM, ' ', OP (RI), 0 } },
1783 { 16, 16, 0xfff0 }, 0x9780,
1784 (PTR) 0,
1785 { 0, 0, { 0 } }
1786 },
1787 /* extub $Ri */
1788 {
1789 { 1, 1, 1, 1 },
1790 FR30_INSN_EXTUB, "extub", "extub",
1791 { { MNEM, ' ', OP (RI), 0 } },
1792 { 16, 16, 0xfff0 }, 0x9790,
1793 (PTR) 0,
1794 { 0, 0, { 0 } }
1795 },
1796 /* extsh $Ri */
1797 {
1798 { 1, 1, 1, 1 },
1799 FR30_INSN_EXTSH, "extsh", "extsh",
1800 { { MNEM, ' ', OP (RI), 0 } },
1801 { 16, 16, 0xfff0 }, 0x97a0,
1802 (PTR) 0,
1803 { 0, 0, { 0 } }
1804 },
1805 /* extuh $Ri */
1806 {
1807 { 1, 1, 1, 1 },
1808 FR30_INSN_EXTUH, "extuh", "extuh",
1809 { { MNEM, ' ', OP (RI), 0 } },
1810 { 16, 16, 0xfff0 }, 0x97b0,
1811 (PTR) 0,
1812 { 0, 0, { 0 } }
1813 },
1814 /* enter $u10 */
1815 {
1816 { 1, 1, 1, 1 },
1817 FR30_INSN_ENTER, "enter", "enter",
1818 { { MNEM, ' ', OP (U10), 0 } },
1819 { 16, 16, 0xff00 }, 0xf00,
1820 (PTR) 0,
1821 { 0, 0, { 0 } }
1822 },
1823 /* leave */
1824 {
1825 { 1, 1, 1, 1 },
1826 FR30_INSN_LEAVE, "leave", "leave",
1827 { { MNEM, 0 } },
1828 { 16, 16, 0xffff }, 0x9f90,
1829 (PTR) 0,
1830 { 0, 0, { 0 } }
1831 },
1832 /* xchb @$Rj,$Ri */
1833 {
1834 { 1, 1, 1, 1 },
1835 FR30_INSN_XCHB, "xchb", "xchb",
1836 { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } },
1837 { 16, 16, 0xff00 }, 0x8a00,
1838 (PTR) 0,
1839 { 0, 0, { 0 } }
1840 },
1841 };
1842
1843 #undef A
1844 #undef MNEM
1845 #undef OP
1846
1847 static const CGEN_INSN_TABLE insn_table =
1848 {
1849 & fr30_cgen_insn_table_entries[0],
1850 sizeof (CGEN_INSN),
1851 MAX_INSNS,
1852 NULL
1853 };
1854
1855 /* Each non-simple macro entry points to an array of expansion possibilities. */
1856
1857 #define A(a) (1 << CONCAT2 (CGEN_INSN_,a))
1858 #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
1859 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
1860
1861 /* The macro instruction table. */
1862
1863 static const CGEN_INSN macro_insn_table_entries[] =
1864 {
1865 };
1866
1867 #undef A
1868 #undef MNEM
1869 #undef OP
1870
1871 static const CGEN_INSN_TABLE macro_insn_table =
1872 {
1873 & macro_insn_table_entries[0],
1874 sizeof (CGEN_INSN),
1875 (sizeof (macro_insn_table_entries) /
1876 sizeof (macro_insn_table_entries[0])),
1877 NULL
1878 };
1879
1880 static void
1881 init_tables ()
1882 {
1883 }
1884
1885 /* Return non-zero if INSN is to be added to the hash table.
1886 Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */
1887
1888 static int
1889 asm_hash_insn_p (insn)
1890 const CGEN_INSN * insn;
1891 {
1892 return CGEN_ASM_HASH_P (insn);
1893 }
1894
1895 static int
1896 dis_hash_insn_p (insn)
1897 const CGEN_INSN * insn;
1898 {
1899 /* If building the hash table and the NO-DIS attribute is present,
1900 ignore. */
1901 if (CGEN_INSN_ATTR (insn, CGEN_INSN_NO_DIS))
1902 return 0;
1903 return CGEN_DIS_HASH_P (insn);
1904 }
1905
1906 /* The result is the hash value of the insn.
1907 Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */
1908
1909 static unsigned int
1910 asm_hash_insn (mnem)
1911 const char * mnem;
1912 {
1913 return CGEN_ASM_HASH (mnem);
1914 }
1915
1916 /* BUF is a pointer to the insn's bytes in target order.
1917 VALUE is an integer of the first CGEN_BASE_INSN_BITSIZE bits,
1918 host order. */
1919
1920 static unsigned int
1921 dis_hash_insn (buf, value)
1922 const char * buf;
1923 unsigned long value;
1924 {
1925 return CGEN_DIS_HASH (buf, value);
1926 }
1927
1928 /* Initialize an opcode table and return a descriptor.
1929 It's much like opening a file, and must be the first function called. */
1930
1931 CGEN_OPCODE_DESC
1932 fr30_cgen_opcode_open (mach, endian)
1933 int mach;
1934 enum cgen_endian endian;
1935 {
1936 CGEN_OPCODE_TABLE * table = (CGEN_OPCODE_TABLE *) xmalloc (sizeof (CGEN_OPCODE_TABLE));
1937 static int init_p;
1938
1939 if (! init_p)
1940 {
1941 init_tables ();
1942 init_p = 1;
1943 }
1944
1945 memset (table, 0, sizeof (*table));
1946
1947 CGEN_OPCODE_MACH (table) = mach;
1948 CGEN_OPCODE_ENDIAN (table) = endian;
1949 /* FIXME: for the sparc case we can determine insn-endianness statically.
1950 The worry here is where both data and insn endian can be independently
1951 chosen, in which case this function will need another argument.
1952 Actually, will want to allow for more arguments in the future anyway. */
1953 CGEN_OPCODE_INSN_ENDIAN (table) = endian;
1954
1955 CGEN_OPCODE_HW_LIST (table) = & fr30_cgen_hw_entries[0];
1956
1957 CGEN_OPCODE_OPERAND_TABLE (table) = & fr30_cgen_operand_table[0];
1958
1959 * CGEN_OPCODE_INSN_TABLE (table) = insn_table;
1960
1961 * CGEN_OPCODE_MACRO_INSN_TABLE (table) = macro_insn_table;
1962
1963 CGEN_OPCODE_ASM_HASH_P (table) = asm_hash_insn_p;
1964 CGEN_OPCODE_ASM_HASH (table) = asm_hash_insn;
1965 CGEN_OPCODE_ASM_HASH_SIZE (table) = CGEN_ASM_HASH_SIZE;
1966
1967 CGEN_OPCODE_DIS_HASH_P (table) = dis_hash_insn_p;
1968 CGEN_OPCODE_DIS_HASH (table) = dis_hash_insn;
1969 CGEN_OPCODE_DIS_HASH_SIZE (table) = CGEN_DIS_HASH_SIZE;
1970
1971 return (CGEN_OPCODE_DESC) table;
1972 }
1973
1974 /* Close an opcode table. */
1975
1976 void
1977 fr30_cgen_opcode_close (desc)
1978 CGEN_OPCODE_DESC desc;
1979 {
1980 free (desc);
1981 }
1982
1983 /* Getting values from cgen_fields is handled by a collection of functions.
1984 They are distinguished by the type of the VALUE argument they return.
1985 TODO: floating point, inlining support, remove cases where result type
1986 not appropriate. */
1987
1988 int
1989 fr30_cgen_get_int_operand (opindex, fields)
1990 int opindex;
1991 const CGEN_FIELDS * fields;
1992 {
1993 int value;
1994
1995 switch (opindex)
1996 {
1997 case FR30_OPERAND_RI :
1998 value = fields->f_Ri;
1999 break;
2000 case FR30_OPERAND_RJ :
2001 value = fields->f_Rj;
2002 break;
2003 case FR30_OPERAND_RS1 :
2004 value = fields->f_Rs1;
2005 break;
2006 case FR30_OPERAND_RS2 :
2007 value = fields->f_Rs2;
2008 break;
2009 case FR30_OPERAND_U4 :
2010 value = fields->f_u4;
2011 break;
2012 case FR30_OPERAND_M4 :
2013 value = fields->f_m4;
2014 break;
2015 case FR30_OPERAND_I8 :
2016 value = fields->f_i8;
2017 break;
2018 case FR30_OPERAND_U8 :
2019 value = fields->f_u8;
2020 break;
2021 case FR30_OPERAND_O8 :
2022 value = fields->f_o8;
2023 break;
2024 case FR30_OPERAND_S10 :
2025 value = fields->f_s10;
2026 break;
2027 case FR30_OPERAND_U10 :
2028 value = fields->f_u10;
2029 break;
2030 case FR30_OPERAND_DIR8 :
2031 value = fields->f_dir8;
2032 break;
2033 case FR30_OPERAND_DIR9 :
2034 value = fields->f_dir9;
2035 break;
2036 case FR30_OPERAND_DIR10 :
2037 value = fields->f_dir10;
2038 break;
2039 case FR30_OPERAND_LABEL9 :
2040 value = fields->f_rel8;
2041 break;
2042 case FR30_OPERAND_LABEL12 :
2043 value = fields->f_rel11;
2044 break;
2045 case FR30_OPERAND_CC :
2046 value = fields->f_cc;
2047 break;
2048
2049 default :
2050 /* xgettext:c-format */
2051 fprintf (stderr, _("Unrecognized field %d while getting int operand.\n"),
2052 opindex);
2053 abort ();
2054 }
2055
2056 return value;
2057 }
2058
2059 bfd_vma
2060 fr30_cgen_get_vma_operand (opindex, fields)
2061 int opindex;
2062 const CGEN_FIELDS * fields;
2063 {
2064 bfd_vma value;
2065
2066 switch (opindex)
2067 {
2068 case FR30_OPERAND_RI :
2069 value = fields->f_Ri;
2070 break;
2071 case FR30_OPERAND_RJ :
2072 value = fields->f_Rj;
2073 break;
2074 case FR30_OPERAND_RS1 :
2075 value = fields->f_Rs1;
2076 break;
2077 case FR30_OPERAND_RS2 :
2078 value = fields->f_Rs2;
2079 break;
2080 case FR30_OPERAND_U4 :
2081 value = fields->f_u4;
2082 break;
2083 case FR30_OPERAND_M4 :
2084 value = fields->f_m4;
2085 break;
2086 case FR30_OPERAND_I8 :
2087 value = fields->f_i8;
2088 break;
2089 case FR30_OPERAND_U8 :
2090 value = fields->f_u8;
2091 break;
2092 case FR30_OPERAND_O8 :
2093 value = fields->f_o8;
2094 break;
2095 case FR30_OPERAND_S10 :
2096 value = fields->f_s10;
2097 break;
2098 case FR30_OPERAND_U10 :
2099 value = fields->f_u10;
2100 break;
2101 case FR30_OPERAND_DIR8 :
2102 value = fields->f_dir8;
2103 break;
2104 case FR30_OPERAND_DIR9 :
2105 value = fields->f_dir9;
2106 break;
2107 case FR30_OPERAND_DIR10 :
2108 value = fields->f_dir10;
2109 break;
2110 case FR30_OPERAND_LABEL9 :
2111 value = fields->f_rel8;
2112 break;
2113 case FR30_OPERAND_LABEL12 :
2114 value = fields->f_rel11;
2115 break;
2116 case FR30_OPERAND_CC :
2117 value = fields->f_cc;
2118 break;
2119
2120 default :
2121 /* xgettext:c-format */
2122 fprintf (stderr, _("Unrecognized field %d while getting vma operand.\n"),
2123 opindex);
2124 abort ();
2125 }
2126
2127 return value;
2128 }
2129
2130 /* Stuffing values in cgen_fields is handled by a collection of functions.
2131 They are distinguished by the type of the VALUE argument they accept.
2132 TODO: floating point, inlining support, remove cases where argument type
2133 not appropriate. */
2134
2135 void
2136 fr30_cgen_set_int_operand (opindex, fields, value)
2137 int opindex;
2138 CGEN_FIELDS * fields;
2139 int value;
2140 {
2141 switch (opindex)
2142 {
2143 case FR30_OPERAND_RI :
2144 fields->f_Ri = value;
2145 break;
2146 case FR30_OPERAND_RJ :
2147 fields->f_Rj = value;
2148 break;
2149 case FR30_OPERAND_RS1 :
2150 fields->f_Rs1 = value;
2151 break;
2152 case FR30_OPERAND_RS2 :
2153 fields->f_Rs2 = value;
2154 break;
2155 case FR30_OPERAND_U4 :
2156 fields->f_u4 = value;
2157 break;
2158 case FR30_OPERAND_M4 :
2159 fields->f_m4 = value;
2160 break;
2161 case FR30_OPERAND_I8 :
2162 fields->f_i8 = value;
2163 break;
2164 case FR30_OPERAND_U8 :
2165 fields->f_u8 = value;
2166 break;
2167 case FR30_OPERAND_O8 :
2168 fields->f_o8 = value;
2169 break;
2170 case FR30_OPERAND_S10 :
2171 fields->f_s10 = value;
2172 break;
2173 case FR30_OPERAND_U10 :
2174 fields->f_u10 = value;
2175 break;
2176 case FR30_OPERAND_DIR8 :
2177 fields->f_dir8 = value;
2178 break;
2179 case FR30_OPERAND_DIR9 :
2180 fields->f_dir9 = value;
2181 break;
2182 case FR30_OPERAND_DIR10 :
2183 fields->f_dir10 = value;
2184 break;
2185 case FR30_OPERAND_LABEL9 :
2186 fields->f_rel8 = value;
2187 break;
2188 case FR30_OPERAND_LABEL12 :
2189 fields->f_rel11 = value;
2190 break;
2191 case FR30_OPERAND_CC :
2192 fields->f_cc = value;
2193 break;
2194
2195 default :
2196 /* xgettext:c-format */
2197 fprintf (stderr, _("Unrecognized field %d while setting int operand.\n"),
2198 opindex);
2199 abort ();
2200 }
2201 }
2202
2203 void
2204 fr30_cgen_set_vma_operand (opindex, fields, value)
2205 int opindex;
2206 CGEN_FIELDS * fields;
2207 bfd_vma value;
2208 {
2209 switch (opindex)
2210 {
2211 case FR30_OPERAND_RI :
2212 fields->f_Ri = value;
2213 break;
2214 case FR30_OPERAND_RJ :
2215 fields->f_Rj = value;
2216 break;
2217 case FR30_OPERAND_RS1 :
2218 fields->f_Rs1 = value;
2219 break;
2220 case FR30_OPERAND_RS2 :
2221 fields->f_Rs2 = value;
2222 break;
2223 case FR30_OPERAND_U4 :
2224 fields->f_u4 = value;
2225 break;
2226 case FR30_OPERAND_M4 :
2227 fields->f_m4 = value;
2228 break;
2229 case FR30_OPERAND_I8 :
2230 fields->f_i8 = value;
2231 break;
2232 case FR30_OPERAND_U8 :
2233 fields->f_u8 = value;
2234 break;
2235 case FR30_OPERAND_O8 :
2236 fields->f_o8 = value;
2237 break;
2238 case FR30_OPERAND_S10 :
2239 fields->f_s10 = value;
2240 break;
2241 case FR30_OPERAND_U10 :
2242 fields->f_u10 = value;
2243 break;
2244 case FR30_OPERAND_DIR8 :
2245 fields->f_dir8 = value;
2246 break;
2247 case FR30_OPERAND_DIR9 :
2248 fields->f_dir9 = value;
2249 break;
2250 case FR30_OPERAND_DIR10 :
2251 fields->f_dir10 = value;
2252 break;
2253 case FR30_OPERAND_LABEL9 :
2254 fields->f_rel8 = value;
2255 break;
2256 case FR30_OPERAND_LABEL12 :
2257 fields->f_rel11 = value;
2258 break;
2259 case FR30_OPERAND_CC :
2260 fields->f_cc = value;
2261 break;
2262
2263 default :
2264 /* xgettext:c-format */
2265 fprintf (stderr, _("Unrecognized field %d while setting vma operand.\n"),
2266 opindex);
2267 abort ();
2268 }
2269 }
2270
This page took 0.180543 seconds and 5 git commands to generate.